boxkite
Compare · boxkite vs. E2B, Daytona & Modal

The agent sandbox that runs on infrastructure you control.

E2B, Modal, and (now) Daytona are hosted-first — your agents' code runs on someone else's servers. boxkite is the opposite bet: an open-source, batteries-included sandbox you self-host on your own Kubernetes, so data never leaves your cluster and there's no vendor to lock into.

Self-hostableruns entirely on your infrastructure
Open sourceMIT licensed
15 toolsbatteries-included, framework-agnostic
0network access by default
The comparison

Where boxkite wins, honestly

This matrix compares along the axis boxkite is actually built for: running the whole tool surface on infrastructure you own. Every boxkite cell reflects shipped code. The other three are hosted products — a "see vendor" cell means the capability isn't something you self-host, not a claim they lack it; check each vendor's site for their hosted equivalent.

boxkiteDaytonaE2BModal
Self-hostableYes — your own clusterNo — reportedly privatized (verify)No — hosted-firstNo — hosted-first
Open sourceYes — MITNo longer — core privatizedNoNo
Data stays in your infraYes — never leaves your clusterHosted platform — see vendorHosted platform — see vendorHosted platform — see vendor
Isolation modelK8s pod — container isolation, not microVMUnmaintained OSS — see vendorOwn hosted runtime — see vendorOwn hosted runtime — see vendor
Session start~0.9s p50 / ~1.3s p95 warm — measured on our APIsub-90ms — vendor-claimed<200ms — vendor-claimed~1s — vendor-claimed
Framework-agnostic tools15 tools incl. python_interpreter — no LangChain requiredNot the product focusNot the product focusNot the product focus
Git operationsOpt-in, 8-tool git setFull git porcelain as SDK methodsFirst-class SDK git methodsNo SDK helper — shell out via sandbox.exec
Long-running processesBackground start, stream, stdin, stopSessions, WebSocket streaming, interactive inputInteractive stream control incl. PTYexec() streams stdout/stdin, poll()/wait()
Secrets handlingEncrypted proxy-substitution brokerOrg-wide intercepting egress proxyEncrypted org secrets, outbound proxy substitutionPlain env-var injection, no proxy substitution
Preview URLsSigned URLs for sandbox portsStandard + signed variants, public/private togglePublic hostname per exposed portHTTPS tunnels per exposed port
Custom sandbox imagesOpt-in declarative builder (off by default)Fluent SDK, Dockerfile passthrough, build cacheCustom Docker-based templates, build cacheFluent Image API, Dockerfile support, layer cache
Filesystem snapshot/restoreSnapshot & restore session filesPersistent workspaces — snapshot specifics undocumentedFull memory+CPU snapshot (MicroVM)Volumes (explicit commit) + experimental memory snapshot
Human-facing GUI accessNo — headless only, by designFull desktop automation APIDesktop VNC/GUI + computer-use agentNot the product focus
Vendor lock-inNone — you own the stackHosted dependencyHosted dependencyHosted dependency
Deep, single-vendor comparisonsvs. E2B →vs. Daytona →vs. Modal →
Performance (measured)

Honest about the one axis we don't win

We won't pretend boxkite beats a microVM on raw cold start — it doesn't, and it's not trying to. E2B and Fly run Firecracker; that class of platform spins up in the low hundreds of milliseconds. boxkite's answer is a warm pool: a session is claimable in ~0.9s p50 / ~1.3s p95, measured against our own API — competitive with the gVisor class, and a deliberate trade for running the whole stack on infrastructure you own.

Warm session start

~0.9s p50 / ~1.3s p95

p50 877 ms · p95 1289 ms · n=10

In-sandbox exec

~0.4s

p50 419 ms · p95 509 ms · n=12

File operations

~0.4s

create/view/str_replace/grep, all ~0.4s p50 · n=6

Competitor cold start — vendor-claimed best-case (same-region / server-side provisioning, image cached, client round-trip excluded), each under its own methodology. boxkite's figures are full client-side round-trips over the internet, so read these as order-of-magnitude context, not a matched benchmark.
PlatformIsolationCold start (vendor-claimed)
E2BFirecracker microVM<200ms (same region; 80ms secure variant) e2b.dev
ModalgVisor~1s (boots in about one second) modal.com
Fly MachinesFirecracker microVMsubsecond fly.io
Daytonacontainer dev-envssub-90ms creation daytona.io

boxkite figures measured against our hosted API on 2026-07-21; sample size shown per metric, client-side wall-clock around each REST call, cluster warm and image cached. Competitor figures are each vendor's own published cold-start claim, not a head-to-head reproduction. Methodology: /blog/measuring-session-start-latency.

Nothing here is a novel isolation primitive — it's the complete tool surface, hardened and wired to a real K8s pod, that you run yourself.

When boxkite is the right call

Reach for a hosted platform like E2B or Modal when you want zero operational surface and are fine with agent code running on a third party's infrastructure. Reach for boxkite when compliance, data-residency, or cost control means the sandbox has to run inside your own cluster — and you still want a batteries-included bash/python/file/process tool surface on day one instead of building it over the next few weeks.

Already sold?

Two ways to run boxkite — same code

This isn't "the good version vs. the trial version." Both paths run identical control-plane/ code — pick the operational model that fits.

Self-host

The OSS repo, your cluster

docker compose for kicking the tires, or real Kubernetes for production. You run it on your own infrastructure, with full control over the isolation model — data never leaves your cluster.

MIT licensed: fully permissive, free to use, modify, and self-host for any purpose with no restriction.

Best for

  • Already running Kubernetes
  • Compliance requirements that prevent sending code to a third-party API
  • Wanting to inspect or modify the isolation model directly
Clone the repo on GitHub

Hosted API

The beta control-plane

Try boxkite without standing up Kubernetes yourself — the same control-plane/ code as the OSS repo, not a different product, running as a managed service.

Fair-use free tier: 20 sandbox-hours/month, 2 concurrent sandboxes. No billing yet.

Best for

  • Kicking the tires fast
  • Not wanting to operate Kubernetes at all
Create a free account →
The honest version

Both paths run identical code, so nothing here is "the good version vs. the trial version" — it's genuinely which operational model fits.

The hosted API isn't a crippled preview of the self-hosted product, and self-hosting isn't the "real" version with the hosted API as an afterthought. Pick self-hosting if you need your code to never leave your own infrastructure or you already operate Kubernetes; pick the hosted beta if you want to see boxkite work against a real API before deciding whether to run any of it yourself.