Wrangler configuration
The minimum required configuration for using Sandbox SDK:
{ "name": "my-sandbox-worker", "main": "src/index.ts", "compatibility_date": "2025-10-13", "compatibility_flags": ["nodejs_compat"], "containers": [ { "class_name": "Sandbox", "image": "./Dockerfile", }, ], "durable_objects": { "bindings": [ { "class_name": "Sandbox", "name": "Sandbox", }, ], }, "migrations": [ { "new_sqlite_classes": ["Sandbox"], "tag": "v1", }, ],}
Each container is backed by its own Durable Object. The container image contains your runtime environment.
{ "containers": [ { "class_name": "Sandbox", "image": "./Dockerfile", }, ],}
Parameters:
- class_name (string, required) - Must match the
class_name
of the Durable Object. - image (string, required) - The Docker image to use. Must match your npm package version.
See Dockerfile reference for information on customizing your Docker image.
Bind the Sandbox Durable Object to your Worker:
{ "durable_objects": { "bindings": [ { "class_name": "Sandbox", "name": "Sandbox", }, ], },}
Parameters:
- class_name (string, required) - Must match the
class_name
of the container configuration. - name (string, required) - The binding name you'll use in your code. Conventionally
"Sandbox"
.
Required for Durable Object initialization:
{ "migrations": [ { "new_sqlite_classes": ["Sandbox"], "tag": "v1", }, ],}
This tells Cloudflare to initialize the Sandbox Durable Object with SQLite storage.
These settings are illustrative and not required for basic usage.
Pass configuration to your Worker:
{ "vars": { "ENVIRONMENT": "production", "LOG_LEVEL": "info", },}
Access in your Worker:
export default { async fetch(request: Request, env: Env): Promise<Response> { console.log(`Running in ${env.ENVIRONMENT} mode`); // ... },};
Store sensitive values securely:
# Set secrets via CLI (never commit these)wrangler secret put ANTHROPIC_API_KEYwrangler secret put GITHUB_TOKENwrangler secret put DATABASE_URL
Access like environment variables:
interface Env { Sandbox: DurableObjectNamespace; ANTHROPIC_API_KEY: string; GITHUB_TOKEN: string;}
Run sandboxes on a schedule:
{ "triggers": { "crons": ["0 0 * * *"], // Daily at midnight },}
export default { async scheduled(event: ScheduledEvent, env: Env): Promise<void> { const sandbox = getSandbox(env.Sandbox, "scheduled-task"); await sandbox.exec("python3 /workspace/daily-report.py"); await sandbox.destroy(); },};
Error: TypeError: env.Sandbox is undefined
Solution: Ensure your wrangler.jsonc
includes the Durable Objects binding:
{ "durable_objects": { "bindings": [ { "class_name": "Sandbox", "name": "Sandbox", }, ], },}
Error: Durable Object not initialized
Solution: Add migrations for the Sandbox class:
{ "migrations": [ { "new_sqlite_classes": ["Sandbox"], "tag": "v1", }, ],}
- Wrangler documentation - Complete Wrangler reference
- Durable Objects setup - DO-specific configuration
- Dockerfile reference - Custom container images
- Environment variables - Passing configuration to sandboxes
- Get Started guide - Initial setup walkthrough
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Directory
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- © 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark
-