Skip to content

E2B parity

Rayito's scope table against E2B 2.51 (e2b 2.51.0 and e2b-code-interpreter 2.10.0), row by row: 113 features from the SDK, the CLI and the recipes in E2B's documentation. How to migrate a program and what behaves differently is in E2B compatibility; this page only says what exists and where it is documented.

Accepted against real AWS

The 0.3.0 rows were accepted against real AWS on 2026-09-24: Python e2e regression 62/62, E2B examples corpus 18/18 and TypeScript 26/26. The rows that depend on a measurement cite their row in AWS_API_NOTES.md (Qnn).

Which rows changed in each version

  • 0.8.0: none. The AI agent (sbx.agent) is not an E2B API: the shim does not expose it and it is used from the native sandbox (sbx.native.agent, see Compatibility).
  • 0.7.0: EFS volumes (row 26, experimental: Volume does real CRUD on access points and volume_mounts= mounts on the optional rayito-base-caps-efs image) and custom domain (row 110, CustomDomain, experimental and not yet verified end to end on real AWS). What's new in 0.7.0.
  • 0.6.0: real templates (rows 56, 81, 89) and, as optional features in your account, events and webhooks (107), telemetry export (108), bucket mounts (111) and per-image size (82); gateways= covers the Secret.fill() case in the network rules. What's new in 0.6.0.

Statuses

Status What it means Rows
implemented the E2B feature works with the same contract; "before 0.3.0" if it was already in 0.2.0 72 (24 before 0.3.0, 48 in 0.3.0)
divergent works, with a difference written in the note (a specific image, a bucket, the access token, a different cap, an optional table or stack) 28
out by SPEC could be built, but SPEC.md §4 leaves it out or it is not there yet (R/Java kernels, desktop); raises UnimplementedError or does not exist 2
impossible on the platform Lambda MicroVMs does not have the primitive; raises UnimplementedError with the reason (or is ignored with RayitoCompatWarning) 11

No row is approximated silently: what is not implemented raises UnimplementedError (a NotImplementedError, never TypeError or AttributeError) with the feature and the reason; the exact texts are in E2B compatibility.

Which image each row needs

Most of the 0.3.0 rows work on any image published from this tree. Three families do not:

  • egress policy (rows 10–13, 19): rayito-base-caps;
  • bash, javascript and typescript kernels (rows 94–96): rayito-base-poly;
  • the whole E2B shim: a 0.3.0 or later image (the shim always asks for the server-side deadline).

Details in Images and IAM.

The table

Status says the version in which each row arrived ("before 0.3.0" if it was already in 0.2.0). Doc links the page that explains how to use it.

