Wall-clock and compression ratio for every format Purrchiver writes,
measured head-to-head against the standard command-line tool for each format.
Purrchiver runs at its default Normal (level 5); the native tools run at
their own defaults — i.e. what you actually get out of the box from each.
Numbers come from purrchiver-bench, a thin CLI over the shipping engine
(the same code in the app), run serially — one compressor at a time with the
whole machine to itself — best-of-2. The harness is reproducible:
bench/scripts/gen-corpora.sh then bench/scripts/comprehensive.py.
Results
Each cell is time / ratio, where ratio = output ÷ input (lower = smaller
output). A — means that tool doesn’t write that format. Start with the
Summary, or pick a machine for the full tables:
Purrchiver matches or beats the standard command-line tools across
essentially every format it writes — at its default settings, and there’s
no format where it’s embarrassingly behind. Two machines below: an 8-P-core
M2 Pro and a 4-P-core M4.
The wins come from a multithreaded engine:
tar.xz — roughly 5–7× faster than the built-in tar. On a 170 MB
mixed corpus: 8.2 s vs 56.8 s on the M2 Pro (~7×), 6.7 s vs 32.6 s on the
M4 (~5×). Nothing else on macOS makes a fast tar.xz.
Multi-file ZIP — parallel shard-and-merge. Faster than the built-in
ZIP tools, single- or multi-file (M2 Pro: 1.91 s vs the built-in tools'
2.06–3.14 s; the M4 holds the same order at 1.48–2.44 s).
7z is at parity with the standard 7z tooling — same ratio, a hair
faster (M2 Pro 6.33 s vs 6.89 s).
Small-file folders pack leaner and faster than the built-in tar —
no AppleDouble/xattr bloat (189 % overhead vs tar’s 441 %) — and at half
the size of the system’s default zip.
Streams hold parity with the standard CLIs; lzip is ~30–60% faster.
It’s a scaling story, not a single number. The biggest wins are on the
multithreaded paths (tar.xz, 7z, parallel ZIP), where wall-clock tracks
performance-core count and memory bandwidth — so the margins are larger on
the 8-P-core M2 Pro than the 4-P-core M4, while the single-threaded stream
formats land closer together. That’s why results are reported per machine:
switch tabs for the full tables.
Honest caveats.Brotli isn’t apples-to-apples — Purrchiver compresses
it at a fixed quality while the standard brotli CLI defaults to max quality
11, so that row isn’t a fair speed comparison. iso on large data favours the
system’s built-in disk-image tool. And ZIP archives ≥ 4 GiB fall back to a
correct single-threaded path (parallel Zip64 is deferred).
Apple M2 Pro (MacBook Pro, Mac14,10) — 12-core, 8P + 4E — test environment
Host
Apple M2 Pro (MacBook Pro, Mac14,10) — 12-core, 8P + 4E · 16 GB unified memory
Compressible (47.2 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
ditto
zip
tar
7zz
aa
zip
0.12s / 0.3%
0.11s / 0.3%
0.17s / 0.3%
—
0.24s / 0.3%
—
7z
0.25s / 0.0%
—
—
—
0.18s / 0.0%
—
tar.gz
0.12s / 0.3%
—
—
0.11s / 0.3%
—
—
tar.bz2
5.23s / 0.0%
—
—
5.41s / 0.0%
—
—
tar.xz
0.23s / 0.0%
—
—
0.53s / 0.0%
—
—
tar.zst
0.02s / 0.0%
—
—
0.02s / 0.0%
—
—
tar.lz
0.40s / 0.0%
—
—
0.51s / 0.0%
—
—
tar.lz4
0.03s / 0.4%
—
—
0.03s / 0.4%
—
—
aar
0.03s / 0.1%
—
—
—
—
0.03s / 0.1%
Incompressible (48.0 MB)
Incompressible (48.0 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
ditto
zip
tar
7zz
aa
zip
0.61s / 100.0%
0.81s / 100.0%
0.87s / 100.0%
—
0.65s / 100.0%
—
7z
1.90s / 100.0%
—
—
—
1.91s / 100.0%
—
tar.gz
0.85s / 100.0%
—
—
0.84s / 100.0%
—
—
tar.bz2
3.56s / 100.5%
—
—
3.63s / 100.5%
—
—
tar.xz
7.00s / 100.0%
—
—
12.04s / 100.0%
—
—
tar.zst
0.05s / 100.0%
—
—
0.05s / 100.0%
—
—
tar.lz
8.40s / 101.4%
—
—
12.05s / 101.4%
—
—
tar.lz4
0.06s / 100.0%
—
—
0.06s / 100.0%
—
—
aar
0.08s / 100.0%
—
—
—
—
0.05s / 100.0%
Many small files (2.3 MB)
Many small files (2.3 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
ditto
zip
tar
7zz
aa
zip
0.14s / 21.6%
0.94s / 56.0%
0.13s / 17.4%
—
0.14s / 23.6%
—
7z
0.28s / 1.2%
—
—
—
0.09s / 1.0%
—
tar.gz
0.24s / 2.6%
—
—
1.13s / 8.0%
—
—
tar.bz2
0.61s / 0.7%
—
—
1.76s / 2.4%
—
—
tar.xz
0.26s / 1.2%
—
—
1.78s / 3.3%
—
—
tar.zst
0.26s / 1.4%
—
—
1.11s / 4.8%
—
—
tar.lz
0.36s / 1.2%
—
—
1.75s / 3.3%
—
—
tar.lz4
0.24s / 3.1%
—
—
1.10s / 11.3%
—
—
aar
0.91s / 2.0%
—
—
—
—
0.22s / 2.0%
Mixed (169.9 MB)
Mixed (169.9 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
ditto
zip
tar
7zz
aa
zip
1.91s / 98.6%
3.14s / 98.6%
2.58s / 98.8%
—
2.06s / 98.6%
—
7z
6.33s / 97.5%
—
—
—
6.89s / 97.5%
—
tar.gz
3.26s / 98.6%
—
—
3.27s / 98.6%
—
—
tar.bz2
13.11s / 99.0%
—
—
13.18s / 98.8%
—
—
tar.xz
8.20s / 97.5%
—
—
56.84s / 97.5%
—
—
tar.zst
0.32s / 97.9%
—
—
0.20s / 97.9%
—
—
tar.lz
42.05s / 98.2%
—
—
46.45s / 98.2%
—
—
tar.lz4
0.23s / 98.9%
—
—
0.21s / 98.9%
—
—
aar
0.23s / 98.6%
—
—
—
—
0.15s / 98.8%
2. Single-file compression streams
Purrchiver's .xz is multithreaded; the native xz is single-threaded by default. Brotli isn't apples-to-apples — Purrchiver uses Apple's Compression framework at a fixed quality, while native brotli defaults to max quality 11.
Text — compressible (15.7 MB)
Text — compressible (15.7 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
native CLI
gzip
0.05s / 0.3%
0.04s / 0.3%
bzip2
1.80s / 0.0%
1.87s / 0.0%
xz
0.15s / 0.0%
0.15s / 0.0%
zstd
0.01s / 0.0%
0.01s / 0.0%
brotli
0.02s / 0.0%
0.35s / 0.0%
lzma
0.14s / 0.0%
0.14s / 0.0%
lz4
0.01s / 0.4%
0.01s / 0.4%
lzip
0.14s / 0.0%
0.38s / 0.0%
Random — incompressible (32.0 MB)
Random — incompressible (32.0 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
native CLI
gzip
0.60s / 100.0%
0.56s / 100.0%
bzip2
2.44s / 100.5%
2.53s / 100.4%
xz
7.18s / 100.0%
7.56s / 100.0%
zstd
0.04s / 100.0%
0.02s / 100.0%
brotli
0.04s / 100.0%
25.38s / 100.0%
lzma
9.25s / 101.4%
10.56s / 101.4%
lz4
0.04s / 100.0%
0.02s / 100.0%
lzip
9.26s / 101.4%
13.61s / 101.4%
3. Store-only containers (no compression — pack time + overhead)
Many small files (2.3 MB)
Many small files (2.3 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
native
tar
0.25s / 189.2%
1.09s / 441.5%
cpio
0.24s / 116.3%
1.08s / 115.3%
iso
0.26s / 289.6%
0.27s / 270.8%
Mixed (169.9 MB)
Mixed (169.9 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
AEA goes through Apple's AppleArchive framework for both tools (scrypt + lzfse), so the output is identical and archives are cross-readable — the native aa opens Purrchiver's password-encrypted .aea and vice-versa.
Mixed (169.9 MB)
Mixed (169.9 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
native (7zz / aa)
zip + AES-256
2.14s / 98.6%
2.15s / 98.6%
7z + AES-256
6.58s / 97.5%
7.25s / 97.5%
AEA (encrypted)
0.22s / 98.9%
0.18s / 98.9%
Apple M4 (Mac mini, Mac16,10) — 10-core, 4P + 6E — test environment
Host
Apple M4 (Mac mini, Mac16,10) — 10-core, 4P + 6E · 16 GB unified memory
Compressible (47.2 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
ditto
zip
tar
7zz
aa
zip
0.09s / 0.3%
0.08s / 0.3%
0.13s / 0.3%
—
0.21s / 0.3%
—
7z
0.15s / 0.0%
—
—
—
0.14s / 0.0%
—
tar.gz
0.09s / 0.3%
—
—
0.08s / 0.3%
—
—
tar.bz2
4.24s / 0.0%
—
—
4.45s / 0.0%
—
—
tar.xz
0.17s / 0.0%
—
—
0.42s / 0.0%
—
—
tar.zst
0.02s / 0.0%
—
—
0.01s / 0.0%
—
—
tar.lz
0.30s / 0.0%
—
—
0.40s / 0.0%
—
—
tar.lz4
0.02s / 0.4%
—
—
0.02s / 0.4%
—
—
aar
0.03s / 0.1%
—
—
—
—
0.03s / 0.1%
Incompressible (48.0 MB)
Incompressible (48.0 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
ditto
zip
tar
7zz
aa
zip
0.47s / 100.0%
0.66s / 100.0%
0.69s / 100.0%
—
0.50s / 100.0%
—
7z
1.47s / 100.0%
—
—
—
1.49s / 100.0%
—
tar.gz
0.68s / 100.0%
—
—
0.68s / 100.0%
—
—
tar.bz2
2.90s / 100.5%
—
—
2.96s / 100.4%
—
—
tar.xz
4.82s / 100.0%
—
—
8.99s / 100.0%
—
—
tar.zst
0.04s / 100.0%
—
—
0.03s / 100.0%
—
—
tar.lz
6.73s / 101.4%
—
—
8.96s / 101.4%
—
—
tar.lz4
0.04s / 100.0%
—
—
0.03s / 100.0%
—
—
aar
0.05s / 100.0%
—
—
—
—
0.04s / 100.0%
Many small files (2.3 MB)
Many small files (2.3 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
ditto
zip
tar
7zz
aa
zip
0.08s / 21.6%
0.11s / 22.8%
0.07s / 17.4%
—
0.08s / 23.6%
—
7z
0.15s / 1.2%
—
—
—
0.07s / 0.7%
—
tar.gz
0.12s / 2.6%
—
—
0.10s / 2.4%
—
—
tar.bz2
0.38s / 0.7%
—
—
0.38s / 0.7%
—
—
tar.xz
0.12s / 1.2%
—
—
0.26s / 1.1%
—
—
tar.zst
0.11s / 1.4%
—
—
0.11s / 1.5%
—
—
tar.lz
0.18s / 1.2%
—
—
0.26s / 1.1%
—
—
tar.lz4
0.11s / 3.1%
—
—
0.11s / 3.1%
—
—
aar
0.55s / 0.7%
—
—
—
—
0.09s / 0.7%
Mixed (169.9 MB)
Mixed (169.9 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
ditto
zip
tar
7zz
aa
zip
1.48s / 98.6%
2.44s / 98.6%
2.02s / 98.8%
—
1.59s / 98.6%
—
7z
4.60s / 97.5%
—
—
—
5.06s / 97.5%
—
tar.gz
2.52s / 98.6%
—
—
2.51s / 98.6%
—
—
tar.bz2
10.48s / 99.0%
—
—
10.73s / 98.8%
—
—
tar.xz
6.68s / 97.5%
—
—
32.62s / 97.5%
—
—
tar.zst
0.18s / 97.9%
—
—
0.10s / 97.9%
—
—
tar.lz
23.98s / 98.2%
—
—
32.49s / 98.2%
—
—
tar.lz4
0.12s / 98.9%
—
—
0.11s / 98.9%
—
—
aar
0.14s / 98.6%
—
—
—
—
0.12s / 98.8%
2. Single-file compression streams
Purrchiver's .xz is multithreaded; the native xz is single-threaded by default. Brotli isn't apples-to-apples — Purrchiver uses Apple's Compression framework at a fixed quality, while native brotli defaults to max quality 11.
Text — compressible (15.7 MB)
Text — compressible (15.7 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
native CLI
gzip
0.03s / 0.3%
0.03s / 0.3%
bzip2
1.47s / 0.0%
1.53s / 0.0%
xz
0.11s / 0.0%
0.11s / 0.0%
zstd
0.01s / 0.0%
0.01s / 0.0%
brotli
0.02s / 0.0%
0.28s / 0.0%
lzma
0.11s / 0.0%
0.09s / 0.0%
lz4
0.01s / 0.4%
0.01s / 0.4%
lzip
0.11s / 0.0%
0.29s / 0.0%
Random — incompressible (32.0 MB)
Random — incompressible (32.0 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
native CLI
gzip
0.45s / 100.0%
0.45s / 100.0%
bzip2
1.99s / 100.5%
2.05s / 100.4%
xz
4.42s / 100.0%
4.42s / 100.0%
zstd
0.03s / 100.0%
0.01s / 100.0%
brotli
0.03s / 100.0%
20.46s / 100.0%
lzma
5.73s / 101.4%
5.75s / 101.4%
lz4
0.03s / 100.0%
0.01s / 100.0%
lzip
4.44s / 101.4%
7.33s / 101.4%
3. Store-only containers (no compression — pack time + overhead)
Many small files (2.3 MB)
Many small files (2.3 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
native
tar
0.11s / 189.2%
0.09s / 189.2%
cpio
0.10s / 116.3%
0.10s / 115.3%
iso
0.12s / 289.6%
0.17s / 270.8%
Mixed (169.9 MB)
Mixed (169.9 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
AEA goes through Apple's AppleArchive framework for both tools (scrypt + lzfse), so the output is identical and archives are cross-readable — the native aa opens Purrchiver's password-encrypted .aea and vice-versa.
Mixed (169.9 MB)
Mixed (169.9 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
Format
Purrchiver
native (7zz / aa)
zip + AES-256
1.64s / 98.6%
1.64s / 98.6%
7z + AES-256
4.72s / 97.5%
5.15s / 97.5%
AEA (encrypted)
0.19s / 98.9%
0.17s / 98.9%
Generated from bench/ against the shipping engine. Re-run
bench/scripts/comprehensive.py and refresh data/benchmarks.yaml when the
engine changes or a new machine is added.