Cloudflare Sandbox Builder
Sandbox SDK — `@next` (1.0 preview)

Build or maintain Cloudflare Sandbox apps on @cloudflare/sandbox@next (SDK 1.0 preview). Use sandbox-migrate-to-next when porting a stable app.
--- name: sandbox-next description: Build or maintain Cloudflare Sandbox apps on @cloudflare/sandbox@next (SDK 1.0 preview). Use sandbox-migrate-to-next when porting a stable app. --- # Sandbox SDK — `@next` (1.0 preview) Isolated Linux environments on [Cloudflare Containers](https://developers.cloudflare.com/containers/index.md), driven from Workers. **Prefer preview docs and installed `@next` types over memory.** APIs change; this skill is a gate, a contract, and a retrieval map—not a full manual. We recommend **new projects** on this line. Apps still on the default package use **`sandbox-stable`**. Port only when asked, via **`sandbox-migrate-to-next`**. ## 1. Gate — confirm the package line Before writing code, inspect the app: | Check | Must match |
Overview
Isolated Linux environments on Cloudflare Containers, driven from Workers.
Manual install (npx, ZIP)
npx skills add cloudflare/skills --skill sandbox-next -g -a claude-codenpx degit cloudflare/skills/skills/sandbox-next#main ~/.claude/skills/sandbox-nextConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md6.6 KB
Read SKILL.md here
Show the full text93 lines
Sandbox SDK — @next (1.0 preview)
Isolated Linux environments on Cloudflare Containers, driven from Workers.
Prefer preview docs and installed @next types over memory. APIs change; this skill is a gate, a contract, and a retrieval map—not a full manual.
We recommend new projects on this line. Apps still on the default package use sandbox-stable. Port only when asked, via sandbox-migrate-to-next.
1. Gate — confirm the package line
Before writing code, inspect the app:
| Check | Must match |
|---|---|
| npm dependency | @cloudflare/sandbox@next (or another preview tag) |
| Container image | Same line (e.g. cloudflare/sandbox:next, next-python) |
| If you find… | Action |
|---|---|
Default @cloudflare/sandbox (no @next) |
Stop. Load sandbox-stable. Do not apply this skill’s APIs. |
User wants to port stable → @next |
Stop. Load sandbox-migrate-to-next. |
| Self-deployed bridge only | Bridge is not on the 1.0 preview line yet. Keep bridge on stable package + image. Bridge (stable) |
Never mix an @next Worker package with a stable container image (or the reverse).
Skills install: Agent setup · cloudflare/skills
2. Contract — non-negotiables
sandbox.exec(argv)takes an argv list and resolves when the process starts. It returns a handle, not a finished command result.- Collect results with handle methods:
output(),logs(),waitForExit(),waitForPort(),waitForLog(),kill(signal?). - No implicit shell. Shell syntax needs an explicit shell, e.g.
["/bin/bash", "-lc", script]. - Each launch is independent. A
cd/exportin oneexecis not visible to the next. Passcwdandenvper launch, or one shell script. - Process handles have no stdin. Interactive use → terminals (
createTerminal+connect). - Local wait
timeout/AbortSignalcancel the wait only. They do not kill the process. Usekillorexec’s remotetimeout. getProcess/listProcesses/getTerminal/listTerminalsdo not start a container; they returnnull/[]when none is up.- Process and terminal IDs belong to the current container, not forever to a sandbox ID. For work that must survive replace, store the full job (argv, cwd, env, app state)—not only an id.
- Non-secret config only in
setEnvVars/ launchenv. Live credentials stay in the Worker; use outbound handlers when the sandbox calls external APIs. - Do not invent removed stable APIs (
gitCheckouton core, string-execcompletion, session execution,sandbox.terminal(request)). - Do not use one retry loop for every error (see Errors docs).
Minimal shape:
import { getSandbox, proxyToSandbox, Sandbox } from "@cloudflare/sandbox";
export { Sandbox };
const sandbox = getSandbox(env.Sandbox, "user-123");
const process = await sandbox.exec(["python3", "-c", "print(2 + 2)"]);
const result = await process.output({ encoding: "utf8" });
// result.stdout, result.exitCode
Task-specific API documentation: references/api-quick-ref.md
Examples index (next branch): references/examples.md
3. Retrieve — open the doc for the task
Fetch the page before implementing. Installed @next types win over guesses.
| You need to… | Open |
|---|---|
| Orient / choose preview | 1.0 preview overview |
| First Worker, wrangler, Dockerfile | Get started |
exec, handles, readiness, durability |
Process execution |
| Process API signatures | Processes API |
| Sandbox ID vs container vs sleep/destroy | Lifecycle |
cwd / env / setEnvVars |
Environment |
| Interactive PTY / browser terminal | Terminals · Terminals API |
| Python/JS code interpreter | Interpreter · Interpreter API |
| Extensions model | Extensions |
| Error classes and recovery | Errors · Errors API |
| Common failures | Troubleshooting |
| API hub | API reference |
Files, mounts, backups, ports, tunnels, proxyToSandbox |
Main docs for shared surfaces (ignore stable-only session/transport/sandbox.terminal): Files · Storage / mounts · Ports · Tunnels · Backups · Outbound traffic · Expose services · Production |
| Example apps | examples on next |
| Still on stable package | sandbox-stable · Main Sandbox docs |
| Porting an existing stable app | sandbox-migrate-to-next · Migrate |
4. Before you ship
- Lockfile and Dockerfile on the same
@nextline - Typecheck against installed
@nexttypes - No live secrets in sandbox env
- Production preview hostnames need wildcard DNS on a custom domain when using those URL patterns
| 1 | |
| 2 | name sandbox-next |
| 3 | description Build or maintain Cloudflare Sandbox apps on @cloudflare/sandbox@next (SDK 1.0 preview). Use sandbox-migrate-to-next when porting a stable app. |
| 4 | |
| 5 | |
| 6 | # Sandbox SDK — `@next` (1.0 preview) |
| 7 | |
| 8 | Isolated Linux environments on [Cloudflare Containers], driven from Workers. |
| 9 | |
| 10 | **Prefer preview docs and installed `@next` types over memory.** APIs change; this skill is a gate, a contract, and a retrieval map—not a full manual. |
| 11 | |
| 12 | We recommend **new projects** on this line. Apps still on the default package use **`sandbox-stable`**. Port only when asked, via **`sandbox-migrate-to-next`**. |
| 13 | |
| 14 | ## 1. Gate — confirm the package line |
| 15 | |
| 16 | Before writing code, inspect the app: |
| 17 | |
| 18 | | Check | Must match | |
| 19 | | ----- | ---------- | |
| 20 | | npm dependency | `@cloudflare/sandbox@next` (or another preview tag) | |
| 21 | | Container image | Same line (e.g. `cloudflare/sandbox:next`, `next-python`) | |
| 22 | |
| 23 | | If you find… | Action | |
| 24 | | ------------ | ------ | |
| 25 | | Default `@cloudflare/sandbox` (no `@next`) | **Stop.** Load **`sandbox-stable`**. Do not apply this skill’s APIs. | |
| 26 | | User wants to port stable → `@next` | **Stop.** Load **`sandbox-migrate-to-next`**. | |
| 27 | | Self-deployed **bridge** only | Bridge is **not** on the 1.0 preview line yet. Keep bridge on stable package + image. [Bridge (stable)] | |
| 28 | |
| 29 | Never mix an `@next` Worker package with a stable container image (or the reverse). |
| 30 | |
| 31 | Skills install: [Agent setup] · [cloudflare/skills] |
| 32 | |
| 33 | ## 2. Contract — non-negotiables |
| 34 | |
| 35 | `sandbox.exec(argv)` takes an **argv** list and resolves when the process **starts**. It returns a **handle**, not a finished command result. |
| 36 | Collect results with handle methods: `output()`, `logs()`, `waitForExit()`, `waitForPort()`, `waitForLog()`, `kill(signal?)`. |
| 37 | No implicit shell. Shell syntax needs an explicit shell, e.g. `["/bin/bash", "-lc", script]`. |
| 38 | Each launch is independent. A `cd` / `export` in one `exec` is not visible to the next. Pass `cwd` and `env` per launch, or one shell script. |
| 39 | Process handles have **no stdin**. Interactive use → terminals (`createTerminal` + `connect`). |
| 40 | Local wait `timeout` / `AbortSignal` cancel the **wait only**. They do not kill the process. Use `kill` or `exec`’s remote `timeout`. |
| 41 | `getProcess` / `listProcesses` / `getTerminal` / `listTerminals` do **not** start a container; they return `null` / `[]` when none is up. |
| 42 | Process and terminal IDs belong to the **current container**, not forever to a sandbox ID. For work that must survive replace, store the full job (argv, cwd, env, app state)—not only an id. |
| 43 | Non-secret config only in `setEnvVars` / launch `env`. Live credentials stay in the Worker; use outbound handlers when the sandbox calls external APIs. |
| 44 | Do **not** invent removed stable APIs (`gitCheckout` on core, string-`exec` completion, session execution, `sandbox.terminal(request)`). |
| 45 | Do **not** use one retry loop for every error (see Errors docs). |
| 46 | |
| 47 | Minimal shape: |
| 48 | |
| 49 | |
| 50 | import { getSandbox, proxyToSandbox, Sandbox } from "@cloudflare/sandbox"; |
| 51 | |
| 52 | export { Sandbox }; |
| 53 | |
| 54 | const sandbox = getSandbox(env.Sandbox, "user-123"); |
| 55 | const process = await sandbox.exec(["python3", "-c", "print(2 + 2)"]); |
| 56 | const result = await process.output({ encoding: "utf8" }); |
| 57 | // result.stdout, result.exitCode |
| 58 | |
| 59 | |
| 60 | Task-specific API documentation: [references/api-quick-ref.md] |
| 61 | |
| 62 | Examples index (`next` branch): [references/examples.md] |
| 63 | |
| 64 | ## 3. Retrieve — open the doc for the task |
| 65 | |
| 66 | Fetch the page before implementing. Installed `@next` types win over guesses. |
| 67 | |
| 68 | | You need to… | Open | |
| 69 | | ------------ | ---- | |
| 70 | | Orient / choose preview | [1.0 preview overview] | |
| 71 | | First Worker, wrangler, Dockerfile | [Get started] | |
| 72 | | `exec`, handles, readiness, durability | [Process execution] | |
| 73 | | Process API signatures | [Processes API] | |
| 74 | | Sandbox ID vs container vs sleep/destroy | [Lifecycle] | |
| 75 | | `cwd` / `env` / `setEnvVars` | [Environment] | |
| 76 | | Interactive PTY / browser terminal | [Terminals] · [Terminals API] | |
| 77 | | Python/JS code interpreter | [Interpreter] · [Interpreter API] | |
| 78 | | Extensions model | [Extensions] | |
| 79 | | Error classes and recovery | [Errors] · [Errors API] | |
| 80 | | Common failures | [Troubleshooting] | |
| 81 | | API hub | [API reference] | |
| 82 | | Files, mounts, backups, ports, tunnels, `proxyToSandbox` | Main docs for shared surfaces (ignore stable-only session/transport/`sandbox.terminal`): [Files] · [Storage / mounts] · [Ports] · [Tunnels] · [Backups] · [Outbound traffic] · [Expose services] · [Production] | |
| 83 | | Example apps | [examples on `next`] | |
| 84 | | Still on stable package | **`sandbox-stable`** · [Main Sandbox docs] | |
| 85 | | Porting an existing stable app | **`sandbox-migrate-to-next`** · [Migrate] | |
| 86 | |
| 87 | ## 4. Before you ship |
| 88 | |
| 89 | Lockfile and Dockerfile on the **same** `@next` line |
| 90 | Typecheck against installed `@next` types |
| 91 | No live secrets in sandbox env |
| 92 | Production preview hostnames need wildcard DNS on a custom domain when using those URL patterns |
| 93 |
Details
- License
- Apache-2.0
- Stars on the repo
- ★ 2,976
- Checked
- Source
- cloudflare/skills ↗
- Creator
- cloudflare · 17 listings
Similar skills
See all →
SkillAPI Interface Design
AgentVersion-Specific Docs Lookup
SkillAdaptyv Bio Foundry API
Skill.NET Backend Developer
SkillGemini Agent API Guide
SkillGemini Notebook AutomationMore from cloudflare
SkillSecurity Audit Reviewer
AgentCloudflare MCP Hub
SkillCloudflare Agents SDK Builder
SkillBasin Analytics Workflow
SkillCloudflare Email Config
SkillCloudflare K2 Stream Builder