PandaStack
Open-source Firecracker microVM sandboxes for AI agents and code execution — sub-second boot, snapshot/fork, managed Postgres, and git-driven app hosting.
PandaStack
Open-source Firecracker microVM sandboxes for AI agents and code execution.
60-second quickstart
git clone https://github.com/pandastack-io/pandastack
cd pandastack
bash scripts/mac-local-e2e.sh
open http://localhost:3000Create a sandbox from the local API:
curl -sS http://localhost:8080/v1/sandboxes \
-H 'Authorization: Bearer pds_local_dev_token' \
-H 'Content-Type: application/json' \
-d '{"template":"base","ttl_seconds":600}'scripts/mac-local-e2e.sh seeds the base and postgres-16 templates. The full first-party catalog is base, code-interpreter, agent, claude-agent, browser, postgres-16, postgres-16-4g, and postgres-16-16g.
What it does
- Firecracker microVM sandboxes with strong process and kernel isolation.
- Snapshot anywhere and fork running environments instantly.
- Sub-second boot on every create via baked snapshot restore.
- Template-defined CPU, RAM, and disk quotas.
- Network egress controls for safer code execution.
- Template-based images: Docker images converted to ext4 roots.
- Pause, hibernate, and wake lifecycle controls.
- Exec, REPL, LSP, and browser terminal surfaces.
- Audit log and observability backed by Postgres and ClickHouse.
- Multi-region scheduling primitives for larger fleets.
Architecture
+---------+ +-----+ +-----------+ +------------------+ +----------------------+
| SDKs | ---> | API | ---> | Scheduler | ---> | Agents per host | ---> | Firecracker microVMs |
+---------+ +-----+ +-----------+ +------------------+ +----------------------+
| | |
v v v
Postgres/audit Capacity scoring Snapshot seeds + UFFD streamingThe API receives sandbox requests, the scheduler chooses a host, and an agent creates or resumes a Firecracker microVM. Every create restores a baked per-template snapshot (optionally streaming guest memory on demand), and the snapshot store persists state.
Use it from your code
TypeScript (npm install @pandastack/sdk):
import { Client } from "@pandastack/sdk";
const client = new Client({ apiKey: process.env.PANDASTACK_API_KEY });
const sandbox = await client.sandboxes.create({ template: "code-interpreter" });
const result = await sandbox.exec("node -e \"console.log('hello')\"");
console.log(result.stdout, result.exitCode);
await sandbox.kill();Python (pip install pandastack):
import os
from pandastack import Client
client = Client(api_key=os.environ["PANDASTACK_API_KEY"])
sandbox = client.sandboxes.create(template="code-interpreter")
result = sandbox.exec("python -c 'print(\"hello\")'")
print(result.stdout, result.exit_code)
sandbox.kill()exec takes one command string, not a program plus an argument list. To point either SDK at a local install instead of https://api.pandastack.ai, pass apiUrl (TypeScript) or api_url (Python), or set PANDASTACK_API.
CPU and memory are baked into the template snapshot. The cpu and memoryMb create options are deprecated and ignored by the server — build a custom template if you need a different size.
Next steps
- Start locally with the Apple Silicon guide.
- Review Supabase auth for self-hosting.
- Explore Terraform self-host examples.