Cloudflare Sandbox Builder

Sandbox SDK — `@next` (1.0 preview)

by cloudflare · Apache-2.0 license · ★ 2,976 on GitHub

Sandbox SDK — `@next` (1.0 preview) cover

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)
Claude Codenpx skills add cloudflare/skills --skill sandbox-next -g -a claude-code
Claude Code (degit)npx degit cloudflare/skills/skills/sandbox-next#main ~/.claude/skills/sandbox-next
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md6.6 KB
Read SKILL.md here
cloudflare/main1 file shown
SKILL.md
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 / export in one exec is not visible to the next. Pass cwd and env per launch, or one shell script.
  • Process handles have no stdin. Interactive use → terminals (createTerminal + connect).
  • Local wait timeout / AbortSignal cancel the wait only. They do not kill the process. Use kill or exec’s remote timeout.
  • getProcess / listProcesses / getTerminal / listTerminals do not start a container; they return null / [] 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 / launch env. Live credentials stay in the Worker; use outbound handlers when the sandbox calls external APIs.
  • Do not invent removed stable APIs (gitCheckout on core, string-exec completion, 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 @next line
  • Typecheck against installed @next types
  • No live secrets in sandbox env
  • Production preview hostnames need wildcard DNS on a custom domain when using those URL patterns
1---
2name: sandbox-next
3description: 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 
8Isolated Linux environments on [Cloudflare Containers](https://developers.cloudflare.com/containers/index.md), 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 
12We 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 
16Before 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)](https://developers.cloudflare.com/sandbox/sdk/bridge/index.md) |
28 
29Never mix an `@next` Worker package with a stable container image (or the reverse).
30 
31Skills install: [Agent setup](https://developers.cloudflare.com/agent-setup/index.md) · [cloudflare/skills](https://github.com/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 
47Minimal shape:
48 
49```ts
50import { getSandbox, proxyToSandbox, Sandbox } from "@cloudflare/sandbox";
51 
52export { Sandbox };
53 
54const sandbox = getSandbox(env.Sandbox, "user-123");
55const process = await sandbox.exec(["python3", "-c", "print(2 + 2)"]);
56const result = await process.output({ encoding: "utf8" });
57// result.stdout, result.exitCode
58```
59 
60Task-specific API documentation: [references/api-quick-ref.md](references/api-quick-ref.md)
61 
62Examples index (`next` branch): [references/examples.md](references/examples.md)
63 
64## 3. Retrieve — open the doc for the task
65 
66Fetch 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](https://developers.cloudflare.com/sandbox/index.md) |
71| First Worker, wrangler, Dockerfile | [Get started](https://developers.cloudflare.com/sandbox/index.md) |
72| `exec`, handles, readiness, durability | [Process execution](https://developers.cloudflare.com/sandbox/index.md) |
73| Process API signatures | [Processes API](https://developers.cloudflare.com/sandbox/index.md) |
74| Sandbox ID vs container vs sleep/destroy | [Lifecycle](https://developers.cloudflare.com/sandbox/index.md) |
75| `cwd` / `env` / `setEnvVars` | [Environment](https://developers.cloudflare.com/sandbox/index.md) |
76| Interactive PTY / browser terminal | [Terminals](https://developers.cloudflare.com/sandbox/index.md) · [Terminals API](https://developers.cloudflare.com/sandbox/index.md) |
77| Python/JS code interpreter | [Interpreter](https://developers.cloudflare.com/sandbox/index.md) · [Interpreter API](https://developers.cloudflare.com/sandbox/index.md) |
78| Extensions model | [Extensions](https://developers.cloudflare.com/sandbox/index.md) |
79| Error classes and recovery | [Errors](https://developers.cloudflare.com/sandbox/index.md) · [Errors API](https://developers.cloudflare.com/sandbox/index.md) |
80| Common failures | [Troubleshooting](https://developers.cloudflare.com/sandbox/index.md) |
81| API hub | [API reference](https://developers.cloudflare.com/sandbox/index.md) |
82| Files, mounts, backups, ports, tunnels, `proxyToSandbox` | Main docs for shared surfaces (ignore stable-only session/transport/`sandbox.terminal`): [Files](https://developers.cloudflare.com/sandbox/sdk/api/files/index.md) · [Storage / mounts](https://developers.cloudflare.com/sandbox/sdk/api/storage/index.md) · [Ports](https://developers.cloudflare.com/sandbox/sdk/api/ports/index.md) · [Tunnels](https://developers.cloudflare.com/sandbox/sdk/api/tunnels/index.md) · [Backups](https://developers.cloudflare.com/sandbox/sdk/api/backups/index.md) · [Outbound traffic](https://developers.cloudflare.com/sandbox/sdk/guides/outbound-traffic/index.md) · [Expose services](https://developers.cloudflare.com/sandbox/sdk/guides/expose-services/index.md) · [Production](https://developers.cloudflare.com/sandbox/sdk/guides/preview-urls-custom-domain/index.md) |
83| Example apps | [examples on `next`](https://github.com/cloudflare/sandbox-sdk/tree/next/examples) |
84| Still on stable package | **`sandbox-stable`** · [Main Sandbox docs](https://developers.cloudflare.com/sandbox/index.md) |
85| Porting an existing stable app | **`sandbox-migrate-to-next`** · [Migrate](https://developers.cloudflare.com/sandbox/sdk/migrate/index.md) |
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 
View all files on GitHub →

Details

License
Apache-2.0
Stars on the repo
★ 2,976
Checked
Source
cloudflare/skills ↗
Creator
cloudflare · 17 listings
View creator

Similar skills

See all →
SkillAPI Interface Designaddyosmani/agent-skills · by addyosmaniGuides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.★ 98.7k GitHub starsAgentVersion-Specific Docs Lookupupstash/context7 · by upstashPulls up-to-date, version-specific library docs and code examples into the prompt so the AI stops inventing old APIs.★ 62.3k GitHub starsSkillAdaptyv Bio Foundry APIK-Dense-AI/scientific-agent-skills · by K-Dense-AIHow to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`.★ 46k GitHub starsSkill.NET Backend Developerwshobson/agents · by wshobsonMaster C#/.NET backend development patterns for building robust APIs, MCP servers, and enterprise applications. Covers async/await, dependency injection, Entity Framework Core, Dapper, configuration, caching, and testing with xUnit. Use when developing .NET backends, reviewing C# code, or designing API architectures.★ 39.9k GitHub starsSkillGemini Agent API Guidegoogle/skills · by googleGuides the usage of Gemini Interactions API on Gemini Enterprise Agent Platform. Use when the user wants to use the stateful, server-managed Interactions API for multi-turn conversations, background execution, streaming, structured output, and function calling on the Agent Platform.★ 20.9k GitHub starsSkillGemini Notebook Automationteng-lin/notebooklm-py · by teng-linInstall, authenticate, troubleshoot, and operate Gemini Notebook through the notebooklm-py CLI or typed async Python API. Use for notebook and source management, grounded chat and research, and artifact generation or download when the user mentions Gemini Notebook, notebooklm-py, the notebooklm CLI, or its Python API. Do not use for the generic Gemini API or unrelated content creation.★ 19.6k GitHub stars

More from cloudflare

SkillSecurity Audit Reviewercloudflare/security-audit-skill · by cloudflareSecurity guidance and vulnerability review for codebases, APIs, services, CLI tools, libraries, and daemons. Use for security questions, focused reviews, vulnerability research, security audits, or pen tests. Run the complete workflow only for explicit codebase audit or pen-test requests, full/comprehensive/end-to-end reviews, or requested report artifacts.★ 26.1k GitHub starsAgentCloudflare MCP Hubcloudflare/mcp-server-cloudflare · by cloudflareCloudflare's hosted servers for Workers, docs, observability, logs and browser rendering.★ 4.3k GitHub starsSkillCloudflare Agents SDK Buildercloudflare/skills · by cloudflareBuild, debug, or review Cloudflare Agents SDK applications using the agents package.★ 3k GitHub starsSkillBasin Analytics Workflowcloudflare/skills · by cloudflareBuild and troubleshoot Cloudflare Basin analytics workflows with Basin Pipelines, Basin Catalog, and Basin SQL. Use for streaming data into R2 Iceberg tables, managing catalogs, or querying those tables; also use for requests using the former Data Platform, Pipelines, R2 Data Catalog, or R2 SQL names.★ 3k GitHub starsSkillCloudflare Email Configcloudflare/skills · by cloudflareImplement or troubleshoot Cloudflare Email Sending and Email Routing integrations and their delivery configuration.★ 3k GitHub starsSkillCloudflare K2 Stream Buildercloudflare/skills · by cloudflareBuild and troubleshoot Cloudflare K2 or K2 Streams durable logs. Use for stream setup, producing from Workers or HTTP, configuring retention and inputs, and consuming through subscriptions.★ 3k GitHub stars