Modal vs Runloop
Modal gives you short-lived gVisor sandboxes on a big AI compute platform, with GPUs and regions around the world. Runloop gives each coding agent its own VM devbox with Docker, a desktop and agents built in, and it can suspend and wake.
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.
Runloop
Runloop is a US platform of sandboxes, called devboxes, for building, running and testing AI coding agents.
You get Linux devboxes built from Dockerfile-style blueprints, disk snapshots, HTTPS tunnels, agent gateways that hide API keys, and Axons, event streams that drive agents such as Claude Code. Each devbox runs in a micro-VM on Runloop's own bare-metal hypervisor, with a container layer inside. It is built for teams shipping coding agents, plus evaluation and RL fine-tuning work on the Enterprise plan.
- Compliance
- SOC 2 Type 2
- Architectures
- x86_64 and arm64 base blueprints
- Own-cloud deploy
- Deploy to VPC on AWS, GCP and Azure (Enterprise)
- Regions
- Not documented or selectable
- Company
- Runloop AI, Inc.
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 | Runloop: price rank | bochka: price rank |
|---|---|---|---|
| Software factory 100 at once · 4 vCPU / 8 GB · 2,200 sessions of 8 h a month Runloop fits a software factory with Docker and a desktop in each devbox; Modal's default sandbox has neither, and bochka has both with a disk kept on every plan. | Can't run it | 20th cheapest of 367 $8,152 a month | 3rd cheapest of 367 $634 a month |
| Always-on AI employees 50 machines 24/7 · 2 vCPU / 4 GB Modal's 24-hour sandbox limit makes always-on agents a compromise, while Runloop and bochka both let an agent keep running. | 196th of 366, with limits $1,924 a month | 32nd cheapest of 366 $10,194 a month | 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 For many short code runs Modal fits well at $181 vs $525 a month on Runloop, and bochka's start limits queue very large bursts. | 19th cheapest of 345 $181 a month | 44th cheapest of 345 $525 a month | 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 Both fit sandboxes for your users, with Modal at $811 vs $3,301 a month on Runloop; bochka fits at $209 because a stopped sandbox costs nothing. | 11th cheapest of 361 $811 a month | 26th cheapest of 361 $3,301 a month | 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 Runloop ranks 4th and Modal ranks 5th for RL rollouts: both launch big waves of short sandboxes, which bochka's start limits slow down. | 5th cheapest of 360 $19,038 a month | 4th cheapest of 360 $15,922 a month | 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 | 81st cheapest of 364 $2,562 a month | 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 run on Runloop's Docker-in-Docker blueprints and in every bochka sandbox, while Modal needs its VM runtime. | 126th cheapest of 377 $1,793 a month | 121st cheapest of 377 $1,554 a month | 4th cheapest of 377 $86 a month |
| 24/7 dev boxes 1 machine 24/7 · 4 vCPU / 8 GB | 138th of 368, with limits $23 a month | 113th cheapest of 368 $410 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 Runloop ships a desktop and a browser your agent can control; on Modal you set up VNC yourself, and bochka streams a 60fps desktop. | 98th of 369, with limits $183 a month | 39th cheapest of 369 $2,306 a month | 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 | 40th cheapest of 367 $1,153 a month | 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 | 68th cheapest of 346 $781 a month | 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 | 266th of 338, with limits $15,611 a month | 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 | 10th cheapest of 360 $770 a month | 2nd cheapest of 360 $200 a month |
| GPU eval jobs 10 at once · 8 vCPU / 32 GB · 500 sessions of 30 min a month Only Modal has GPUs here, from T4 to B300, so it is the pick for GPU eval jobs. | 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 | Runloop | bochka |
|---|---|---|---|
| Isolation | gVisor container by default; VM runtime with its own kernel available | Micro-VM on a custom hypervisor, with a container layer on top | Full VM with its own kernel, every sandbox, on dedicated AMD Ryzen 9 9950X hosts |
| Docker inside | Only with the VM runtime | Yes, on the Docker-in-Docker blueprints, as root | Yes, in every sandbox, with root and systemd |
| Nested virtualization | VM runtime only, Team and Enterprise plans, on request | Not documented | Yes: /dev/kvm, Android emulator, VMs inside |
| Desktop, browser, computer use | Not offered; an example shows how to set up VNC yourself | Desktop and browser your agent can control | 60fps desktop, Chromium and a computer-use API built in |
| Keeping files | No paused state; a finished sandbox is gone, only Volumes keep files | Disk kept through suspend (Pro plan) or disk snapshots; shutdown ends the devbox | Disk saved every minute and on stop, on every plan; resume with the same disk |
| Longest session | 24 hours (default 5 minutes) | Fixed lifetime 1 hour by default, 48 hours max; an idle policy replaces it with no documented cap | No cap on paid plans (default TTL 1 hour, changeable) |
| Idle sleep and wake | An idle timeout ends the sandbox | Suspend after idle, wake on an HTTP request to the tunnel (Pro) | No idle timer; stops on its TTL and stopped costs nothing |
| Snapshots and forks | Filesystem snapshots into images; memory snapshots in alpha | Disk snapshots that new devboxes start from | Fork a running sandbox without stopping it; named snapshots as templates |
| GPUs | T4 to B300; 10 at once on Starter, 50 on Team | None | None |
| Images and CPU architecture | Build images in code or pull any linux/amd64 registry image | Blueprints built from Dockerfiles, x86_64 and arm64 | Templates from named snapshots, x86_64 only, no Dockerfile builds |
| Outbound network rules | Block all, IP-range allowlist, domain allowlist (beta) | Hostname allowlist with wildcards, or block all | Open internet, no provider-side allowlist |
| Inbound networking | Encrypted and raw TCP tunnels, connect tokens, inbound IP allowlist | One HTTPS tunnel per devbox, SSH through a TLS proxy, no public IP | HTTPS URLs for up to 50 ports, token-protected by default, raw TCP, dedicated IPv6 or IPv4 |
| Coding agents and hidden keys | Examples only; secrets are environment variables, or you run your own proxy in a sidecar | Claude Code, Codex, OpenCode and others through Axons; agent gateways hide API keys | Claude Code, Codex and others preinstalled with a prompt, steer and events API; credentials proxy for any HTTPS API |
| Where it runs | US, EU and Asia-Pacific; pinning a region costs 1.15x to 1.75x | Regions not documented; deploy into your own AWS, GCP or Azure (Enterprise) | EU only (Germany, Finland, France), EU data residency |
Every feature Battleships tracks (43)
| Feature | Modal | Runloop | bochka |
|---|---|---|---|
| Full VM (own kernel) | No | Yes | Yes |
| Docker inside | No | Yes | Yes |
| Nested virtualization | No | No | Yes |
| Root | Yes | Yes | Yes |
| Systemd | Yes | Not published | Yes |
| Desktop GUI | No | Yes | Yes |
| Browser | No | Yes | Yes |
| Computer-use API | No | Yes | Yes |
| SSH | Yes | Yes | 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 | No | 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 | No | 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 | Yes | Yes |
| Agent harness API | No | Yes | Yes |
| MCP server | No | Yes | No |
| GPU | Yes | No | No |
| Windows | No | No | No |
| Arm64 | No | Yes | No |
| Self-hosting | No | No | No |
| BYOC | No | Yes | No |
| Open source | No | No | No |
| Scoped API keys | Not published | Yes | Yes |
| Spend limits | Not published | Not published | Yes |
| Usage per sandbox (API) | Not published | No | Yes |
| Audit logs | Yes | Not published | No |
| SSO | Yes | Yes | No |
| SOC 2 | Yes | Yes | No |
| HIPAA | Yes | Not published | No |
| EU data residency | Yes | No | Yes |
| Zero data retention | Not published | Not published | Yes |
Performance
All three ran the hpc-sandbox-benchmarks Node.js build-and-test loop at 4 vCPU / 8 GB in the same run on 29 September 2026. bochka scored 26.69 runs a second, Modal's default gVisor sandbox 12.79 and Runloop 8.29. That puts Modal about 1.5 times ahead of Runloop, and bochka about 2 times ahead of Modal and 3.2 times ahead of Runloop; the test measures CPU work only, not start time.
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.
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 | Runloop, 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 | $113 · Basic | $20 · $20/mo |
| One agent that never stops 4 vCPU / 8 GB, 50 GB disk, running 24/7 all month | $178 · Starter · with limits | $429 · Basic | $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 | $5,268 · Basic | $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 | $1,441 · Basic | $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 | $3,184 · Basic | $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 ends. Starter is free with $30 of monthly credit, Team is $250 a month with $100 of credit, and egress above the free allowance costs $0.04 per GiB.
Runloop: Runloop bills per second for the CPU and memory you allocate while a devbox starts, runs, suspends or resumes, and bills its disk for the devbox's whole life. Basic has no plan fee; Pro adds $250 a month that is not usage credit and unlocks suspend and resume.
Runloop: bochka charges one hourly rate per machine size, by the second, only while a sandbox runs. Plans start at $20 a month and the whole fee becomes usage credit; a stopped sandbox costs nothing and keeps its disk.
Limits in those scenarios
On Modal, a sandbox lives at most 24 hours and only files in a Volume survive, so the workday, always-on and fleet scenarios do not fully fit, and the 50-agent fleet also needs Docker, which only the VM runtime has. Modal's Team tier for 1,000 short jobs uses shared vCPUs that other tenants can slow down. Runloop fits all five scenarios, but it publishes no egress price, and keeping a devbox's disk while it sleeps needs Pro. bochka's limit is start rate: 1,000 jobs at once queue past its start limits.
| Scenario | Modal | Runloop | 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, must run in regions outside Europe, or are huge bursts of short jobs that finish in minutes.
- GPUs next to your sandboxes. Useful if your agent trains or runs models: Modal rents GPUs from T4 to B300 on the same platform as its sandboxes.
- Regions around the world. Modal runs in the US, EU and Asia-Pacific and lets you pin a sandbox to a region; Runloop documents no regions.
- Faster CPUs than Runloop. In the same benchmark at 4 vCPU / 8 GB, Modal's default sandbox ran 12.79 loops a second and Runloop 8.29.
Use Runloop when
you want a VM devbox with Docker, a desktop and agents ready, need hostname allowlists or arm64, or want devboxes inside your own cloud.
- A full agent computer out of the box. Each devbox is a VM with Docker, a desktop, a browser and coding agents ready, where Modal's default sandbox has none of these.
- Past the 24-hour mark. With an idle policy a devbox can keep running, and on Pro it suspends when idle and wakes on a request.
- arm64 and your own cloud. Runloop offers arm64 blueprints, and on Enterprise it can run devboxes inside your own AWS, GCP or Azure account.
Where bochka fits
If your agents work for hours or days on one project, look at bochka. Each sandbox is a full VM that keeps its disk on every plan, runs Docker and emulators, and ran faster on CPU than both Modal and Runloop. Pick Modal or Runloop instead for GPUs, regions outside Europe, or huge bursts of short jobs.
Work that survives the night
A Modal sandbox ends within 24 hours and wipes everything outside a Volume. A Runloop devbox is gone on shutdown unless you pay for Pro suspend or write snapshot code. bochka saves the disk every minute and has no session cap on paid plans.
A real kernel with /dev/kvm
Modal's default sandbox has no Docker, and nested virtualization needs the VM runtime on Team, on request. Runloop documents Docker-in-Docker but no /dev/kvm. On bochka, Android emulators, VMs and raw TCP servers just run.
Builds and tests finish sooner
bochka ran 26.69 loops a second, against 12.79 on Modal and 8.29 on Runloop. An agent waits about twice as long on Modal and about three times as long on Runloop for each install, build and test.
Use bochka when your agents work for hours or days: installs, builds, tests, Docker and emulators, on the fastest CPUs of the three, with files kept on every plan. Compare it one to one: bochka vs Modal and bochka vs Runloop.
Questions people ask
Is Modal cheaper than Runloop?
In our scenarios, yes, but Modal does not fit several of them. One always-on agent is $178 on Modal against $429 on Runloop, yet Modal stops at 24 hours. Sandboxes for your users fit on both, at $792 on Modal against $1,441 on Runloop; bochka is $200 there.
Which is faster, Modal or Runloop?
On the same Node.js build-and-test benchmark at 4 vCPU / 8 GB, Modal's default sandbox ran 12.79 loops a second and Runloop 8.29. bochka ran 26.69 in the same run.
Can Modal or Runloop run Docker?
Runloop runs Docker on its Docker-in-Docker blueprints. Modal runs Docker only on its VM runtime, not in the default gVisor sandbox. Every bochka sandbox runs Docker with no extra setting.
How long can a sandbox run on Modal and Runloop?
A Modal sandbox runs 5 minutes by default and 24 hours at most. A Runloop devbox has a fixed lifetime of 1 hour by default and 48 hours at most, but an idle policy replaces that cap. bochka has no session cap on paid plans.
Does Runloop have GPUs like Modal?
No. Runloop devboxes are CPU machines, and so are bochka sandboxes. Modal rents GPUs from T4 to B300 on its gVisor runtime.
Is bochka SOC 2 compliant?
SOC 2 is in progress. We're open about where we stand: live status at status.bochka.xyz and our data retention policy at docs.bochka.xyz/data-retention.
Try bochka
Install the CLI, then run bochka new.
Product preview