Firepeel is a lightweight control plane for Firecracker microVMs — launch, isolate, and tear down tenant workloads across a cluster of stateless worker nodes, with a live web console for operating everything by hand.
A control plane and a fleet of workers, talking over a small internal HTTP API — everything a Firecracker cluster needs and nothing it doesn't.
Boots a Firecracker microVM from a launch request to a running guest in well under a second, with tap, netns, and disk provisioned per call.
Every tenant gets its own netns, bridge, veth, and NAT on every node — independent address space, no cross-tenant visibility.
Nodes hold no durable state and own no allocation logic — they execute exactly what the orchestrator tells them, and the orchestrator reconciles on restart.
Postgres-backed registry tracks which VM lives on which node, with sequence-based tap/index allocation so addresses never collide across the cluster.
Launch requests are dispatched to the healthiest, least-loaded node automatically — or pinned to a specific node when needed.
Nodes heartbeat every 15 seconds and push state transitions as they happen, so the registry always reflects reality.
A single-file browser UI lists every VM, streams a live console over WebSocket, and drives launch/stop without touching the API directly.
Writable disk size, disk quota, and DNS are all set per launch request — no rebuilding images for different tenant needs.
A durable control plane paired with disposable, fully-isolated workers.
The orchestrator exposes an operator-facing API and an internal node-facing API; nodes expose their own launch/stop surface to the orchestrator.
| POST/vm/launch | Launch a VM — { instancename, tenant, dns?, rw_size_mb?, disk_quota_mb?, node_id? } |
| POST/vm/stop | Stop a VM — { instancename, force? } |
| GET/vm/list | List VMs, optionally filtered — ?tenant=<t> |
| POST/internal/node/register | Node registers itself — { node_id, addr } |
| POST/internal/node/heartbeat | Node liveness ping, every 15s — { node_id } |
| POST/internal/vm/state | Node pushes a VM state transition event |
| POST/node/vm/launch | Provision and boot a VM — { vm_id, tenant, tap_idx, vm_idx, dns, rw_size_mb } |
| WS /console | Live console stream for a running guest |