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.
| Provider | Cold start (median) | Command round trip | Succeeded | Size | List price |
|---|---|---|---|---|---|
| Fly.io Sprites | 304 ms | 203 ms | 100% | 2 vCPU / 4 GB | $0.164/hr |
| Novita AI Agent Sandbox | 344 ms | 590 ms | 100% | 2 vCPU / 4 GB | $0.117/hr |
| OpenScale Sandboxes | 366 ms | 1,074 ms | 100% | 2 vCPU / 1 GB | $0.014/hr |
| E2B | 372 ms | 199 ms | 100% | 2 vCPU / 0.5 GB | $0.109/hr |
| Vercel Sandbox | 405 ms | 344 ms | 100% | 2 vCPU / 4 GB | $0.341/hr |
| Superserve | 414 ms | 160 ms | 100% | 2 vCPU / 4 GB | $0.166/hr |
| Daytona | 472 ms | 506 ms | 100% | 1 vCPU / 1 GB | $0.067/hr |
| Modal | 554 ms | 1,073 ms | 100% | 2 vCPU / 4 GB | $0.238/hr |
| Cloudflare Sandbox | 606 ms | 291 ms | 100% | 2 vCPU / 4 GB | $0.216/hr |
| Agent37 | 759 ms | 420 ms | 100% | 2 vCPU / 4 GB | $0.007/hr |
| Freestyle | 838 ms | 229 ms | 100% | 2 vCPU / 4 GB | $0.134/hr |
| Amazon Bedrock AgentCore Code Interpreter | 930 ms | 309 ms | 100% | 2 vCPU / 4 GB | $0.217/hr |
| Maritime | 1,199 ms | 366 ms | 100% | 2 vCPU / 4 GB | $0.022/hr |
| Sailboxes (Sail Research) | 2,899 ms | 299 ms | 100% | 2 vCPU / 4 GB | $0.062/hr |
| AWS Lambda MicroVMs | 3,418 ms | 626 ms | 100% | 2 vCPU / 4 GB | $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.
| Provider | Asked for | Got | Ran | List price × time | Billed | Billed ÷ list | Bill from |
|---|---|---|---|---|---|---|---|
| Sailboxes (Sail Research) | 2 vCPU / 4 GB | 2 vCPU / 7.8 GB | 603 s | $0.010 | $0.015 | 146% | provider's billing API |
| E2B | 2 vCPU / 4 GB | 2 vCPU / 0.5 GB | 601 s | $0.028 | n/a | n/a | no billing API |
| Daytona | 2 vCPU / 4 GB | n/a | n/a | n/a | n/a | n/a | create failed |
| Maritime | 2 vCPU / 4 GB | 2 vCPU / 3.8 GB | 605 s | $0.0037 | $0 | 0% | provider's billing API |
| OpenScale Sandboxes | 2 vCPU / 4 GB | 2 vCPU / 1 GB | 601 s | $0.0028 | n/a | n/a | no 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.
npx @sandboxrouter/sdk bench --runs 5 --share --label "us-east-1, c7g.large" --by YOUR_GITHUB_USERNAME