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

Benchmarks

Cold builds, rebuilds, image size and peak RAM of Acropolis against Docker and Railpack.

Sample apps

Cold and rebuild benchmark with 2 CPUs, all three tools on the same day under the same conditions, median of 2 runs. Docker uses an idiomatic multi-stage Dockerfile for each app (bench/dockerfiles).

app cold time (Docker / Railpack / Acropolis) image (Docker / Railpack / Acropolis) peak RAM (Docker / Railpack / Acropolis)
Express 16.1 s / 53.7 s / 6.6 s 81.2 / 147.5 / 54.6 MB 562 / 2955 / 83 MB
Go 77.9 s / 85.3 s / 41.7 s 4.3 / 40.8 / 4.2 MB 2221 / 2944 / 1088 MB
Rust 75.3 s / 112.4 s / 48.2 s 10.0 / 38.0 / 11.4 MB 2910 / 4523 / 1509 MB
Vite + React 23.0 s / 55.3 s / 5.2 s 26.4 / 54.7 / 25.0 MB 933 / 2863 / 594 MB
Vite + MUI 48.3 s / 77.8 s / 8.4 s 26.5 / 54.7 / 25.0 MB 1329 / 3262 / 898 MB
TanStack Start 26.8 s / 78.1 s / 8.1 s 80.1 / 203.0 / 53.6 MB 1242 / 3575 / 960 MB
Next 15 118.1 s / 170.5 s / 47.5 s 105.4 / 345.6 / 69.8 MB 3075 / 4560 / 1936 MB

Rebuild after changing one file (Docker / Railpack / Acropolis): Go 41 s / 5.8 s / 1.1 s, Rust 49 s / 15 s / 6.5 s and Next 71 s / 81 s / 24.8 s.

Peak RAM includes page cache. Anonymous memory, which cannot be reclaimed, is on par with Docker on cold builds and below it on rebuilds: most of it is each language’s compiler, not Acropolis.

A real monorepo

olimpia-cloud (bun workspace; a TanStack Start/Nitro web app and an Axum + sqlx API), against its own production Dockerfiles, 4 CPUs, median of 2 runs:

app cold (Docker / Acropolis) rebuild, one file changed image, compressed / unpacked peak RAM, cold / rebuild
web 53.3 s / 42.4 s 26.0 s / 26.9 s 66.4 / 259.2 MB vs 57.1 / 224.0 MB 3077 / 3187 MB vs 3708 / 1875 MB
api 240.5 s / 228.0 s 109.7 s / 115.3 s 23.2 / 91.1 MB vs 24.5 / 95.2 MB 3988 / 3918 MB vs 3483 / 1781 MB

Here the compilers dominate (vp build ~20 s, cargo build --release of the API ~190 s), and those Dockerfiles are already well tuned (cache mounts, distroless/alpine runtimes), so the gap is small. Acropolis builds them with no Dockerfile: it only needed an acropolis.json input to copy regctl into the API image, as the Dockerfile does.

Reproducing

scripts/bench.sh runs the benchmark against Docker and Railpack, and AB=1 scripts/bench.sh compares two Acropolis binaries interleaved (APPS=, RUNS=). The apps are in bench/apps.

Last updated on

Was this page helpful?