Pullrun

Run the same OCI image
as container or VM

Cross-platform container + VM runtime with a content-addressed DAG store, P2P image sync, Kubernetes CRI, native Compose, MCP AI integration, and encrypted secrets — all in a single 12 MB binary.

12 MB
Binary size
400 ms
Container boot
160 ms
Apple VM boot
0
Daemon overhead

Everything you need, nothing you don't

Full Docker CE feature parity in a single 12 MB static binary — no daemon, no overlayfs, no lock-in.

🔄

Containers & VMs

Run the same OCI image as a runc container, Firecracker microVM, or Apple Silicon VM — no separate VM image build step.

🧬

Content-Addressed DAG Store

Zero-copy reads via rkyv + mmap. Layers stored once, deduplicated by content hash. Byte-identical across every node.

🌐

P2P Image Distribution

Nodes share image blocks peer-to-peer via gRPC and Bloom filters. One pull from registry; the rest delta-sync from each other.

☸️

Kubernetes CRI

Drop-in CRI shim with RuntimeClass support (pullrun-container / pullrun-vm), exec, attach, and port-forward.

🤖

MCP AI Integration

Native Model Context Protocol server — let AI agents run, stop, exec, and manage workloads through natural language.

🔐

Policy Engine

Cosign signature verification, SBOM evaluation, seccomp profiles, read-only rootfs — gate workloads before they run.

🐳

Docker Compose

Full Compose-compatible workflow: up, down, logs, ps, build — parse standard docker-compose.yml files.

🍎

Apple Silicon Native

Native macOS VM backend via Virtualization.framework. No Docker Desktop, no Linux VM — just native Apple performance.

📦

Encrypted Secrets

AES-256-GCM at rest, decrypted into workload tmpfs at runtime. pullrun secret create/get/ls — data stays encrypted on disk.

One command. Any platform. Zero daemon.

Install in 30 seconds and start running containers or VMs from the same OCI image.

# Install — one line, any OS $ curl -fsSL https://github.com/pullrun/pullrun/raw/main/install.sh | bash # Pull an image — 2x faster than Docker $ pullrun pull alpine:3.18 # Run as a container — 400 ms $ pullrun run alpine:3.18 --cmd echo hello hello # Run the same image as a VM — no rebuild $ pullrun run alpine:3.18 --backend vm # Compose workflow — drop-in replacement $ pullrun compose up -f myapp/compose.yml # AI agent control — MCP native $ pullrun mcp

Built different from the ground up

No overlayfs CVEs. No platform lock-in. No daemon tax.

1
Same image, any backend
OCI manifest IS the VM rootfs
2
Rootless by default
No sudo, no dockerd, no TCP socket
3
Content-addressed store
No overlayfs, no escape CVEs
4
P2P block sync
One registry pull for the whole cluster
5
Cross-platform
macOS, Linux, Windows — same binary
6
AI-native
MCP protocol for agentic workloads

Pullrun vs Docker

Same OCI images. Radically different architecture.

MetricPullrunDocker
First alpine:3.18 pull968 ms~2 s
Container run latency~400 ms~800 ms
Apple Silicon VM boot~160 msN/A
Idle daemon RSS24.6 MiB~90 MiB
Binary size12 MB~75 MB
Rootless by default
Containers + VMs from same image
P2P image sync
MCP AI integration
Content-addressed store
Optional daemon

Ready to pullrun?

Install in 30 seconds. macOS, Linux, or Windows.

$ curl -fsSL https://github.com/pullrun/pullrun/raw/main/install.sh | bash $ pullrun run alpine:3.18 --cmd hello hello