Commands
Execute commands and manage background processes in the sandbox's isolated container environment.
Execute a command and return the complete result.
const result = await sandbox.exec(command: string, options?: ExecOptions): Promise<ExecuteResponse>Parameters:
command- The command to execute (can include arguments)options(optional):stream- Enable streaming callbacks (default:false)onOutput- Callback for real-time output:(stream: 'stdout' | 'stderr', data: string) => voidtimeout- Maximum execution time in milliseconds
Returns: Promise<ExecuteResponse> with success, stdout, stderr, exitCode
const result = await sandbox.exec("npm run build");
if (result.success) { console.log("Build output:", result.stdout);} else { console.error("Build failed:", result.stderr);}
// With streamingawait sandbox.exec("npm install", { stream: true, onOutput: (stream, data) => console.log(`[${stream}] ${data}`),});const result = await sandbox.exec('npm run build');
if (result.success) { console.log('Build output:', result.stdout);} else { console.error('Build failed:', result.stderr);}
// With streamingawait sandbox.exec('npm install', { stream: true, onOutput: (stream, data) => console.log(`[${stream}] ${data}`)});Execute a command and return a Server-Sent Events stream for real-time processing.
const stream = await sandbox.execStream(command: string, options?: ExecOptions): Promise<ReadableStream>Parameters:
command- The command to executeoptions- Same asexec()
Returns: Promise<ReadableStream> emitting ExecEvent objects (start, stdout, stderr, complete, error)
import { parseSSEStream } from "@cloudflare/sandbox";
const stream = await sandbox.execStream("npm run build");
for await (const event of parseSSEStream(stream)) { switch (event.type) { case "stdout": console.log("Output:", event.data); break; case "complete": console.log("Exit code:", event.exitCode); break; case "error": console.error("Failed:", event.error); break; }}import { parseSSEStream, type ExecEvent } from '@cloudflare/sandbox';
const stream = await sandbox.execStream('npm run build');
for await (const event of parseSSEStream<ExecEvent>(stream)) { switch (event.type) { case 'stdout': console.log('Output:', event.data); break; case 'complete': console.log('Exit code:', event.exitCode); break; case 'error': console.error('Failed:', event.error); break; }}Start a long-running background process.
const process = await sandbox.startProcess(command: string, options?: ProcessOptions): Promise<ProcessInfo>Parameters:
command- The command to start as a background processoptions(optional):cwd- Working directoryenv- Environment variables
Returns: Promise<ProcessInfo> with id, pid, command, status
const server = await sandbox.startProcess("python -m http.server 8000");console.log("Started with PID:", server.pid);
// With custom environmentconst app = await sandbox.startProcess("node app.js", { cwd: "/workspace/my-app", env: { NODE_ENV: "production", PORT: "3000" },});const server = await sandbox.startProcess('python -m http.server 8000');console.log('Started with PID:', server.pid);
// With custom environmentconst app = await sandbox.startProcess('node app.js', { cwd: '/workspace/my-app', env: { NODE_ENV: 'production', PORT: '3000' }});List all running processes.
const processes = await sandbox.listProcesses(): Promise<ProcessInfo[]>const processes = await sandbox.listProcesses();
for (const proc of processes) { console.log(`${proc.id}: ${proc.command} (PID ${proc.pid})`);}const processes = await sandbox.listProcesses();
for (const proc of processes) { console.log(`${proc.id}: ${proc.command} (PID ${proc.pid})`);}Terminate a specific process.
await sandbox.killProcess(processId: string, signal?: string): Promise<void>Parameters:
processId- The process ID (fromstartProcess()orlistProcesses())signal- Signal to send (default:"SIGTERM")
const server = await sandbox.startProcess("python -m http.server 8000");await sandbox.killProcess(server.id);const server = await sandbox.startProcess('python -m http.server 8000');await sandbox.killProcess(server.id);Terminate all running processes.
await sandbox.killAllProcesses(): Promise<void>await sandbox.killAllProcesses();await sandbox.killAllProcesses();Stream logs from a running process in real-time.
const stream = await sandbox.streamProcessLogs(processId: string): Promise<ReadableStream>Parameters:
processId- The process ID
Returns: Promise<ReadableStream> emitting LogEvent objects
import { parseSSEStream } from "@cloudflare/sandbox";
const server = await sandbox.startProcess("node server.js");const logStream = await sandbox.streamProcessLogs(server.id);
for await (const log of parseSSEStream(logStream)) { console.log(`[${log.timestamp}] ${log.data}`);
if (log.data.includes("Server started")) break;}import { parseSSEStream, type LogEvent } from '@cloudflare/sandbox';
const server = await sandbox.startProcess('node server.js');const logStream = await sandbox.streamProcessLogs(server.id);
for await (const log of parseSSEStream<LogEvent>(logStream)) { console.log(`[${log.timestamp}] ${log.data}`);
if (log.data.includes('Server started')) break;}Get accumulated logs from a process.
const logs = await sandbox.getProcessLogs(processId: string): Promise<string>Parameters:
processId- The process ID
Returns: Promise<string> with all accumulated output
const server = await sandbox.startProcess("node server.js");await new Promise((resolve) => setTimeout(resolve, 5000));
const logs = await sandbox.getProcessLogs(server.id);console.log("Server logs:", logs);const server = await sandbox.startProcess('node server.js');await new Promise(resolve => setTimeout(resolve, 5000));
const logs = await sandbox.getProcessLogs(server.id);console.log('Server logs:', logs);- Background processes guide - Managing long-running processes
- Files API - File operations
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