Skip to main content

Daytona's Sub-90ms vs E2B's 150ms: Does Sandbox Cold Start Matter for AI Agent Loops?

11 min readDora NodaDora Noda
Share
On this page

Sixty milliseconds. That is the entire gap between the two fastest names in AI-agent sandboxes: Daytona markets sub-90-millisecond cold starts, with optimized configurations reportedly reaching 27ms, while E2B's Firecracker microVMs land at roughly 150ms. Sixty milliseconds is less than a single eye blink — and it is also, depending on how your agent uses sandboxes, either the most important number in your deploy-and-run loop or completely irrelevant noise next to model latency.

This post settles which one it is for you. Here are the verified numbers, side by side, before a single opinion:

DaytonaE2B
Isolation primitiveContainers (Docker-compatible; VM/Windows classes available)Firecracker microVMs, dedicated kernel per sandbox
Marketed cold startSub-90ms (create from snapshot); 27ms optimized configs~150ms
Compute price~$0.0504 / vCPU-hr, usage-based~$0.0504 / vCPU-hr + $0.0162 / GiB-hr, per-second wall-clock
SubscriptionNone (usage-only)$150/mo Pro unlocks 24h sessions, 100 concurrent sandboxes
Free tierUsage credit to start$100 one-time credit, 1h sessions, 20 concurrent
Pause / resumeStateful snapshots, Git-like fork and restoreFirst-class pause/resume with filesystem and memory intact (~1s resume)
GPU in sandboxYes (ephemeral)No
Funding signal$24M Series A, Feb 2026 (FirstMark-led)Market leader; powers Perplexity- and Manus-scale agent workloads

Two things should jump out. First, the per-vCPU price is identical — this contest is not about compute cost. Second, everything that differs (boot latency, isolation strength, session caps, subscription gates) traces back to one architectural fork: shared-kernel containers created from snapshots versus hardware-virtualized microVMs booted fresh. The rest of this post walks that fork to its conclusion: what the 60ms gap costs inside a real agent loop, which pricing shape fits a self-hosted platform, and what to copy if you run the machines yourself.

Why the gap exists: snapshot-create vs microVM boot

Daytona's sub-90ms number is a create-from-snapshot number. The sandbox is a container sharing the host kernel, and "booting" it mostly means restoring a previously captured filesystem state onto an already-running host — no kernel to initialize, no virtual devices to attach, no guest userspace to start from zero. Daytona's Git-like snapshot model (fork, branch, restore mid-execution) is the same machinery wearing a different hat: once sandbox state is cheap to capture, it is cheap to instantiate.

E2B's ~150ms is a microVM boot number. Every sandbox gets its own Firecracker guest kernel — the same virtualization technology AWS built for Lambda — which means a real boot sequence: kernel init, device model setup, guest agent handshake. That is the floor for hardware-level isolation. It cannot be snapshotted away without weakening exactly the guarantee Firecracker exists to provide, which is why E2B's pause/resume (~1s) is a separate, slower path that preserves running processes rather than a fast boot.

Neither vendor is sandbagging. The 60ms gap is the honest price of a kernel boundary:

  • Daytona's side of the trade: fastest possible start, plus GPU access and long-lived stateful workspaces — but containers share a kernel, so a kernel exploit in one tenant's sandbox is a host problem, and noisy-neighbor contention is a scheduling problem rather than a hardware-partitioning one.
  • E2B's side of the trade: each sandbox is a separate virtual machine with its own kernel, which is the strongest commodity isolation boundary short of separate physical hosts — but every cold boot pays for a kernel, GPU workloads are not on the menu, and long sessions live behind the Pro subscription.

For trusted code (your own CI jobs, your own agent running your own tools), the container model wins on every axis. For untrusted code — which is what AI-generated code is, almost by definition — the kernel boundary is doing real work. An agent that writes and executes arbitrary shell commands, installs arbitrary packages, and fetches arbitrary URLs is running an adversarial workload even when nobody is attacking you. That is the failure mode the 60ms buys protection against.

