Show HN: Pullrun – Run One OCI Image as a Container, Firecracker, or Apple VM Pullrun, a new single-binary OCI runtime, launches as an open-source tool that runs the same OCI image as a container, Firecracker microVM, Apple Silicon VM, Kubernetes workload, or AI agent task without requiring a daemon or separate VM images. The 12 MB static binary uses a content-addressed DAG store and peer-to-peer image distribution, aiming to unify multiple execution engines across development, production, and AI workloads. Run the same OCI image as a container, Firecracker microVM, Apple Silicon VM, Kubernetes workload, or AI agent task. No daemon required. No overlayfs. No separate VM images. ⚑ 30-Second Install -install β€’ β€’ -quick-start πŸš€ Quick Start β€’ -architecture πŸ—οΈ Architecture β€’ -why-pullrun 🎯 Why Pullrun? β€’ -features πŸ—ΊοΈ Feature Map β€’ -kubernetes ☸️ Kubernetes πŸ€– AI Agents Pullrun is a single-binary OCI runtime that runs the same image as a container or a VM. It stores layers in a content-addressed DAG no overlayfs , syncs blocks peer-to-peer, and fits in 12 MB. Why this matters: Modern infrastructure uses too many execution engines β€” Docker for dev, containerd for production, Firecracker for isolation, CRI for Kubernetes, MCP agents for AI. Each has its own image format, storage, and operational model β€” even though they all run the same OCI images. Pullrun collapses these layers into one runtime. Key differentiators: Containers and VMs from the same image β€” no separate VM build step, no separate VM image format Content-addressed DAG store β€” zero-copy mmap reads, deduplicated by content hash, byte-identical across every node P2P image distribution β€” one registry pull per cluster, rest sync peer-to-peer at LAN speed 12 MB static binary β€” no daemon required by default, optional runtime daemon for background services Also included: Kubernetes CRI shim beta , Docker Compose support, MCP server for AI agents, policy engine Cosign, SBOM, seccomp , P2P sync layer, and AES-256-GCM encrypted secrets β€” all in the same binary. Apple Silicon VM macOS default β€” 3 s pullrun run alpine:3.18 --cmd "echo" --cmd "hello pullrun" --attach -t Firecracker microVM Linux β€” 400 ms pullrun run alpine:3.18 --backend vm --cmd "echo" --cmd "hello pullrun" --attach -t Container Linux β€” 400 ms pullrun run alpine:3.18 --cmd "echo" --cmd "hello pullrun" Windows WSL2 β€” same image, same command, same store pullrun.exe run alpine:3.18 --cmd "echo" --cmd "hello pullrun" One command, any platform curl -fsSL https://github.com/pullrun/pullrun/raw/main/install.sh | bash | Platform | What you get | |---|---| macOS | brew tap pullrun/tap && brew install pullrun β†’ native binary, no Xcode | Linux | APT package or direct download, systemd service requires runc for containers, /dev/kvm for VMs | Windows | pullrun.exe + WSL2 auto-provisioning, runc + Firecracker | Manual install options macOS Homebrew β€” pre-built, no build deps brew tap pullrun/tap && brew install pullrun From source make build && export PATH="$PWD/bin:$PATH" Cross-compile Windows CLI cd cli/pullrun && GOOS=windows GOARCH=amd64 CGO ENABLED=0 go build -o pullrun.exe . ── Pull any OCI image ────────────────────────────────────────── pullrun pull alpine:3.18 968 ms β€” ~2x faster than Docker ── Run as a container Linux ───────────────────────────────── pullrun run alpine:3.18 --cmd "echo" --cmd "hello pullrun" ── Run as a microVM macOS/Linux ───────────────────────────── pullrun run alpine:3.18 --backend vm --cmd "echo" --cmd "hello" --attach -t ── Interactive shell with detach ────────────────────────────── pullrun run alpine:3.18 --tty --attach --cmd /bin/sh Ctrl-P Ctrl-Q β†’ detach workload keeps running pullrun exec