# boxd vs Cloudflare Sandbox

> Cloudflare Sandbox gives your Worker a container on the edge, with a disk that's wiped when it stops. A boxd machine is a persistent VM with its own disk, SSH and URL, that you can use without writing a Worker.

Checked 2026-10-30. Every Cloudflare Sandbox claim links to Cloudflare Sandbox's own docs or pricing. Web page: https://boxd.sh/compare/cloudflare-sandbox/

## At a glance

|  | boxd | Cloudflare Sandbox |
| --- | --- | --- |
| **Where boxd is ahead** |  |  |
| Sleeps with processes kept | Yes, standby and hibernate | No; disk is wiped |
| Starts from a snapshot, app running | Yes · app answers in 1.19 s | Filesystem only |
| Largest, self-serve | 8 vCPU · 32 GiB | 4 vCPU · 12 GiB · 20 GB |
| SSH | Native, own port per machine | Through wrangler |
| Coding agents installed | Claude Code, Codex, OpenCode | Install them yourself |
| Built-in integrations | 100+, credentials kept out | Your Worker holds tokens |
| **Where Cloudflare Sandbox is ahead** |  |  |
| Regions | Frankfurt (US waitlist) | Global |
| Egress allowlist | Yes | Yes, off by default |
| While asleep | Hibernated: disk only | Stopped: free (disk gone) |

## Use boxd when

- Your work needs a disk that stays
- You want SSH and a URL without writing a Worker
- You need more than 4 vCPU or 12 GiB

## Use Cloudflare Sandbox when

- You run short code executions from a Worker
- You want sandboxes near users worldwide
- You need the smallest possible instance

## Where boxd stands out

### The disk stays

A boxd machine keeps its 100 GB disk and its memory through sleep. A Cloudflare sandbox's disk is wiped when the instance stops; you save and restore a filesystem snapshot yourself, and processes start again.

### Composable: the sandbox is one part of the kit

On Cloudflare you build that kit yourself out of Workers: cron triggers and Durable Objects for scheduling, your own Worker holding every token, and no documented network between sandboxes. Put together, boxd's parts ran the CI of 10 open-source projects 6× faster than one GitHub-hosted job.

|  | boxd | Cloudflare Sandbox |
| --- | --- | --- |
| **Composable** |  |  |
| Ready machine described in code | Machine specs, built on one another | Dockerfile; config in your code |
| Machines create machines | Yes, signed in as the machine | Not published |
| Built-in integrations | 100+, credentials kept out | Your Worker holds tokens |
| Schedules and event triggers | Cron and events; sleeps between runs | Through Workers Cron Triggers |
| Standalone disks | Yes, outlive the machine | R2 mounts; no block volumes |
| Private network between machines | Org network, split by tags | Not published |
| Tailscale or NetBird | Both, built in | Workers VPC, for Workers |
| Agent skills or MCP | Agent skills; no MCP server | Skills and MCP servers |

### Usable on its own

SSH in, open its URL, run an agent. A Cloudflare sandbox is driven by a Worker and Durable Object you write and deploy, which also route its preview URLs.

### Room to work

boxd machines start at 2 vCPU and 8 GiB and go to 8 vCPU and 32 GiB. Cloudflare's largest instance is 4 vCPU, 12 GiB and 20 GB of disk.

### Claude Code, Codex and OpenCode are already there

Every machine boots with all three installed, plus headless Chrome, a desktop you can open in the browser, Docker and the boxd CLI. Your API keys stay outside the machine: the guest holds a placeholder and our proxy swaps in the real value.

boxd's timings were measured on its production cluster on 2026-10-29, ten runs each, from a client in the same datacenter: a hibernated machine's app answered an HTTPS request in 156 ms median; a new machine from a snapshot answered 1.19 s after the create command.

## Side by side