The math that matters: sandbox-per-tool-call vs once-per-session

Here is where the gap either multiplies or vanishes. Agents use sandboxes in two patterns, and the cold-start number means opposite things in each.

Pattern A: one sandbox per session. The agent creates a sandbox, then runs dozens of tool calls inside it — file writes, test runs, deploys. Boot latency is paid once. At 90ms vs 150ms, the difference is 60ms on a session that will burn minutes of model tokens and tool execution. Noise. Pick on isolation, pricing, and snapshot ergonomics instead.

Pattern B: one sandbox per tool call. The agent spins up a fresh sandbox for every execution — maximal isolation, no cross-call state leakage, trivially parallel. Now boot latency is paid per call, and the gap compounds linearly with task complexity:

Tool calls per taskDaytona @ 90msE2B @ 150msGap per task
5 (quick fix + test)0.45s0.75s0.3s
20 (typical feature task)1.8s3.0s1.2s
100 (long autonomous run)9.0s15.0s6.0s

Is 6 seconds on a 100-call run worth caring about? Only in context: a 100-call agent task typically spends minutes waiting on model inference — each reasoning step costs seconds of token generation before the tool call even fires. Against that denominator, even the worst-case 6-second gap is low single-digit percent of wall-clock time. The gap decides the roundtrip budget only in the narrow band where tool calls are tiny, numerous, and model-light — think a linter agent or a bulk file-transform loop, not a coding agent doing real work.

There is one more scenario where boot latency dominates: burst parallelism. An agent that forks 50 sandboxes to explore 50 candidate patches in parallel pays 50 boots up front before any work begins — 4.5s vs 7.5s of pure dead time. Daytona's snapshot-fork model was built for exactly this shape (branch, explore, keep the winner), and it is the workload where sub-90ms creation is a genuine capability advantage rather than a benchmark trophy.

The honest summary: for a deploy-from-chat platform, where the agent loop is model-heavy and each sandbox hosts a multi-step build-test-deploy sequence (Pattern A with occasional bursts), the 60ms gap is not the decision criterion. Isolation strength and pricing shape are. Which brings us to the money.

Two pricing shapes, neither built for owned capacity

Strip away the identical $0.0504/vCPU-hour compute rate and the two vendors diverge sharply on what money buys beyond seconds:

  • E2B gates capability behind subscription. Longer sessions (1h → 24h), higher concurrency (20 → 100 sandboxes), and custom CPU/RAM configs require the $150/month Pro tier — before a single compute-second is billed. For a hobbyist running one agent session at a time, the free tier suffices; the moment an agent fleet needs concurrency or long-horizon tasks, the subscription is the entry ticket. It is a classic SaaS shape: meter the usage, gate the features.
  • Daytona meters everything, gates nothing. There is no Pro tier to unlock — every feature is available on pure usage billing from the first sandbox. Heavy users pay more only because they consume more, never because they crossed a plan boundary. It is a cloud-infrastructure shape: the meter is the whole model.

Each shape encodes an assumption about the vendor's costs. E2B's subscription exists because Firecracker capacity has real fixed costs per tenant — control-plane overhead, warm pools, snapshot storage for pause/resume — that per-second billing alone under-recovers at low volumes. The $150/mo floor makes small-but-demanding tenants (long sessions, high concurrency) pay for the capacity posture they require. Daytona's usage-only model bets that container density and snapshot-based provisioning keep marginal cost low enough that the meter alone covers it, and that removing the plan boundary grows volume faster than gating grows ARPU.

Now put both shapes on infrastructure you own — a Hetzner fleet where the machines are a sunk monthly cost whether they idle or burn. Neither model transfers cleanly:

  • A subscription gate makes no sense when there is no vendor to pay; "Pro features" on your own cluster is just an internal quota policy wearing a price tag.
  • Pure usage metering still has value — not as revenue, but as attribution and fairness: per-tenant compute accounting, noisy-neighbor chargeback, autoscaling signals.

