Skip to content
Acropolis is experimental: interfaces, output and defaults can change between releases.What that means
Acropolisby OlimpiaExperimental
Esc
↑↓navigate↵open⌘Jpreview
On this page

Usage

The acropolis CLI. build, plan, cache, prewarm, inspect and gc, with their flags and exit codes.

acropolis [--events human|json|quiet] [--home DIR] [--mirror REGISTRY=MIRROR] <command>

Global flags

flag default what it does
--events human human prints readable lines, json prints one JSON event per stderr line, quiet prints no events.
--home $XDG_CACHE_HOME/acropolis, else ~/.cache/acropolis Store, toolchains, image rootfs and per-app caches. Also ACROPOLIS_HOME.
--mirror none Registry mirror, docker.io=mirror.example.com. Repeatable or comma-separated; also ACROPOLIS_MIRRORS.

build

Builds the app in a directory (. by default) and writes the image.

acropolis build ./my-app -t registry.example.com/team/my-app:latest
acropolis build ./my-app --oci image.tar --info info.json -e NODE_ENV=production
flag default what it does
-t, --tag none Push the image to this reference.
--oci FILE none Write an OCI image layout tar that docker load, skopeo and regctl image import accept.
--info FILE none Write a JSON summary, also for failed builds.
-e, --env KEY=VALUE none App variable for the build. Repeatable. See Configuration.
--config FILE acropolis.json, else railpack.json Config file, relative to the app directory.
--compression zstd Layer compression: zstd or gzip. Use gzip for runtimes older than Docker 23 or containerd 1.5.
--level 0 (codec default) Compression level; 1 to 9 for gzip.
--hermetic on off runs steps without namespaces. Builds fail with on if the host cannot create network namespaces.
--concurrency 64 Parallel downloads.
--keep-work off Keep the work directory after the build, for debugging.

info.json carries Railpack-compatible keys (detectedProviders, resolvedPackages, metadata) plus acropolisVersion, planHash, manifestDigest, warnings, watchPaths, success, error, errorClass and exitCode.

plan

Prints what build would do, without building: detected providers, toolchains, steps and the runtime base. It runs without root.

acropolis plan ./my-app
acropolis plan ./my-app --json

Takes the same -e variables as build.

cache

Exports or imports the per-app cache (Go and Cargo builds, node_modules, .next/cache, …) as a tar.zst, to keep it between ephemeral builders.

acropolis cache import cache.tar.zst --key my-app
acropolis build ./my-app -t registry.example.com/team/my-app:latest
acropolis cache export cache.tar.zst --key my-app

--key defaults to ACROPOLIS_CACHE_KEY. A missing or broken cache file is not an error for the build: skip the import.

prewarm

Downloads toolchains into the home ahead of time, as the builder image does.

acropolis prewarm --tools node:lts,go:latest,bun:latest,uv:latest,python:3.13

The default list is node:lts,node:22,node:24,go:latest,bun:latest,uv:latest.

inspect

Resolves an image reference for the host platform and prints its digest, manifest and config as JSON.

acropolis inspect node:22-bookworm-slim

gc

Trims the home down to a size. Entries in use by running builds are kept; while builds run, only entries idle for over an hour are removed.

acropolis gc --max-size 20G

Exit codes

code meaning what to do
0 built
1 the app’s own build failed, including build and step timeouts show the log, don’t retry
70 Acropolis bug, including a panic fall back to another builder and report it
75 infrastructure: network, registry, disk, a step killed with SIGKILL, SIGTERM/SIGINT retry once
78 the app cannot be built as configured: unsupported stack or config, paths outside the app, private registries fall back to another builder or show the error

Events

With --events json each stderr line is a JSON object with v (schema version), build_id, ts, t (ms since start), type and the event’s fields. A failed build ends with type: "build_failed" carrying class, exit_code and error.

Last updated on

Was this page helpful?