sandboxrouter

Benchmarks

How fast each sandbox starts

Real sandboxes on real accounts, started, used once and killed. 15 providers so far, 95 sandboxes in total, last run November 11, 2026. Providers without an account behind them aren't here yet; they get added as soon as someone runs them.

ProviderCold start (median)List price
Fly.io Sprites
304 ms
$0.164/hr
Novita AI Agent Sandbox
344 ms
$0.117/hr
OpenScale Sandboxes
366 ms
$0.014/hr
E2B
372 ms
$0.109/hr
Vercel Sandbox
405 ms
$0.341/hr
Superserve
414 ms
$0.166/hr
Daytona
472 ms
$0.067/hr
Modal
554 ms
$0.238/hr
Cloudflare Sandbox
606 ms
$0.216/hr
Agent37
759 ms
$0.007/hr
Freestyle
838 ms
$0.134/hr
Amazon Bedrock AgentCore Code Interpreter
930 ms
$0.217/hr
Maritime
1,199 ms
$0.022/hr
Sailboxes (Sail Research)
2,899 ms
$0.062/hr
AWS Lambda MicroVMs
3,418 ms
$0.252/hr

Real cost

What providers actually billed

List price is a promise; the bill is what happened. Each row is one sandbox started on a real account, kept busy for a fixed time with every core loaded, then killed. “List price × time” is what the catalog predicts; “Billed” is read back from the provider's own billing API.

ProviderAsked forGotRanList price × timeBilledBilled ÷ listBill from
Sailboxes (Sail Research)2 vCPU / 4 GB2 vCPU / 7.8 GB603 s$0.010$0.015146%provider's billing API
E2B2 vCPU / 4 GB2 vCPU / 0.5 GB601 s$0.028n/an/ano billing API
Daytona2 vCPU / 4 GBn/an/an/an/an/acreate failed
Maritime2 vCPU / 4 GB2 vCPU / 3.8 GB605 s$0.0037$00%provider's billing API
OpenScale Sandboxes2 vCPU / 4 GB2 vCPU / 1 GB601 s$0.0028n/an/ano billing API

Billed and list price differ for reasons a price table can't show: some providers bill only while a request is open, some add a one-off creation fee that dominates a short run (Sail, on its free plan), and an account on a plan with included usage can be billed nothing (Maritime). “Got” is what the sandbox itself reports (nproc, MemTotal). Run sandboxrouter cost run to measure your own.

What is measured

Each run asks one provider for a 2 vCPU / 4 GB sandbox, or for its default size where the default image fixes the size whatever you ask (E2B, OpenScale and Daytona; the Size column says which), with fallback off, and times how long until it is usable: that's the cold start. Then it runs echo ok and times the answer: the command round trip. Then it kills the sandbox. A run counts as failed if any of that goes wrong.

The numbers include the network between the machine running the test and each provider, so where it ran matters as much as who ran it. Each location is listed below. With several locations, a provider's number is the median of each location's median, so one heavy submitter can't move it.

Prices are each provider's public list price for the size, not a bill. Disk, network, monthly plans and minimum billing increments are left out; each provider page has the details and a link to the source.

Where it ran

  • November 11, 2026: home-eu (darwin-arm64), 5 runs on each of 4 providers
  • November 11, 2026: home-eu (darwin-arm64), 5 runs on each of 11 providers
  • November 6, 2026: home laptop, Europe (CET) (darwin-arm64), 5 runs on each of 4 providers

Add a run

Run it with your own keys and send the report as a pull request to results/. Label it with a city or cloud region, never an address.

terminal
npx @sandboxrouter/sdk bench --runs 5 --share --label "us-east-1, c7g.large" --by YOUR_GITHUB_USERNAME