|

Best Agent Sandboxes in 2026: Cold Start, Per-Second Pricing, and Network Policy Across E2B, Daytona, Modal, Cloudflare, and Vercel

Every agent that writes code wants someplace to run it. That “someplace” is now a product class with at the very least a dozen distributors, 4 incompatible billing fashions, and advertising pages that quote chilly begins measured below circumstances no person publishes.

This comparability fixes the items. It covers the 5 platforms most groups shortlist — E2B, Daytona, Modal Sandboxes, Cloudflare Sandbox SDK, and Vercel Sandbox — together with Runloop, Fly.io Sprites, and Northflank the place they modify the reply.

The 4 questions that truly determine this

Feature matrices for this class are principally noise. Four properties change structure, and the whole lot else is a choice:

  1. Cold begin below concurrency: An agent loop that creates a sandbox per software name pays this tax 1000’s of instances a day.
  2. Filesystem persistence between turns: Does flip 2 see the pip set up from flip 1, or does the agent rebuild its world?
  3. Egress coverage: Can the sandbox attain the web, are you able to flip that off, and can you alter your thoughts mid-session?
  4. Idle billing: Agents spend most of their wall-clock ready on a mannequin. Somebody is paying for these seconds.

1. Cold begin: what the numbers truly say

The vendor claims usually are not comparable to one another. Daytona’s pricing web page advertises sub-90ms sandbox creation. E2B is often cited at roughly 150ms. Modal advertises sub-second cold starts for pre-cached containers. None of those state concurrency, area, picture dimension, or whether or not the clock stops at API acknowledgment or at first executed command.

The most helpful public dataset is ComputeSDK’s sandbox leaderboard, which is open supply and runs on a schedule. It measures Time to Interactive (TTI): elapsed time from create() to the primary profitable command contained in the sandbox, 100 iterations per supplier, launched concurrently in a single burst, from a 4 vCPU host in Northern Virginia.

Results from the August 21, 2026 run:

Provider Median TTI P95 P99 Success fee
Vercel Sandbox 0.67s 1.04s 1.12s 100%
Modal 0.88s 1.00s 1.08s 100%
Runloop 0.89s 3.27s 3.50s 100%
E2B 1.61s 1.77s 1.81s 100%
Cloudflare 5.06s 6.04s 6.48s 100%
Daytona 0.27s 0.43s 0.44s 37%

Three issues in that desk matter greater than the rating.

  • Burst is just not the identical check as sequential: Daytona’s quickest revealed median is actual, and on an earlier provider-page run it created sandboxes at a 0.10s median when launched separately. On the August burst run it posted the quickest median in the sector and accomplished 37 of 100 makes an attempt. A median you solely attain on a 3rd of your calls is just not a latency quantity, it’s a capability quantity. Retry logic is just not non-obligatory on any of those platforms.
  • Tail latency is the quantity to design towards: Runloop’s median and Modal’s median are 10ms aside. Runloop’s P95 is 3.3x Modal’s. If your agent’s UX price range is one second, the median tells you nearly nothing.
  • Cloudflare is measuring a unique product: Sandbox SDK sits on Cloudflare Containers, which schedules a container occasion and boots a picture. That is architecturally a heavier operation than resuming a pre-warmed Firecracker VM, and 5s medians mirror it. Cloudflare’s personal GA post is candid concerning the form of the issue: booting a sandbox, cloning a repo, and working npm set up takes about 30 seconds, whereas restoring the identical setting from a backup takes about two.

Reproducing this your self

The activity value measuring is the one your agent runs, not echo howdy. A helpful harness runs the identical unit of labor in all places: set up pandas, learn a CSV, plot it, return a PNG. Time 4 checkpoints individually.

# checkpoints: t_create -> t_ready -> t_deps -> t_result
# run 100 iterations sequential, then 100 concurrent, report median/P95/P99
import time, statistics

def one_run(supplier):
    t0 = time.perf_counter()
    sbx = supplier.create()              # API acknowledged
    t1 = time.perf_counter()
    sbx.exec("python -c 'print(1)'")     # first command returns: TTI
    t2 = time.perf_counter()
    sbx.exec("pip set up pandas matplotlib")
    t3 = time.perf_counter()
    sbx.exec("python /work/plot.py")     # writes /work/out.png
    png = sbx.read_file("/work/out.png")
    t4 = time.perf_counter()
    sbx.kill()
    return dict(create=t1-t0, tti=t2-t0, deps=t3-t2, activity=t4-t3, bytes=len(png))

Report tti and activity individually. Vendors optimize the primary and readers care concerning the second. Pin the area, pin the picture, and publish each the sequential and the concurrent sequence, as a result of they reply totally different questions.

