Recorded run · 11 October 2026
Apple M4 Pro, macOS 27.0.1, 8 vCPU / 8 GB each
Velox 1.7.1 against Docker Desktop 4.94.0 and OrbStack 2.2.3, in one
campaign: the same Mac, the same night, one engine resident at a time,
each at a verified 8 vCPU / 8 GB, all three emptied first and driven by the
same docker CLI and compose plugin. Six rounds ran the engines
in all six orders, so each went first, middle and last twice. Medians, n=6
(n=3 for builds and compose, n=1 for the memory phases). A verdict needs at
least 15% and non-overlapping spreads; anything closer is on par. Rows marked
† were re-measured the same morning in the same rotation, after Velox
adopted a 3 s stop default and the disk-reclaim test was fixed.
| Metric | Velox | Docker Desktop | OrbStack | vs Docker Desktop | vs OrbStack |
|---|---|---|---|---|---|
| Install footprint | 327 MB | 2,198 MB | 696 MB | 6.7x smaller | 2.1x smaller |
| Startup, quit to API-ready | 0.59 s | 1.79 s | 1.35 s | 3.1x faster | 2.3x faster |
| Idle RAM, whole engine | 667 MB | 2,306 MB | 767 MB | 3.5x less | on par |
| Idle RAM, after resource saver | 133 MB | 989 MB | 753 MB | 7.4x less | 5.7x less |
| Idle CPU, idle state (after saver) | 0.00 % | 0.51 % | 0.15 % | 0% vs 0.51% | 0% vs 0.15% |
| RAM with 21 containers running | 1,543 MB | 3,098 MB | 1,563 MB | 2.0x less | on par |
| RAM 3 min after removing them | 1,566 MB | 3,052 MB | 1,149 MB | 1.9x less | 1.4x behind |
| Container launch | 0.09 s | 0.13 s | 0.21 s | 1.4x faster | 2.3x faster |
| Parallel launch, 20 containers | 0.76 s | 0.98 s | 1.66 s | 1.3x faster | 2.2x faster |
| Network, container to host | 97.3 Gbit/s | 24.4 Gbit/s | 58.4 Gbit/s | 4.0x faster | 1.7x faster |
| Network, container to container | 165 Gbit/s | 92.2 Gbit/s | 91.4 Gbit/s | 1.8x faster | 1.8x faster |
| Published port, 1 stream | 47.9 Gbit/s | 12.4 Gbit/s | 49.3 Gbit/s | 3.9x faster | on par |
| Published port, 4 streams | 20.2 Gbit/s | 25.6 Gbit/s | 30.3 Gbit/s | 1.3x behind | 1.5x behind |
| docker cp out, 1 GiB | 715 MB/s | 220 MB/s | 694 MB/s | 3.2x faster | on par |
| docker cp in, 1 GiB | 932 MB/s | 148 MB/s | 546 MB/s | 6.3x faster | 1.7x faster |
| VirtioFS bind-mount read, cached | 2,753 MB/s | 2,327 MB/s | 2,048 MB/s | 1.2x faster | 1.3x faster |
| Small-file extract, 4,000 files | 2.06 s | 2.35 s | 1.15 s | on par | 1.8x behind |
| Named-volume write | 2,303 MB/s | 1,771 MB/s | 1,050 MB/s | 1.3x faster | 2.2x faster |
| Image extraction, docker load | 5.87 s | 6.38 s | 5.65 s | on par | on par |
| Incremental build | 1.35 s | 1.48 s | 2.06 s | on par | 1.5x faster |
| Postgres pgbench TPS | 15,750 | 14,693 | 6,550 | on par | 2.4x more |
| compose down, SIGTERM-ignoring † | 3.31 s | 3.50 s | 10.6 s | on par | 3.2x faster |
| Disk still held 150 s after deleting ~5 GB † | 0 MB | 1,120 MB | 0 MB | all returned | on par |
All three passed every functional probe: bind mounts,
host.docker.internal, TCP, UDP and IPv6 publishing,
per-container host IPs, privileged ports, BuildKit with attestations, and
linux/amd64, linux/arm/v7 and
linux/386 emulation. Velox and OrbStack add direct
<name>.local container access. Velox returns memory by
stopping the idle engine after 5 minutes, because macOS 27's memory balloon
frees nothing, so the 3-minute post-teardown row catches it before that. The
4-stream published-port result swings between 20 and 60 Gbit/s on macOS 27 for
every Velox build tested, 1.7.0 included. The Mac-to-VM direction of Apple's NAT
measures about 14 Gbit/s with no Velox code in the path; on macOS 26.6 it was a
steady 60. compose down measures the stop grace period for
containers that ignore SIGTERM: Velox and Docker Desktop ship 3 s, OrbStack keeps
Docker's 10 s. Disk reclaim is a single sample per engine, taken 150 s after a
restart.
Read the
full report,
with every raw value and its caveats, or inspect the runnable harness in
docs/bench.