# E2B API Status Note Doc
1 Sandbox.create(template=) implemented (before 0.3.0) image name or ARN; RAYITO_TEMPLATE replaces E2B's default template Compatibility
2 Sandbox.create(timeout=) / JS timeoutMs divergent (0.3.0) rayd enforces a movable deadline: it exits and the VM goes to TERMINATED ≈ 15 s later (Q58); max_lifetime ceiling ≤ 28800 s; E2B Pro's 86400 s is impossible (the cap counts suspended time) Deadline
3 Sandbox.create(metadata=, envs=) implemented (before 0.3.0) in runHookPayload, 4096 characters between the two, not secrets Compatibility
4 Sandbox.create(secure=) implemented (before 0.3.0) E2B ignores it too; every RPC requires x-access-token; warning with secure=False Compatibility
5 ApiParams api_key / domain / debug / api_url / sandbox_url / validate_api_key / api_headers impossible on the platform there is no E2B API to configure; the credentials are AWS's; they are accepted and ignored with RayitoCompatWarning Compatibility
6 ApiParams proxy= implemented (0.3.0) honored on the gRPC channel (grpc.http_proxy) and in botocore; since 0.4.0, on an instance call (sbx.kill()/pause()/connect()) it is not applied and warns with RayitoCompatWarning Compatibility
7 ConnectionConfig request_timeout implemented (before 0.3.0) — Compatibility
8 ConnectionConfig headers / retries / set_integration and sbx.connection_config implemented (0.3.0) headers = extra gRPC metadata (reserved keys rejected); retries to botocore's Config; set_integration to user_agent_extra; since 0.4.0, headers/retries on an instance call are not applied and warn with RayitoCompatWarning Compatibility
9 Sandbox.create(logger=) / ApiParamsWithLogger implemented (0.3.0) SDK logs go to the given logging.Logger; the native logging= (CloudWatch) is something else Compatibility
10 allow_internet_access=False / JS allowInternetAccess: false divergent (0.3.0) in the rayito-base-caps guest, or outside with egress=[your own VPC connector]; on the default image the VM is terminated and UnimplementedError is raised (Q60: there is no managed connector without egress) Outbound network
11 network.allow_out / deny_out with CIDR, IP, ALL_TRAFFIC or callable selectors divergent (0.3.0) exact E2B semantics through uidrange policy routes, rayito-base-caps only Outbound network
12 network.allow_out / deny_out with hostnames divergent (0.3.0) proxy-only mode: rayd's local proxy filters by name and by resolved IP and blocks direct egress; a client that ignores the proxy fails closed, whereas E2B filters transparently Outbound network
13 network.egress_proxy (SOCKS5) divergent (0.3.0) the local proxy chains to the operator's SOCKS5 after filtering; caps only; fails closed for clients without a proxy Outbound network
14 network.rules / SandboxNetworkRule (header injection, IAM placeholders) impossible on the platform its reason for existing is to inject credentials from outside the sandbox; Lambda MicroVMs has no egress hook on the host, so the injector would run in the same VM as the untrusted code and would need to intercept TLS Outbound network
15 network.allow_public_traffic=True (E2B's default) impossible on the platform there is no unauthenticated mode: X-aws-proxy-auth is mandatory (§3, §7); False is Rayito's permanent behavior. With CustomDomain (experimental) a port answers without that header under your domain, with the CloudFront distribution adding it for you (row 110) Outbound network, Custom domain
16 Sandbox.traffic_access_token divergent (0.3.0) returns the current x-aws-proxy-auth JWE; it rotates (TTL ≤ 60 min) and the header has a different name Compatibility
17 network.mask_request_host impossible on the platform the AWS proxy always forwards Host: <endpoint> (§7) Outbound network
18 network.https_ports divergent (0.3.0) measured (Q67, QE2): the Lambda MicroVMs proxy does not forward end-to-end TLS to a guest port, so a non-empty list is UnimplementedError; get_host(port) serves plain HTTP Outbound network
19 Sandbox.update_network(network) / update_network(id, network) / JS updateNetwork divergent (0.3.0) NetworkService.UpdateNetwork changes the guest's policy atomically on caps; platform connectors remain immutable (there is no UpdateMicrovm) Outbound network
20 lifecycle.on_timeout='kill' implemented (0.3.0) rayd exits on expiry and the VM terminates without IAM (Q58) Deadline
21 lifecycle.on_timeout='pause' divergent (0.3.0) a live SDK suspends on expiry; with no client, the idle policy does it at max_idle; the load is not frozen in the meantime; applies idle suspension before the deadline; paused ones still die at the 8 h cap Deadline
22 lifecycle.auto_resume implemented (0.3.0) True = autoResumeEnabled plus E2B's 5 min minimum after resuming; False is enforced by rayd (a bare resume stays expired until connect()) Deadline
23 lifecycle.on_timeout={"action": "pause", "keep_memory": False} and pause(keep_memory=False) impossible on the platform suspend-microvm always saves memory and a files-only resume would require the same id with a cold start (§5); the analog is checkpoint_files() + kill(), with a new id Deadline
24 Sandbox.create(iam=) + Secret.iam_token (JWT-SVID identity) impossible on the platform MicroVMs do not issue tokens with an audience; the only identity is the execution role via IMDSv2 (§9) and an issuer of our own would be a control-plane service (SPEC.md §4) Security
25 Sandbox.create(mcp=) + get_mcp_url() / get_mcp_token() impossible on the platform the contract (URL, fixed token) does not hold: each request also needs a JWE in the header with TTL ≤ 60 min (§3, §7) and there is no Docker for the catalog's servers; Rayito ships rayito-mcp on the client MCP
26 Sandbox.create(volume_mounts=) + Volume/AsyncVolume API divergent (0.7.0, experimental) VolumeStore does real CRUD of EFS access points; volume_id/volumeId is the volume's name; volume_mounts= mounts through the native volumes= with E2B(volume_store=..., volume_connector_arn=...) on the optional rayito-base-caps-efs image (that sandbox egresses only through the volume's connector: a MicroVM supports one egress connector); Volume content operations still have no data plane of their own EFS volumes
27 Sandbox.connect(id, timeout=) (class form) divergent (0.3.0) timeout extends the deadline (AT_LEAST, E2B semantics); the sandbox's access token is still required Deadline
28 sbx.connect() (instance form) implemented (0.3.0) since 0.4.0, headers=/proxy=/retries= warn with RayitoCompatWarning and are not applied (Sandbox.connect(sandbox_id, ...) does apply them) Compatibility
29 connect(on_resume='reboot') impossible on the platform resume-microvm always restores memory and disk (§5); the analog is reincarnate(), with a new id Persistence
30 Sandbox.kill() / Sandbox.kill(id) → bool implemented (before 0.3.0) — Compatibility
31 sbx.is_running(request_timeout=) implemented (before 0.3.0) now accepts request_timeout Compatibility
32 sbx.set_timeout(timeout) implemented (0.3.0) sets the exact deadline, can shorten it, up to max_lifetime; beyond that, InvalidArgumentException; replaces ADR-007 Deadline
33 Sandbox.set_timeout(id, timeout) / JS static setTimeout divergent (0.3.0) needs the access token (access_token= or RAYITO_ACCESS_TOKEN) Deadline
34 sbx.get_info() / Sandbox.get_info(id) → 2.x SandboxInfo implemented (0.3.0) sandbox_domain = endpoint; cpu_count/memory_mb from the guest; envd_version = agent_version; lifecycle, network and allow_internet_access filled in; volume_mounts always empty; end_at = the logical deadline Compatibility
35 JS Sandbox.getFullInfo implemented (0.3.0) — Compatibility
36 Sandbox.list(limit, next_token) + SandboxPaginator has_next / next_items / next_token implemented (0.3.0) opaque token over list-microvms' nextToken Observability
37 Sandbox.list(order="asc" / "desc") implemented (0.3.0) sorted on the client by startedAt over all pages: AWS does not sort Observability
38 SandboxQuery.state / started_after / template implemented (0.3.0) client-side filters over the items Observability
39 SandboxQuery.metadata on RUNNING sandboxes implemented (before 0.3.0) one Health probe per RUNNING sandbox, O(n) (Q45) Observability
40 SandboxQuery.metadata on PAUSED sandboxes divergent (0.5.0, pending acceptance on real AWS) with the index=DynamoDbIndex(...) extension (TS index: new DynamoDbIndex({...}), also E2B(index=)): an optional DynamoDB table in your account (infra/metadata-index.yaml, ADR-014, on-demand, ~$0 at rest); only sandboxes created with the index from the native SDK appear (rayito.Sandbox.create(index=) or PoolConfig(index=)): the shim's Sandbox.create() (rayito.e2b / rayito/e2b) never writes the index, so the full PAUSED flow does not fit inside the shim; state always comes from list-microvms and no sandbox is probed or woken; without the index it is still UnimplementedError, with the hint about index= Observability, Optional features
41 sbx.get_metrics(start, end) → List[SandboxMetrics] with mem_cache implemented (0.3.0) 5 s ring in rayd (8 h) with a gap while suspended Observability
42 Sandbox.get_metrics(id) / JS static getMetrics divergent (0.3.0) needs the sandbox's access token Observability
43 sbx.pause() → bool / Sandbox.pause(id) implemented (0.3.0) returns bool like E2B 2.x (previously str) Compatibility
44 sbx.beta_pause() / JS betaPause implemented (0.3.0) Python already had it; JS gains it with the TS shim Compatibility
45 Sandbox.beta_create(auto_pause=, network=, mcp=) implemented (0.3.0) E2B removed it in 2.23.0; it is kept: auto_pause is lifecycle pause and network/mcp follow their rows; Python only (the TS shim has no betaCreate) Deadline
46 create_snapshot / list_snapshots / delete_snapshot / SnapshotInfo / SnapshotPaginator / create(template=<snapshot_id>) impossible on the platform no operation copies the memory of a running MicroVM (§1, §15); the files-only analog is checkpoint_files; explicit UnimplementedError Persistence
47 Sandbox.fork(timeout, count) / Sandbox.fork(id) impossible on the platform forking in-memory state has no primitive (§1, §15) Persistence
48 sbx.upload_url(path, user, use_signature_expiration) / JS uploadUrl divergent (0.3.0) presigned S3 PUT (form=True gives a POST); it lands asynchronously with rayd's barrier and ticket.wait(); single use; expiry always set; requires a transfer bucket; in the TS shim it returns the URL as a string (no wait()) Files
49 sbx.download_url(path, user, use_signature_expiration) / JS downloadUrl divergent (0.3.0) presigned S3 GET with Range; serves a snapshot taken at call time; expiry always set; a missing file raises immediately; requires a transfer bucket (S3Staging or RAYITO_TRANSFER_BUCKET) Files
50 get_signature(path, operation, user, envd_access_token, expiration_in_seconds) impossible on the platform an envd signature does not authenticate at the proxy (JWE only in the header, §7); Rayito's URLs are signed in S3 inside upload_url/download_url Files
51 sbx.get_host(port) (Python) implemented (before 0.3.0) hostname plus the mandatory proxy headers (HostAccess); the platform has no public URL without headers Compatibility
52 JS sandbox.getHost(port): string (synchronous) divergent (0.3.0) the TS shim returns the hostname synchronously; requests still need the proxy headers Compatibility
53 sbx.sandbox_id / sbx.sandbox_domain implemented (before 0.3.0) sandbox_domain is the endpoint hostname Compatibility
54 sbx.envd_api_url / sbx.envd_direct_url implemented (0.3.0) https://<endpoint>; requests need the proxy headers; Python only Compatibility
55 with Sandbox() as sbx / async with implemented (before 0.3.0) — Compatibility
56 bound client E2B(api_key, domain, ...) with .Sandbox / .AsyncSandbox / .Template / .Volume / .Secret implemented (0.3.0) binds region/session/control_plane; since 0.5.0 .Secret/.AsyncSecret work (Secrets Manager with that region/session; accepted on real AWS); since 0.6.0 .Template/.AsyncTemplate are the real class (build, build_in_background, get_build_status, see row 81); since 0.7.0 .Volume/.AsyncVolume do real CRUD with volume_store= (experimental, see row 26) and without it raise UnimplementedError Compatibility
57 commands.run(cmd, background, envs, user, cwd, on_stdout, on_stderr, stdin, timeout, request_timeout) with positional arguments implemented (0.3.0) the native call already worked; the shim now accepts E2B's positional order Compatibility
58 commands.connect / commands.list / ProcessInfo / commands.kill / send_stdin / close_stdin implemented (before 0.3.0) — Compatibility
59 CommandHandle.wait(on_pty, on_stdout, on_stderr) (sync) implemented (0.3.0) — Compatibility
60 AsyncCommandHandle / CommandResult / CommandExitException implemented (before 0.3.0) — Compatibility
61 types Stdout, Stderr, PtyOutput, OutputHandler, AsyncCommandHandle, AsyncWatchHandle, Username implemented (0.3.0) — Compatibility
62 pty.create / pty.send_stdin / pty.resize / pty.kill implemented (before 0.3.0) — Compatibility
63 pty.connect(pid) implemented (0.3.0) the native one already existed; the shim now exposes it Compatibility
64 JS pty.create({cols, rows, onData, user, cwd, envs, timeoutMs}) implemented (0.3.0) top-level cols/rows in the TS shim Compatibility
65 files.read(format text / bytes / stream, user, request_timeout) implemented (before 0.3.0) — Compatibility
66 files.read(gzip=) / files.write(gzip=) implemented (0.3.0) standard gRPC gzip; responses request it with the rayito-compress header; it crosses the AWS proxy in both directions: 20 MB of text go from 0.80 to 52.34 MB/s (Q74) Files
67 files.read(stream_idle_timeout=) implemented (0.3.0) — Files
68 files.write(metadata=) / write_files(metadata=) + WriteInfo.metadata / EntryInfo.metadata implemented (0.3.0) user.rayito.* xattrs; lowercase keys; overwriting replaces the set (envd semantics) Files
69 files.write(use_octet_stream=) implemented (0.3.0) accepted with no effect: gRPC streams have no multipart form Files
70 files.write/files.read of large files (performance) implemented (0.3.0) they go through S3 automatically above a threshold when there is an S3Staging (Q59: 55–106 MB/s versus 0.68 MB/s through the proxy); without S3Staging they still go over gRPC, as before Files
71 files.write_files(List[WriteEntry]) → List[WriteInfo] implemented (0.3.0) the native one already existed; the shim now exposes it Compatibility
72 files.list(depth) / exists / get_info / remove / rename / make_dir implemented (before 0.3.0) — Compatibility
73 FileType.FILE / DIR / SYMLINK implemented (before 0.3.0) — Compatibility
74 files.watch_dir(include_entry=) implemented (0.3.0) passed through to the native call Compatibility
75 files.watch_dir(allow_network_mounts=) implemented (0.3.0) accepted; the sandbox has no network mounts Compatibility
76 WatchHandle.get_new_events / stop, AsyncWatchHandle.stop, FilesystemEvent, FilesystemEventType implemented (before 0.3.0) — Compatibility
77 JS files.read(format: "blob") implemented (0.3.0) — Files
78 JS files.watchDir(path, onEvent, opts) implemented (0.3.0) positional onEvent in the TS shim Compatibility
79 sandbox.git (clone, init, remote_add, remote_get, status, branches, create_branch, checkout_branch, delete_branch, add, commit, reset, restore, push, pull, set_config, get_config, dangerously_authenticate, configure_user; GitStatus, GitBranches, GitFileStatus, GitResetMode) implemented (0.3.0) client-side wrapper over commands.run, with git-core in rayito-base; E2B marks the module as deprecated Git
80 Secret / AsyncSecret (create, update, get_info, list, exists, destroy, fill; SecretInfo, SecretPaginator) divergent (0.5.0, accepted on real AWS) CRUD over AWS Secrets Manager in your account (ADR-014, optional, $0.40/secret-month); secret_id is the ARN, not sec_…; metadata ≤ 2048 characters (E2B: 8 KiB), no cap of 100; no network.rules injector: fill() returns the placeholder, which nothing resolves (delivery is the native SDK's secrets=, visible to the sandbox's code); iam_token is still UnimplementedError (row 24) Secrets, Compatibility
81 template build API (TemplateBase, TemplateBuilder, Template.build, ...) divergent (0.6.0) Template/AsyncTemplate with build, build_in_background and get_build_status: the same DSL, composed on the client over a published rayito-base image (from_base_image instead of from_docker_image), with no layer cache and ARM64 only; alias_exists/assign_tags/remove_tags/get_tags raise UnimplementedError; also rayito template build Templates
82 cpu_count / memory_mb per sandbox divergent (0.6.0) per image, like E2B per template build: Template.build(memory_mb=) rounds up to the next supported size with RayitoCompatWarning and cpu_count is ignored with a warning (CPU comes from memory, Q87); the native SDK adds Sandbox.create(size=), which chooses among the five-size images published with rayito image publish --sizes (or your own image per size with --memory-mib); SandboxInfo's cpu_count/memory_mb are the guest's view (Q68) Sizes, Templates
83 exceptions AuthenticationException, CommandExitException, InvalidArgumentException, NotFoundException, RateLimitException, SandboxException, TimeoutException implemented (before 0.3.0) TimeoutException now also covers sandbox_timeout (m9-server-timeout) Compatibility
84 FileNotFoundException / SandboxNotFoundException exported from rayito.e2b implemented (0.3.0) — Compatibility
85 NotEnoughSpaceException implemented (0.3.0) alias of DiskFullException, which is actually raised Compatibility
86 ServiceBusyException implemented (0.3.0) raised on InsufficientCapacityException Compatibility
87 FileUploadException implemented (0.3.0) raised when an import fails (m9-file-transfer) Compatibility
88 GitAuthException / GitUpstreamException implemented (0.3.0) — Git
89 TemplateException / BuildException divergent (0.6.0) raised by Template.build(): TemplateException on an invalid template or base image, BuildException when the build fails (with the reason, including the build quota). Those in rayito.e2b and rayito/e2b are the native classes, and BuildException is a SandboxException (Compatibility) Templates
90 Volume*Exception / Secret*Exception divergent (0.5.0, accepted on real AWS) SecretException/SecretNotFoundException (TS: SecretError/SecretNotFoundError) exist and are raised by Secret, with E2B's hierarchy plus one difference: SecretException inherits from SandboxException (TS: SandboxError) and, in Python, SecretNotFoundException is also NotFoundException; since 0.7.0, VolumeException/VolumeNotFoundException/VolumePathNotFoundException also exist (the native ones, exported by rayito.e2b; in TS, VolumeError/VolumeNotFoundError/VolumePathNotFoundError are imported from rayito) and are raised by volume operations with volume_store= (row 26) Compatibility
91 SandboxState RUNNING / PAUSED implemented (before 0.3.0) — Compatibility
92 full AsyncSandbox parity implemented (0.3.0) the same gaps closed as in the sync shim Compatibility
93 run_code(code, language / context, on_stdout, on_stderr, on_result, on_error, envs, timeout, request_timeout) → Execution implemented (before 0.3.0) — Compatibility
94 run_code(language="python" / "bash") implemented (before 0.3.0) bash only on rayito-base-poly Kernels
95 run_code(language="javascript") implemented (0.3.0) Deno kernel on rayito-base-poly with lazy start (Q61); other images raise UnimplementedError naming poly Kernels
96 run_code(language="typescript") implemented (0.3.0) the same Deno kernel, rayito-base-poly only Kernels
97 run_code(language="r" / "java") out by SPEC SPEC.md §4; measured: R via conda 1.4 GB, R-core 127 MB plus graphics dependencies; Corretto 21,262 MB plus an unmaintained IJava Kernels
98 create_code_context(cwd, language, request_timeout) → Context implemented (before 0.3.0) javascript/typescript added in poly Kernels
99 list_code_contexts / remove_code_context / restart_code_context implemented (0.3.0) the native one already existed; the shim now exposes it Compatibility
100 Execution / Logs / OutputMessage / ExecutionError / Result / charts (ChartType, ScaleType, Chart, PointChart, LineChart, ScatterChart, BarChart, PieChart, BoxAndWhiskerChart, SuperChart, data classes) implemented (before 0.3.0) — Compatibility
101 Logs.to_json / ExecutionError.to_json / Context.from_json / Chart2D / MIMEType / RunCodeLanguage / OutputHandler (code-interpreter) implemented (0.3.0) Python (rayito.e2b) Compatibility
102 JS drop-in import (import { Sandbox } from 'e2b' / '@e2b/code-interpreter') implemented (0.3.0) new rayito/e2b path in exports Compatibility
103 JS Sandbox.create(template?, opts) with ConnectionOpts (requestTimeoutMs, retries, logger, headers, proxy, signal) implemented (0.3.0) apiKey/domain ignored with a warning; the AbortSignal goes to Connect's call options; since 0.4.0, on an instance call only signal (and requestTimeoutMs except in kill/pause) is applied, the rest warn with RayitoCompatWarning Compatibility
104 JS statics Sandbox.kill / getInfo / isRunning / connect / pause implemented (0.3.0) static forms in the TS shim (also getFullInfo, betaPause, setTimeout, getMetrics, list and updateNetwork); the native one has the instance ones Compatibility
105 JS Sandbox.list(opts) → SandboxPaginator implemented (0.3.0) the paginator shape plus the metadata filter, as in Python Observability
106 camelCase surface of JS commands / files / runCode / contexts implemented (before 0.3.0) the native TS mirror already matched; the TS shim re-exposes it Compatibility
107 lifecycle events REST API and webhooks (docs) divergent (0.6.0) events=LifecycleEvents(...) in create() plus the optional events-webhooks stack in your account (rayito events deploy, ≈ $0.40/month): created/paused/resumed/killed stored in DynamoDB (get_events) and delivered to your webhooks with E2B's signature; no hosted REST API Events and webhooks
108 OTel telemetry export (docs, Enterprise) divergent (0.6.0) telemetry=TelemetryExport(...) in create(): rayd exports 7 CPU, memory and disk metrics over OTLP/HTTP (to CloudWatch by default; names="e2b" uses E2B's names); no sandbox logs or traces. Since 0.5.0, also client-side spans with tracer_provider=/tracerProvider OTLP export, Observability
109 SSH access recipe (sshd + websocat, docs) divergent (0.3.0) rayito sandbox connect gives an interactive PTY terminal; an sshd recipe needs an image of your own and a client that speaks WebSocket-subprotocol authentication CLI
110 custom domain via reverse proxy (docs) divergent (0.7.0, experimental) for development: rayito sandbox proxy <id> --port N exposes a guest port on localhost; a public domain is CustomDomain (experimental): a CloudFront distribution in your account (ADR-014) with https://<port>-<alias>.<your-domain> URLs that you register (register()), with no reverse proxy of its own; not yet verified end to end on real AWS and not wired to Sandbox.create(domain=) Custom domain, CLI
111 s3fs/gcsfuse bucket mounts (docs) divergent (0.6.0) mounts={"/mnt/data": S3Mount(...)} in create(): Mountpoint for Amazon S3 (mount-s3), S3 only (no GCS) and only on rayito-base-caps, with the buckets allowed by the image (RAYITO_ALLOWED_MOUNT_BUCKETS) and the policy of the s3-mounts stack S3 mounts
112 E2B CLI (auth, sandbox list/create/connect/exec/kill/metrics, template, snapshots, fork) divergent (0.3.0) adds sandbox create/connect/exec/metrics to the list/kill/logs that already existed; since 0.6.0 rayito template build/status/logs; auth, snapshots and fork remain out CLI
113 desktop SDK (e2b-desktop) out by SPEC SPEC.md §4 (Desktop/GUI) Compatibility

What to do about what is missing

If you used In Rayito
fork, snapshots, pause(keep_memory=False) checkpoint_files() + create(persist=) or reincarnate(): the files survive, with a new id (Persistence)
Volume, volume_mounts (without the image with amazon-efs-utils) persist= (S3) and upload_url/download_url (Files); for a mounted bucket, mounts= (S3 mounts); with it, EFS volumes
Secret (the CRUD) the shim's Secret/AsyncSecret or SecretStore, over AWS Secrets Manager in your account (Secrets)
network.rules with Secret.fill() gateways= (0.6.0): a loopback gateway inside the sandbox injects the real header toward a fixed upstream, so the code can use the secret without reading it (Secret gateway); or secrets={"ENV": "name"}, which delivers it as a visible environment variable (Secrets)
mcp= the rayito-mcp server, on the client
iam= execution_role_arn (IMDSv2); on rayito-base-caps the sandbox's code does not see IMDS (Security)
R or Java in run_code there is no kernel: Python, and bash/JavaScript/TypeScript on rayito-base-poly (Kernels)