kvz

native macOS kubernetes

99 msone pod to Ready
257 MBmemory at idle
1,000pod VMs, 0 failures

Upstream Kubernetes 1.35 in one binary for Apple Silicon. Every Linux pod boots as its own VM in about 100 ms, next to macOS VMs and native Mac processes, in the same cluster.

See what's inside

Why kvz

Kubernetes that runs on the Mac,
not in a VM on the Mac.

No Linux VM

The control plane runs directly on macOS

kube-apiserver etcd scheduler controllers

Upstream Kubernetes 1.35 in one process

Linux, macOS and native pods in one cluster

kvz — zsh
~ ❯ kubectl get pods -o custom-columns-file=runtime.cols
NAMERUNTIMESTATUS
web-7d9f6linuxRunning
ios-builddarwinRunning
macos-ci-0macosRunning

One pod to Ready in

99ms

4× faster than k3s in Lima

0.44s
to get 20 pods ready
3× faster than k3s in Lima
API ready after restart
API creates per second

Each pod runs
in its own VM

0 failures in a 1,000 pod VM test
50 pods per round on a Mac Studio
Memory use at idle
257 MB kvz 2.5 GB Apple cluster 3.2 GB k3s in Lima Each block is 50 MB
3–16× faster than
Kubernetes in a VM

Medians from three M4 Mac minis, compared with k3s in Lima and Apple container cluster

Runtimes

Four kinds of pod.
One cluster.

Pick one with runtimeClassName. kvz creates the RuntimeClasses for you.

  1. linuxdefault

    Each pod boots its own small Linux VM through Virtualization.framework, cold, every time.

  2. macos

    A full macOS virtual machine with a copy-on-write disk. Great for macOS CI and clean test machines.

  3. darwin

    Native macOS processes on the host. For Xcode, code signing and the GPU.

  4. apple

    A container run by Apple's container tool. kvz's first runtime, kept as a baseline.

100ms
to boot a Linux pod VM
kvz — zsh
~ ❯ kubectl get pods
NAMERUNTIMESTATUSREADY IN
web-7d9f6linuxRunning0.1 s
macos-ci-0macosRunning18 s
ios-builddarwinRunning46 ms
legacy-0appleRunning0.7 s

Benchmarks

Measured, not promised.

kvz against k3s in Lima and Apple container cluster, median of three M4 Mac minis unless noted.

kvz, in each chart's color k3s in Lima Apple container cluster
Time until every pod is ready
nginx pods started at once, lower is better
One pod to Ready
lower is better
API server throughput
2,000 ConfigMaps from 32 clients, operations per second, higher is better
Idle cost
empty cluster, lower is better
API latency
lower is better
From 9.8 s to 0.25 s
20 pods to Ready on a Mac Studio, after each change, log scale
Four Macs, one cluster
a Mac Studio server with three Mac mini agents
1.68 sfor 200 Linux pods, each its own VM
10.3 sfor 1,000 macOS process pods
50 sfor 8 macOS VMs, two per Mac

Full method and raw numbers in BENCHMARKS.md.

Install

A cluster in under a minute.

Needs an Apple Silicon Mac with macOS 26 or later.