2. Per-second pricing, normalized

Published charges as of August 27, 2026, transformed to a standard unit. Modal costs per bodily core, which it defines as 2 vCPU, so the vCPU-equivalent is proven for comparability.

Platform CPU Memory Billing foundation Plan ground
E2B $0.0504 / vCPU-hr $0.0162 / GiB-hr Wall-clock, per second Free Hobby; $150/mo Pro
Daytona $0.0504 / vCPU-hr $0.0162 / GiB-hr Wall-clock, per second None; $200 credit score
Modal Sandbox $0.1419 / core-hr (~$0.0710 / vCPU-hr) $0.0240 / GiB-hr max(request, precise), per second Free Starter; $250/mo Team
Vercel Sandbox $0.128 / vCPU-hr lively CPU solely $0.0212 / GB-hr provisioned Split: CPU lively, reminiscence wall-clock Hobby allotment; Pro credit score
Cloudflare Sandbox $0.072 / vCPU-hr lively CPU solely $0.009 / GiB-hr provisioned Active CPU + provisioned reminiscence/disk $5/mo Workers Paid
Fly.io Sprites $0.07 / CPU-hr $0.04375 / GB-hr Active use solely; sleeps when idle Subscription tiers
Runloop $0.108 / CPU-hr $0.0252 / GB-hr Running state; suspended is storage-only Free Basic; $250/mo Pro
Northflank $0.01667 / vCPU-hr $0.00833 / GB-hr Allocated assets, per second Free Sandbox tier

Two footnotes that folks get incorrect.

  • Modal’s sandbox tier is roughly 3x its commonplace Function fee ($0.00003942 vs $0.0000131 per core-second), and region selection adds 1.5–1.75x on high. Sandbox pricing is just not Modal’s headline compute pricing.
  • Daytona’s GPU charges are broadly reproduced at $3.95/hr for an H100. Its live pricing page lists on-demand H100 at $2.27/hr and H200 at $2.61/hr. Third-party comparability tables in this class go stale inside 1 / 4.

3. Cost per 1,000 executions

Rates usually are not prices. The mannequin under fixes the workload and runs it by every fee card.

Assumptions: 2 vCPU / 4 GiB sandbox, 1,000 executions, no plan ground included, no egress, default area (Vercel iad1, Cloudflare standard-3 at 2 vCPU / 8 GiB / 16 GB disk since occasion sizes are fastened).

Scenario A: brief burst — 90s alive, 50% common CPU

Platform Cost / 1,000 Composition
Northflank $1.67 $0.83 CPU + $0.83 reminiscence
Cloudflare $3.70 $1.80 CPU + $1.80 reminiscence + $0.10 disk
E2B / Daytona $4.14 $2.52 CPU + $1.62 reminiscence
Vercel $5.32 $3.20 lively CPU + $2.12 reminiscence
Modal $5.95 $3.55 CPU + $2.40 reminiscence
Fly Sprites $7.88 $3.50 CPU + $4.38 reminiscence
Runloop $7.92 $5.40 CPU + $2.52 reminiscence

Scenario B: idle-heavy — 10 min alive, 5% common CPU

This is what an actual agent loop seems to be like. The sandbox is open, the mannequin is pondering, nothing is working.

Platform Cost / 1,000 Change vs A
Northflank $11.11 6.7x
Cloudflare $13.87 3.7x
Vercel $16.27 3.1x
E2B / Daytona $27.60 6.7x
Modal $39.66 6.7x
Fly Sprites (saved awake) $52.50 6.7x
Runloop (saved working) $52.80 6.7x

Vercel strikes from 4th-cheapest to third, and its CPU line drops from $3.20 to $2.13 whereas everybody else’s scales linearly. Cloudflare’s active-CPU line falls to $1.20. That is all the argument for active-CPU billing, and it’s value roughly 2x on this workload.

Scenario B with droop

The platforms that lose Scenario B can win it again, in case your orchestration suspends between turns as an alternative of holding the field open. Same workload, 30s awake per execution:

Platform Cost / 1,000 Mechanism
E2B (auto-pause) ~$2.16 Pause prices ~4s per GiB of RAM, resume ~1s (docs)
Fly Sprites $2.62 Idle monitor sleeps the sprite inside seconds
Runloop $2.64 Suspend stops compute billing; storage continues

E2B’s quantity contains ~17s of pause and resume overhead for a 4 GiB sandbox. That overhead is the deciding variable: pausing is just economical when the hole between turns is meaningfully longer than the pause itself.

