Benchmark

What one CI run costs on nine sandboxes

How we measured it

  • The machine. 2 vCPU / 4 GB on every provider, asked for the way that provider asks for it.
  • The job. better-auth CI, 10 tasks, at one pinned commit, so a task here and a task there do the same work.
  • The runner. The open hpc-sandbox-benchmarks task runner, unchanged, so these times compare with anyone else's.
  • The toolchain. The same Node and the same pnpm are installed on every box before the clock starts, so an image's own versions are not a hidden variable.
  • The fairness controls. Worker counts pinned to the core count, CPU affinity pinned where a box reports more cores than it sells, and one memory ceiling for every provider.
  • The sample. The median of two runs per provider per task, three for Fly. Setup is untimed; only the task is timed.

Cost of one CI run

ProviderPer hourOne CI runCost per runvs ImpelloBootRuns
Impello$0.0540342.8 s$0.00511.00×1.2 s2
Blaxel$0.1656307.5 s$0.01412.75×2.1 s2
E2B$0.1656440.6 s$0.02033.94×1.4 s2
Modal (V1 sandbox)$0.2380341.1 s$0.02264.39×1.7 s2
Modal (V2 sandbox)$0.2380415.5 s$0.02755.34×1.5 s2
Vercel Sandbox$0.3408356.3 s$0.03376.56×0.5 s2
Fly.io Sprites$0.3150519.9 s$0.04558.85×2.4 s3
Railway Sandbox$0.4233571.5 s$0.067213.07×1.4 s2
Daytona$0.1656not measured1.8 s

Daytona is priced but not measured. Its sandboxes ship a default egress allow list that resets the connection to the Prisma binary host, so the install step never finishes. Lifting it needs a paid network tier, and the limit cannot be overridden per sandbox.

Every task, second by second

TaskImpelloBlaxelE2BModal (V1 sandbox)Modal (V2 sandbox)Vercel SandboxFly.io SpritesRailway SandboxDaytona
git clone2.41.72.32.41.71.32.82.52.1
cold install38.237.038.748.041.538.5121.252.5
build125.4113.1165.2115.5148.9132.5161.6207.5
lint (biome)7.16.58.39.411.17.39.412.1
lint (deps)17.115.421.816.919.515.721.523.7
lint (format)4.94.05.74.35.44.75.66.6
lint (spell)11.99.113.59.912.711.013.012.7
lint (types)59.755.383.070.388.366.991.6112.8
lint (packages)5.85.16.96.87.86.08.219.8
typecheck70.360.595.157.778.772.485.1121.2
total342.8307.5440.6341.1415.5356.3519.9571.5

Seconds, median across runs. The install and the build dominate every column: they are 55% of the job on the fastest box and 58% on the slowest.

What each machine reported

ProviderCores seenRAM seenDiskOperating systemKernel
Impello23.85 GB65GDebian GNU/Linux 12 (bookworm)6.1.158+
Blaxel23.85 GB2GDebian GNU/Linux 12 (bookworm)6.1.166
E2B23.84 GB11GDebian GNU/Linux 12 (bookworm)6.1.158+
Modal (V1 sandbox)24 GB8589934592GDebian GNU/Linux 12 (bookworm)4.19.0-gvisor
Modal (V2 sandbox)24 GB8589934592GDebian GNU/Linux 12 (bookworm)4.19.0-gvisor
Vercel Sandbox24.18 GB32GAmazon Linux 2023.12.202608176.18.49
Fly.io Sprites815.62 GB99GUbuntu 26.04.1 LTS6.12.105-fly
Railway Sandbox24.21 GB29GUbuntu 26.04.1 LTS6.18.46-railway
Daytona48188.68 GB10GDebian GNU/Linux 12 (bookworm)6.17.0-1010-oracle

These are the numbers the sandbox itself reports, not the size we asked for. Daytona, Modal and Fly show more than they sell: the first two show the host behind a quota, and a Fly sprite simply has no size to ask for.

