Vercel Sandbox

Infrastructure & DevOps

Ephemeral microVMs for running untrusted code, as the SDK and CLI.

Latest 3.0.0 · by VercelWebsitevercel/sandbox

Branches

3
3.0.0
2
2.9.2
1
1.10.2

Release activity

Release activity — 44 releases across 35 days since Mar 18, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Mar 18, 2026. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026
MondayNo releases on May 4, 20262 releases on May 11, 20261 release on May 18, 2026No releases on May 25, 20261 release on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 20261 release on Jul 13, 20261 release on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 20261 release on Aug 10, 2026No releases on Aug 17, 2026
TuesdayNo releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 20261 release on Jun 30, 20262 releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 20261 release on Aug 4, 2026No releases on Aug 11, 2026No releases on Aug 18, 2026
WednesdayNo releases on May 6, 2026No releases on May 13, 2026No releases on May 20, 20261 release on May 27, 2026No releases on Jun 3, 20261 release on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 20261 release on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026No releases on Aug 19, 2026
Thursday1 release on May 7, 20261 release on May 14, 20261 release on May 21, 2026No releases on May 28, 20261 release on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 20261 release on Jul 16, 2026No releases on Jul 23, 20262 releases on Jul 30, 2026No releases on Aug 6, 2026No releases on Aug 13, 2026
Friday1 release on May 8, 2026No releases on May 15, 20263 releases on May 22, 20261 release on May 29, 20261 release on Jun 5, 20261 release on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 20261 release on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 20261 release on Jul 24, 2026No releases on Jul 31, 20261 release on Aug 7, 2026No releases on Aug 14, 2026
SaturdayNo releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 20261 release on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026

44 releases since Mar 18, 2026, busiest day 3

Changelog

Filter releases by branch
44 of 44 releases

3.1.0-beta.0

Pre-release
Added 1
  • Add support for drives via a new Drive class and CLI commands

From Vercel Sandbox

