Buildpacks

Commit source. Nodion detects the language, installs a runtime, and builds an image.

On Applications → New, connect a Gitrepo and pick Buildpacks. Nodion uses the default builder unless you choose another one. Point Base directory at the app folder in a monorepo.

Use a Dockerfileinstead when you already have one, or when the repo is not a supported language tree.

What they are

Nodion Buildpacks are Cloud Native Buildpacks. Detect, build, and launch follow that spec. The language packs, the Ubuntu stack, and the runtime versions are Nodion’s. They are not Paketo, Heroku, or Google buildpacks.

The current stack is nodion-26: Ubuntu 26.04 LTS. The build image has compilers and headers. The run image has common client libraries (Postgres, MySQL, ImageMagick, CA certificates, and similar). The process runs as a non-root user. Extra system packages go in an Aptfile or project.toml.

What a build does

  1. Looks at the files in the base directory and picks the first matching language group.
  2. Resolves a runtime from your pin (or the default), then installs that version.
  3. Installs dependencies from the lockfile or manifest.
  4. Runs the language build (assets, mix release, go build, and so on).
  5. Sets a default web process. A Procfile overrides that.

Listen on PORT. Nodion sets it. Most default commands fall back to 8080 if it is unset.

Detection

Groups are tried from the top. The first group whose required files are all present wins. Extra Debian packages are optional in every group.

If the tree hasNodion uses
package.json and a static frontendNode.js, then static
composer.json and package.jsonPHP plus Node (Laravel with Vite, for example)
Gemfile and package.jsonRuby plus Node (Rails with JS)
composer.jsonPHP
GemfileRuby
requirements.txt, Pipfile, or pyproject.tomlPython
go.modGo
Cargo.tomlRust
mix.exsElixir
pom.xml or Gradle filesJava
*.csproj, *.fsproj, or *.sln.NET
package.json only (a server app)Node.js
static.toml and no package.jsonStatic site
Procfile onlyYour process types, no language install

The dashboard scan warns when it sees no supported marker. You can still pick Buildpacks, or switch to a Dockerfile, or set a different base directory.

Supported versions

Nodion keeps a language line while it is not end-of-life, and for up to three months after. Request a minor and you get the latest published patch of that minor. A version below the oldest published line fails as end-of-life. A version newer than anything built yet fails as not available yet.

Go and Rust are the exception: the newest published toolchain builds the app. Older go.mod or rust-version values still compile.

Lines below are current as of September 2026. Patches move as we publish them. Pin a file from the language page if you care which minor you get.

LanguageDefaultPublished lines
Node.js2422, 24, 25, 26
Python3.133.10-3.14
PHP8.38.2-8.5
Ruby3.43.3, 3.4, 4.0
Go1.26Newest toolchain (currently 1.25-1.27)
Rust1.96Newest toolchain (currently 1.95-1.98)
Java2111, 17, 21, 25, 26
.NET108, 9, 10
Elixir1.201.15-1.20 (Erlang/OTP 26-29, default 28)

Procfile

A Procfile in the base directory defines process types. web is the default if present, otherwise the first line. Language defaults apply only when there is no Procfile.

web: gunicorn myapp.wsgi --bind 0.0.0.0:$PORT
worker: python worker.py

Each type is its own process on the app. Scale replicas and the command on the Processes tab.

Extra Debian packages

Prefer project.toml. An Aptfile (one package or .deb URL per line) still works. project.toml wins if both exist.

[com.nodion.buildpacks.deb-packages]
install = ["ffmpeg", "pandoc"]

Packages are extracted into the image. Maintainer scripts do not run, so packages that create system users or start services will not work. A direct https://…/*.deb URL is downloaded as-is, without dependency resolution.