|  | boxd | Cloudflare Sandbox |
| --- | --- | --- |
| **The machine** |  |  |
| Full VM, own kernel | Yes, every machine | Container inside a Firecracker VM ([source](https://developers.cloudflare.com/containers/concepts/architecture/)) |
| Default size | 2 vCPU · 8 GiB · 100 GB | 1/16 vCPU · 256 MiB · 2 GB ([source](https://developers.cloudflare.com/containers/platform/limits/)) |
| Largest, self-serve | 8 vCPU · 32 GiB | 4 vCPU · 12 GiB · 20 GB ([source](https://developers.cloudflare.com/containers/platform/limits/)) |
| Root, systemd, Docker | Yes, plus nested virtualization | Root; Docker with limits; single process ([source](https://developers.cloudflare.com/sandbox/concepts/lifetime/)) |
| CPU test (runs/s) | 12.6 (our run) | Not measured |
| **Composable** |  |  |
| Ready machine described in code | Machine specs, built on one another | Dockerfile; config in your code ([source](https://developers.cloudflare.com/sandbox/commands/run-python-code/)) |
| Machines create machines | Yes, signed in as the machine | Not published ([source](https://developers.cloudflare.com/sandbox/concepts/security/)) |
| Built-in integrations | 100+, credentials kept out | Your Worker holds tokens ([source](https://developers.cloudflare.com/sandbox/network/)) |
| Schedules and event triggers | Cron and events; sleeps between runs | Through Workers Cron Triggers ([source](https://developers.cloudflare.com/workers/configuration/cron-triggers/)) |
| Standalone disks | Yes, outlive the machine | R2 mounts; no block volumes ([source](https://developers.cloudflare.com/sandbox/files/)) |
| Private network between machines | Org network, split by tags | Not published ([source](https://developers.cloudflare.com/containers/configuration/outbound-traffic/)) |
| Tailscale or NetBird | Both, built in | Workers VPC, for Workers ([source](https://developers.cloudflare.com/workers-vpc/)) |
| Agent skills or MCP | Agent skills; no MCP server | Skills and MCP servers ([source](https://developers.cloudflare.com/agent-setup/claude-code/)) |
| **Ready when you are** |  |  |
| Sleeps with processes kept | Yes, standby and hibernate | No; disk is wiped ([source](https://developers.cloudflare.com/containers/faq/)) |
| Wakes on a request | Yes, HTTPS or SSH · app answers in 156 ms | Your Worker starts a new instance ([source](https://developers.cloudflare.com/sandbox/concepts/lifetime/)) |
| Starts from a snapshot, app running | Yes · app answers in 1.19 s | Filesystem only ([source](https://developers.cloudflare.com/containers/guides/snapshots/)) |
| Session limit | None | No cap, no guarantee ([source](https://developers.cloudflare.com/containers/faq/)) |
| **Built for agents** |  |  |
| Coding agents installed | Claude Code, Codex, OpenCode | Install them yourself ([source](https://developers.cloudflare.com/sandbox/coding-agents/)) |
| SSH | Native, own port per machine | Through wrangler ([source](https://developers.cloudflare.com/containers/guides/ssh/)) |
| HTTPS URL per port | Yes, plus custom domains | Routed by your Worker ([source](https://developers.cloudflare.com/sandbox/previews/)) |
| Raw TCP inbound | Yes, 3 ports per machine | No ([source](https://developers.cloudflare.com/containers/concepts/architecture/)) |
| Secrets kept out | Yes, swapped in at the proxy | Yes, outbound handlers ([source](https://developers.cloudflare.com/sandbox/concepts/security/)) |
| **Price** |  |  |
| vCPU-hour | $0.047, CPU used | $0.072 active only + $5/mo plan ([source](https://developers.cloudflare.com/containers/platform/pricing/)) |
| RAM GiB-hour | $0.014, memory in use | $0.009, provisioned ([source](https://developers.cloudflare.com/containers/platform/pricing/)) |
| While asleep | Hibernated: disk only | Stopped: free (disk gone) ([source](https://developers.cloudflare.com/sandbox/concepts/lifetime/)) |
| **Also worth knowing** |  |  |
| GPUs | No | No |
| Regions | Frankfurt (US waitlist) | Global ([source](https://developers.cloudflare.com/containers/concepts/placement/)) |
| SOC 2 | SOC 2 in progress | Cloudflare yes; Containers not in scope ([source](https://www.cloudflare.com/trust-hub/compliance-resources/soc-2/)) |
| SAML SSO | No | Yes ([source](https://developers.cloudflare.com/fundamentals/manage-members/dashboard-sso/)) |
| Egress allowlist | Yes | Yes, off by default ([source](https://developers.cloudflare.com/containers/configuration/outbound-traffic/)) |
| Self-host | Yes, free to 16 vCPUs | No |

## Where Cloudflare Sandbox is stronger

- **Global placement.** Sandboxes run near the request across Cloudflare's network, with EU, US and FedRAMP jurisdictions.
- **Egress control.** Internet off by default, per-host allow and deny lists, and credentials added by your Worker after traffic leaves the sandbox.
- **Tiny and cheap.** Instances start at 1/16 vCPU and CPU is billed only while busy.
- **One platform.** If you're on Workers already, the sandbox sits next to your code, storage and queues.

## Questions

### Does a Cloudflare sandbox keep its files?

Not by itself: the disk is ephemeral and is wiped when the instance stops. You can save a filesystem snapshot and restore it, or mount R2. A boxd machine keeps its disk and memory, so files and running processes are both there when it wakes.

### Do I need Workers to use boxd?

No. A boxd machine is reachable on its own: SSH, an HTTPS URL per port, the CLI, the API and the Python and TypeScript SDKs.

## How we measured

### Wake from hibernation

A small Python HTTP server on a default 2 vCPU machine, published on its HTTPS URL. Ten times: hibernate the machine, confirm it reports hibernated, then send one HTTPS request on a new connection from a client machine in the same datacenter. Median 156 ms until the app answered (104–213 ms); a warm request takes about 73 ms, so waking adds about 80 ms. The app's process ID was the same after every wake.

### New machine from a snapshot

A snapshot of that machine with the server running. Ten times: run `boxd new --from-snapshot`, then request the new machine's HTTPS URL until the app answers. Median 1.19 s from the create command to the app's first response (1.14–1.24 s). The first request succeeded every time; nothing was started after boot.

### CPU

The Node.js web tooling test from StarSling's open sandbox benchmark (Phoronix Test Suite 10.8.4, pts/node-web-tooling-1.0.1, Node 22.23.1, two passes per run), on a 4 vCPU machine. Three runs: 12.65, 12.86 and 12.19 runs/s. The other providers' numbers are from StarSling's own published leaderboard, which runs 4 vCPU / 8 GiB; boxd's 4 vCPU size has 16 GiB, which this test doesn't use.

### What these numbers don't include

Your own network distance. Every timing was taken from a client in the same Frankfurt datacenter; from the US, add your round trip on top. A larger app has more memory to bring back, so it takes longer than a small server.

## More comparisons

- [boxd vs E2B](https://boxd.sh/compare/e2b/index.md)
- [boxd vs Daytona](https://boxd.sh/compare/daytona/index.md)
- [boxd vs Modal](https://boxd.sh/compare/modal/index.md)
- [boxd vs Vercel Sandbox](https://boxd.sh/compare/vercel-sandbox/index.md)
- [boxd vs Blaxel](https://boxd.sh/compare/blaxel/index.md)
- [Moving off Runloop](https://boxd.sh/compare/runloop/index.md)
- [boxd vs exe.dev](https://boxd.sh/blog/boxd-vs-exe-dev/)
- [boxd vs sprites.dev](https://boxd.sh/blog/boxd-vs-sprites/)
- [All comparisons](https://boxd.sh/compare/index.md)
