Ultra-secure microVM sandboxing for JS/TS services, AI-generated code, and untrusted scripts.
Ignite runs JavaScript/TypeScript code inside isolated, hardware-virtualized microVMs rather than containers. Execution currently requires a Linux host with KVM, using Firecracker as the hypervisor.
Status: pre-1.0. A macOS backend built on Apple's
Virtualization.frameworkis planned but not implemented — the platform selector is stubbed and returns a clear error. Bun is the only runtimeignite setupprovisions today.
It is designed for systems that execute code you do not fully trust:
- AI agent generated code
- Plugin or extension ecosystems
- User submissions and sandboxed automation
- Security-sensitive CI checks
- KVM-backed Firecracker: Each service runs in its own microVM with a separate guest kernel. (A macOS
Virtualization.frameworkbackend is planned; see Status above.) - Host-Reliant Disk Mounts: The guest microVM has no shell, utilities, or libraries. Service code and language runtimes (Bun, Node, Deno, QuickJS) are compiled on the host and attached as read-only virtual block devices (
/dev/vdband/dev/vdc). - VSOCK Multiplexing: Low-latency communication handshakes stream stdout/stderr and exit codes directly back to the host via virtual sockets, bypassing network interfaces.
- Resource Enforcement:
memoryMbandcpuLimitare applied to Firecracker machine config, whiletimeoutMsis enforced by a host-side watchdog that force-terminates timed-out VMs.cpuLimitis rounded up to whole vCPUs, which is the only granularity Firecracker accepts. - Preflight & Metric Timelines: Sub-millisecond logging of all VM lifecycle transitions (disk format, boot connect, execution, cleanup).
- Linux with KVM enabled (
/dev/kvmaccessible). firecrackeron yourPATH.e2fsprogs(providesmke2fs).- The musl target for the static guest agent:
rustup target add x86_64-unknown-linux-musl. - An uncompressed ELF
vmlinux. Distro/boot/vmlinuz-*files are compressed bzImages that Firecracker cannot boot; extract one with the kernel tree'sscripts/extract-vmlinux, or use a prebuilt Firecracker kernel, then pointIGNITE_KERNEL_PATH(or--kernel) at it.
Run ignite status to check KVM access and Firecracker availability.
git clone https://github.com/dev-dami/ignite.git
cd ignite
cargo build --releaseRelease binaries will be compiled under target/release/ignite-cli (installed as ignite).
ignite init hello-world
cd hello-worldignite run .To run with trace timelines of startup transitions:
ignite run . --verbose| Command | Purpose |
|---|---|
ignite init <name> |
Generate a new service scaffold |
ignite run <path> |
Build + execute service in a microVM |
ignite preflight <path> |
Run safety validator checks |
ignite serve |
Start HTTP REST API server |
| Runtime | Accepted versions | Default | Provisioned by ignite setup |
|---|---|---|---|
| Bun | 1.0, 1.1, 1.2, 1.3 |
1.3 |
Yes |
| Node | 18, 20, 22 |
20 |
No — install manually |
| Deno | 1.40, 1.41, 1.42, 2.0 |
2.0 |
No — install manually |
| QuickJS | 2024-01-13, 2023-12-09, latest |
latest |
No — install manually |
Runtimes are read from ~/.ignite/runtimes/ (override with IGNITE_RUNTIMES_ROOT).
A pinned spec such as bun@1.3 resolves to runtimes/bun@1.3/ and falls back to
runtimes/bun/ with a warning. Runtime binaries must be statically linked or
otherwise self-contained: the guest rootfs has no dynamic loader.
Only runtimes you install are available; ignite setup currently downloads Bun
only.
MIT (see LICENSE).