The self-hosted answer is the meter without the gate: track per-sandbox vCPU-seconds and memory-seconds the way both vendors do (the unit economics are already worked out for you — wall-clock, per-second granularity is the industry standard for a reason), but spend the "subscription" budget on capacity headroom instead of plan tiers. Your Pro tier is a warm pool.

What a self-hosted sandbox should actually copy

If you run the machines — say, a Cluster API-managed fleet on Hetzner where you control node images, the container runtime, and the scheduler — you get to unbundle the two vendors' tradeoffs instead of picking one. Here is the concrete shopping list:

  1. Copy E2B's isolation default for untrusted code. Agent-generated code is untrusted input; run it behind a kernel boundary. Firecracker on your own nodes is a solved problem (it is open source, it runs on bare metal, and projects from E2B's own Apache-2.0 infrastructure to Kata Containers prove the operational shape). Accept the ~150ms boot as the cost of the boundary — Section 3 showed it rarely decides a roundtrip.
  2. Copy Daytona's snapshot machinery for warm paths. The sub-90ms trick — create-from-snapshot instead of boot-from-scratch — works for microVMs too. Firecracker's own snapshot/restore support plus OCI-layer caching for filesystem state gets warm starts into the same territory for repeat workloads (same base image, same dependencies). E2B's 1-second pause/resume proves snapshotting a live microVM is production-viable; a self-hosted platform should treat snapshot-backed creation as the default path and cold boot as the fallback.
  3. Copy the usage meter, drop the subscription. Meter per-sandbox vCPU-seconds and GiB-seconds at per-second granularity for attribution, quotas, and autoscaling — but implement "Pro" as capacity policy (warm pools, per-tenant concurrency quotas, session TTLs) rather than a paywall. On owned hardware, the scarce resource is headroom, and headroom is managed with pools and limits, not plan tiers.
  4. Copy Daytona's GPU posture, not E2B's gap. E2B sandboxes have no GPU story; Daytona offers ephemeral GPU access. A self-hosted fleet with GPU-bearing nodes (scheduled via Dynamic Resource Allocation, now mature in Kubernetes 1.36+) can offer agent sandboxes with optional accelerator attachment from day one — the one axis where owning hardware beats both vendors' defaults.

The through-line: the vendors' numbers are not targets to beat, they are decomposed costs to reallocate. Daytona proved snapshot-create can hit sub-90ms; E2B proved a kernel boundary costs only ~150ms and that pause/resume is production-ready. On your own fleet, you can have the boundary and the snapshot path — the tradeoff was a product-packaging decision, not a law of physics.

The gap is real, small, and beside the point

Daytona's sub-90ms cold start is a genuine engineering achievement, and E2B's ~150ms is the honest price of a stronger isolation boundary — but for an AI agent's deploy-and-run loop, neither number is the decision. Model latency dominates wall-clock time in every realistic agent task; boot latency only decides outcomes in burst-parallel fan-out, where snapshot-fork is the real capability and milliseconds are its shadow. The decisions that actually shape a sandbox platform are isolation strength for untrusted code, snapshot ergonomics for long-horizon tasks, and a metering model that attributes cost without gating capability.

That last one is where self-hosting changes the game entirely: when the machines are yours, the $150 subscription tier dissolves into a capacity policy, and the per-second meter becomes an internal fairness tool rather than a bill. Build the kernel boundary, snapshot everything, meter honestly — and keep the 60ms in perspective.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. Agent-driven deploys on infrastructure you control is exactly the bet this post describes. Star the repo on GitHub or deploy your first app today.

Related articles

Give your agents a chain backend

Autonomous agents hit RPC endpoints very differently than people do. See what bex router handles on their behalf.

Read the agents guide