Kibotos

Migrate from E2B

This page shows how to move a program from E2B to Kibotos: check that what it uses is available, point the SDK at the gateway, and replace what differs. For the full behavior of each call, see the other pages in this section.

Prerequisites

Ask the deployer for these:

  • The gateway's API key and domain.
  • The names of the available Templates.
  • The CA certificate file, if the gateway certificate comes from a private CA.

Steps

1. Check your SDK package

Compatibility is measured against the official JavaScript SDK. See Compatible versions.

Package or toolOn Kibotos
e2b for JavaScriptPasses acceptance at 2.46.1. Use this version
e2b for PythonNot tested. Run your own tests before you rely on it
@e2b/code-interpreterrunCode needs the Code Interpreter server in the sandbox, and no Kibotos Template includes it. Run your code with sandbox.commands.run instead
@e2b/desktopNot tested. For screenshots and input, use the desktop interface of the native API or kibo
E2B CLITemplate builds and sandbox logs are not available through the gateway. Templates are built with kibo-build; see the table below

2. Check the features you use

An unsupported option fails with an error instead of being ignored, so a test run shows what you still need to change. See How unsupported calls fail.

You useOn KibotosWhat to do
Your own TemplatePublished by an Operator, not through the SDKHand the deployer a container image to build a Template, then pass its name to Sandbox.create
envs in Sandbox.createReturns 501Pass envs to each sandbox.commands.run call
Memory pausesandbox.pause() works, but memory and processes are not keptKeep state on a Volume and start your processes again after Sandbox.connect. See Pause and resume
autoResumeReturns 501Call Sandbox.connect before you use the sandbox
Snapshots and Sandbox.forkReturn 501No replacement in the SDK. To copy data, export and restore with kibo or the native API
Domain names in network.allowOut, or network.rulesReturn 501Use addresses and CIDRs, or send traffic through network.egressProxy. See Network
Recursive files.watchDirReturns unimplementedWatch each directory separately
cpuCount or memoryMB of a TemplateThe gateway's settings apply to every sandboxAsk the deployer. See Resources
Teams and per-team API keysOne API key serves the whole deploymentSeparate users in your own program. Team metrics return 501
MCP configuration, IAM tokensReturn 501No replacement in the gateway

Files over 1 GiB cannot be uploaded in one call, and one process or file request message is limited to 4 MiB. See the notes in Commands and files.

3. Point the SDK at the gateway

Install the accepted SDK version. The acceptance tests run on Node.js 22 or later:

npm install e2b@2.46.1

Set the connection settings. Your code needs no change for these:

export E2B_API_KEY="$(cat e2b-api-key.txt)"
export E2B_DOMAIN=sandbox.example.com
export NODE_EXTRA_CA_CERTS="$PWD/sandbox-ca.pem"

Leave out NODE_EXTRA_CA_CERTS when the certificate comes from a public CA.

4. Change the Template name

Replace the E2B Template name with one from the deployer:

const sandbox = await Sandbox.create('kibotos-minimal');

Sandbox.create without a name asks for the Template base. If the deployment has no such Template, the call returns 404.

5. Run your program

Run your tests against the deployment. A 501 names the capability that needs a change from step 2. A plain 404 from an endpoint the gateway does not implement reaches you as a missing sandbox. See How unsupported calls fail.

Behavior differences

These calls work but behave differently from E2B:

  • Network access: the SDK requests public internet access by default. UDP other than DNS, such as QUIC and NTP, is not allowed. See Guarantees and limits.
  • Data: keep data you need on a Volume. /tmp and /run are empty after a resume, and the rest of the root file system is kept on a best-effort basis.
  • Volumes: a sandbox created without volumeMounts gets its own Volume at /data, deleted with the sandbox. See Volumes.
  • Capacity: when no node has room, create and connect return 503. See Insufficient capacity.

Next steps

On this page