PandaStack

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:3000

Create 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":"ubuntu-22.04","ttl_seconds":600}'

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 streaming

The 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

import { PandaStack } from "@pandastack/sdk";

const panda = new PandaStack({ apiKey: process.env.PANDASTACK_API_KEY });
const sandbox = await panda.sandboxes.create({ template: "node-20" });
console.log(await sandbox.exec("node", ["-e", "console.log('hello')"]));
from pandastack import PandaStack

client = PandaStack(api_key="pds_local_dev_token", base_url="http://localhost:8080")
sandbox = client.sandboxes.create(template="python-3.12")
print(sandbox.exec("python", ["-c", "print('hello')"]).stdout)
client := pandastack.NewClient(pandastack.WithAPIKey(os.Getenv("PANDASTACK_API_KEY")))
sbx, err := client.Sandboxes.Create(ctx, pandastack.CreateSandboxRequest{Template: "go-1.22"})
if err != nil { log.Fatal(err) }

Next steps

On this page