Container runtime
Each sandbox runs in an isolated Linux container based on Ubuntu 22.04.
The base container comes pre-packaged with a full development environment:
Languages and runtimes:
- Python 3.11 (with pip)
- Node.js 20 LTS (with npm)
- Bun (JavaScript/TypeScript runtime)
Python packages:
- NumPy - Numerical computing
- pandas - Data analysis
- Matplotlib - Plotting and visualization
- IPython - Interactive Python
Development tools:
- Git - Version control
- Build tools (gcc, make, pkg-config)
- Text editors (vim, nano)
- Process monitoring (htop, procps)
Utilities:
- curl, wget - HTTP clients
- jq - JSON processor
- Network tools (ping, dig, netstat)
- Compression (zip, unzip)
Install additional software at runtime or customize the base image:
# Python packagespip install scikit-learn tensorflow
# Node.js packagesnpm install express
# System packagesapt-get install redis-serverThe container provides a standard Linux filesystem. You can read and write anywhere you have permissions.
Standard directories:
/workspace- Default working directory for user code/tmp- Temporary files/home- User home directory/usr/bin,/usr/local/bin- Executable binaries
Example:
await sandbox.writeFile('/workspace/app.py', 'print("Hello")');await sandbox.writeFile('/tmp/cache.json', '{}');await sandbox.exec('ls -la /workspace');Processes run as you'd expect in a regular Linux environment.
Foreground processes (exec()):
const result = await sandbox.exec('npm test');// Waits for completion, returns outputBackground processes (startProcess()):
const process = await sandbox.startProcess('node server.js');// Returns immediately, process runs in backgroundOutbound connections work:
curl https://api.example.com/datapip install requestsnpm install expressInbound connections require port exposure:
await sandbox.startProcess('python -m http.server 8000');const exposed = await sandbox.exposePort(8000);console.log(exposed.exposedAt); // Public URLLocalhost works within sandbox:
redis-server & # Start serverredis-cli ping # Connect locallyBetween sandboxes (isolated):
- Each sandbox is a separate container
- Filesystem, memory and network are all isolated
Within sandbox (shared):
- All processes see the same files
- Processes can communicate with each other
- Environment variables are session-scoped
To run untrusted code, use separate sandboxes per user:
const sandbox = getSandbox(env.Sandbox, `user-${userId}`);Cannot:
- Load kernel modules or access host hardware
- Run nested containers (no Docker-in-Docker)
- Architecture - How containers fit in the system
- Security model - Container isolation details
- Sandbox lifecycle - Container lifecycle management
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