Cloud sandboxes, measured
Oct 22–26, 2026 · 8 providers (9 configs) · 2 caller locations: Florida, US & Frankfurt, DE · 100 runs per main test, 20 per location test
Oct 22–26, 2026 · 8 providers (9 configs) · 2 caller locations: Florida, US & Frankfurt, DE · 100 runs per main test, 20 per location test
Upstash appears twice: Box can pause; Ephemeral Box starts in 0.68 s but can't pause.
Upstash appears twice: Box can pause; Ephemeral Box starts in 0.68 s but can't pause.
By location
How network distance changes latency: the same tests run from EU-Central (Frankfurt) and US-East (Florida).
Cold start by caller location
Median time from each caller location · Colored bar marks the faster location · Lower is better
Oct 26, 2026 · 5–20 runs per test
Run a command
fastest location- E2B
- 0.12 sUS-East×1.5
- Daytona
- 0.10 sUS-East×1.6
- Upstash Box
- 0.22 sUS-East×2.5
- Boat
- 0.11 sEU-Central×2.9
- boxd
- 0.17 sEU-Central×1.7
- Freestyle
- 0.16 sUS-East×1.6
- Tenki
- 0.17 sUS-East×1.4
- Superserve
- 0.15 sUS-East×1.6
Write + read 10 MB
fastest location- E2B
- 1.3 sUS-East×2.1
- Daytona
- 1.8 sUS-East×1.1
- Upstash Box
- 2.1 sUS-East×1.9
- Boat
- 3.5 sEU-Central×2.0
- boxd
- 0.74 sEU-Central×3.9
- Freestyle
- 2.1 sUS-East×2.3
- Tenki
- 2.0 sUS-East×1.5
- Superserve
- 0.61 sUS-East×3.6
Agent tool replay
fastest location- E2B
- 14 sUS-East×1.6
- Daytona
- 17 sUS-East×1.3
- Upstash Box
- 21 sUS-East×1.8
- Boat
- 23 sEU-Central×1.8
- boxd
- 17 sEU-Central×1.8
- Freestyle
- 19 sUS-East×1.7
- Tenki
- 15 sUS-East×1.6
- Superserve
- 11 sUS-East×2.0
| Test | E2B | Daytona | Upstash Box | Boat | boxd | Freestyle | Tenki | Superserve |
|---|---|---|---|---|---|---|---|---|
| Cold start | 0.48 sUS-East | 0.99 sUS-East | 2.5 sUS-East | 0.78 sEU-Central | 1.0 sUS-East | 0.81 sUS-East | 0.91 sUS-East | 0.49 sUS-East |
| Run a command | 0.12 sUS-East | 0.10 sUS-East | 0.22 sUS-East | 0.11 sEU-Central | 0.17 sEU-Central | 0.16 sUS-East | 0.17 sUS-East | 0.15 sUS-East |
| Write + read 1 KB | 0.20 sUS-East | 0.12 sUS-East | 0.31 sUS-East | 0.43 sEU-Central | 0.24 sEU-Central | 0.19 sUS-East | 0.19 sUS-East | 0.08 sUS-East |
| Write + read 10 MB | 1.3 sUS-East | 1.8 sUS-East | 2.1 sUS-East | 3.5 sEU-Central | 0.74 sEU-Central | 2.1 sUS-East | 2.0 sUS-East | 0.61 sUS-East |
| Reconnect | 0.41 sUS-East | 0.24 sUS-East | 0.41 sUS-East | 0.25 sEU-Central | 0.42 sEU-Central | 0.47 sUS-East | 0.65 sUS-East | 0.28 sUS-East |
| Pause + resume | 0.73 sUS-East | Not measured | 1.2 sUS-East | Not measured | 0.19 sEU-Central | 0.83 sUS-East | 60 stie | 0.87 sUS-East |
| Destroy | 0.11 sUS-East | 0.79 sUS-East | 0.59 sUS-East | 0.07 sEU-Central | 0.03 sEU-Central | 0.38 sUS-East | 0.14 sUS-East | 0.21 sUS-East |
| Dev server ready | 2.1 sUS-East | 3.0 sUS-East | 3.1 sUS-East | 1.6 sEU-Central | 2.0 sEU-Central | 1.9 sUS-East | 1.8 sUS-East | 1.6 sUS-East |
| Preview URL first byte | 0.22 sUS-East | 0.20 sUS-East | 0.22 sUS-East | 0.13 sEU-Central | 0.07 sEU-Central | 0.46 sUS-East | 0.38 sUS-East | 0.16 sUS-East |
| Edit, rebuild, reload | 0.33 sUS-East | 0.42 sUS-East | 0.37 sUS-East | 0.47 sEU-Central | 0.26 sEU-Central | 0.26 sUS-East | 0.51 sUS-East | 0.47 sUS-East |
| Agent tool replay | 14 sUS-East | 17 sUS-East | 21 sUS-East | 23 sEU-Central | 17 sEU-Central | 19 sUS-East | 15 sUS-East | 11 sUS-East |
Boat (Northern France) and boxd (Frankfurt) run their sandboxes in Europe; the remaining providers run in US-East. In-sandbox CPU, memory, disk, and package install speed do not change with caller location and are omitted here.
Cold start from EU-Central (Frankfurt am Main, DE)
Median cold start and HTTPS first byte from OVH SAS · Lower is better
| Test | E2B | Daytona | Upstash Box | Boat | boxd | Freestyle | Tenki | Superserve |
|---|---|---|---|---|---|---|---|---|
| Cold start | 0.67 s | 1.5 s | 3.0 s | 0.78 s | 1.6 s | 1.1 s | 1.1 s | 0.71 s |
| Run a command | 0.18 s | 0.17 s | 0.54 s | 0.11 s | 0.17 s | 0.24 s | 0.24 s | 0.24 s |
| Write + read 1 KB | 0.33 s | 0.24 s | 0.45 s | 0.43 s | 0.24 s | 0.37 s | 0.33 s | 0.22 s |
| Write + read 10 MB | 2.7 s | 2.0 s | 4.0 s | 3.5 s | 0.74 s | 4.9 s | 3.0 s | 2.2 s |
| Reconnect | 0.66 s | 0.57 s | 0.93 s | 0.25 s | 0.42 s | 0.80 s | 0.97 s | 0.50 s |
| Pause + resume | 0.97 s | Not measured | 1.9 s | Not measured | 0.19 s | 1.2 s | 60 s | 1.1 s |
| Destroy | 0.17 s | 0.97 s | 0.90 s | 0.07 s | 0.03 s | 0.46 s | 0.19 s | 0.27 s |
| Dev server ready | 2.9 s | 4.7 s | 5.1 s | 1.6 s | 2.0 s | 3.2 s | 2.9 s | 2.4 s |
| Preview URL first byte | 0.29 s | 0.43 s | 0.53 s | 0.13 s | 0.07 s | 0.77 s | 0.58 s | 0.17 s |
| Edit, rebuild, reload | 0.51 s | 0.68 s | 0.56 s | 0.47 s | 0.26 s | 0.53 s | 0.77 s | 0.84 s |
| Agent tool replay | 21 s | 21 s | 37 s | 23 s | 17 s | 33 s | 23 s | 23 s |
Boat (Northern France) and boxd (Frankfurt) run their sandboxes in Europe; the remaining providers run in US-East. In-sandbox CPU, memory, disk, and package install speed do not change with caller location and are omitted here.
Cold start from US-East (Boca Raton, US)
Median cold start and HTTPS first byte from AT&T Enterprises, LLC · Lower is better
| Test | E2B | Daytona | Upstash Box | Boat | boxd | Freestyle | Tenki | Superserve |
|---|---|---|---|---|---|---|---|---|
| Cold start | 0.48 s | 0.99 s | 2.5 s | 1.1 s | 1.0 s | 0.81 s | 0.91 s | 0.49 s |
| Run a command | 0.12 s | 0.10 s | 0.22 s | 0.33 s | 0.29 s | 0.16 s | 0.17 s | 0.15 s |
| Write + read 1 KB | 0.20 s | 0.12 s | 0.31 s | 0.82 s | 0.46 s | 0.19 s | 0.19 s | 0.08 s |
| Write + read 10 MB | 1.3 s | 1.8 s | 2.1 s | 7.0 s | 2.8 s | 2.1 s | 2.0 s | 0.61 s |
| Reconnect | 0.41 s | 0.24 s | 0.41 s | 0.70 s | 0.88 s | 0.47 s | 0.65 s | 0.28 s |
| Pause + resume | 0.73 s | Not measured | 1.2 s | Not measured | 0.54 s | 0.83 s | 63 s | 0.87 s |
| Destroy | 0.11 s | 0.79 s | 0.59 s | 0.18 s | 0.14 s | 0.38 s | 0.14 s | 0.21 s |
| Dev server ready | 2.1 s | 3.0 s | 3.1 s | 4.1 s | 3.7 s | 1.9 s | 1.8 s | 1.6 s |
| Preview URL first byte | 0.22 s | 0.20 s | 0.22 s | 0.99 s | 0.86 s | 0.46 s | 0.38 s | 0.16 s |
| Edit, rebuild, reload | 0.33 s | 0.42 s | 0.37 s | 1.2 s | 0.96 s | 0.26 s | 0.51 s | 0.47 s |
| Agent tool replay | 14 s | 17 s | 21 s | 43 s | 31 s | 19 s | 15 s | 11 s |
Boat (Northern France) and boxd (Frankfurt) run their sandboxes in Europe; the remaining providers run in US-East. In-sandbox CPU, memory, disk, and package install speed do not change with caller location and are omitted here.
Cold start
Median s · lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Agent work, 100 tool calls
Median s · lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Cost per 1,000 tasks
USD · lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Start from snapshot
Median s · lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Cold start
Median s · lower is better
Agent work, 100 tool calls
Median s · lower is better
Cost per 1,000 tasks
USD · lower is better
Start from snapshot
Median s · lower is better
Where the time goes
Step by step, from median timings, in each provider's own time.
Start-up
Cold start is the wait before an agent can do anything: from create() until the first command runs, the provider's own time.
Cold start
create() to first command, without our SDK's setup · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Every cold start
Each successful cold start, one ridge per provider · Log scale · Further left is faster
Cold start
create() to first command, without our SDK's setup · Median seconds · Lower is better
- 1E2B: ran E2B's default base template, 2 vCPU and 512 MB. E2B's pricing page says its default sandbox has 4 GB.
Every cold start
Each successful cold start, one ridge per provider · Log scale · Further left is faster
Agent work
Real coding-agent tasks, so CPU, disk and network count as much as the API.
Agent tool replay
100 tool calls in a row: write, read, edit, list, grep, run a test · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest. Runs in Germany, so every call from our Florida server crosses the Atlantic.
- 2Boat: runs in France, so every call from our Florida server crosses the Atlantic.
npm install
npm ci for a small Vite and React app · Median seconds · Lower is better
- 1Boat: runs in France, so every call from our Florida server crosses the Atlantic.
- 2boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest. Runs in Germany, so every call from our Florida server crosses the Atlantic.
pip install
requests and numpy from PyPI · Median seconds · Lower is better
- 1Boat: runs in France, so every call from our Florida server crosses the Atlantic.
- 2boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest. Runs in Germany, so every call from our Florida server crosses the Atlantic.
git clone
Shallow clone of a small pinned repo · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest. Runs in Germany, so every call from our Florida server crosses the Atlantic.
- 2Boat: runs in France, so every call from our Florida server crosses the Atlantic.
Dev server ready
Start Vite and wait until it is ready · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest. Runs in Germany, so every call from our Florida server crosses the Atlantic.
- 2Boat: runs in France, so every call from our Florida server crosses the Atlantic.
Preview URL first byte
Fetch the dev server through the public preview URL · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest. Runs in Germany, so every call from our Florida server crosses the Atlantic.
- 2Boat: runs in France, so every call from our Florida server crosses the Atlantic.
Edit, rebuild, reload
Edit a file, rebuild, fetch the page again · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest. Runs in Germany, so every call from our Florida server crosses the Atlantic.
- 2Boat: runs in France, so every call from our Florida server crosses the Atlantic.
Agent tool replay
100 tool calls in a row: write, read, edit, list, grep, run a test · Median seconds · Lower is better
- 1boxd: runs in Germany, so every call from our Florida server crosses the Atlantic.
- 2Boat: runs in France, so every call from our Florida server crosses the Atlantic.
npm install
npm ci for a small Vite and React app · Median seconds · Lower is better
- 1Boat: runs in France, so every call from our Florida server crosses the Atlantic.
- 2boxd: runs in Germany, so every call from our Florida server crosses the Atlantic.
- 3E2B: ran E2B's default base template, 2 vCPU and 512 MB. E2B's pricing page says its default sandbox has 4 GB.
pip install
requests and numpy from PyPI · Median seconds · Lower is better
- 1Boat: runs in France, so every call from our Florida server crosses the Atlantic.
- 2boxd: runs in Germany, so every call from our Florida server crosses the Atlantic.
git clone
Shallow clone of a small pinned repo · Median seconds · Lower is better
- 1boxd: runs in Germany, so every call from our Florida server crosses the Atlantic.
- 2Boat: runs in France, so every call from our Florida server crosses the Atlantic.
Dev server ready
Start Vite and wait until it is ready · Median seconds · Lower is better
- 1boxd: runs in Germany, so every call from our Florida server crosses the Atlantic.
- 2Boat: runs in France, so every call from our Florida server crosses the Atlantic.
Preview URL first byte
Fetch the dev server through the public preview URL · Median seconds · Lower is better
- 1Boat: runs in France, so every call from our Florida server crosses the Atlantic.
- 2boxd: runs in Germany, so every call from our Florida server crosses the Atlantic.
Edit, rebuild, reload
Edit a file, rebuild, fetch the page again · Median seconds · Lower is better
- 1boxd: runs in Germany, so every call from our Florida server crosses the Atlantic.
- 2Boat: runs in France, so every call from our Florida server crosses the Atlantic.
Everyday calls
What an agent does hundreds of times per task: run a command, move files, reattach to a sandbox.
Run a command
A no-op command, mostly network and API overhead · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Write + read 1 KB
Write a 1 KB file and read it back · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Write + read 10 MB
Write a 10 MB file and read it back · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Reconnect
Attach to an existing sandbox by ID and run a command · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Destroy
Delete the sandbox and wait for confirmation · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Run a command
A no-op command, mostly network and API overhead · Median seconds · Lower is better
Write + read 1 KB
Write a 1 KB file and read it back · Median seconds · Lower is better
Write + read 10 MB
Write a 10 MB file and read it back · Median seconds · Lower is better
Reconnect
Attach to an existing sandbox by ID and run a command · Median seconds · Lower is better
Destroy
Delete the sandbox and wait for confirmation · Median seconds · Lower is better
Pause & snapshots
Pausing stops paying for idle time while an agent waits on a human, with every process kept. Where stop and start restarts the sandbox instead, we mark pause as not supported. Snapshots start many sandboxes from one prepared state.
Resume
Resume a paused sandbox until a command runs · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
- Daytona: not supported. Daytona's container sandboxes have no pause: stop and start restarts the sandbox and ends every running process. We don't time a restart as a pause.
- Boat: not supported. Boat has no pause: stop and start restarts the machine and ends every running process. We don't time a restart as a pause.
- No result for Upstash Ephemeral Box (no pause support).
- Pause and resume are from the previous run (Oct 22, SDK a2316c3): the provider's own API, which the SDK update does not touch. Superserve's is from this run, at 4 vCPU.
Pause
Pause a running sandbox until the provider confirms · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
- Daytona: not supported. Daytona's container sandboxes have no pause: stop and start restarts the sandbox and ends every running process. We don't time a restart as a pause.
- Boat: not supported. Boat has no pause: stop and start restarts the machine and ends every running process. We don't time a restart as a pause.
- No result for Upstash Ephemeral Box (no pause support).
- Pause and resume are from the previous run (Oct 22, SDK a2316c3): the provider's own API, which the SDK update does not touch. Superserve's is from this run, at 4 vCPU.
Pause + resume
Pause, resume, then run a command · Median of each part, seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
- Daytona: not supported. Daytona's container sandboxes have no pause: stop and start restarts the sandbox and ends every running process. We don't time a restart as a pause.
- Boat: not supported. Boat has no pause: stop and start restarts the machine and ends every running process. We don't time a restart as a pause.
- No result for Upstash Ephemeral Box (no pause support).
- Pause and resume are from the previous run (Oct 22, SDK a2316c3): the provider's own API, which the SDK update does not touch. Superserve's is from this run, at 4 vCPU.
Take snapshot
Save a prepared sandbox as a snapshot · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
- No result for Boat (not supported).
Start from snapshot
New sandbox from that snapshot, then a command · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
- No result for Boat (not supported).
Resume
Resume a paused sandbox until a command runs · Median seconds · Lower is better
- Daytona: not supported. Daytona's container sandboxes have no pause: stop and start restarts the sandbox and ends every running process. We don't time a restart as a pause.
- Boat: not supported. Boat has no pause: stop and start restarts the machine and ends every running process. We don't time a restart as a pause.
- No result for Upstash Ephemeral Box (no pause support).
- Pause and resume are from the previous run (Oct 22, SDK a2316c3): the provider's own API, which the SDK update does not touch.
Pause
Pause a running sandbox until the provider confirms · Median seconds · Lower is better
- Daytona: not supported. Daytona's container sandboxes have no pause: stop and start restarts the sandbox and ends every running process. We don't time a restart as a pause.
- Boat: not supported. Boat has no pause: stop and start restarts the machine and ends every running process. We don't time a restart as a pause.
- No result for Upstash Ephemeral Box (no pause support).
- Pause and resume are from the previous run (Oct 22, SDK a2316c3): the provider's own API, which the SDK update does not touch.
Pause + resume
Pause, resume, then run a command · Median of each part, seconds · Lower is better
- Daytona: not supported. Daytona's container sandboxes have no pause: stop and start restarts the sandbox and ends every running process. We don't time a restart as a pause.
- Boat: not supported. Boat has no pause: stop and start restarts the machine and ends every running process. We don't time a restart as a pause.
- No result for Upstash Ephemeral Box (no pause support).
- Pause and resume are from the previous run (Oct 22, SDK a2316c3): the provider's own API, which the SDK update does not touch.
Take snapshot
Save a prepared sandbox as a snapshot · Median seconds · Lower is better
- No result for Boat (not supported).
Start from snapshot
New sandbox from that snapshot, then a command · Median seconds · Lower is better
- No result for Boat (not supported).
Bursts
10 or 25 sandboxes started at once, as an agent fanning out would, timed until the last one runs a command.
10 at once, all ready
10 creates at once, until all 10 run a command · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
- No result for E2B (in one of its three bursts of 10, two creates failed on E2B's side (E2B reported a timeout), so only 2 of 3 bursts finished and the size is not published; coming in the next update).
25 at once, all ready
25 creates at once, until all 25 run a command · Median seconds · Lower is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
10 at once, all ready
10 creates at once, until all 10 run a command · Median seconds · Lower is better
25 at once, all ready
25 creates at once, until all 25 run a command · Median seconds · Lower is better
- No result for Daytona (in one of its three bursts of 25, one create timed out on Daytona's side (24 of 25 ready), so only 2 of 3 bursts finished and the size is not published; coming in the next update).
Machines
What each provider ran: what we asked for, what we measured inside, and the hardware underneath.
What each provider ran
Asked for 4 vCPU, 8 GB; measured inside each sandbox
E2BMatches
Asked for 4 vCPU, 8 GB, template r1h7gud12rf1f6iu29r0
Measured 4 vCPU, 7.8 GB
FreestyleMatches
Asked for 4 vCPU, 8 GB
Measured 4 vCPU, 7.8 GB
TenkiMatches
Asked for 4 vCPU, 8 GB
Measured 4 vCPU, 7.8 GB
boxdDiffers
Asked for 4 vCPU, 16 GB
Measured 4 vCPU, 16 GB
Ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
SuperserveMatches
Asked for 4 vCPU, 8 GB, template sandbox-bench-node22-py311-4x8-pinned
Measured 4 vCPU, 7.8 GB
Upstash BoxMatches
Asked for 4 vCPU, 8 GB ("medium")
Measured 4 vCPU, 8 GB
DaytonaMatches
Asked for 4 vCPU, 8 GB, template daytona-large
Measured 4 vCPU, 8 GB
Upstash Ephemeral BoxMatches
Asked for 4 vCPU, 8 GB ("medium")
Measured 4 vCPU, 8 GB
BoatMatches
Asked for 4 vCPU, 8 GB
Measured 4 vCPU, 7.8 GB
| Provider | Asked for | Measured inside | 4 vCPU, 8 GB? |
|---|---|---|---|
| E2B | 4 vCPU, 8 GB, template r1h7gud12rf1f6iu29r0 | 4 vCPU, 7.8 GB | Matches |
| Freestyle | 4 vCPU, 8 GB | 4 vCPU, 7.8 GB | Matches |
| Tenki | 4 vCPU, 8 GB | 4 vCPU, 7.8 GB | Matches |
| boxd | 4 vCPU, 16 GBRan 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest. | 4 vCPU, 16 GB | Differs |
| Superserve | 4 vCPU, 8 GB, template sandbox-bench-node22-py311-4x8-pinned | 4 vCPU, 7.8 GB | Matches |
| Upstash Box | 4 vCPU, 8 GB ("medium") | 4 vCPU, 8 GB | Matches |
| Daytona | 4 vCPU, 8 GB, template daytona-large | 4 vCPU, 8 GB | Matches |
| Upstash Ephemeral Box | 4 vCPU, 8 GB ("medium") | 4 vCPU, 8 GB | Matches |
| Boat | 4 vCPU, 8 GB | 4 vCPU, 7.8 GB | Matches |
Hardware inside each sandbox
Chip, memory, cloud and region, and how each sandbox is isolated
Named means the CPU reports its own model. Inferred means we worked it out from what the sandbox shows, such as model number, cache and clock, or from the chip's published spec. Measured memory was read inside the sandbox. From a hardware probe on Oct 22, 2026, checked against the benchmark's fingerprints. Open a row for what each sandbox hides.
Hidden or different from the real machine
- The CPU name, microcode and clock leaves are hidden. The chip is identified from its model number, cache size and 2.6 GHz clock.
- The default 2 vCPUs are one physical core with two hyperthreads, so two-thread work scales well below twice one thread.
- No DMI or PCI devices, so the memory type can't be read inside; DDR4 follows from the chip.
- Memory
- DDR4-3200, the chip's memory type (inferred)
- Disk
- 23 GB virtio disk, ext4
- Kernel
- Linux 6.1, Debian 12
- At 4 vCPU
- The 4 vCPU, 8 GB template ran on the same CPU in the same region: two cores with two threads each.
Hidden or different from the real machine
- The CPU name, microcode and topology are hidden. The chip is inferred from its 2.45 GHz clock, cache and Zen 3 features.
- Memory is added after boot: about 3 GB is free at first, 7.9 GB later.
- No DMI, so the memory type is inferred.
- Memory
- DDR4-3200, the Milan platform's memory (inferred)
- Disk
- 32 GB virtio disk, ext4
- Kernel
- Linux 6.1
Hidden or different from the real machine
- On the 4 vCPU VM, two vCPUs report an EPYC 7B13 (Milan) and two an EPYC 9575F (Turin). That fits a snapshot taken on a Milan host and restored on a Turin one, so the real host may be newer than the name says.
- CPU features are capped at the Milan set on every vCPU, so no AVX-512 even on Turin.
- The clock reads 2.25 GHz, the 7B13's base, which may be carried over from the snapshot.
- Memory
- No memory data inside the VM
- Disk
- 5 GB virtio disk, ext4
- Kernel
- Linux 6.18
- At 4 vCPU
- The 4 vCPU, 8 GB VM is the one that showed both chips.
Hidden or different from the real machine
- The CPU name is trimmed to "AMD EPYC" and the microcode and topology are hidden. The chip is inferred from its 3.1 GHz clock and the Genoa servers Latitude.sh sells; a dual-socket 9554 can't be ruled out.
- No DMI, so the memory type is inferred.
- AVX-512 is exposed, which can help vectorised work against hosts that hide it.
- The disk reports itself as rotational although it is virtual, so tools that tune for hard drives may behave differently.
- Memory
- DDR5-4800, the Genoa platform's memory (inferred)
- Disk
- 100 GB virtio disk, ext4
- Kernel
- Linux 6.18 (custom build), Ubuntu 24.04
- At 4 vCPU
- The 4 vCPU, 16 GB size ran on the same CPU type.
Hidden or different from the real machine
- The CPU name and microcode are hidden. The chip family is clear from its model number; the exact SKU is not.
- The old 4.14 guest kernel can't turn on the chip's AMX units, so AMX workloads can't use them.
- No DMI, so the memory type is inferred.
- Memory
- DDR5, the Sapphire Rapids platform's memory (inferred)
- Disk
- 4 GB virtio disk, ext4
- Kernel
- Linux 4.14, Debian 12
Hidden or different from the real machine
- The only Arm provider here: x86-only binaries don't run, and compile and run times differ for that reason alone.
- nproc and /proc/meminfo show the host's 64 CPUs and 256 GB, while a box may use 2 CPUs and 4 GB (4 and 8 at the medium size).
- No DMI tables or clock readings inside, so memory type and clock come from AWS's published spec.
- Neighbours share the host kernel and the chip's L3 cache.
- Memory
- DDR5-5600, from AWS's Graviton4 spec (inferred)
- Disk
- 5 GB overlay root and a 5 GB /workspace, on EBS
- Kernel
- Host kernel 7.0 (Ubuntu 24.04 for AWS), Debian 12 userland
- At 4 vCPU
- The medium size (4 vCPU, 8 GB) runs on the same m8g.16xlarge hosts.
Hidden or different from the real machine
- Nothing at the CPU level is hidden: the real CPU name, microcode, server model (Dell PowerEdge R6615 in the probe, a Supermicro AS-2115GT-HNTR in the benchmark) and disks are visible.
- nproc and lscpu show every host thread (48 or 64) and /proc/meminfo shows the host's RAM, while the default sandbox may use 1 CPU and 1 GB. Tools that size thread pools or caches from those numbers oversubscribe.
- Hosts differ in clock speed, so single-thread results vary from sandbox to sandbox. Neighbours share the host kernel.
- Outbound internet is blocked on our account tier, so the sandbox's own network location could not be read.
- Memory
- Registered DDR5, read from the memory controller on a 9254 host (measured)
- Disk
- 3 GB container disk (10 GB at 4 vCPU) on the host's NVMe RAID
- Kernel
- Host kernel 6.17 (Ubuntu 24.04), Debian 13 userland
- Chips in this track
- 9254 ×62, 9354P ×45, 9354 ×20, 9275F ×3, from the benchmark's fingerprints
Hidden or different from the real machine
- The only Arm provider here: x86-only binaries don't run, and compile and run times differ for that reason alone.
- Our deeper hardware probe ran on Upstash's regular Box. For Ephemeral Box we have the benchmark's own fingerprints: the AWS host type, the shared host kernel and the Arm architecture.
- Memory type and clock come from AWS's published Graviton4 spec, not from inside the box.
- Memory
- DDR5-5600, from AWS's Graviton4 spec (inferred)
- Disk
- 5 GB at the small size, 20 GB at medium, as measured inside
- Kernel
- Host kernel 7.0 (Ubuntu 24.04 for AWS)
- At 4 vCPU
- The medium size (4 vCPU, 8 GB) runs on the same m8gd.12xlarge hosts.
Hidden or different from the real machine
- A desktop chip with a high boost clock, so single-thread results depend on boost and neighbours.
- The cache sizes the guest sees are synthetic and differ from the real chip.
- Memory
- DDR5, the only memory the chip takes (inferred)
- Disk
- 70 GB virtio disk, ext4
- Kernel
- Linux 7.0, Ubuntu 24.04
CPU, one core
One core running a fixed Python loop · Median operations per second · Higher is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
CPU, all cores
Every core at once, so bigger machines win · Median operations per second · Higher is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Memory bandwidth
Copying 16 MB in memory · Median MB per second · Higher is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Disk write
Writing a 64 MB file in order · Median MB per second · Higher is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
Disk read
Reading that file back, possibly from cache · Median MB per second · Higher is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
4K random write
4 KB writes, each synced to disk · Median operations per second · Higher is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
4K random read
4 KB random reads · Median operations per second · Higher is better
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
What each provider ran
Each provider's default sandbox, and the vCPU and RAM measured inside it
E2B
Asked for 2 vCPU, 512 MB, template base
Measured 2 vCPU, 473 MB
E2B's default base template is 2 vCPU and 512 MB. E2B's pricing page says its default sandbox has 4 GB, so E2B ran smaller here than that.
Freestyle
Asked for 4 vCPU, 8 GB
Measured 4 vCPU, 7.8 GB
Tenki
Asked for provider default
Measured 2 vCPU, 3.8 GB
Tenki documents a 5 GiB default disk but not a default vCPU or RAM, so those are what we measured.
boxd
Asked for 2 vCPU, 8 GB
Measured 2 vCPU, 7.8 GB
Superserve
Asked for 1 vCPU, 1 GB, template sandbox-bench-node22-py311-1x1-pinned
Measured 1 vCPU, 994 MB
Superserve ran a template we built with Node 22 and Python 3.11 preinstalled, at its default 1 vCPU, 1 GB RAM and 4 GB disk. Superserve's own templates have Node (node-22) or Python (python-3.11), not both, and our tests need both.
Upstash Box
Asked for 2 vCPU, 4 GB
Measured 2 vCPU, 4 GB
Daytona
Asked for 1 vCPU, 1 GB
Measured 1 vCPU, 1 GB
Upstash Ephemeral Box
Asked for 2 vCPU, 4 GB
Measured 2 vCPU, 4 GB
Boat
Asked for 4 vCPU, 8 GB
Measured 4 vCPU, 7.8 GB
| Provider | Asked for | Measured inside |
|---|---|---|
| E2B | 2 vCPU, 512 MB, template baseE2B's default base template is 2 vCPU and 512 MB. E2B's pricing page says its default sandbox has 4 GB, so E2B ran smaller here than that. | 2 vCPU, 473 MB |
| Freestyle | 4 vCPU, 8 GB | 4 vCPU, 7.8 GB |
| Tenki | provider defaultTenki documents a 5 GiB default disk but not a default vCPU or RAM, so those are what we measured. | 2 vCPU, 3.8 GB |
| boxd | 2 vCPU, 8 GB | 2 vCPU, 7.8 GB |
| Superserve | 1 vCPU, 1 GB, template sandbox-bench-node22-py311-1x1-pinnedSuperserve ran a template we built with Node 22 and Python 3.11 preinstalled, at its default 1 vCPU, 1 GB RAM and 4 GB disk. Superserve's own templates have Node (node-22) or Python (python-3.11), not both, and our tests need both. | 1 vCPU, 994 MB |
| Upstash Box | 2 vCPU, 4 GB | 2 vCPU, 4 GB |
| Daytona | 1 vCPU, 1 GB | 1 vCPU, 1 GB |
| Upstash Ephemeral Box | 2 vCPU, 4 GB | 2 vCPU, 4 GB |
| Boat | 4 vCPU, 8 GB | 4 vCPU, 7.8 GB |
Default machine size
Advertised size of each provider's default sandbox · Tap or focus a bar for what we measured inside
vCPU
Default sandbox · Higher is better
RAM
Default sandbox · Higher is better
Disk
Default sandbox · Higher is better
- E2B: E2B's default base template is 2 vCPU and 512 MB. E2B's pricing page says its default sandbox has 4 GB, so E2B ran smaller here than that.
Hardware inside each sandbox
Chip, memory, cloud and region, and how each sandbox is isolated
Named means the CPU reports its own model. Inferred means we worked it out from what the sandbox shows, such as model number, cache and clock, or from the chip's published spec. Measured memory was read inside the sandbox. From a hardware probe on Oct 22, 2026, checked against the benchmark's fingerprints. Open a row for what each sandbox hides.
Hidden or different from the real machine
- The CPU name, microcode and clock leaves are hidden. The chip is identified from its model number, cache size and 2.6 GHz clock.
- The default 2 vCPUs are one physical core with two hyperthreads, so two-thread work scales well below twice one thread.
- No DMI or PCI devices, so the memory type can't be read inside; DDR4 follows from the chip.
- Memory
- DDR4-3200, the chip's memory type (inferred)
- Disk
- 23 GB virtio disk, ext4
- Kernel
- Linux 6.1, Debian 12
- Size
- E2B's default base template is 2 vCPU and 512 MB. E2B's pricing page says its default sandbox has 4 GB, so E2B ran smaller here than that.
Hidden or different from the real machine
- The CPU name, microcode and topology are hidden. The chip is inferred from its 2.45 GHz clock, cache and Zen 3 features.
- Memory is added after boot: about 3 GB is free at first, 7.9 GB later.
- No DMI, so the memory type is inferred.
- Memory
- DDR4-3200, the Milan platform's memory (inferred)
- Disk
- 32 GB virtio disk, ext4
- Kernel
- Linux 6.1
Hidden or different from the real machine
- On the 4 vCPU VM, two vCPUs report an EPYC 7B13 (Milan) and two an EPYC 9575F (Turin). That fits a snapshot taken on a Milan host and restored on a Turin one, so the real host may be newer than the name says.
- CPU features are capped at the Milan set on every vCPU, so no AVX-512 even on Turin.
- The clock reads 2.25 GHz, the 7B13's base, which may be carried over from the snapshot.
- Memory
- No memory data inside the VM
- Disk
- 5 GB virtio disk, ext4
- Kernel
- Linux 6.18
- Size
- Tenki documents a 5 GiB default disk but not a default vCPU or RAM, so those are what we measured.
Hidden or different from the real machine
- The CPU name is trimmed to "AMD EPYC" and the microcode and topology are hidden. The chip is inferred from its 3.1 GHz clock and the Genoa servers Latitude.sh sells; a dual-socket 9554 can't be ruled out.
- No DMI, so the memory type is inferred.
- AVX-512 is exposed, which can help vectorised work against hosts that hide it.
- The disk reports itself as rotational although it is virtual, so tools that tune for hard drives may behave differently.
- Memory
- DDR5-4800, the Genoa platform's memory (inferred)
- Disk
- 100 GB virtio disk, ext4
- Kernel
- Linux 6.18 (custom build), Ubuntu 24.04
Hidden or different from the real machine
- The CPU name and microcode are hidden. The chip family is clear from its model number; the exact SKU is not.
- The old 4.14 guest kernel can't turn on the chip's AMX units, so AMX workloads can't use them.
- No DMI, so the memory type is inferred.
- Memory
- DDR5, the Sapphire Rapids platform's memory (inferred)
- Disk
- 4 GB virtio disk, ext4
- Kernel
- Linux 4.14, Debian 12
- Size
- Superserve ran a template we built with Node 22 and Python 3.11 preinstalled, at its default 1 vCPU, 1 GB RAM and 4 GB disk. Superserve's own templates have Node (node-22) or Python (python-3.11), not both, and our tests need both.
Hidden or different from the real machine
- The only Arm provider here: x86-only binaries don't run, and compile and run times differ for that reason alone.
- nproc and /proc/meminfo show the host's 64 CPUs and 256 GB, while a box may use 2 CPUs and 4 GB (4 and 8 at the medium size).
- No DMI tables or clock readings inside, so memory type and clock come from AWS's published spec.
- Neighbours share the host kernel and the chip's L3 cache.
- Memory
- DDR5-5600, from AWS's Graviton4 spec (inferred)
- Disk
- 5 GB overlay root and a 5 GB /workspace, on EBS
- Kernel
- Host kernel 7.0 (Ubuntu 24.04 for AWS), Debian 12 userland
Hidden or different from the real machine
- Nothing at the CPU level is hidden: the real CPU name, microcode, server model (Dell PowerEdge R6615 in the probe, a Supermicro AS-2115GT-HNTR in the benchmark) and disks are visible.
- nproc and lscpu show every host thread (48 or 64) and /proc/meminfo shows the host's RAM, while the default sandbox may use 1 CPU and 1 GB. Tools that size thread pools or caches from those numbers oversubscribe.
- Hosts differ in clock speed, so single-thread results vary from sandbox to sandbox. Neighbours share the host kernel.
- Outbound internet is blocked on our account tier, so the sandbox's own network location could not be read.
- Memory
- Registered DDR5, read from the memory controller on a 9254 host (measured)
- Disk
- 3 GB container disk (10 GB at 4 vCPU) on the host's NVMe RAID
- Kernel
- Host kernel 6.17 (Ubuntu 24.04), Debian 13 userland
- Chips in this track
- 9354P ×58, 9254 ×42, 9354 ×16, 9275F ×14, from the benchmark's fingerprints
Hidden or different from the real machine
- The only Arm provider here: x86-only binaries don't run, and compile and run times differ for that reason alone.
- Our deeper hardware probe ran on Upstash's regular Box. For Ephemeral Box we have the benchmark's own fingerprints: the AWS host type, the shared host kernel and the Arm architecture.
- Memory type and clock come from AWS's published Graviton4 spec, not from inside the box.
- Memory
- DDR5-5600, from AWS's Graviton4 spec (inferred)
- Disk
- 5 GB at the small size, 20 GB at medium, as measured inside
- Kernel
- Host kernel 7.0 (Ubuntu 24.04 for AWS)
Hidden or different from the real machine
- A desktop chip with a high boost clock, so single-thread results depend on boost and neighbours.
- The cache sizes the guest sees are synthetic and differ from the real chip.
- Memory
- DDR5, the only memory the chip takes (inferred)
- Disk
- 70 GB virtio disk, ext4
- Kernel
- Linux 7.0, Ubuntu 24.04
CPU, one core
One core running a fixed Python loop · Median operations per second · Higher is better
CPU, all cores
Every core at once, so bigger machines win · Median operations per second · Higher is better
Memory bandwidth
Copying 16 MB in memory · Median MB per second · Higher is better
Disk write
Writing a 64 MB file in order · Median MB per second · Higher is better
Disk read
Reading that file back, possibly from cache · Median MB per second · Higher is better
4K random write
4 KB writes, each synced to disk · Median operations per second · Higher is better
4K random read
4 KB random reads · Median operations per second · Higher is better
Reliability
How often each provider failed, and why. Only failures the provider caused are counted; Method lists the ones we set aside.
Failed attempts
Per 1,000 attempts across the tests on this page · Lower is better
Freestyle
- 1× Preview HTTP 502, no first bytePreview URL first byte
boxd
- 2× boxd request failed. (provider)Write + read 10 MB
- 1× boxd request failed. (invalid_argument)Pause + resume
Failed attempts
Per 1,000 attempts across the tests on this page · Lower is better
Tenki
- 2× [internal] internal server errorsnapshot-cleanup
boxd
- 2× boxd request failed. (provider)Write + read 10 MB
Freestyle
- 1× Preview HTTP 502, no first bytePreview URL first byte
- 1× Native operation timed out. (timeout)Write + read 10 MB
Upstash Ephemeral Box
- 2× Upstash Box exec failed (provider). (provider)11 tests
- 1× Upstash Box files.write failed (unavailable, HTTP 500). (unavailable, HTTP 500, operation=files.write)4 tests
- 1× Upstash Box connect failed (unavailable, HTTP 500). (unavailable, HTTP 500, operation=connect)Reconnect
Cost
What the same agent task cost on each provider, and what each charges per hour.
Cost per 1,000 tasks
One task = create a sandbox, run 100 tool calls, delete it · US dollars · Lower is better
Not from a bill yet. E2B and boxd: their own usage records at published rates; Boat, Tenki and Freestyle: our measured time at list price.
- 1boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
- Each task ran in its own sandbox, up to 10 per provider, in a separate cost run. The bar is the median.
- Usage charges only: credits, tax and plan minimums are left out.
Price per hour of a 4 vCPU, 8 GB sandbox
The same size everywhere · From each provider's price list · US dollars · Lower is better
- boxd does not list a 4 vCPU, 8 GB machine, so no price is shown.
- CPU and memory only, at list price. Disk, transfer, subscriptions and free credits are left out. Upstash bills only while the CPU is busy, so it may cost less. Boat charges a flat rate per size.
Price per hour of the machine each provider ran
The machine we measured inside · From each provider's price list · US dollars · Lower is better
- 1boxd bills in euros, €0.348 an hour, converted at the ECB rate of 1.1234 dollars per euro on October 21, 2026.
- CPU and memory only, at list price. Boat charges a flat rate per size. Upstash and boxd may cost less: they bill only part of the machine.
Agent work vs cost
Time for 100 tool calls against cost per 1,000 tasks · Lower left is faster and cheaper
Median time for 100 tool calls, seconds (log scale)
Not from a bill yet. E2B and boxd: their own usage records at published rates; Boat, Tenki and Freestyle: our measured time at list price.
- Time is the median from the main tests. Cost is from the separate cost run. Hover or focus a dot for its numbers.
- boxd: ran 4 vCPU, 16 GB, not 4 vCPU, 8 GB. boxd has no 8 GB size at 4 vCPU; this is its nearest.
- Boat and boxd run in Europe, so every call from our Florida server crosses the Atlantic.
Cost per 1,000 tasks
One task = create a sandbox, run 100 tool calls, delete it · US dollars · Lower is better
Not from a bill yet. E2B and boxd: their own usage records at published rates; Boat, Tenki and Freestyle: our measured time at list price.
- Each task ran in its own sandbox, up to 10 per provider, in a separate cost run. The bar is the median.
- Usage charges only: credits, tax and plan minimums are left out.
Price per hour of a 4 vCPU, 8 GB sandbox
The same size everywhere · From each provider's price list · US dollars · Lower is better
- boxd does not list a 4 vCPU, 8 GB machine, so no price is shown.
- CPU and memory only, at list price. Disk, transfer, subscriptions and free credits are left out. Upstash bills only while the CPU is busy, so it may cost less. Boat charges a flat rate per size.
Price per hour of each default sandbox
The sandbox you get without choosing a size, so sizes differ · From each provider's price list · US dollars · Lower is better
- 1boxd bills in euros, €0.174 an hour, converted at the ECB rate of 1.1234 dollars per euro on October 21, 2026.
- No price for Upstash Ephemeral Box: its measured machine did not match a priced size.
- CPU and memory only, at list price. Boat charges a flat rate per size. Upstash and boxd may cost less: they bill only part of the machine.
Agent work vs cost
Time for 100 tool calls against cost per 1,000 tasks · Lower left is faster and cheaper
Median time for 100 tool calls, seconds (log scale)
Not from a bill yet. E2B and boxd: their own usage records at published rates; Boat, Tenki and Freestyle: our measured time at list price.
- Time is the median from the main tests. Cost is from the separate cost run. Hover or focus a dot for its numbers.
- Boat and boxd run in Europe, so every call from our Florida server crosses the Atlantic.
Method
How the numbers were made, and what could bias them.
- Same machine, Freestyle: 5 runs, 5 tests. Our SDK timed out or wrapped the error moving 10 MB, so we can't tell whose side failed.
- Same machine, Upstash Ephemeral Box: 3 runs, 3 tests. Our own scenario deadline ran out; not counted.
- Same machine, Boat: 1 run, 1 test. Our own scenario deadline ran out; not counted.
- Default machines, Freestyle: 2 runs, 2 tests. Our SDK timed out or wrapped the error moving 10 MB, so we can't tell whose side failed.
Every number with its full method: results.md