Compare · Sandboxes

Sandal vs Vercel Sandbox

Vercel Sandbox runs untrusted code in Firecracker microVMs and fits naturally into a Vercel project, with OIDC that just works when the app is hosted there. Sandal is the provider-independent version of the same isolation: credentials that work from CI, local and cloud, a far lower published rate, and the other machines an agent needs behind one SDK.

$ / hr · 4 vCPU 8 GiB
0.660Vercel Sandbox0.036Sandal
Paused sandbox
SnapshotVercel Sandbox$0Sandal
Works outside Vercel
TokenVercel SandboxAnywhereSandal
Surfaces on one SDK
LinuxVercel SandboxLinux · CI · mobileSandal
The honest split

Two good answers. Here is which one is yours.

Pick Vercel Sandbox if
  • Your app is deployed on Vercel and automatic OIDC beats managing another credential.
  • You want sandbox observability and billing inside the Vercel project you already pay for.
  • Ephemeral execution on Vercel-supported runtimes or OCI images is all you need.
Pick Sandal if
  • You need the same API to also give the agent a CI runner, a desktop, or an iOS simulator.
  • Agents idle between turns and you refuse to pay wall-clock for a machine that is thinking.
  • Untrusted code needs its own kernel, default-deny egress and a key that dies with the machine.

Many teams run both. runs-on is per job and a sandbox is per task; nothing here is all or nothing.

Side by side

What each one actually ships.

Documented capability as of August 2026. Where the honest answer is a qualifier rather than yes or no, the qualifier is printed. Scroll sideways on a small screen.

Vercel Sandbox compared with Sandal, August 2026
AreaVercel SandboxSandalWhy it matters
Runtime
StateFilesystem snapshots and persistent named sandboxes restore state across sessions.Pause to $0 with memory intact, snapshots, and copy-on-write forks.Restoring a snapshot is a new machine; resuming a pause is the same one.
Isolation
RuntimeFirecracker microVMs on Vercel infrastructure, from Amazon Linux or an OCI image.Firecracker microVM with its own kernel; bring your own image or start from a template.Same isolation lineage. The comparison is about everything around it.
Pricing
BillingPer second while the sandbox runs, at the Vercel rate.Per second while the machine runs; paused costs nothing.Two per-second meters, one of them 18× the other for the same shape.
Surfaces
Platform scopeClosely integrated with the Vercel application platform.A standalone runtime: Linux, Windows and macOS machines, CI runners, iOS and Android simulators, Xcode builds.Coupling is a feature until you need a machine Vercel does not sell.
Developer experience
AuthenticationVercel OIDC, automatic for Vercel-hosted apps; a token elsewhere.One API key that works from local agents, CI, desktop and cloud.Agents run in a lot of places that are not a Vercel deployment.
SDKsTypeScript.TypeScript and Python, CLI, REST, MCP.Python agent stacks need a client too.
Sources · reviewed August 2026

Capabilities change and rates change. If something here is out of date, tell us and we will fix it the same week.

Price

Same shape. Two meters.

Published rates, August 2026, same instance shape. Vercel meters per second while the sandbox runs; Sandal bills per second while the sandbox runs and a paused sandbox costs nothing.

Vercel Sandbox4 vCPU / 8 GiB
0.660$ / hour
Sandal4 vCPU / 8 GiB · paused = $0
0.036$ / hour
$0.00$4.44$8.87$13$180h6h12h18h24hAGENT WORKING · 5.8 H OF 24Vercel Sandbox $16Sandal $0.21

One agent day on the published rates for the same shape: 5.8 hours of work in six bursts. Vercel snapshots and restores rather than exposing a pause verb; the model keeps the sandbox alive between turns.

Migration

Same shape, native SDK.

The lifecycle maps one to one, create, exec, files, stop, so the port is a small rewrite, not a re-architecture. Keep the vendor-specific glue on your side of the boundary.

agent.ts−1 +1same shape, native SDK
-import { Sandbox } from "@vercel/sandbox";
+import { Sandal } from "@sandal/sdk";
+const sandal = new Sandal({ apiKey: process.env.SANDAL_API_KEY });
-const sbx = await Sandbox.create({ runtime: "node22" });
-await sbx.runCommand("pnpm", ["test"]);
+const sbx = await sandal.sandboxes.create({ template: "node-22" });
+await sbx.exec("pnpm test");
await sbx.stop();
  1. 01≈ 2 min

    Install the SDK

    npm install @sandal/sdk and set one API key. It works from CI, local and cloud alike.

  2. 02≈ 30 min

    Port the lifecycle

    create, exec, files and stop map one to one. Vercel OIDC and project bindings are replaced at the application boundary.

  3. 03≈ 1 afternoon

    Run both, side by side

    Same job on each vendor for a day; compare start time, exit codes and the bill.

Where Vercel Sandbox is ahead

What we would rather you read here than find later.

A comparison page where the vendor wins every row is a brochure. These are real, and we would rather you land on the right tool than land on us and leave in a month.

  • 01

    Inside a Vercel project.

    If the app is hosted on Vercel, OIDC, observability and billing are already there. Nothing to configure, one invoice fewer.

Before you switch

Questions teams ask before moving off Vercel Sandbox.

Both run Firecracker microVMs with a dedicated kernel per sandbox. The differences are the control plane, authentication, billing, pause and fork semantics, and the other surfaces Sandal exposes.

Get started

Run the same job twice.

Point one workload at Sandal and one at Vercel Sandbox. The numbers on this page are ours; the ones that matter are yours.

npm i @sandal/sdk