How Railpack builds your application
Railpack reads the files in the build path to detect the language, installs the language versions it needs with Mise, and builds in steps (install, build) before setting the start command. Sevalla doesn’t let you pick a Railpack version: every application uses the one Sevalla runs. If the web process has a start command on the Processes tab, Sevalla passes it to Railpack asRAILPACK_START_CMD and runs it instead of the detected one.
Supported languages
Railpack detects Node.js (with npm, Yarn, pnpm or Bun), Python, Go, PHP, Java, Ruby, .NET, Deno, Rust and Elixir, among others. The Railpack documentation describes each language. For anything it doesn’t detect, use a Dockerfile.Use Railpack
1
Open the build strategy
In the sidebar, click Applications, then click the application. On the Settings tab, in the Build strategy section, click Update build strategy.
2
Choose Railpack
Click Railpack. Set the Build path if the application isn’t at the repository root.
3
Save and deploy
Click Update build strategy, then deploy the application.
Set the language version
Without a version in your repository, Railpack uses its own default for the language. Railpack reads Mise version files (.tool-versions, mise.toml) for most languages, and the files in this table. Environment variables must be marked Available during buildtime.
Railpack detects the Node.js package manager from the
packageManager field in package.json, then from the lock file, and falls back to npm. For Python it supports pip, Poetry, PDM, uv and Pipenv. For PHP extensions, set RAILPACK_PHP_EXTENSIONS (for example gd,imagick,redis) or require them in composer.json.
Configure the build
Most applications build with no configuration. To change a step, add arailpack.json file to the build path:
railpack.json
$schema line gives you autocomplete and validation in your editor. The Railpack configuration reference lists every key.
Environment variables marked Available during buildtime change the build too:
Sevalla passes build-time variables to Railpack’s build as BuildKit secrets. A start command set on the web process wins over
railpack.json and RAILPACK_START_CMD.
Railpack also takes the start command from a Procfile: its web entry, or else its worker entry. It doesn’t run a release entry, and Sevalla doesn’t create processes from the other entries. For release tasks such as database migrations, create a job with the start policy Before deployment.
Move from Nixpacks to Railpack
Railpack builds from the same repository with no changes for most applications. Before you switch a production application:- Pin your language version in the repository (Railpack’s defaults can differ from Nixpacks’), for example with
engines.nodeor.python-version. - Translate any
nixpacks.tomlorNIXPACKS_*variables torailpack.jsonorRAILPACK_*variables. Railpack ignores Nixpacks’ configuration. - Switch a staging copy first, or watch the first deployment’s build log. If it fails, switch back to Nixpacks and deploy again.