Cold boot to agent ready Measured
112ms
- Stock kernel810
- allnoconfig175
- Expedited RCU140
- virtio reset patch112
Open source · written in Rust · in development
Kiri runs your containers with one minimal VM, one daemon and a single clone3. No dockerd, no containerd, no shims, no runc. It speaks the Docker CLI and API you already use.
p50 of 30 runs to create an alpine container, run true, exit and remove it, through the Docker Engine API with --network none.
Same test, same API: Docker Desktop 119.1 ms, OrbStack 270.3 ms.
Through the same docker CLI: Kiri 13.4 ms, Docker Desktop 115.8 ms, OrbStack 281.7 ms.
Measured Cold VM to agent ready in 112 ms, down from 810 ms.
$ kiri run --rm alpine echo "ntakịrị" prints ntakịrị. $ kiri run -d --name cache redis prints a container ID. $ kiri ps lists the running redis container. $ docker ps shows the same container, because Kiri answers the Docker API.
Why it's fast
A container start on Docker Desktop or OrbStack crosses a chain of programs, each with its own socket and process. Kiri's crosses one Rust daemon that calls the kernel directly. All three are driven by the same docker CLI. Watch it slowed down to see each stop, or in real time to feel the gap.
Five hops. One shim process stays resident for every running container.
The same five hops, and a shim per running container.
One daemon creates namespaces, cgroups and mounts itself. Nothing per container is left running. Most of this time is the docker CLI starting up; Kiri's engine part is about 1.3 ms.
p50 of 30 runs on one Apple Silicon Mac, all three through the same docker CLI with --network none, since Kiri has no container networking yet. Stops are drawn evenly; only the totals are figures. Details and caveats are in the benchmarks below.
Measured
The VM, the channel between your Mac and the VM, and the binaries already run. These numbers come from one Apple Silicon Mac.
Cold boot to agent ready Measured
112ms
Mac to VM round trip Measured
31µs
p50 over vsock. p99 is 62 µs.
Inside the VM Measured
360KB
Rust PID 1. The kernel reaches it in 8 ms.
Memory for running containers
OrbStack, like Docker Desktop, keeps a shim per container. On OrbStack: 143 × 7.9 MB = 1.13 GB Measured
Kiri keeps none, with one daemon on a 10 MB budget: 0 MB Target
Benchmarks
The container lifecycle is measured on all three engines, on one machine, with the fairness notes beside it. Kiri's other container operations are still targets: design budgets we hold ourselves to, not results. Every figure says which it is.
bench/results.json…alpine → true → exit → removed. p50 of 30 runs, p99 alongside. Milliseconds on a log scale, lower is better.
OrbStack measured against Kiri targets. Milliseconds, lower is better, one linear scale. Docker Desktop has not been measured for these yet.
Megabytes resident, lower is better. Docker Desktop has not been measured for these yet.
The kernel work underneath a container start, measured inside a Linux 7.2 VM.
| Operation | Time | Relative time |
|---|
Both runtimes are timed on the same machine. Kiri's lifecycle and memory targets will be replaced with measurements, on that machine, once the daemon runs containers end to end. Until then the chart draws them hatched and labels them "target".
This page renders straight from bench/results.json. Change the file and the page changes with it.
| Runtime | Metric | Value | Status |
|---|
Architecture
On macOS, Kiri boots a single Linux VM through Apple's Virtualization.framework, with a custom kernel and a 360 KB Rust init as PID 1. The host and guest talk over vsock. Inside, the Kiri daemon creates each container with clone3.
One VM for every container. From cold to agent ready takes 112 ms Measured, and the kernel reaches PID 1 in 8 ms.
Requests cross vsock to the guest, not a chain of Unix sockets. The p99 round trip is 62 µs Measured.
No per-container process. A clean guest shutdown takes 2.2 ms Measured.
The app
Kiri's window is drawn with AppKit and the system WebKit. No Electron, no bundled browser. It shows the VM's live numbers while it runs.
clone3 on your kernelContainers
No containers yet
Containers you start with kiri run show up here. The runtime lands in milestone 2.
Planned for stormglass
stormglass is a desktop client for Kubernetes. The plan is for Kiri to ship inside it later as the built-in Docker runtime, so stormglass users get containers on their Mac without installing OrbStack or Docker Desktop. One app, one small VM, nothing else to keep updated.
ntakịrị
The name
In Igbo, ntakịrị means "small" or "a little". We took the end of the word as our name because it is the whole idea: a little code, a little memory, a little time. We hope we do the word justice.
Install
Kiri is pre-release. Install instructions and the source will land here with the first build. When it does, this is all it should take:
$ kiri run alpine
Not released yet