Modal vs Azure Container Apps Sandboxes
Modal gives you short-lived gVisor sandboxes on a big AI compute platform, with GPUs next to them and a 24-hour session limit. Azure gives each sandbox its own microVM inside your Azure account, with no session cap, that can suspend with its memory and wake on traffic.
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.
Azure Container Apps Sandboxes
Azure Container Apps Sandboxes is a service inside Microsoft Azure that gives each agent or user an isolated microVM you create, suspend and resume through an SDK.
It is part of Azure Container Apps, the hyperscaler's serverless container platform, and lives in your Azure subscription as a sandbox group resource. Each sandbox boots from an OCI image or a snapshot, has its own kernel, and can be suspended with its memory and resumed in under a second. It is built for teams already on Azure that want stateful code execution with Azure networking, identity and billing.
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 | Azure Container Apps Sandboxes: price rank | boat: price rank |
|---|---|---|---|
| Software factory 100 at once · 4 vCPU / 8 GB · 2,200 sessions of 8 h a month | Can't run it | 288th of 367, with limits $5,276 a month | 3rd cheapest of 367 $634 a month |
| Always-on AI employees 50 machines 24/7 · 2 vCPU / 4 GB An agent that runs all month hits Modal's 24-hour limit and pays Azure for every running second, while boat has no session cap on paid plans. | 196th of 366, with limits $1,924 a month | 302nd of 366, with limits $6,544 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 Both fit short code runs well: Modal for its fast starts and big bursts, Azure because a sandbox can suspend with its memory and resume in under a second. | 19th cheapest of 345 $181 a month | 34th cheapest of 345 $354 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; Azure suspends idle ones with their memory, Modal starts new ones fast, and boat gives each user a machine that stops for free and keeps its disk. | 11th cheapest of 361 $811 a month | 22nd cheapest of 361 $2,260 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 RL rollouts launch many short sandboxes at once, which is what Modal is built for, while Azure's default quota of 500 active cores caps a fleet until support raises it. | 5th cheapest of 360 $19,038 a month | 153rd of 360, with limits $10,740 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 | 75th cheapest of 364 $1,728 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 that builds Docker images needs Modal's VM runtime or an Azure image that ships Docker, like azure-dev; every boat sandbox runs Docker as is. | 126th cheapest of 377 $1,793 a month | 103rd cheapest of 377 $1,046 a month | 4th cheapest of 377 $86 a month |
| 24/7 dev boxes 1 machine 24/7 · 4 vCPU / 8 GB A dev box wants a disk that stays and a way in over SSH; Modal resets its root disk when a sandbox ends and Azure has no SSH, while boat has both. | 138th of 368, with limits $23 a month | 322nd of 368, with limits $262 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 Computer-use agents need a screen; neither Modal nor Azure ships a desktop, and boat streams a Linux desktop at 60fps in every sandbox. | 98th of 369, with limits $183 a month | 279th of 369, with limits $1,573 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 | 288th of 367, with limits $795 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 | 284th of 346, with limits $561 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 | 239th of 338, with limits $10,956 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 | 278th of 360, with limits $517 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 Modal has GPUs from T4 to B300; Azure's sandboxes and boat have none, so Modal is the pick for GPU 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 | Azure Container Apps Sandboxes | boat |
|---|---|---|---|
| Isolation | gVisor by default; VM runtime with its own kernel available | MicroVM per sandbox with its own kernel | Full VM with its own kernel on dedicated AMD Ryzen 9 9950X hosts |
| Docker inside | Only with the VM runtime | Depends on the image: azure-dev ships Docker on systemd; the default ubuntu image has only Buildah | Docker, systemd and root in every sandbox |
| Nested virtualization | VM runtime only, Team and Enterprise plans, on request | Not documented | Yes, /dev/kvm for Android emulators and VMs |
| Longest session | 24 hours (default 5 minutes) | No cap; runs until stopped or auto-suspended when idle | No cap on paid plans (default TTL 1 h, changeable) |
| Stop and resume | No paused state; a finished sandbox is gone, only Volumes keep files | Suspend with memory and disk; resume in under a second with processes running | Stop for free; disk saved every minute and on stop, resume boots the machine again |
| Snapshots and fork | Filesystem snapshots into images; memory snapshots in alpha end the sandbox and expire after 7 days | Snapshot a running sandbox with its memory and create new sandboxes from it | Fork a running sandbox with its disk, without stopping it |
| GPUs | T4 to B300; 10 at once on Starter, 50 on Team | None | None |
| Desktop, browser and computer use | Not offered; an example shows how to set up VNC yourself | Headless; no desktop or managed browser | Linux desktop streamed at 60fps, Chromium and computer-use tools preinstalled |
| Inbound access | Encrypted and raw TCP tunnels, connect tokens, inbound IP allowlist | Public HTTPS routes per published port; private endpoint from your VNet; no public IP | HTTPS URLs for up to 50 ports, token-protected by default, plus raw TCP and SSH |
| Outbound rules | Block all, IP-range allowlist, domain allowlist (beta) | Allow, deny, rewrite and header rules by host, path and method; VNet integration | Open internet, no provider-side allowlist |
| Coding agents and API keys | Examples only; secrets are environment variables, or you run your own proxy in a sidecar | Copilot CLI and Claude Code images run through the exec API; their tokens are injected into the sandbox | Seven agents preinstalled with a prompt, steer and events API; a credentials proxy keeps real keys outside |
| Fleet size | 100 containers on Starter, 5,000 on Team | 500 concurrent active cores by default; more by Azure support request | Concurrency set by plan, up to 2,000 sandboxes, self-serve |
| Regions | US, EU and Asia-Pacific; pinning a region costs 1.15x to 1.75x | 40 Azure regions on six continents | EU only: Germany, Finland, France |
| Account and access | Modal account, driven from Python, TypeScript or Go | Azure subscription and Microsoft Entra ID with the SandboxGroup Data Owner role | Sign in with GitHub, Google or an emailed code |
Every feature Battleships tracks (43)
| Feature | Modal | Azure Container Apps Sandboxes | boat |
|---|---|---|---|
| Full VM (own kernel) | No | Yes | Yes |
| Docker inside | No | Yes | Yes |
| Nested virtualization | No | No | Yes |
| Root | Yes | Yes | Yes |
| Systemd | Yes | Yes | 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 | 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 | No | Yes |
| MCP server | No | No | No |
| GPU | Yes | No | No |
| Windows | No | No | No |
| Arm64 | No | No | No |
| Self-hosting | No | No | No |
| BYOC | No | No | No |
| Open source | No | No | No |
| Scoped API keys | Not published | Not published | Yes |
| Spend limits | Not published | Yes | Yes |
| Usage per sandbox (API) | Not published | Yes | Yes |
| Audit logs | Yes | Yes | No |
| SSO | Yes | Yes | 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 StarSling hpc-sandbox-benchmarks run at 4 vCPU / 8 GB, Modal's default gVisor sandbox finished 12.79 Node.js build-and-test runs per second and boat finished 26.69, about twice the work. There is no comparable measurement for Azure Container Apps Sandboxes yet, so this page makes no speed claim about Azure.
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. Azure Container Apps Sandboxes 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 | Azure Container Apps Sandboxes, a month | boat, 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 | $68 · Pay-as-you-go | $20 · $20/mo |
| One agent that never stops 4 vCPU / 8 GB, 50 GB disk, running 24/7 all month | $178 · Starter · with limits | $262 · Pay-as-you-go · with limits | $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 | $3,421 · Pay-as-you-go | $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 | $989 · Pay-as-you-go | $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 | $2,148 · Pay-as-you-go | $2,000 · $2000/mo · with limits |
Modal: Modal bills by the second for whichever is higher, the CPU and memory you request or what you use, until the sandbox is terminated. Starter is free with $30 of monthly credit, Team is $250 a month with $100 of credit, and pinning a region multiplies the price by 1.15x to 1.75x.
Azure Container Apps Sandboxes: Azure bills per second on the Container Apps Consumption meters for the vCPU and memory of the sandbox's tier while it runs, including idle time before auto-suspend. There is no plan fee, a stopped sandbox pays no CPU or memory, and some regions charge more.
Azure Container Apps Sandboxes: boat charges one hourly rate per machine size, by the second, only while the sandbox runs. Plans start at $20 a month, the whole fee becomes usage credit, and a stopped sandbox costs nothing.
Limits in those scenarios
On Modal, a sandbox lives at most 24 hours and its root disk is wiped when it ends, so the workday, always-on and fleet scenarios keep only files in a Volume, and the 50-agent fleet does not fit because Docker needs the VM runtime. Azure fits the workday and fleet scenarios, but it bills every running second, so the always-on agent only gets close with a 3-year commitment, and 500 active cores cap a fleet by default. For 1,000 short jobs at once, Azure fits, while boat's plans queue the starts.
| Scenario | Modal | Azure Container Apps Sandboxes | boat |
|---|---|---|---|
| One coding agent, workdays |
| None that bite | None that bite |
| One agent that never stops |
|
| None that bite |
| 50 agents in parallel |
| None that bite | None that bite |
| Sandboxes for your users | None that bite | None that bite | None that bite |
| 1,000 short jobs at once |
| None that bite |
|
Which one should you use?
Use Modal when
your sandboxes need GPUs, or are huge bursts of short jobs that finish in minutes on a platform you already use for models.
- GPUs on the same platform. If your agent runs or trains models, Modal rents GPUs from T4 to B300 next to its sandboxes; Azure's sandboxes have none.
- Built for huge bursts. For many short jobs at once, Modal runs up to 5,000 containers on Team without a support request.
- Images from code. Teams that like code over config can build images in Python or pull any linux/amd64 registry image.
Use Azure Container Apps Sandboxes when
your team runs on Azure and wants stateful sandboxes that suspend with their memory, wake on traffic and sit behind strict egress rules.
- Suspend with memory. For stateful jobs that sleep between requests, a sandbox suspends with its memory and resumes in under a second.
- No session cap. A sandbox keeps running until you stop it or it goes idle, so long jobs are not cut off at 24 hours.
- Inside your Azure account. Teams already on Azure get Entra ID, Azure billing, VNets and fine-grained egress rules, in 40 regions.
Where boat fits
Modal and Azure both shine at short sandboxes: Modal for bursts next to GPUs, Azure for jobs that sleep with their memory. If your agents instead work for hours or days, installing, building, testing and checking their work on a screen, look at boat. Each sandbox is a whole computer that keeps its disk, stops for free and has no session cap on paid plans.
A whole computer with Docker and /dev/kvm
On Modal, Docker needs the VM runtime and nested virtualization is on request for Team plans; on Azure, Docker depends on the image and /dev/kvm is not documented. boat gives every sandbox root, systemd, Docker and /dev/kvm.
A screen and agents built in
Neither Modal nor Azure ships a desktop, so a computer-use agent needs you to build a display and streaming stack. boat has a 60fps desktop, Chromium and seven coding agents you drive from outside through one API.
Keys stay out, work stays in
Modal puts secrets in environment variables and Azure injects agent tokens at start, where a prompt-injected agent can read them. boat's credentials proxy keeps real keys outside, and the disk is saved every minute, unlike Modal's sandboxes that end within 24 hours.
Use boat when your agents work for hours or days and need a whole computer: SSH, Docker, emulators, a desktop and a browser, on a fast machine that keeps its disk. Compare it one to one: boat vs Modal and boat vs Azure Container Apps Sandboxes.
Questions people ask
Is Modal cheaper than Azure Container Apps Sandboxes?
Often, yes. One agent on workdays is $15 a month on Modal against $68 on Azure, and sandboxes for your users are $792 against $989. For 1,000 short jobs at once Azure costs less, $2,148 against $3,193. boat comes in at $20 and $200 for the first two.
Which is faster, Modal or Azure Container Apps Sandboxes?
Azure has no comparable CPU measurement yet, so we cannot say. Modal's default sandbox finished 12.79 runs per second in a public Node.js benchmark at 4 vCPU / 8 GB, and boat finished 26.69 in the same run.
Can Modal or Azure sandboxes run Docker?
Modal runs Docker only with its VM runtime, not in the default gVisor sandbox. On Azure it depends on the image: azure-dev ships Docker on systemd, while the default ubuntu image has only Buildah. Every boat sandbox runs Docker with no extra setting.
How long can a sandbox run on Modal and on Azure?
Modal sandboxes default to 5 minutes and stop at 24 hours at most. Azure documents no session cap: a sandbox runs until you stop it or it auto-suspends after being idle. boat has no session cap on paid plans.
Which one has GPUs?
Modal, with GPUs from T4 to B300 on its gVisor runtime. Azure Container Apps Sandboxes and boat are CPU machines.
Can I SSH into Modal or Azure sandboxes?
Azure gives you a shell through the aca CLI, the SDK or the portal, with no SSH. Modal offers raw TCP tunnels you can wire up yourself. Every boat sandbox has an SSH endpoint, so editors that connect over SSH just work.
Try boat
Install the CLI, then run boat new.
7-day free trial