Keg. Download
Apple Containerization · Native macOS

Containers on
Apple Silicon.

The Docker Desktop replacement for macOS. Native SwiftUI. Hardware-level isolation. Sub-second boot. Open source forever.

macOS 26+ Tahoe M1 / M2 / M3 / M4 Apache 2.0

Universal disk image · Signed & notarized · Auto-updating

Fig. 01 — Container list, Keg for macOS SwiftUI · Virtualization.framework
Keg
Keg
System Running
Overview
📊 Dashboard
Workloads
📦 Containers 4
🔗 Compose
☸️ Kubernetes
Content
💿 Images
🔨 Builds
System
🌐 Networks
💾 Volumes
🔑 Registries
▶ Run Container...
↻ Refresh
NameImageStatusIDPortsCPUMemory
web-frontend nginx:latest Running a1b2c3d4e5f6 8080:80 0.3% 24 MB
api-server node:20-alpine Running b2c3d4e5f6a1 3000:3000 1.2% 85 MB
postgres-db postgres:16-alpine Running c3d4e5f6a1b2 5432:5432 0.1% 42 MB
redis-cache redis:7-alpine Running d4e5f6a1b2c3 6379:6379 0.0% 12 MB
worker-queue alpine:3.20 Stopped e5f6a1b2c3d4
build-runner alpine:latest Created f6a1b2c3d4e5
618ms
Container Start
55ms
Exec Latency
69MB
Idle Memory
341
Tests Passing
01

Everything you need.

Containers, images, networks, volumes, builds, Compose, Kubernetes. All native. All fast.

No. 01Boot

Sub-second Boot

618ms average container start. No daemon warmup, no shared VM spin-up. Each container boots its own micro-VM in under a second — 50× faster than Docker Desktop's cold start.

No. 02Isolation

Hardware Isolation

Per-container VMs via Virtualization.framework. Real hardware boundaries, not namespace tricks.

No. 03Footprint

69MB Idle

Docker Desktop idles at 500MB to 2GB. Keg gives you your RAM back.

No. 04Compat

Docker API

Full Engine API on a Unix socket. docker ps, docker run, docker compose. It all works.

No. 05Cluster

Kubernetes

One-click K8s cluster. kindest/node + kubeadm. kubectl ready in 90 seconds.

No. 06License

Open Source

Apache 2.0, free forever. No seat licenses, no feature gates, no telemetry.

02

Drop-in replacement.

Same CLI. Same Compose files. Same API. Just faster, lighter, and with real isolation.

Native CLIListing 01
# Run containers $ container run -d --name web -p 8080:80 nginx web # View logs $ container logs web "GET / HTTP/1.1" 200 # Exec into container $ container exec web cat /etc/nginx/nginx.conf worker_processes auto;
Docker CLI via KegListing 02
# Point Docker at Keg $ export DOCKER_HOST=unix://$HOME/.keg/docker.sock $ docker ps CONTAINER ID IMAGE STATUS PORTS a1b2c3d4e5f6 nginx Up 2m 0.0.0.0:8080->80 $ docker info Server: Keg (Apple Containerization)
03

Your compose files. Zero changes.

Dependency ordering, networks, volumes, port mapping, env vars. Keg's orchestrator handles it all.

docker-compose.ymlListing 03
services: web: image: nginx:latest ports: ["8080:80"] depends_on: [api] api: image: node:20-alpine environment: - DATABASE_URL=postgres://db/app depends_on: [db] db: image: postgres:16-alpine volumes: [pgdata:/var/lib/postgresql/data] volumes: pgdata:
LifecycleListing 04
$ keg compose up -d Compose up: my-app ==> Service: db ==> Service: api ==> Service: web Compose up finished. $ keg compose ps NAME SERVICE STATE my-app-db db running my-app-api api running my-app-web web running $ keg compose down
04

Local K8s. 90 seconds.

Full cluster inside an Apple Container. kubeadm, CNI, kubeconfig. Ready for kubectl.

01

Create Cluster

One click in Keg. kindest/node boots with kubeadm init.

kubectl get nodes NAME STATUS ROLES keg-k8s Ready control-plane
02

Deploy

Apply manifests. Deployments, services, configmaps, secrets.

kubectl apply -f deploy.yaml kubectl get pods nginx-abc12 1/1 Running
03

Scale & Update

Scale replicas, rolling updates, exec, logs. Full kubectl.

kubectl scale deploy nginx --replicas=3 kubectl set image deploy/nginx ... kubectl logs -f deploy/nginx
05

Numbers don't lie.

Benchmarked against Docker Desktop and OrbStack.

Docker DesktopOrbStackKeg
Runtimecontainerd in Linux VMcontainerd in Linux VMApple VMs
IsolationProcess-levelProcess-levelHardware
Boot time~30s~2s<1s
Idle RAM~2 GB~500 MB69 MB
Docker API
Kubernetes
Native macOSElectronNative-ishSwiftUI
License$9/seat/moPaidApache 2.0

Built for Apple Silicon.
Open source, free forever.

Requires macOS 26 (Tahoe) and Apple Silicon (M1/M2/M3/M4).