Base images

Start isolated work with Node.js, Python, Ruby, and common command-line tools already installed.

Open beta. The Sandbox API, image, and limits may change. Use this beta for evaluation and feedback.

Run generated code or inspect a repository without building an image first. The beta Sandbox image includes Node.js, Python, Ruby, and common command-line tools. Check installed versions inside the Sandbox when your task depends on a specific version.

What the beta image includes

The beta uses one fixed image for new Sandboxes. A Sandbox cloned from a snapshot starts with the captured image and filesystem changes.

ToolIncluded
Node.jsLatest release as node, npm, and npx; LTS release as node-lts, npm-lts, and npx-lts
PythonPython 3.14
RubyRuby 4.0
Repository and network toolsGit, curl, OpenSSH, and CA certificates
Shell and utilitiesBusyBox sh, grep, sed, awk, ripgrep, jq, find, tar, and gzip

The image does not currently include Go, Rust, Java, Bun, or Deno. You cannot select a custom image or runtime in this beta. Exact installed versions can change when Inngest rebuilds the image. Check versions in the Sandbox if your task depends on them.

Inspect the image

Run commands after the Sandbox reaches RUNNING. This example assumes you already have a Sandbox object from inngest.sandboxes.create():

const result = await sandbox.commands.run(
  "node --version && python3 --version && ruby --version && git --version",
  { timeout: "30s" },
);

console.log(result.stdout);
console.error(result.stderr);
console.log(result.exitCode);

Inside an Inngest function, use the same command through step.sandbox and give the operation a stable step ID:

const result = await sandbox.commands.run(
  "inspect-image",
  "node --version && python3 --version && ruby --version && git --version",
  { timeout: "30s" },
);

A nonzero exit code appears in the result. It does not throw an SDK error.

Add dependencies for a task

Install packages inside a running Sandbox when the task needs them. For example, create a project directory and install a Node package:

await sandbox.commands.run(
  "mkdir -p /tmp/project && cd /tmp/project && npm init -y && npm install lodash",
  { timeout: "5m" },
);

This changes that Sandbox, not the fixed base image. The files remain in the Sandbox across pause and resume. A snapshot captures its disk, so clones start with the installed files. Destroying the Sandbox removes its filesystem. User snapshots expire and are not permanent storage. For files shared across different Sandboxes, use S3-backed persistent filesystem mounts.

Choose a supported size

Fresh Sandboxes accept these exact resource pairs:

vcpumemoryMb
11024
22048
44096

Set both values from the same row. The API does not accept a size profile name. A snapshot clone inherits the snapshot's CPU and memory. Access or available capacity can still prevent a supported size from starting.