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.
- 1 removes or deprecates something
16 changes across 5 releases
- Add a deleteOrphanSnapshots option when deleting a sandbox to also delete snapshots that no other sandbox uses
- 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
- Add support for Vercel Managed Images in the SDK and CLI
- 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
- Deleting a persistent sandbox now supports cleaning up orphaned snapshots via the SDK and CLI, defaulting to false to preserve existing behavior
- 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[]
- 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
- Update defineSandboxProxy to limit the JWKS issuer cache size to prevent unbounded memory usage
- 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
- 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
tagsfilters onSandbox.list()at the type level. The API supports filtering by a single tag, so passing more than one key intagsis now a compile-time error instead of a 400 from the API. (#312)
3.2.0
Minor Changes
-
Add a
deleteOrphanSnapshotsoption 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 andsandbox remove <name> --delete-orphan-snapshotsin the CLI now also delete the snapshots of that sandbox that no other sandbox uses. It defaults tofalse, so the existing behaviour is unchanged.
3.1.0
Minor Changes
-
Add multi-region support: (#301)
- New
regionandfailoverRegionsoptions on sandbox create, fork, and update (SDK), with matching flags onsandbox create,fork,run,sh, and thesandbox config region/sandbox config failover-regionscommands (CLI). - New
failoverRegionsgetter onSandboxandregionsgetter onSnapshot. - Regions are now shown in
sandbox ls,sessions list,snapshots list/get,sandbox config list, and the create/fork summary.
- New
-
Sandbox.regionandSandbox.failoverRegionsno longer returnundefined: the getters now report the platform defaults (iad1and[]) when the API omits the fields, so their types arestringandstring[]. The newDEFAULT_SANDBOX_REGIONexport makes the default region readable. (#301)
Patch Changes
- Update
defineSandboxProxyto limit the JWKS issuer cache size to prevent unbounded memory usage. (#309)
3.0.1
Patch Changes
-
Surface the server's error message in
APIError.message. Failed API requests previously reported onlyStatus code 400 is not ok, hiding the actionable detail (e.g.Invalid request: `ports` should NOT have more than 15 items.) inerror.json. The message now includes it directly. (#291) -
Correct the
portsoption JSDoc: the limit is 15 ports (matching the docs and API validation), not 4. (#292) -
Correct the
resumeoption JSDoc onSandbox.getandSandbox.getOrCreate: the default isfalse(the client omits the param and the API defaults to not resuming), nottrue. A stopped persistent sandbox still auto-resumes on the first SDK call that needs a running session. (#293)
3.0.0
Major Changes
-
Add support for Vercel Managed Images and deprecate the
runtimeoption 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 bothruntimeandimageis an error. (#276)Sandboxes that do not specify an image now use
vercel/sandbox/universal. The previous default was thenode24runtime 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
runtimecalls continue to work, it's recommended to migrate to Vercel managed images when possible:- Not using
runtime: omitimageto use the new Universal image, or setimage: "vercel/sandbox/node:24"for an Ubuntu-based Node.js equivalent to the previous default. - Using
runtime: "node22": useimage: "vercel/sandbox/node:22"for an Ubuntu-based equivalent. - Using
runtime: "node24": useimage: "vercel/sandbox/node:24"for an Ubuntu-based equivalent. - Using
runtime: "node26": useimage: "vercel/sandbox/node:26"for an Ubuntu-based equivalent. - Using
runtime: "python3.13": useimage: "vercel/sandbox/python:3.14"for an Ubuntu-based equivalent, and note the Python version upgrade.
- Not using