Configuration
Configure a build with acropolis.json or railpack.json and with ACROPOLIS_ or RAILPACK_ variables.
Most apps need no configuration: Acropolis detects the provider from the repo, with the same precedence as Railpack (Go, Rust, Python, Java and others win over a package.json). When detection needs help, there are two ways to steer it.
Config file
Acropolis reads acropolis.json, or railpack.json if there is none, from the app directory. --config (or the CONFIG_FILE variable) picks another file, which must stay inside the app directory. The file is JSON (JSON5 is accepted) and follows Railpack’s schema:
{
"provider": "node",
"buildAptPackages": ["libvips-dev"],
"steps": {
"build": { "commands": ["npm run build:prod"] }
},
"deploy": {
"startCommand": "node dist/server.js",
"aptPackages": ["ffmpeg"],
"paths": ["dist"]
}
}
Supported keys: provider, packages, buildAptPackages, steps (with commands, variables, inputs, caches, secrets, deployOutputs), deploy (startCommand, aptPackages, inputs, paths, variables, base), exclude, secrets and caches. Unknown keys fail the build, so a typo doesn’t go unnoticed.
Variables
App variables are passed with -e KEY=VALUE. Each setting is read with an ACROPOLIS_ prefix first and a RAILPACK_ prefix second, so a Railpack setup keeps working:
| variable | what it does |
|---|---|
BUILD_CMD, START_CMD |
Replace the detected build and start commands. |
PROVIDER |
Force a provider instead of detecting one. |
PACKAGES |
Extra tools installed with mise, like node@22 jq. |
BUILD_APT_PACKAGES, DEPLOY_APT_PACKAGES |
Debian packages for the build and for the runtime image. |
NODE_VERSION, BUN_VERSION, GO_VERSION, RUST_VERSION, PYTHON_VERSION, UV_VERSION, RUBY_VERSION, PHP_VERSION, JDK_VERSION, DOTNET_VERSION, ELIXIR_VERSION, GLEAM_VERSION, DENO_VERSION |
Pin a toolchain version. |
CONFIG_FILE |
Config file path, relative to the app. |
Variables reach build steps, but the plan and info.json only carry {env:NAME} references, never the values, and the image config doesn’t get them: set runtime variables on the container that runs the image.
Operator settings
These (with the ACROPOLIS_ or RAILPACK_ prefix) are read only from the environment of the acropolis process. If they come through -e or the config file they are ignored, so an app cannot change them:
| variable | what it does |
|---|---|
ACROPOLIS_CACHE_KEY |
Per-app cache key (also the default --key for acropolis cache). |
ACROPOLIS_CACHE_MAX |
After each build, trim the home to this size (20G), like acropolis gc. |
ACROPOLIS_NO_CACHE |
Build without the per-app cache. |
ACROPOLIS_BUILD_TIMEOUT |
Whole-build timeout; 1 h by default. |
ACROPOLIS_STEP_TIMEOUT |
Timeout for each step. |
ACROPOLIS_BUILD_ID |
Build id written in every JSON event. |
ACROPOLIS_ALLOW_PRIVATE_REGISTRY |
Allow private registries and http:// for what Acropolis downloads itself. |