Minor Changes
  • Add support for drives via a new Drive class and CLI commands. (#196)
View originalPermalink
How 3.1.0-beta.0 went

3.0.0

Latest
Added 1
  • Add support for Vercel Managed Images in the SDK and CLI
Changed 2
  • Change default sandbox image from node24 runtime on Amazon Linux 2023 to vercel/sandbox/universal based on Ubuntu with Node.js 24, Bun, Python 3.14, coding agents, and development tools
  • Passing both runtime and image parameters is now an error
Deprecated 1
  • Deprecate the runtime option in the SDK and CLI

From Vercel Sandbox

Major Changes
  • Add support for Vercel Managed Images and deprecate the runtime option in the SDK and CLI. Runtime-based creation remains supported through the legacy v2 API; image-based and default creation use the v3 API. Passing both runtime and image is an error. (#276)

    Sandboxes that do not specify an image now use vercel/sandbox/universal. The previous default was the node24 runtime on Amazon Linux 2023. The new default is based on Ubuntu and includes Node.js 24, Bun, Python 3.14, coding agents, and common development and debugging tools.

    Existing runtime calls continue to work, it's recommended to migrate to Vercel managed images when possible:

    • Not using runtime: omit image to use the new Universal image, or set image: "vercel/sandbox/node:24" for an Ubuntu-based Node.js equivalent to the previous default.
    • Using runtime: "node22": use image: "vercel/sandbox/node:22" for an Ubuntu-based equivalent.
    • Using runtime: "node24": use image: "vercel/sandbox/node:24" for an Ubuntu-based equivalent.
    • Using runtime: "node26": use image: "vercel/sandbox/node:26" for an Ubuntu-based equivalent.
    • Using runtime: "python3.13": use image: "vercel/sandbox/python:3.14" for an Ubuntu-based equivalent, and note the Python version upgrade.
View originalPermalink
How 3.0.0 went

2.10.0-beta.0

Pre-release
Added 1
  • Add support for drives via a new Drive class and CLI commands

From Vercel Sandbox

Minor Changes
  • Add support for drives via a new Drive class and CLI commands. (#196)
View originalPermalink
How 2.10.0-beta.0 went

2.9.2

Changed 1
  • Respect Retry-After header when the value is up to 20 seconds, and throw back the response to the client for values greater than 20 seconds

From Vercel Sandbox

Patch Changes
  • Respect Retry-After when the value is up to 20 seconds. Retry-After values greater than 20 seconds will throw back the response to the client. (#270)
View originalPermalink
How 2.9.2 went

2.9.1

Added 1
  • Add support for shared VCR images

From Vercel Sandbox

Patch Changes
  • Add support for shared VCR images (#265)
View originalPermalink
How 2.9.1 went

2.9.0

Changed 1
  • Sandbox.fork() now calls the POST /v2/sandboxes/:name/fork endpoint to copy the source sandbox's env and image server-side instead of implementing fork on the client-side

From Vercel Sandbox

Minor Changes
  • Support the sandbox fork API. Instead of implementing fork on the client-side, Sandbox.fork() now calls the POST /v2/sandboxes/:name/fork endpoint, which copies the source sandbox's env (and image) server-side. (#259)
View originalPermalink
How 2.9.0 went

2.8.0

Added 1
  • Add @vercel/sandbox-mock, a drop-in mock for @vercel/sandbox backed by just-bash that runs the real @vercel/sandbox classes against an in-memory implementation of the /v2/sandboxes HTTP API
Changed 1
  • Snapshot.get now forwards a custom fetch via WithFetchOptions, matching Snapshot.list and Snapshot.tree behavior

From Vercel Sandbox

Patch Changes
  • Add @vercel/sandbox-mock, a drop-in mock for @vercel/sandbox backed by just-bash. Rather than reimplementing the SDK surface, it runs the real @vercel/sandbox classes against an in-memory implementation of the /v2/sandboxes HTTP API injected through the SDK's fetch seam — so command execution, filesystem, multi-user/group management, snapshots, and forking all exercise the real SDK code. Commands run locally via just-bash against an in-memory filesystem, and command()/setupSandbox() let tests stub the output of commands just-bash can't run. (#245)

    As part of this, Snapshot.get now forwards a custom fetch (via WithFetchOptions), matching Snapshot.list and Snapshot.tree. Previously it always used the global fetch, so an injected client — such as the mock — could not intercept the request.

View originalPermalink
How 2.8.0 went

2.7.1

Changed 1
  • Reduce default API call retries

From Vercel Sandbox

Patch Changes
  • Reduce default API call retries (#254)
View originalPermalink
How 2.7.1 went

2.7.0

Minor Changes
  • Expose the source image of a sandbox as a property on Sandbox, populated when the sandbox was created from a container image (#253)
Patch Changes
  • Clarify that network policies can only contain one of transform or forwardURL (#251)
View originalPermalink
How 2.7.0 went

2.6.1

Patch Changes
  • Expose a typed error when creating a sandbox user whose username already exists. (#250)
View originalPermalink
How 2.6.1 went

2.6.0

Minor Changes
  • Add multi-user and group management: createUser, asUser, createGroup, addUserToGroup, and removeUserFromGroup on the Sandbox class, plus a SandboxUser class that scopes command and file operations to a specific user's context (#116)
View originalPermalink
How 2.6.0 went

2.6.0-beta.0

Pre-release
Minor Changes
  • Add support for drives via a new Drive class and CLI commands. (#196)
View originalPermalink
How 2.6.0-beta.0 went

2.5.0

Minor Changes
  • Commands now surface how long they took to execute with the durationMs field (#243)
View originalPermalink
How 2.5.0 went

2.4.0

Minor Changes
  • Report the live timeout deadline of running sandboxes. Sandbox.list and Sandbox.get now expose expiresAt, reflecting the current session's deadline including any timeout extensions, and sandbox list renders it in the TIMEOUT column. Sandbox.update({ timeout }) (and sandbox config timeout) now also extends the currently running session so an increased timeout takes effect immediately instead of only applying to future sessions. (#239)
View originalPermalink
How 2.4.0 went

2.3.0

Minor Changes
  • Support creating a sandbox from a custom image via the new image option on Sandbox.create and the --image flag on sandbox create / sandbox run. (#232)
Patch Changes
  • Single API call to run, wait and get logs of command (#223)
View originalPermalink
How 2.3.0 went

2.2.1

Patch Changes
  • Fix scope inference failing with a raw Zod validation error. Teams missing updatedAt are now kept and malformed team entries are skipped. The CLI also no longer leaks raw validation details when scope can't be determined, showing a friendly hint instead. OAuth response parse failures are masked the same way. (#225)
View originalPermalink
How 2.2.1 went

2.2.0

Minor Changes
  • Move the interactive shell server out of the sandbox and into the sandbox-controller. sandbox connect/ssh (CLI) and the new Sandbox.openInteractive() (SDK) now request a WebSocket URL and token from the API and connect to the controller-hosted PTY, instead of installing and bootstrapping the vc-interactive-server binary inside the sandbox at connect time. This removes the bundled server binary along with the @vercel/pty-tunnel and @vercel/pty-tunnel-server packages. (#222)
Patch Changes
  • Upgrade Zod to v4 and update validators for Zod 4 compatibility. (#219)
View originalPermalink
How 2.2.0 went

2.2.0-beta.0

Pre-release
Minor Changes
  • Add support for drives via a new Drive class and CLI commands. (#196)
View originalPermalink
How 2.2.0-beta.0 went

2.1.1

Patch Changes
  • Update Undici version to fix incompatibility with Node.js 26 (#220)
View originalPermalink
How 2.1.1 went

2.1.0

Minor Changes
  • Add timeoutMs to runCommand (SDK) and a --timeout <duration> flag to sandbox exec (CLI). (#212)
View originalPermalink
How 2.1.0 went

2.0.2

Patch Changes
  • Show the current snapshot's siblings in snapshots tree. The tree now reads the API's anchor node so snapshots sharing the current snapshot's parent are listed, and siblings are rendered by snapshot ID instead of source session ID. (#211)
View originalPermalink
How 2.0.2 went

2.0.1

Patch Changes
  • Add updatedAt getter to the Snapshot class (#208)
View originalPermalink
How 2.0.1 went

2.0.0

Major Changes
  • Introduce named and long-lived sandboxes (#177)
Minor Changes
  • Add L7 request matchers and forward URLs support to network policy rules. (#177)

  • Support pagination (CLI and SDK) when listing sandboxes, snapshots, sessions (#177)

  • Add defineSandboxProxy helper in @vercel/sandbox/proxy to easily implement network policies forwarding rules (#188)

  • Rename sandbox to session, namedSandbox to sandbox (#177)

  • Support keepLastSnapshots feature for CLI and SDK (#193)

  • Add sandbox port replacement support through update. (#177)

  • Support default snapshot expiration for persistent sandboxes (#177)

  • Refactor the sandbox update and deprecate old network-policy update (#177)

  • Support a new method: Sandbox.getOrCreate() (#177)

  • Rename snapshotOnShutdown to persistent (#177)

  • Automatically scale memory to vcpu when updating (#177)

  • Move to cursor pagination. Support new sortyBy parameter for lists. Support new statusUpdatedAt filter (#177)

  • Add Sandbox.fork(...) to the SDK and sandbox fork <source> to the CLI for forking an existing sandbox into a new one. (#205)

  • Remove support for blocking parameter in .stop() and default to always blocking. Improve CLI output when stopping a sandbox. (#177)

  • Lists now unwrap the json and return the items and pagination fields directly (#177)

  • Support new onResume parameter in Sandbox.create and Sandbox.get (#177)

  • Support snapshot tree pagination (#191)

Patch Changes
  • Add support for tags (#177)

  • Fix an 422 error when trying to resume a sandbox after snapshotting (#177)

  • Add Node 26 support. (#177)

  • Add support for patch + delete v2 endpoints for named sandboxes. (#177)

  • Fix readFile writing the API error JSON into the destination when the file response is not an octet-stream. The SDK now rejects any non-application/octet-stream response (including 2xx with a JSON error body) instead of piping it verbatim to the caller's stream. (#202)

  • Fix bug where the first ssh connection hang (#177)

  • Support updading current-snapshot-id of an existing sandbox (#177)

  • Fix JsDocs, messages and double-error message bug (#177)

View originalPermalink
How 2.0.0 went

2.0.0-beta.24

Pre-release
Minor Changes
  • Add Sandbox.fork(...) to the SDK and sandbox fork <source> to the CLI for forking an existing sandbox into a new one. The fork copies as many config parameters as the server exposes — resources (vcpus), timeout, networkPolicy, tags, ports, persistent, snapshotExpiration, keepLastSnapshots — and lets the caller override any of them. Environment variables are not copied (encrypted server-side) and must be re-supplied via env / --env. (#205)

    Breaking: removed sandbox create --sandbox-snapshot <name> and Snapshot.fromSandbox(name). Use sandbox fork <name> / Sandbox.fork({ sourceSandbox: name }) instead. Raw snapshot IDs are still supported via sandbox create --snapshot <id> and Sandbox.create({ source: { type: "snapshot", snapshotId } }).

View originalPermalink
How 2.0.0-beta.24 went

2.0.0-beta.23

Pre-release
Patch Changes
  • Fix readFile writing the API error JSON into the destination when the file response is not an octet-stream. The SDK now rejects any non-application/octet-stream response (including 2xx with a JSON error body) instead of piping it verbatim to the caller's stream. (#202)
View originalPermalink
How 2.0.0-beta.23 went

2.0.0-beta.22

Pre-release
Minor Changes
  • Add defineSandboxProxy helper in @vercel/sandbox/proxy to easily implement network policies forwarding rules (#188)

  • Support snapshot tree pagination (#191)

View originalPermalink
How 2.0.0-beta.22 went

2.0.0-beta.21

Pre-release
Minor Changes
  • Support keepLastSnapshots feature for CLI and SDK (#193)
View originalPermalink
How 2.0.0-beta.21 went

2.0.0-beta.20

Pre-release
Minor Changes
  • Support new CLI --sandbox-snapshot parameter and new SDK static method Snapshot.fromSandbox() (#189)

  • Add sandbox port replacement support through update. (#177)

View originalPermalink
How 2.0.0-beta.20 went

2.0.0-beta.18

Pre-release
Minor Changes
  • Add L7 request matchers and forward URLs support to network policy rules. (#173)
View originalPermalink
How 2.0.0-beta.18 went

1.10.1

Patch Changes
  • Update auth API base URL (#166)
View originalPermalink
How 1.10.1 went

2.0.0-beta.14

Pre-release
Patch Changes
  • Support updading current-snapshot-id of an existing sandbox
View originalPermalink
How 2.0.0-beta.14 went

1.10.0

Minor Changes
  • Expose Filesystem api from Sandbox (#112)
Patch Changes
  • Reuse Undici Agent across instances (#143)

  • Smarter fallback team selection for scope inference: tries defaultTeamId first, then the best hobby-plan OWNER team (personal team or most recently updated). Filters fallback candidates by billing.plan === 'hobby' to avoid selecting pro/enterprise teams. Skips teams that return 403 and shows a helpful error when no team allows sandbox creation. (#120)

  • Add workflow serialization support for the Snapshot class via WORKFLOW_SERIALIZE / WORKFLOW_DESERIALIZE, fixing serialization errors when a Snapshot instance is returned from a workflow step. (#140)

View originalPermalink
How 1.10.0 went

2.0.0-beta.13

Pre-release
Minor Changes
  • Support new onResume parameter in Sandbox.create and Sandbox.get
View originalPermalink
How 2.0.0-beta.13 went

1.9.3

Patch Changes
  • Handle abort signal and early stream close in runCommand to avoid misleading Zod error (#135)
View originalPermalink
How 1.9.3 went

1.9.2

Patch Changes
  • Fix stdout()/stderr()/output() failing on deserialized Command instances with "logs() requires an API client" error. (#130)
View originalPermalink
How 1.9.2 went

1.9.1

Patch Changes
  • Build and publish both ESM and CJS outputs for the SDK package. (#84)

  • Support useworkflow serialization for sandboxes and commands (#72)

  • Fix a Size mismatch when encoding binaries during write operations (#127)

  • Accept string and Uint8Array in writeFiles() content, not just Buffer. (#128)

View originalPermalink
How 1.9.1 went

2.0.0-beta.11

Pre-release
Patch Changes
  • Fix an 422 error when trying to resume a sandbox after snapshotting
View originalPermalink
How 2.0.0-beta.11 went

2.0.0-beta.10

Pre-release
Minor Changes
  • Support default snapshot expiration for persistent sandboxes
View originalPermalink
How 2.0.0-beta.10 went

1.9.0

Minor Changes
  • Add support for setting file permissions (mode) in the writeFiles API. Files can now include an optional mode property to set permissions on the tarball, avoiding the need for a separate chmod command. (#90)

    await sandbox.writeFiles([
      {
        path: "/usr/local/bin/myscript",
        content: Buffer.from("#!/bin/bash\necho hello"),
        mode: 0o755,
      },
    ]);
    
View originalPermalink
How 1.9.0 went

2.0.0-beta.9

Pre-release
Minor Changes
  • Move to cursor pagination. Support new sortyBy parameter for lists. Support new statusUpdatedAt filter
View originalPermalink
How 2.0.0-beta.9 went

2.0.0-beta.8

Pre-release
Patch Changes
  • Fix an error with resuming while reading a file
View originalPermalink
How 2.0.0-beta.8 went
View all

Discussion

If you publish Vercel Sandbox, you can claim this product by proving you administer its repository.