Fly’s idle detector is particular about what counts as exercise: an in-flight HTTP or API request, output to a session’s stdout, an open TCP connection, or an lively activity (sprites.dev). An agent that holds a connection open whereas it waits is an agent that’s billed. Redirecting output to a file doesn’t depend, which is an actual lever.

4. Filesystem persistence between turns

This is the place the platforms diverge most, and the place the incorrect selection reveals up as a rebuilt node_modules on each flip.

Platform Default on cease/idle Memory state Mechanism
E2B onTimeout defaults to kill Pause preserves RAM and working processes pause() / connect(), paused packing containers saved indefinitely
Daytona Persistent by default; auto-stop 15 min (containers), auto-pause 60 min (VMs) VM sandboxes solely, by way of pause/resume Stop, archive, pause, fork, volumes
Modal Terminated at timeout (default 5 min, max 24h) Memory snapshots, 7-day expiry Filesystem snapshots are Images, 30-day default TTL
Cloudflare Sleeps after 10 min; disk resets to picture No createBackup() / restoreBackup(), R2 mounts, snapshots rolling out
Vercel Persistent sandboxes snapshot the filesystem on cease No Snapshots, 30-day default expiry, $0.08/GB-mo
Runloop Suspend preserves state Yes, by way of droop/resume Suspend/resume and snapshot branching; Pro plan solely
Fly Sprites 100 GB root filesystem persists indefinitely Checkpoint/restore Object-storage-backed disk, no container picture

Three particulars value internalizing:

  • E2B’s default kills your work: onTimeout is kill except you set lifecycle: { onTimeout: 'pause' } at creation. The killed state is terminal, and the docs describe no shutdown sign earlier than termination. Treat unsaved work as misplaced.
  • Cloudflare’s disk is ephemeral throughout sleep: Container docs state plainly {that a} sleeping occasion restarts with a contemporary disk from its picture. Backup and restore to R2 works at the moment; the automated persistAcrossPeriods disk snapshot introduced at GA was nonetheless rolling out on the time of writing.
  • Daytona splits persistence by sandbox class: Container sandboxes protect the filesystem throughout cease/begin however don’t help pause, so reminiscence is cleared each time. Linux VM sandboxes help each. GPU sandboxes are ephemeral and are deleted on cease; outcomes need to be written to a quantity.

5. Egress coverage

Every platform in this comparability can now run a sandbox with no web entry. The variations are in priority, granularity, and whether or not coverage can change and not using a restart.

Platform Default Block all Allowlist Change at runtime
E2B Open egress enableInternetAccess: false Domains, IPs, CIDRs; wildcards Yes, replaceNetwork() replaces the entire coverage
Daytona Tier-dependent communityBlockAll domainAllowList (20 max), networkAllowList (10 CIDRs, IPv4 solely) Yes, Tier 3/4 solely
Modal Open egress, no inbound block_network=True outbound_cidr_allowlist, outbound_domain_allowlist (beta) Alpha, and provided that allowlists have been set at create
Cloudflare Open egress allowInternet = false allowedHosts / deniedHosts, glob patterns Yes, handlers and host guidelines apply stay
Vercel allow-all deny-all, together with DNS Domains by way of SNI, plus IP/CIDR fallback Yes, with out restarting
Runloop Network insurance policies per devbox Yes Yes Documented per devbox

The priority lure

E2B and Vercel resolve conflicts in reverse instructions. In E2B, allow rules take precedence over deny rules: an IP in each lists is allowed. In Vercel Sandbox, denied ranges override allowed ranges. A coverage ported from one to the opposite with out rewriting it doesn’t imply the identical factor.

The failure-mode lure

E2B paperwork that blocked TCP connections can look profitable from contained in the sandbox. The firewall accepts the connection earlier than deciding whether or not the vacation spot is allowed, so a socket opens and no packets arrive. Verify egress with an application-level response — an HTTP standing, a TLS handshake — not with a profitable join(). Any check suite that asserts “community is blocked” by checking for a connection error will cross towards an unblocked sandbox.

Credential injection is the true differentiator

Blocking egress is desk stakes. Letting a sandbox make an authenticated name with out ever holding the credential is just not.

Cloudflare runs outbound handlers in the Workers runtime, outdoors the sandbox, with entry to Workers bindings. The sandbox points a plain request, the handler attaches the key, and ctx.containerId scopes credentials per occasion (docs). Vercel brokers credentials on egress with matchers scoped by path, methodology, question string, or headers, and states the firewall runs on the host outdoors the microVM the place sandbox code can’t disable it (Vercel). E2B ships per-host request transforms in public beta that inject headers on the egress proxy, together with workload-identity tokens the sandbox by no means sees. Runloop gives a Credential Gateway with opaque token injection.

