What changed in Vercel Sandbox from 2 to 3

5 releases numbered after 2.9.2 up to and including 3.2.1, stable releases only. 2.9.2 and 3.2.1 are the newest stable releases of 2 and 3 we track; this page follows them as new ones ship.

16 changes across 5 releases

Added 6

3.2.0

  • Add a deleteOrphanSnapshots option when deleting a sandbox to also delete snapshots that no other sandbox uses

3.1.0

  • Add multi-region support with new region and failoverRegions options on sandbox create, fork, and update in SDK and matching flags in CLI commands
  • Add failoverRegions getter on Sandbox and regions getter on Snapshot
  • Show regions in sandbox ls, sessions list, snapshots list/get, sandbox config list, and create/fork summary
  • Export DEFAULT_SANDBOX_REGION to make the default region readable

3.0.0

  • Add support for Vercel Managed Images in the SDK and CLI
Changed 5

3.2.1

  • Reject multiple tags filters on Sandbox.list() at the type level to catch unsupported multi-tag filtering at compile time instead of receiving a 400 API error

3.2.0

  • Deleting a persistent sandbox now supports cleaning up orphaned snapshots via the SDK and CLI, defaulting to false to preserve existing behavior

3.1.0

  • Sandbox.region and Sandbox.failoverRegions no longer return undefined and now report platform defaults (iad1 and []) when API omits fields, with types string and string[]

3.0.0

  • 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
Fixed 4

3.1.0

  • Update defineSandboxProxy to limit the JWKS issuer cache size to prevent unbounded memory usage

3.0.1

  • Surface the server's error message in APIError.message so that failed API requests include actionable details instead of only reporting the status code
  • Correct the ports option JSDoc to reflect the actual limit of 15 ports
  • Correct the resume option JSDoc on Sandbox.get and Sandbox.getOrCreate to reflect the default value of false
Deprecated 1

3.0.0

  • Deprecate the runtime option in the SDK and CLI

Original release notes, newest first

The list above is our reading of these notes; the originals from Vercel are here, one fold per release.

3.2.1
Patch Changes
  • Reject multiple tags filters on Sandbox.list() at the type level. The API supports filtering by a single tag, so passing more than one key in tags is now a compile-time error instead of a 400 from the API. (#312)

View originalPermalink

3.2.0
Minor Changes
  • Add a deleteOrphanSnapshots option when deleting a sandbox. (#316)

    Deleting a persistent sandbox left all of its snapshots alive until they expired. sandbox.delete({ deleteOrphanSnapshots: true }) in the SDK and sandbox remove <name> --delete-orphan-snapshots in the CLI now also delete the snapshots of that sandbox that no other sandbox uses. It defaults to false, so the existing behaviour is unchanged.

View originalPermalink

3.1.0
Minor Changes
  • Add multi-region support: (#301)

    • New region and failoverRegions options on sandbox create, fork, and update (SDK), with matching flags on sandbox create, fork, run, sh, and the sandbox config region / sandbox config failover-regions commands (CLI).
    • New failoverRegions getter on Sandbox and regions getter on Snapshot.
    • Regions are now shown in sandbox ls, sessions list, snapshots list/get, sandbox config list, and the create/fork summary.
  • Sandbox.region and Sandbox.failoverRegions no longer return undefined: the getters now report the platform defaults (iad1 and []) when the API omits the fields, so their types are string and string[]. The new DEFAULT_SANDBOX_REGION export makes the default region readable. (#301)

Patch Changes
  • Update defineSandboxProxy to limit the JWKS issuer cache size to prevent unbounded memory usage. (#309)

View originalPermalink

3.0.1
Patch Changes
  • Surface the server's error message in APIError.message. Failed API requests previously reported only Status code 400 is not ok, hiding the actionable detail (e.g. Invalid request: `ports` should NOT have more than 15 items.) in error.json. The message now includes it directly. (#291)

  • Correct the ports option JSDoc: the limit is 15 ports (matching the docs and API validation), not 4. (#292)

  • Correct the resume option JSDoc on Sandbox.get and Sandbox.getOrCreate: the default is false (the client omits the param and the API defaults to not resuming), not true. A stopped persistent sandbox still auto-resumes on the first SDK call that needs a running session. (#293)

View originalPermalink

3.0.0
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