Modal vs Unikraft Cloud
Modal runs short-lived gVisor sandboxes on a big AI compute platform with GPUs, billed per second and capped at 24 hours. Unikraft Cloud turns a Dockerfile into a tiny Firecracker microVM that sleeps when idle and wakes in milliseconds, sold as flat plans with a fixed pool of running capacity.
The companies and products
Modal
Modal is a serverless cloud for AI work: inference, training, batch jobs and sandboxed code, all driven from Python, TypeScript or Go code.
Modal Sandboxes are containers you create from code, run commands in, and then terminate. By default they run under gVisor, a user-space kernel from Google; since October 2026 you can also pick a VM runtime with its own Linux kernel for Docker and FUSE (Battleships tracks that as a separate card, Modal VM Sandboxes). It suits teams that already run models on Modal and want short-lived, scalable code execution next to their GPUs.
Unikraft Cloud
Unikraft Cloud is a microVM cloud from Unikraft Inc. that runs any Dockerfile-based workload as a minimal Linux microVM with millisecond cold starts and scale-to-zero.
Your Dockerfile becomes the VM image at build time, and each instance runs on a heavily customized Firecracker VMM, so it boots in milliseconds and can go into standby when no traffic arrives. It is a general compute platform built for dense, bursty work such as HTTP services, headless browsers and agent fleets, sold as flat self-serve plans plus Enterprise dedicated hosts, on-prem and bring your own cloud. It is not a dev machine you log into: instances are reached through services, the CLI and a sandbox plugin for commands and files.
Which use cases each one fits
For each use case, Battleships prices every sandbox provider on the same workload and sorts them from the cheapest monthly bill up. “19th cheapest of 345” means 18 of the other 344 providers run that workload, with every feature it needs, for less. “With limits” means the provider runs it but misses something, so it is listed after every full match. Open a use case for its whole ranking and what each provider misses.
| Use case and its workload | Modal: price rank | Unikraft Cloud: price rank | bochka: price rank |
|---|---|---|---|
| Software factory 100 at once · 4 vCPU / 8 GB · 2,200 sessions of 8 h a month | Can't run it | Can't run it | 3rd cheapest of 367 $634 a month |
| Always-on AI employees 50 machines 24/7 · 2 vCPU / 4 GB An agent that never stops hits Modal's 24-hour cap, and on Unikraft it shares the plan's small memory pool; bochka runs it with no session cap on paid plans. | 196th of 366, with limits $1,924 a month | Can't run it | 5th cheapest of 366 $657 a month |
| Code interpreter bursts 100 at once · 1 vCPU / 2 GB · 200,000 sessions of 1 min a month Short code runs fit Modal well, with fast starts and up to 5,000 containers on Team; Unikraft suits the shape too but self-serve plans stop at 24 running instances. | 19th cheapest of 345 $181 a month | Can't run it | 186th of 345, with limits $2,000 a month |
| Sandboxes for your users 300 at once · 2 vCPU / 4 GB · 30,000 sessions of 23 min a month Modal fits hundreds of user sandboxes on its Team plan; Unikraft Pro holds 5,000 sleeping instances but only 24 running ones, and bochka fits them on its own plans. | 11th cheapest of 361 $811 a month | Can't run it | Cheapest of 361 $209 a month |
| RL rollouts 1,000 at once · 2 vCPU / 4 GB · 1,000,000 sessions of 3 min a month RL rollouts launch many short sandboxes at once, which Modal is built for and which is far beyond Unikraft's self-serve pools. | 5th cheapest of 360 $19,038 a month | Can't run it | 34th of 360, with limits $2,000 a month |
| Agent evals 250 at once · 4 vCPU / 8 GB · 15,000 sessions of 20 min a month | 59th cheapest of 364 $1,244 a month | Can't run it | 10th cheapest of 364 $200 a month |
| CI runners 40 at once · 8 vCPU / 16 GB · 6,000 sessions of 12 min a month CI jobs that build Docker images need Modal's VM runtime and have no documented container runtime on Unikraft; every bochka sandbox runs Docker. | 126th cheapest of 377 $1,793 a month | Can't run it | 4th cheapest of 377 $86 a month |
| 24/7 dev boxes 1 machine 24/7 · 4 vCPU / 8 GB Both can keep a box around all month as a compromise: Modal resets files outside Volumes, and Unikraft has no SSH yet, so bochka fits this better. | 138th of 368, with limits $23 a month | 219th of 368, with limits $39 a month | 18th cheapest of 368 $26 a month |
| Computer-use agents 50 at once · 4 vCPU / 8 GB · 20,000 sessions of 15 min a month Neither Modal nor Unikraft ships a desktop, so you build your own; bochka streams a 60fps desktop with Chromium and a computer-use API. | 98th of 369, with limits $183 a month | Can't run it | 6th cheapest of 369 $200 a month |
| Browser-use agents 50 at once · 2 vCPU / 4 GB · 30,000 sessions of 10 min a month | 177th of 367, with limits $136 a month | Can't run it | 7th cheapest of 367 $200 a month |
| Scraping & bots (startup scale) 50 at once · 1 vCPU / 2 GB · 100,000 sessions of 3 min a month | 267th of 346, with limits $394 a month | Can't run it | 6th cheapest of 346 $90 a month |
| Mass scraping & bots (undetectable) 1,000 at once · 1 vCPU / 2 GB · 3,000,000 sessions of 2 min a month | 223rd of 338, with limits $8,795 a month | Can't run it | 71st of 338, with limits $1,800 a month |
| Parallel red teaming 200 at once · 2 vCPU / 4 GB · 5,000 sessions of 30 min a month | Can't run it | Can't run it | 2nd cheapest of 360 $200 a month |
| GPU eval jobs 10 at once · 8 vCPU / 32 GB · 500 sessions of 30 min a month Modal rents GPUs from T4 to B300 next to its sandboxes; Unikraft offers NVIDIA GPUs only on Enterprise, and bochka has none. | 19th cheapest of 98 $1,187 a month | Can't run it | Can't run it |
| macOS agents 5 at once · 4 vCPU / 8 GB · 1,000 sessions of 20 min a month | Can't run it | Can't run it | Can't run it |
Key features
| Feature | Modal | Unikraft Cloud | bochka |
|---|---|---|---|
| Isolation | gVisor by default; a VM runtime with its own kernel is also offered | Minimal Linux microVM on a customized Firecracker VMM | Full VM with its own kernel on dedicated AMD Ryzen 9 9950X hosts |
| Docker inside | Only with the VM runtime | The Dockerfile becomes the VM image; no container runtime inside documented | Yes, Docker, systemd and root in every sandbox |
| Nested virtualization | VM runtime only, Team and Enterprise plans, on request | Enterprise only, with a per-instance flag | Yes, /dev/kvm on every plan |
| Desktop, browser, computer use | Not offered; an example shows how to set up VNC yourself | None built in; you can run your own headless browser | 60fps desktop, Chromium and a computer-use API built in |
| Idle and wake | No paused state; an idle sandbox pays until it is terminated | Standby after 1 second idle by default, wakes on the next request in milliseconds | Stop for free with the disk saved; start again by API |
| Longest session | 24 hours (default 5 minutes) | No published maximum | No cap on paid plans |
| Files between sessions | Root disk is gone when a sandbox ends; only Volumes keep files | Volumes, and stateful standby keeps memory and caches | Whole disk saved every minute and on stop |
| Snapshots and fork | Filesystem snapshots into images; memory snapshots in alpha that end the sandbox | Checkpoint a running microVM with a pause of a few milliseconds and start new instances from it | Fork a running sandbox with its disk, without stopping it |
| Custom images | Build images in code or pull any linux/amd64 registry image | Any Dockerfile, built into the VM image | Named snapshots used as templates; no Dockerfile builds |
| GPUs | T4 to B300; 10 at once on Starter, 50 on Team | NVIDIA GPUs and vGPUs on Enterprise only | None |
| Running at once, self-serve | 100 containers on Starter, 5,000 on Team | 2, 8 or 24 running instances sharing a pool of 2 vCPU / 4 GiB, 8 vCPU / 8 GiB or 24 vCPU / 32 GiB | 100 to 2,000 sandboxes at once on paid plans, up to 16 vCPU / 32 GB each |
| Outbound network rules | Block all, IP-range allowlist, domain allowlist (beta) | Network shield, Enterprise only, limited access | Open internet, no provider-side allowlist |
| Coding agents and API keys | Examples only; secrets are environment variables or your own sidecar proxy | None preinstalled; secret injection is part of the Enterprise network shield | Seven agents preinstalled with a prompt API; credentials proxy for any HTTPS API on every plan |
| Regions | US, EU and Asia-Pacific; pinning a region costs 1.15x to 1.75x | Dallas, Frankfurt, San Francisco, Singapore and Washington DC; more on request | EU only: Germany, Finland, France |
Every feature Battleships tracks (43)
| Feature | Modal | Unikraft Cloud | bochka |
|---|---|---|---|
| Full VM (own kernel) | No | Yes | Yes |
| Docker inside | No | No | Yes |
| Nested virtualization | No | Yes | Yes |
| Root | Yes | Yes | Yes |
| Systemd | Yes | Not published | Yes |
| Desktop GUI | No | No | Yes |
| Browser | No | No | Yes |
| Computer-use API | No | No | Yes |
| SSH | Yes | No | Yes |
| Persistent disk | Yes | Yes | Yes |
| Pause/resume | No | Yes | Yes |
| Automatic snapshots | No | Yes | Yes |
| Fork/clone | Yes | Yes | Yes |
| Live fork (no pause) | No | Yes | Yes |
| Memory fork | Yes | Yes | No |
| Custom image (Docker or snapshot) | Yes | Yes | Yes |
| ≥24 h sessions | Yes | Yes | Yes |
| Idle auto-stop | Yes | Yes | No |
| Wake on request | No | Yes | No |
| HTTPS preview URLs | Yes | Yes | Yes |
| Raw TCP inbound | Yes | Not published | Yes |
| Public IPv4 | No | No | No |
| Egress allowlist | Yes | Yes | No |
| Secret proxy | No | Yes | Yes |
| Secret proxy for any API | No | Yes | Yes |
| Preinstalled agents | No | No | Yes |
| Agent harness API | No | No | Yes |
| MCP server | No | No | No |
| GPU | Yes | Yes | No |
| Windows | No | No | No |
| Arm64 | No | Yes | No |
| Self-hosting | No | Yes | No |
| BYOC | No | Yes | No |
| Open source | No | No | No |
| Scoped API keys | Not published | Not published | Yes |
| Spend limits | Not published | Not published | Yes |
| Usage per sandbox (API) | Not published | No | Yes |
| Audit logs | Yes | Yes | No |
| SSO | Yes | No | No |
| SOC 2 | Yes | Yes | No |
| HIPAA | Yes | Yes | No |
| EU data residency | Yes | Yes | Yes |
| Zero data retention | Not published | Not published | Yes |
Performance
In the same hpc-sandbox-benchmarks run at 4 vCPU / 8 GB, bochka finished 26.69 Node.js build-and-test runs per second and Modal's default gVisor sandbox finished 12.79, so bochka did about twice the work. Unikraft Cloud has no comparable measurement; its under 10 ms cold start is its own figure and measures start time, not CPU speed.
Node.js build-and-test loop at 4 vCPU / 8 GB, higher is better. Measured with the open hpc-sandbox-benchmarks suite. Modal measured on: Sandbox (gVisor), request = size, any region. Unikraft Cloud has no published run in this suite yet, so there is no like-for-like number to compare.
Pricing in five scenarios
Each bill is priced from the providers' public price lists by the open Battleships engine, with the cheapest plan that runs the scenario.
| Scenario | Modal, a month | Unikraft Cloud, a month | bochka, a month |
|---|---|---|---|
| One coding agent, workdays 4 vCPU / 8 GB, 50 GB disk, 8 hours a day, 22 days a month, files kept between days | $15 · Starter · with limits | $39 · Hobby | $20 · $20/mo |
| One agent that never stops 4 vCPU / 8 GB, 50 GB disk, running 24/7 all month | $178 · Starter · with limits | $39 · Hobby | $26 · $20/mo |
| 50 agents in parallel 50 machines of 4 vCPU / 8 GB at once, 8-hour sessions, 1,100 sessions a month, Docker inside | $2,229 · Starter · with limits | Can't run it | $317 · $20/mo × 3 seats |
| Sandboxes for your users 2 vCPU / 4 GB, 30,000 sessions of 10 minutes a month, up to 300 at once | $792 · Team | Can't run it | $200 · $100/mo × 2 seats |
| 1,000 short jobs at once 2 vCPU / 4 GB, 1,000 at once, 3 minutes each, 200,000 jobs a month | $3,193 · Team · with limits | Can't run it | $2,000 · $2000/mo · with limits |
Modal: Modal bills by the second for the higher of the CPU and memory you request or what you use, and an idle sandbox pays until it is terminated. Starter is free with $30 of monthly credit, and Team is $250 a month with $100 of credit.
Unikraft Cloud: Unikraft Cloud charges a flat monthly fee for a pool of running capacity: free for 2 vCPU / 4 GiB, $39 for 8 vCPU / 8 GiB, $199 for 24 vCPU / 32 GiB, with sleeping instances not counted. It publishes no per-hour, disk or egress rate, so anything bigger is an Enterprise quote.
Unikraft Cloud: bochka plans start at $20 a month and the whole fee is usage credit. You pay per second while a sandbox runs, and a stopped sandbox costs nothing and keeps its disk.
Limits in those scenarios
On Modal, a sandbox lives at most 24 hours and keeps files only in Volumes, and Docker needs the VM runtime, so the workday, always-on and 50-agent scenarios do not fully fit. On Unikraft, every running instance shares the plan's pool: Team's 8 GiB is filled by one 4 vCPU / 8 GB agent, so 50 agents, 300 user sandboxes or 1,000 jobs at once fit no self-serve plan. bochka fits all but the burst, where even its largest plan queues starts.
| Scenario | Modal | Unikraft Cloud | bochka |
|---|---|---|---|
| One coding agent, workdays |
|
| None that bite |
| One agent that never stops |
|
| None that bite |
| 50 agents in parallel |
|
| None that bite |
| Sandboxes for your users | None that bite |
| None that bite |
| 1,000 short jobs at once |
|
|
|
Which one should you use?
Use Modal when
your sandboxes need GPUs, run as huge bursts of short jobs, or need outbound rules and regions outside Europe without a sales call.
- GPUs on the same platform. For agents that train or run models, Modal rents GPUs from T4 to B300 next to its sandboxes on self-serve plans.
- Very large bursts, self-serve. For huge numbers of short jobs, Modal runs up to 5,000 containers on Team without a sales call.
- Outbound rules and per-second billing. Modal can block outbound traffic or allow only chosen domains, and bills by the second instead of a flat pool.
Use Unikraft Cloud when
you run many small services or headless browsers that sleep most of the time and must wake in milliseconds, or want on-prem or your own cloud under Enterprise.
- Millisecond wake and scale-to-zero. For services that sleep most of the time, Unikraft instances go into standby when idle and wake on the next request in milliseconds.
- Memory checkpoints of running VMs. Unikraft can checkpoint a running microVM with a pause of a few milliseconds and start new instances from it.
- No session clock and your own hardware. Unikraft publishes no session limit, and Enterprise adds dedicated hosts, on-prem or your own cloud.
Where bochka fits
If the sandboxes are for coding agents that work for hours, look at bochka. Modal ends a sandbox within 24 hours and Unikraft caps self-serve plans at small shared pools, while every bochka sandbox is a full VM with Docker, a desktop and a disk that is saved every minute.
A real machine with Docker and /dev/kvm
Agents run docker compose, databases and emulators. Modal needs its VM runtime for Docker and nested virtualization is on request on Team and up; Unikraft documents no container runtime and keeps nested virtualization for Enterprise.
Work that survives the night
Modal wipes the root disk when a sandbox ends, within 24 hours, so you write code to save files to a Volume. bochka saves the whole disk every minute, stops for free and has no session cap on paid plans.
Desktop, agents and keys built in
Neither ships a desktop or coding agents, so you build them into the image. bochka has a 60fps desktop, seven agents driven from outside, and a credentials proxy; on Unikraft secret injection is Enterprise only.
Use bochka when your agents need a whole machine for hours or days: Docker, /dev/kvm, a desktop, coding agents driven from outside, and a disk that is saved every minute. Compare it one to one: bochka vs Modal and bochka vs Unikraft Cloud.
Questions people ask
Is Modal cheaper than Unikraft Cloud?
For one agent on workdays, Modal is about $15 a month against $39 for the Unikraft Team pool, but Modal resets files outside Volumes between days. For one agent that never stops, Unikraft is $39 a month against $178 on Modal, which also caps sessions at 24 hours. For 50 agents or sandboxes for your users, no self-serve Unikraft plan is big enough.
Which is faster, Modal or Unikraft Cloud?
For CPU work, only Modal has a comparable measurement: 12.79 runs per second against bochka's 26.69 at 4 vCPU / 8 GB. For start time, Unikraft says its microVMs cold boot in under 10 ms and wake on the next request, which is its own figure.
Can Modal or Unikraft Cloud run Docker inside?
Modal runs Docker only with its VM runtime, not the default gVisor sandbox. Unikraft builds your Dockerfile into the VM image and documents no container runtime inside a running instance. Every bochka sandbox runs Docker and systemd.
How long can a sandbox run?
A Modal sandbox runs at most 24 hours, with a 5-minute default. Unikraft publishes no maximum, and idle instances go into standby. bochka has no session cap on paid plans.
Do Modal and Unikraft Cloud have GPUs?
Modal rents GPUs from T4 to B300 on its self-serve plans. Unikraft offers NVIDIA GPUs and vGPUs only on Enterprise. bochka has no GPUs.
Try bochka
Install the CLI, then run bochka new.
Product preview