Your own cloud, starting with This Mac.
Cua Spaces runs sandboxes on computers you own or rent: this Mac, your other machines and the cloud accounts you connect. Here is how it compares with hosted sandbox services, with a source for every cell.
Checked 2026-10-24.
Free on this Mac; your cloud bills you directly Download
Hosted sandboxes, billed per second e2b.dev/pricing
Hosted sandboxes, billed per second daytona.io/pricing
Sandboxes on Modal's cloud modal.com/pricing
Vercel Sandbox, Workflows and AI SDK agents vercel.com/docs/sandbox
Sandboxes on Cloudflare (Containers) developers.cloudflare.com/sandbox
Free on this Mac; your cloud bills you directly Download
Hosted sandboxes, billed per second e2b.dev/pricing
Hosted sandboxes, billed per second daytona.io/pricing
Sandboxes on Modal's cloud modal.com/pricing
Vercel Sandbox, Workflows and AI SDK agents vercel.com/docs/sandbox
Sandboxes on Cloudflare (Containers) developers.cloudflare.com/sandbox
Free on this Mac; your cloud bills you directly Download
Hosted sandboxes, billed per second e2b.dev/pricing
Hosted sandboxes, billed per second daytona.io/pricing
Sandboxes on Modal's cloud modal.com/pricing
Vercel Sandbox, Workflows and AI SDK agents vercel.com/docs/sandbox
Sandboxes on Cloudflare (Containers) developers.cloudflare.com/sandbox
Where it runs
On your own machines or cloud account
Yes
This Mac by default, your other computers, or the AWS, Google Cloud, Hetzner or Modal account you connect. Source
Yes
Self-host on one Linux machine with E2B Embed; BYOC on AWS, Google Cloud or Azure is Enterprise only. Source
Yes
Bring your own compute: your runners in custom regions, under Daytona's control plane. Source
Runs on your laptop
Partial
The self-hosted stack needs a Linux machine with KVM; on a Mac it runs inside a Linux VM. Source
Regions
Wherever your machines are
This Mac, your other computers, or any region of a cloud you connect. Source
Sandboxes
Operating systems
Full desktop for computer use
Yes
A docs example runs a browser desktop over noVNC; not a packaged desktop. Source
Fork from a checkpoint
People and agents in one live session
Yes
Share a Space with your team as viewer or editor; each person gets a cursor. Sharing needs Teams. Source
Agents and jobs
Start a coding agent from the CLI
Agents from the SDK
Durable agents
Yes
Durable runs resume after a crash; persistent agents keep memory across Spaces. Needs the Cua Spaces app. Source
Scheduled jobs
Yes
Jobs on your machines with cua run; routines on persistent agents. No general cron. Source
MCP
Yes
cua mcp serves Spaces, sandbox and computer tools; sandboxes can call MCP servers. Source
Runs code written for other sandbox SDKs
Pricing
1 vCPU and 1 GiB, per sandbox-hour
$0/sandbox-hour on your own machines
In a cloud you connect, that cloud's own price. Source
$0.0950/sandbox-hour
$0.00003942 per core-second (a core is 2 vCPU) plus $0.00000667/GiB-second. Source
$0.1492/sandbox-hour
$0.128 per active CPU-hour plus $0.0212/GB-hour of memory, at full CPU use. Source
$0.0810/sandbox-hour
$0.000020 per active vCPU-second plus $0.0000025/GiB-second, after the $5 Workers Paid plan. Source
Worked out from each vendor's listed per-second or per-hour rates, before plan credits.
Plan fee
$0, or Pro at $18/month
Plans cover remote access through the relay; Teams is $30 per seat per month. Source
$0 or $150/month
Hobby is free with a one-time $100 credit; Pro is $150/month plus usage. Source
$0 or $250/month
Starter is free with $30/month of credit; Team is $250/month. Source
Free tier, or Pro credit
Hobby is free within quotas; on Pro, usage draws on the $20 monthly credit. Source
Billing step
Your cloud's own
No bill on your own machines; a connected cloud bills at its own step. Source
Limits
Longest single run
No limit on your machines
Cloud Spaces stop after 8 hours unless you set another limit. Source
Sandboxes at once
448 Spaces
Idle gVisor containers on one Mac Studio (M2 Max, 96 GB), 2026-10-25. Benchmark
Performance
Start time the vendor publishes
1–2 s
Modal's platform-wide claim for containers, not sandbox-specific. Vendor's figure
1–3 s
Cloudflare's figure for container cold starts; depends on image size. Vendor's figure
Each vendor's own figure, measured their way. Not a like-for-like race.
Create to first command, measured by Cua the same way
To be measured
To be measured
To be measured
Same method and day as the Cua run; the network paths differ, and each comparison page says how.
Licence
Licence
FSL-1.1-MIT (source-available)
The Spaces app and daemon. The CLI, SDK, Cua Driver and Lume are MIT. Source
AGPL-3.0 (last public release)
The core moved to a private codebase in June 2026. SDKs are Apache-2.0; the CLI is AGPL-3.0. Source
Apache-2.0 SDKs
Sandbox, Workflow and AI SDK are Apache-2.0; no licence is stated for the hosted platform. Source
Apache-2.0 and MIT SDKs
Sandbox SDK Apache-2.0, Agents SDK MIT, workerd Apache-2.0; no licence is stated for the hosted platform. Source
Side by side
Each product's own example from its docs. Code shown here runs as written once you have an account and key; where an example needs more than that, there is a line and the link instead.
Start a sandbox and run a command
Cua Spaces
# Install Cua Spaces from cua.ai/download
cua sb create linux --name dev
cua sb exec dev "uname -a"
cua sb rm -f devE2B
pip install e2b-code-interpreter python-dotenv
# main.py
from dotenv import load_dotenv
load_dotenv()
from e2b_code_interpreter import Sandbox
sbx = Sandbox.create() # Creates a persistent sandbox session
execution = sbx.run_code("print('hello world')") # Execute Python inside the sandbox
print(execution.logs)
files = sbx.files.list("/")
print(files)Daytona
pip install daytona
# Import the Daytona SDK
from daytona import Daytona, DaytonaConfig
# Define the configuration
config = DaytonaConfig(api_key="YOUR_API_KEY") # Replace with your API key
# Initialize the Daytona client
daytona = Daytona(config)
# Create the Sandbox instance
sandbox = daytona.create()
# Run code
response = sandbox.process.code_run('print("Hello World")')
print(response.result)From daytona.io/docs/en
Modal Sandboxes
# uv pip install modal
import modal
sb_app = modal.App.lookup("my-app", create_if_missing=True)
sb = modal.Sandbox.create(app=sb_app)
p = sb.exec("python", "-c", "print('hello')", timeout=3)
print(p.stdout.read())
sb.terminate()Assembled from modal.com/docs/guide/sandboxes
Vercel
npm install @vercel/sandbox dotenv @types/node tsx typescript
// index.ts
import { config } from 'dotenv';
config({ path: '.env.local' });
import { Sandbox } from '@vercel/sandbox';
async function main() {
const sandbox = await Sandbox.create();
const result = await sandbox.runCommand('echo', ['Hello from Vercel Sandbox!']);
console.log(await result.stdout());
}
main().catch(console.error);
// first: vercel link && vercel env pull (auth); run: pnpm tsx index.tsCloudflare
npm create cloudflare@latest -- sandbox-linux --category=hello-world --type=hello-world --lang=ts --no-deploy --no-git --no-agents
// wrangler.jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "sandbox-linux",
"main": "src/index.ts",
"compatibility_date": "2026-10-24",
"observability": { "enabled": true },
"upload_source_maps": true,
"containers": [{ "class_name": "MyContainer", "scheduling_policy": "durable_object" }],
"durable_objects": { "bindings": [{ "class_name": "MyContainer", "name": "MY_CONTAINER" }] },
"exports": { "MyContainer": { "type": "durable-object", "storage": "sqlite" } }
}
// src/index.ts
import { DurableObject } from "cloudflare:workers";
export class MyContainer extends DurableObject {
async exec(argv: string[]) {
const container = this.ctx.container;
if (!container) {
throw new Error("No container is configured");
}
if (!container.running) {
container.start({
image: "cloudflare/debian-trixie",
entrypoint: ["sleep", "infinity"],
enableInternet: false,
});
}
const process = await container.exec(argv);
const output = await process.output();
return {
stdout: new TextDecoder().decode(output.stdout),
exitCode: output.exitCode,
};
}
}
export default {
async fetch(request, env) {
const { argv } = await request.json();
const sandbox = env.MY_CONTAINER.getByName("sandbox");
return Response.json(await sandbox.exec(argv));
},
};Assembled from developers.cloudflare.com/sandbox/get-started/index
Start a durable agent
Cua Spaces
# Install Cua Spaces from cua.ai/download
cua sb create linux --name dev
cua agent create ada --harness claude-code --in local:dev --env-from-host ANTHROPIC_API_KEY
cua agent tell ada "what did you learn yesterday?"
# crash-resumable one-shot instead: cua agent run --durable --on auto claude-code "Fix the failing tests in /work"Assembled from cua.ai/docs/cua-cli/reference/cli/agents
E2B
import os
from e2b import Sandbox
sandbox = Sandbox.create("claude", envs={
"ANTHROPIC_API_KEY": os.environ["ANTHROPIC_API_KEY"],
})
result = sandbox.commands.run(
'claude --dangerously-skip-permissions -p "Create a hello world HTTP server in Go"',
)
print(result.stdout)
# Pause: filesystem + memory kept, no TTL (docs.e2b.dev/sandbox/persistence.md)
sandbox.pause()
# Resume later
sandbox.connect()Assembled from docs.e2b.dev/agents/claude-code
Daytona
Not supported: no durable agent runtime in Daytona's docs. Docs
Modal Sandboxes
No durable agent runtime: a sandbox lives up to 24 hours, and snapshots keep its files. Docs
Vercel
WorkflowAgent from @ai-sdk/workflow inside a 'use workflow' function; the docs' example needs tool steps defined elsewhere. Docs
Cloudflare
npm create cloudflare@latest -- --template cloudflare/agents-starterFrom developers.cloudflare.com/agents/getting-started/quick-start/
Fork N sandboxes
Cua Spaces
# Install Cua Spaces from cua.ai/download
cua sb create linux --name base
cua sb checkpoint base world
cua sb fork-many world --count 3E2B
from e2b import Sandbox
sandbox = Sandbox.create()
forks = sandbox.fork(count=3)
for fork in forks:
if isinstance(fork, Sandbox):
print('Forked sandbox:', fork.sandbox_id)Daytona
One Linux VM sandbox per sandbox.fork() call; containers can't fork. Docs
Modal Sandboxes
import modal
app = modal.App.lookup("sandbox-fork-example", create_if_missing=True)
sb = modal.Sandbox.create(app=app)
p = sb.exec("bash", "-c", "pip install numpy && echo 'setup done' > /status")
p.wait()
image = sb.snapshot_filesystem()
sb.terminate()
# Start multiple Sandboxes from the same snapshot
sb2 = modal.Sandbox.create(image=image, app=app)
sb3 = modal.Sandbox.create(image=image, app=app)
# Each fork starts from the snapshotted state
assert sb2.exec("cat", "/status").stdout.read().strip() == "setup done"
assert sb3.exec("cat", "/status").stdout.read().strip() == "setup done"Vercel
Sandbox.fork() starts one new sandbox from another sandbox's filesystem snapshot. Docs
Cloudflare
Container snapshots keep the filesystem only; restore one into each Durable Object you start. No fork-N call. Docs
Schedule a job
Cua Spaces
# Install Cua Spaces from cua.ai/download
cua sb create linux --name dev
cua agent create ada --harness claude-code --in local:dev --env-from-host ANTHROPIC_API_KEY
cua agent routine add ada --title "Inbox sweep" --prompt "Triage new issues" --every 60
cua agent routine add ada --title "Morning" --prompt "Plan the day" --daily 08:00
cua agent routine ls adaAssembled from cua.ai/docs/cua-cli/reference/cli/agents
E2B
Not supported: no scheduler in E2B's docs. Docs
Daytona
Not supported: no scheduler in Daytona's docs. Docs
Modal Sandboxes
# pip install modal
# heavy.py
import modal
app = modal.App()
# runs at 8 am (UTC) every Monday
@app.function(schedule=modal.Cron("0 8 * * 1"))
def perform_heavy_computation():
...
# deploy: modal deploy --name daily_heavy heavy.pyAssembled from modal.com/docs/guide/cron
Vercel
// vercel.json
{
"crons": [
{
"path": "/api/hello",
"schedule": "0 5 * * *"
}
]
}
// app/api/hello/route.ts
export function GET(request: Request) {
return new Response('Hello from Vercel!');
}Cloudflare
Workers Cron Triggers call a scheduled() handler; Agents can also call this.schedule(). Docs
Measured head to head
Runs of both products, measured the same way on the same day. Each page states where each side ran and its network path.
- Does a Cua Space start faster than an E2B sandbox?Cua Spaces (This Mac) 234.6 ms, E2B 299 ms; 2026-10-25
- Does a Cua Space start faster than a Modal Sandbox?Cua Spaces (This Mac) 234.6 ms, Modal Sandboxes 690.7 ms; 2026-10-25
- Does a Cua Space start faster than a Daytona sandbox?To be measured
- Does E2B SDK code run unchanged on Cua Spaces?To be measured
Sources
Every cell cites the vendor's own page, checked on the date shown. Unknown means no official page we found says it.
Where a vendor's own pages disagree with each other, neither number is shown.
Cua Spaces facts and examples are for Cua Spaces 0.15.0, which includes the cua 0.9.0 command line. The examples use that command line because the standalone cua 0.9.0 package is not on PyPI yet.
Prices per hour for 1 vCPU and 1 GiB are worked out from each vendor's listed rates. Plan credits and free tiers are not subtracted. Measured Cua numbers link to their benchmark page, with the method and raw data. Compare the clouds Spaces run on.
Checked 2026-10-24:
Cua Spaces
- cua.ai/docs/cua-cli/guides/mcp-server
- cua.ai/docs/cua-cli/quickstart
- cua.ai/docs/cua-cli/reference/cli/agents
- cua.ai/docs/cua-cli/reference/cli/pool
- cua.ai/docs/cua-cli/reference/cli/sandboxes
- cua.ai/docs/cua-sdk/guides/your-cloud
- cua.ai/docs/cua-sdk/reference/runtime-support
- cua.ai/docs/cua-sdk/reference/sandbox/fork-batch
- cua.ai/docs/cua-sdk/reference/spaces/agents
- cua.ai/docs/spaces/guides/durable-agents
- cua.ai/docs/spaces/guides/e2b-compat
- cua.ai/docs/spaces/guides/share-a-space
- cua.ai/docs/spaces/guides/teams
- github.com/trycua/cua/blob/cua-sdk-v0.9.0/LICENSE.md
E2B
- docs.e2b.dev/agents/claude-code.md
- docs.e2b.dev/billing.md
- docs.e2b.dev/byoc.md
- docs.e2b.dev/faq/eu-region.md
- docs.e2b.dev/llms.txt
- docs.e2b.dev/mcp-gateway.md
- docs.e2b.dev/quickstart.md
- docs.e2b.dev/sandbox.md
- docs.e2b.dev/sandbox/fork.md
- docs.e2b.dev/sandbox/persistence.md
- docs.e2b.dev/use-cases/computer-use.md
- e2b.dev/pricing
- github.com/e2b-dev/E2B/blob/main/LICENSE
- github.com/e2b-dev/runtime/blob/main/README.md
- github.com/e2b-dev/runtime/blob/main/embed/README.md
Daytona
- github.com/daytonaio/daytona/blob/main/README.md
- github.com/daytonaio/daytona/blob/v0.190.0/LICENSE
- daytona.io/docs/en.md
- daytona.io/docs/en/bring-your-own-compute.md
- daytona.io/docs/en/computer-use.md
- daytona.io/docs/en/limits.md
- daytona.io/docs/en/linux-sandboxes.md
- daytona.io/docs/en/macos-sandboxes.md
- daytona.io/docs/en/mcp.md
- daytona.io/docs/en/sandboxes.md
- daytona.io/docs/llms-full.txt
- daytona.io/docs/llms.txt
- daytona.io/pricing
Modal Sandboxes
- github.com/modal-labs/modal-client/blob/main/LICENSE
- modal.com/docs/examples/agent.md
- modal.com/docs/examples/computer_use_vnc.md
- modal.com/docs/guide/cron.md
- modal.com/docs/guide/region-selection.md
- modal.com/docs/guide/sandbox-networking.md
- modal.com/docs/guide/sandbox-snapshots.md
- modal.com/docs/guide/sandboxes.md
- modal.com/llms.txt
- modal.com/pricing
Vercel
- ai-sdk.dev/docs/agents/overview
- ai-sdk.dev/docs/agents/workflow-agent.md
- github.com/vercel/sandbox/blob/main/LICENSE
- vercel.com/docs/agent-harnesses.md
- vercel.com/docs/cron-jobs.md
- vercel.com/docs/cron-jobs/quickstart.md
- vercel.com/docs/llms.txt
- vercel.com/docs/sandbox.md
- vercel.com/docs/sandbox/concepts/regions.md
- vercel.com/docs/sandbox/quickstart.md
- vercel.com/docs/sandbox/sdk-reference.md
- vercel.com/docs/vercel-sandbox/pricing.md
- vercel.com/docs/workflows.md
Cloudflare
- developers.cloudflare.com/agents/getting-started/quick-start
- developers.cloudflare.com/agents/index.md
- developers.cloudflare.com/agents/runtime/execution/schedule-tasks
- developers.cloudflare.com/agents/tools/mcp/index.md
- developers.cloudflare.com/containers/concepts/architecture
- developers.cloudflare.com/containers/concepts/placement
- developers.cloudflare.com/containers/guides/local-dev
- developers.cloudflare.com/containers/guides/snapshots
- developers.cloudflare.com/containers/platform/limits
- developers.cloudflare.com/containers/pricing
- developers.cloudflare.com/sandbox/concepts/index.md
- developers.cloudflare.com/sandbox/concepts/lifetime
- developers.cloudflare.com/sandbox/get-started/index.md
- developers.cloudflare.com/sandbox/llms.txt
- developers.cloudflare.com/workers/configuration/cron-triggers
- developers.cloudflare.com/workers/platform/pricing
- github.com/cloudflare/agents/blob/main/LICENSE