A Docker-based sandbox for running isolated code execution environments. Start a server with one npx command and use the SDK to create and manage sandboxes.
- 🐳 Create isolated Docker containers for code execution
- 🔄 Clone Git repositories into sandboxes
- 🔌 Expose and map container ports
- 📡 Stream command output in real-time
- 🎯 Simple SDK for programmatic control
# Using npx (no installation required)
npx @saikrishnaambeti/docker-sandbox
# Or with a custom port
npx @saikrishnaambeti/docker-sandbox --port 8080bun add @saikrishnaambeti/docker-sandbox```
### Use the SDK
```typescript
import { Sandbox, createLogStream } from "@saikrishnaambeti/docker-sandbox";
async function main() {
// Create a sandbox
const sandbox = await Sandbox.create({
runtime: "node22",
ports: [3000],
source: {
url: "https://github.com/your/repo.git",
type: "git",
},
});
// Run commands
await sandbox.runCommand({
cmd: "npm",
args: ["install"],
stdout: createLogStream(process.stdout),
stderr: createLogStream(process.stderr),
});
// Start a dev server (detached)
await sandbox.runCommand({
cmd: "npm",
args: ["run", "dev"],
detached: true,
});
// Get the URL for the exposed port
const url = sandbox.domain(3000);
console.log(`Server running at: ${url}`);
// Clean up when done
await sandbox.destroy();
}
main();Usage:
@saikrishnaambeti/docker-sandbox [options]
Options:
-p, --port <port> Port to run the server on (default: 4000)
-h, --help Show help message
-v, --version Show version
Create a new sandbox container.
Options:
serverUrl?: string- Server URL (default:http://localhost:4000)source?: { url: string, type: "git" }- Git repository to clonetimeout?: number- Timeout in millisecondsports?: number[]- Ports to expose from the containerruntime?: string- Runtime environment (e.g.,"node22")
Returns: Promise<Sandbox>
Run a command in the sandbox.
Options:
cmd: string- Command to runargs: string[]- Arguments for the commandenv?: Record<string, string>- Environment variablesstdout?: WritableStream<Uint8Array>- Stream for stdoutstderr?: WritableStream<Uint8Array>- Stream for stderrdetached?: boolean- Run in background
Returns: Promise<{ exitCode: number }>
Get the URL for an exposed port.
Returns: string (e.g., http://localhost:32789)
Get container information.
Returns: Promise<unknown>
Stop and remove the sandbox container.
Returns: Promise<void>
Helper to create a WritableStream from Node.js stdout/stderr.
import { createLogStream } from "@saikrishnaambeti/docker-sandbox";
await sandbox.runCommand({
cmd: "echo",
args: ["hello"],
stdout: createLogStream(process.stdout),
});# Install dependencies
bun install
# Run the server in development mode
bun run dev
# Build the package
bun run build
# Run the example
bun run example- Docker must be installed and running
- Node.js 18+ or Bun
MIT