Releases: e2b-dev/E2B
Release list
e2b@2.38.0
Minor Changes
- 2821fb0: Route volume content requests to a team's custom (BYOC) cluster. When a team is connected to a custom cluster, the volume create and get endpoints now return that cluster's
domain, and the SDK uses it as the destination for volume content requests instead of the defaultapi.<E2B_DOMAIN>host. Teams on the default cluster are unaffected and keep their configured domain.
@e2b/python-sdk@2.37.0
Minor Changes
- 2821fb0: Route volume content requests to a team's custom (BYOC) cluster. When a team is connected to a custom cluster, the volume create and get endpoints now return that cluster's
domain, and the SDK uses it as the destination for volume content requests instead of the defaultapi.<E2B_DOMAIN>host. Teams on the default cluster are unaffected and keep their configured domain.
e2b@2.37.0
Minor Changes
- 1504fbc: Add
fromFedoraImage,fromAlpineImage, andfromArchImagebase-image helpers to theTemplatebuilder (from_fedora_image,from_alpine_image,from_arch_imagein the Python SDK), alongside the existingfromUbuntuImage/fromDebianImage/etc. Templates can now start from Fedora, Alpine, and Arch base images (the orchestrator identifies the distro from/etc/os-release). Fedora and Alpine default to pinned tags (fedora:44,alpine:3.24) so builds stay reproducible; Arch defaults tolatestbecause it is a rolling release and provisioning runspacman -Syuregardless.
Patch Changes
- 6733f36: Align the Python SDK's
from_fedora_imageandfrom_alpine_imagedefaults with the JS SDK:fedora:44andalpine:3.24, replacingfedora:42(end-of-life, so its repositories leave the normal mirror network and provisioning can fail) andalpine:3.22. Callers that omit the variant now get the same base image in both SDKs, and both tags are the ones the orchestrator's distro build tests cover. Also corrects the JSTemplateFromImagetype docs, which still named the old defaults. - 1ebe925: Recognize web platform objects by what they are, not by which class minted them. Libraries replace the web globals the same way they replace
globalThis.fetch(@hono/node-serverinstalls its ownRequest, remix'sinstallGlobals()swapsRequest/Blob/File,web-streams-polyfillswapsReadableStream, jsdom-style test environments bring their own copies), and values also cross realms — so a perfectly goodRequest,BloborReadableStreamcould fail the SDK'sinstanceofchecks and take the wrong branch. This fixes: every API call crashing withFailed to parse URL from [object Request]; the abort signal of such aRequestbeing ignored while it waited for an in-flight slot; uploads of a foreignBloborReadableStream— including the body of such aRequest— silently containing the text"[object Blob]"/"[object ReadableStream]"; gzipped uploads of a foreign stream hanging; a foreign stream being buffered into memory instead of streamed; andvolume.readFile()returning empty data. - ee0ad25: Update snapshot docstrings to use project terminology instead of team (e.g. "my-project/my-snapshot", project slug)
@e2b/python-sdk@2.36.0
Minor Changes
- 1504fbc: Add
fromFedoraImage,fromAlpineImage, andfromArchImagebase-image helpers to theTemplatebuilder (from_fedora_image,from_alpine_image,from_arch_imagein the Python SDK), alongside the existingfromUbuntuImage/fromDebianImage/etc. Templates can now start from Fedora, Alpine, and Arch base images (the orchestrator identifies the distro from/etc/os-release). Fedora and Alpine default to pinned tags (fedora:44,alpine:3.24) so builds stay reproducible; Arch defaults tolatestbecause it is a rolling release and provisioning runspacman -Syuregardless.
Patch Changes
- 6733f36: Align the Python SDK's
from_fedora_imageandfrom_alpine_imagedefaults with the JS SDK:fedora:44andalpine:3.24, replacingfedora:42(end-of-life, so its repositories leave the normal mirror network and provisioning can fail) andalpine:3.22. Callers that omit the variant now get the same base image in both SDKs, and both tags are the ones the orchestrator's distro build tests cover. Also corrects the JSTemplateFromImagetype docs, which still named the old defaults. - 45d2679: Regenerate
e2b/sandbox/mcp.pywithdatamodel-code-generator0.64.0: the MCP server option types now use builtin generics (list[str],dict[str, Any]) and are closedTypedDicts, mirroring the spec'sadditionalProperties: false. Raises thetyping-extensionsfloor to>=4.10.0, the first release accepting PEP 728'sclosed. - ee0ad25: Update snapshot docstrings to use project terminology instead of team (e.g. "my-project/my-snapshot", project slug)
@e2b/cli@2.16.1
Patch Changes
- 9e3e52b: Add
--user,--cwd, and--envflags toe2b sandbox create(and the deprecatedspawnalias) ande2b sandbox connect. These are forwarded to the underlying PTY session so the connected terminal starts as the given user, in the given working directory, and with the given environment variables.--envaccepts repeatableKEY=VALUEpairs. - 2c061eb: Point the
--projectflag help at the dashboard's?tab=generalentrypoint (was?tab=team) - 05b7a79: Depend on
e2bthrough pnpm'sworkspace:^protocol instead of a registry range.pnpm publishrewrites it to the same concrete^<version>it had before, so the published package is unchanged — but the lockfile no longer has to be re-resolved against the tarballs a release uploads, which is what forced the release tags onto the commit before their own version bump. - Updated dependencies [6733f36]
- Updated dependencies [1ebe925]
- Updated dependencies [1504fbc]
- Updated dependencies [ee0ad25]
- e2b@2.37.0
e2b@2.36.1
Patch Changes
- 178e267: Bump the
globdependency from^11.1.0to^13.0.6. glob 11 is deprecated on npm, so every install of a project depending one2bprinted anpm warn deprecated glob@11.1.0warning that downstream packages could not silence (overridesand shrinkwrap only apply to the top-level project). glob 12 and 13 only changed the CLI — the--shelloption and theglobbin, which moved to a separateglob-binpackage — so the programmatic API the SDK uses (glob(pattern, { ignore, withFileTypes, dot, cwd })plusPath#isDirectory()/fullpath()/relative()) is unchanged. glob 13 also drops the CLI's transitive dependencies, cutting a freshnpm install e2bfrom 37 to 26 packages. - b511953: Remove the
new Function('return import(...)')trick from undici loading.loadUndicinow uses the shareddynamicImporthelper, whose dynamic import is kept opaque to downstream bundlers withwebpackIgnore/@vite-ignoreannotations instead of runtime code generation. Environments that disallow code generation from strings (CSP,--disallow-code-generation-from-strings) now load undici normally instead of silently falling back to the global fetch. - b511953: Fix the lazy fetcher loading in
api/http2.tsandenvd/http2.ts: a failed fetcher build is no longer cached forever (the next request retries instead of replaying the stale rejection), and the no-undici fallback now late-bindsglobalThis.fetchso fetch replacements installed after the first request (msw, instrumentation) are picked up. The previously duplicated loading logic is shared inundici.ts.
@e2b/cli@2.16.0
Minor Changes
-
48e9249: Bump
@npmcli/package-jsonfrom^5.2.1to^7.0.5, clearing the lastnpm warn deprecated glob@10.5.0warning printed on every@e2b/cliinstall (@npmcli/package-json@5pinnedglob@10;7.0.4moved toglob@13). Together with thee2bglob bump, a freshnpm install @e2b/cliis now warning-free and drops from 183 to 145 packages.@npmcli/package-json@7requires Node^20.17.0 || >=22.9.0, so the CLI's Node 22 floor moves from>=22to>=22.9.0. Node 20 support is unchanged (>=20.18.1 <21). Only thePackageJson.load/create/update/saveAPI used bye2b template initis touched, and it is unchanged across the bump.
Patch Changes
e2b@2.36.0
Minor Changes
- 4fcf7cb: Add
FileType.SYMLINKto the sandbox filesystem types. Newer envd versions report symlinks with a dedicatedFILE_TYPE_SYMLINKentry type; previously the SDKs treated it as unknown, sofiles.list()silently omitted symlink entries andgetInfo()/get_info()returned anundefined/Nonetype for them. Symlinks now surface asFileType.SYMLINK('symlink') withsymlinkTarget/symlink_targetpopulated, in JS and both sync and async Python.
Patch Changes
- 3f46d56: Select template build-step stack-trace frames by SDK boundary instead of fixed depth. The caller's frame is now the first one whose file lies outside the SDK package, so traces stay correct when transpilers inject extra frames (e.g. TS class-field initializers) or runtimes elide delegating frames (e.g. Bun's tail-call elision). The suppress/override stack-trace collection machinery this made redundant (
runInNewStackTraceContext,runInStackTraceOverrideContextand their Python equivalents) is removed. - 1ae3f92: Recognize Cloudflare Workers'
Network connection lostas a dropped sandbox connection so a sandbox killed mid-request surfaces as the health-checkedTimeoutError(matching Node/Bun/Deno), and fix streaming downloads releasing their pooled connection twice when cancelled while a read was in flight - 9ee4414: Fix template file uploads under Deno. Deno's native
fetchignores aContent-Lengthheader on stream bodies and fell back toTransfer-Encoding: chunked, which S3-compatible presigned upload URLs reject (see #1243).Template.builduploads now stream the spooled archive through undici'sfetch, which honors the header on every runtime, falling back to the globalfetchwhere undici isn't resolvable. - 5e141a7: Fix the
Sandbox.getHost()documentation example so it can be copy-pasted. The@examplecalledsandbox.commands.exec(...), which is not a method on theCommandsclass (it exposesrun), so running the snippet threwTypeError: sandbox.commands.exec is not a function. It now usessandbox.commands.run(..., { background: true }), allowing the long-running HTTP server to start before the example callsgetHost(). Documentation only, no behavior change. - 4fcf7cb: Regenerate API clients from the latest specs, which are now synced with Copybara from their source-of-truth repositories (e2b-dev/infra@e2255f0 for the REST and envd specs, belt for the volume-content spec) instead of being copied by hand. Picks up the latest spec changes: named
SandboxTimeoutRequest/SandboxSnapshotRequest/SandboxRefreshRequestrequest schemas,SandboxNetworkConfigandSandboxIamworkload-identity models, theFILE_TYPE_SYMLINKfilesystem entry type, and deprecation of access-token auth in favor of API keys. Anything the upstream specs markx-not-implemented: true(currently the SOCKS5 egress-proxy config) is excluded from the generated clients. Generated Python client models now list fields in spec order instead of alphabetical order (the tag filtering moved from a custom script to Redocly CLI); construct them with keyword arguments if you don't already - 5417dd4: Bump the minimum
tardependency to 7.5.19 to pull in upstream fixes for node-tar denial-of-service vulnerabilities (GHSA advisories covering PAX parsing, negative entry sizes, and unbounded decompression)
@e2b/python-sdk@2.35.0
Minor Changes
-
00253c3: Migrate the sandbox RPC layer (commands, PTY, filesystem watch) from the
vendorede2b_connectclient to the official Connect RPC client for Python
(connectrpc), whose HTTP transport
ispyqwest(Rust reqwest/hyper), and switch the envd protobuf messages from
Google'sprotobufruntime to Buf's
protobuf-py.Closing a command or watch stream early now sends
RST_STREAMto the server,
so abandoned streams no longer leak on the shared HTTP/2 connection, and peer
resets surface as typed errors instead of ambiguous EOFs. The REST API and
file upload/download keep usinghttpx.Notes:
- The SDK no longer depends on the
protobufpackage, removing a common
source of dependency conflicts with other libraries that pin it. - The
e2b_connectmodule is no longer shipped with the package. Code that
imported it directly should useconnectrpc(ConnectError,Code)
instead; SDK exception types (SandboxException,TimeoutException, ...)
are unchanged. - The generated
e2b.envd.*.*_pb2modules were replaced byprotobuf-py
equivalents (e2b.envd.process.process_pb,
e2b.envd.filesystem.filesystem_pb) with a different message API. - Connection retries for sandbox RPC calls (
E2B_CONNECTION_RETRIES, default 3) now retry only failures establishing the connection — before the request
could have reached envd — with exponential backoff. Unary RPCs are no
longer replayed when the connection drops mid-request, which could
re-execute a delivered call (e.g. re-send process input); such drops
surface as errors immediately, the way they always did for streaming calls. - The
proxyoption applies to sandbox RPC calls the same way it does to the
REST API and file transfer requests. URL strings,httpx.URL, and
httpx.Proxyvalues keep working (credentials in the URL or in
httpx.Proxy(auth=...));httpx.Proxycustom headers andssl_context
are not supported for RPC calls and raiseInvalidArgumentException. CommandResult.error(andCommandHandle.error) is nowNonewhen a
command finishes without an error, matching the declaredOptional[str]
type and the JS SDK'serror?: string. It used to be""on success —
code comparingresult.error == ""or treating it as always-strshould
check forNone/falsiness instead.- For async streaming calls (
commands.run/connect, PTY,
files.watch_dir),request_timeoutnow bounds opening the stream — the
wait until envd confirms with a start event, matching the JS SDK's
requestTimeoutMs— and raisesTimeoutExceptionwhen exceeded. The
running stream is bounded by the command/watchtimeout(as before). In
the sync SDK there is no way to interrupt the blocking wait, so
request_timeoutis not applied to opening the stream — both stream setup
and the running stream are bounded bytimeout(unlimited when0). E2B_MAX_CONNECTIONSno longer applies to sandbox RPC traffic: the new
transport bounds only idle connections per host (E2B_KEEPALIVE_EXPIRY,
E2B_MAX_KEEPALIVE_CONNECTIONS), not the total number of open
connections. It still applies to the REST API and file transfers.
- The SDK no longer depends on the
-
4fcf7cb: Add
FileType.SYMLINKto the sandbox filesystem types. Newer envd versions report symlinks with a dedicatedFILE_TYPE_SYMLINKentry type; previously the SDKs treated it as unknown, sofiles.list()silently omitted symlink entries andgetInfo()/get_info()returned anundefined/Nonetype for them. Symlinks now surface asFileType.SYMLINK('symlink') withsymlinkTarget/symlink_targetpopulated, in JS and both sync and async Python.
Patch Changes
- 3f46d56: Select template build-step stack-trace frames by SDK boundary instead of fixed depth. The caller's frame is now the first one whose file lies outside the SDK package, so traces stay correct when transpilers inject extra frames (e.g. TS class-field initializers) or runtimes elide delegating frames (e.g. Bun's tail-call elision). The suppress/override stack-trace collection machinery this made redundant (
runInNewStackTraceContext,runInStackTraceOverrideContextand their Python equivalents) is removed. - 4fcf7cb: Regenerate API clients from the latest specs, which are now synced with Copybara from their source-of-truth repositories (e2b-dev/infra@e2255f0 for the REST and envd specs, belt for the volume-content spec) instead of being copied by hand. Picks up the latest spec changes: named
SandboxTimeoutRequest/SandboxSnapshotRequest/SandboxRefreshRequestrequest schemas,SandboxNetworkConfigandSandboxIamworkload-identity models, theFILE_TYPE_SYMLINKfilesystem entry type, and deprecation of access-token auth in favor of API keys. Anything the upstream specs markx-not-implemented: true(currently the SOCKS5 egress-proxy config) is excluded from the generated clients. Generated Python client models now list fields in spec order instead of alphabetical order (the tag filtering moved from a custom script to Redocly CLI); construct them with keyword arguments if you don't already
@e2b/cli@2.15.1
Patch Changes
- 5417dd4: Rebuild the CLI so the bundled
tarpicks up 7.5.19+, fixing the node-tar denial-of-service vulnerabilities (the CLI bundles the SDK and its dependencies intodist/index.js) - Updated dependencies [3f46d56]
- Updated dependencies [1ae3f92]
- Updated dependencies [9ee4414]
- Updated dependencies [5e141a7]
- Updated dependencies [4fcf7cb]
- Updated dependencies [5417dd4]
- Updated dependencies [4fcf7cb]
- e2b@2.36.0