For brokers processing untrusted enter, this design issues greater than chilly begin. A prompt-injected agent with a GitHub token in its setting is a unique incident from one that may solely attain GitHub by a proxy holding the token.

6. Isolation, limits, and the superb print

Platform Isolation Max session Concurrency GPU in sandbox Self-host / BYOC
E2B Firecracker microVM 1h Hobby, 24h Pro; resets after pause 20 Hobby, 100 Pro, as much as 1,100 No Apache-2.0 infra repo, Terraform + Nomad + Consul
Daytona Containers, plus VM and Windows courses Configurable, wall-clock TTL non-obligatory Tier-based Yes (ephemeral) BYOC, enterprise
Modal gVisor 5 min default, 24h max 100 Starter, 5,000 Team Yes, full fee card No
Cloudflare Containers on Workers Sleeps at 10 min idle, keepAlive out there 15,000 lite, 1,000+ standard-2 No No
Vercel Firecracker microVM 45 min Hobby, 24h Pro 10 Hobby, 10,000 Pro No AWS BYOC in non-public beta
Runloop microVM Suspend/resume 10,000 demonstrated No VPC deployment
Fly Sprites Firecracker microVM Persistent Subscription tiers No No
Northflank microVM (Kata, Firecracker, gVisor) Persistent or ephemeral Platform-level Yes Self-serve BYOC

7. How to decide on

  • Pick Vercel Sandbox in case your agent waits on fashions greater than it computes, and you need the most affordable measured burst chilly begin in this set. Active-CPU billing is value roughly 2x on idle-heavy loops, the egress firewall with credential brokering is now out there on each plan, and the 0.67s median with a 1.12s P99 was the tightest distribution in the August run.
  • Pick E2B in case you want per-session kernel isolation for adversarial code, need memory-state persistence throughout turns, or want a self-host path. Set onTimeout: 'pause' on day one. Budget for the $150/mo Pro ground as quickly as you exceed 20 concurrent sandboxes or 1-hour classes.
  • Pick Daytona if persistence is the product and you may take up capability variance. The cease/archive/pause/fork lifecycle is essentially the most developed in the class, forking a stay VM with reminiscence intact has no clear equal elsewhere, and the compute fee matches E2B and not using a subscription ground.
  • Pick Modal if any a part of the agent’s work touches a GPU. It is the one platform right here with a full GPU fee card contained in the sandbox, T4 by B300. Price the 3x sandbox multiplier and regional multipliers earlier than you commit.
  • Pick Cloudflare Sandbox in case your app already lives on Workers and your egress safety mannequin issues greater than your chilly begin. Programmable egress handlers working outdoors the sandbox with binding entry are genuinely differentiated. Five-second burst medians usually are not, so maintain sandboxes open per session somewhat than creating one per software name, and plan for disk that resets on sleep.
  • Pick Runloop if you’re constructing a coding agent and want SWE-Bench-style analysis in the identical platform. Note that droop/resume, the function that fixes its idle economics, is gated behind the $250/mo Pro plan.
  • Pick Fly Sprites if you need a persistent laptop per consumer somewhat than a disposable one per name, and Northflank in case you want the bottom revealed fee, GPU help, and self-serve BYOC in one platform.

Key Takeaways

  • Measured burst chilly begin spreads 7x throughout suppliers: Vercel 0.67s, Modal 0.88s, E2B 1.61s, Cloudflare 5.06s.
  • Vendor "sub-90ms" and "~150ms" claims describe sequential creates, not the concurrent bursts brokers truly generate.
  • Billing mannequin beats headline fee: the most affordable supplier flips relying on how lengthy your sandbox sits idle.
  • Only Vercel and Cloudflare invoice CPU on lively use; E2B, Daytona, Modal and Runloop invoice wall-clock whereas the field is alive.
  • Every platform right here can now deny egress by default, however enable/deny priority and TCP failure conduct differ in ways in which break assumptions.


Sources: E2B pricing, E2B persistence, E2B internet access, Daytona pricing, Daytona persistence, Daytona network limits, Daytona billing, Modal pricing, Modal sandbox networking, Modal sandbox resources, Modal sandbox snapshots, Cloudflare Containers pricing, Cloudflare outbound traffic, Cloudflare Sandboxes GA, Vercel Sandbox pricing, Vercel Sandbox firewall, Runloop pricing, Sprites and Northflank pricing

The submit Best Agent Sandboxes in 2026: Cold Start, Per-Second Pricing, and Network Policy Across E2B, Daytona, Modal, Cloudflare, and Vercel appeared first on MarkTechPost.

Similar Posts