How each price was worked out

Each rate below is the vendor's own published price for 2 vCPU / 4 GB, read on 19 September 2026. Nothing here is a list price we were quoted, and no discount is applied to ours.

ProviderPer hourEgressThe basis
Impello$0.0540freeflat $0.054/h for the 2 vCPU / 4 GB size, read off impello.ai own calculator; no data-transfer meter
Blaxel$0.1656free$0.0000115/GB RAM-s, CPU bundled 1 core per 2 GB; internet egress listed as Included
E2B$0.1656free$0.0504/vCPU-h + $0.0162/GiB-h; no data-transfer line on the pricing page or docs.e2b.dev/billing
Modal (V1 sandbox)$0.2380freesame rate card as modal-vm
Modal (V2 sandbox)$0.2380freeSandbox rate card: $0.00003942/core-s, and one Modal core is 2 vCPU, + $0.00000667/GiB-s; no egress fee
Vercel Sandbox$0.3408$0.15 / GBActive CPU $0.128/vCPU-h + memory $0.0212/GB-h; Sandbox Data Transfer $0.15/GB out, downloads free
Fly.io Sprites$0.3150freeSprites: $0.07/CPU-h + $0.04375/GB RAM-h, plus $0.000683/GB-h hot storage; "Sprites bandwidth isn't metered today"
Railway Sandbox$0.4233$0.05 / GBSandboxes bill the VM rate card: $50/vCPU-month ($0.00001929/vCPU-s) + $50/GB-month ($0.00000001929/MB-s), egress $0.05/GB
Daytona$0.1656free$0.0504/vCPU-h + $0.0162/GiB-h; billed dimensions are vCPU, RAM and disk only

What we found

Price is the gap, not speed

At this size the three fastest boxes finish within 12% of each other. The rate cards are 3 to 8 times apart. The cheapest rival costs 2.75 times as much for the same finished CI run.

A stock CI run does not fit in 4 GB

turbo defaults to ten workers, and ten parallel package builds are killed for memory on every provider that truly enforces 4 GB. The harness pins the worker count to the core count, on every provider alike. That is a finding about the spec, not about any vendor.

Some sandboxes show you the host, not your quota

Daytona reports 48 cores and 189 GB behind a 2-core limit, and Modal does the same. Any tool that sizes its worker pool from nproc then fans out 48 ways and dies. The harness pins CPU affinity, so every provider runs the job as a 2-core machine.

Modal bills sandboxes on a different row

The sandbox rate is $0.00003942 per core-second against $0.0000131 for standard compute, and one Modal core is two vCPU. Our first table used the standard rate and understated Modal by 25%. This one does not.

A Fly sprite has no size, and the machine is a lottery

Sprites ignore the CPU and RAM you ask for: you get 8 vCPU and 8 to 16 GB, and Fly bills the CPU and memory the job actually uses. Five runs of the same job took 490, 510, 627, 736 and 766 seconds, a spread of 56%, so Fly here is the median of three runs and not of two.

Three vendors bill the CPU a job uses

Railway, Vercel and Fly meter active CPU rather than wall clock. The rates here assume a run that keeps both vCPUs busy, which is what this job does. A sandbox that sits waiting for a model or a user costs them much less. That is a real advantage for an idle agent box, and none for a build.

Egress is not the differentiator people think

Six of the eight vendors do not meter data out of the sandbox at all. Only Vercel ($0.15/GB) and Railway ($0.05/GB) do. We bill per second of compute and nothing else.

What this does not prove

One job on one size. A different workload moves the times, and a bigger box moves them again. Two runs per provider is a median, not a distribution, and Fly shows why that matters. Prices change, and these were read on one day. Daytona has no time here at all, so treat its row as a rate card and nothing more.

We publish it because it is ours to check: the same harness, the same job, the same size, on every box we could buy.