Skip to main content

Benchmarks

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
HostApple M2 Pro (MacBook Pro, Mac14,10) — 12-core, 8P + 4E · 16 GB unified memory
OSmacOS 26.5 (25F71)
Enginepurrchiver rev d48d34e · libarchive 3.8.7 · level 5
Measured2026-05-29
Native tool versions on this machine
Native command-line tool versions on this machine
7-Zip (7zz)26.01 (arm64)
Info-ZIP zip3.0 (Apple-modified)
tar (bsdtar)3.5.3 (libarchive 3.7.4)
xz5.8.3
zstd1.5.7
lz41.10.0
lzip1.26
brotli1.2.0
bzip21.0.8
gzipApple gzip 479
cpio (bsdcpio)3.5.3 (libarchive 3.7.4)
ditto / aa / hdiutilmacOS 26.5 system tools

1. Multi-file containers

Compressible (47.2 MB)

Compressible (47.2 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
FormatPurrchiverdittoziptar7zzaa
zip0.12s / 0.3%0.11s / 0.3%0.17s / 0.3%0.24s / 0.3%
7z0.25s / 0.0%0.18s / 0.0%
tar.gz0.12s / 0.3%0.11s / 0.3%
tar.bz25.23s / 0.0%5.41s / 0.0%
tar.xz0.23s / 0.0%0.53s / 0.0%
tar.zst0.02s / 0.0%0.02s / 0.0%
tar.lz0.40s / 0.0%0.51s / 0.0%
tar.lz40.03s / 0.4%0.03s / 0.4%
aar0.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)
FormatPurrchiverdittoziptar7zzaa
zip0.61s / 100.0%0.81s / 100.0%0.87s / 100.0%0.65s / 100.0%
7z1.90s / 100.0%1.91s / 100.0%
tar.gz0.85s / 100.0%0.84s / 100.0%
tar.bz23.56s / 100.5%3.63s / 100.5%
tar.xz7.00s / 100.0%12.04s / 100.0%
tar.zst0.05s / 100.0%0.05s / 100.0%
tar.lz8.40s / 101.4%12.05s / 101.4%
tar.lz40.06s / 100.0%0.06s / 100.0%
aar0.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)
FormatPurrchiverdittoziptar7zzaa
zip0.14s / 21.6%0.94s / 56.0%0.13s / 17.4%0.14s / 23.6%
7z0.28s / 1.2%0.09s / 1.0%
tar.gz0.24s / 2.6%1.13s / 8.0%
tar.bz20.61s / 0.7%1.76s / 2.4%
tar.xz0.26s / 1.2%1.78s / 3.3%
tar.zst0.26s / 1.4%1.11s / 4.8%
tar.lz0.36s / 1.2%1.75s / 3.3%
tar.lz40.24s / 3.1%1.10s / 11.3%
aar0.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)
FormatPurrchiverdittoziptar7zzaa
zip1.91s / 98.6%3.14s / 98.6%2.58s / 98.8%2.06s / 98.6%
7z6.33s / 97.5%6.89s / 97.5%
tar.gz3.26s / 98.6%3.27s / 98.6%
tar.bz213.11s / 99.0%13.18s / 98.8%
tar.xz8.20s / 97.5%56.84s / 97.5%
tar.zst0.32s / 97.9%0.20s / 97.9%
tar.lz42.05s / 98.2%46.45s / 98.2%
tar.lz40.23s / 98.9%0.21s / 98.9%
aar0.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)
FormatPurrchivernative CLI
gzip0.05s / 0.3%0.04s / 0.3%
bzip21.80s / 0.0%1.87s / 0.0%
xz0.15s / 0.0%0.15s / 0.0%
zstd0.01s / 0.0%0.01s / 0.0%
brotli0.02s / 0.0%0.35s / 0.0%
lzma0.14s / 0.0%0.14s / 0.0%
lz40.01s / 0.4%0.01s / 0.4%
lzip0.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)
FormatPurrchivernative CLI
gzip0.60s / 100.0%0.56s / 100.0%
bzip22.44s / 100.5%2.53s / 100.4%
xz7.18s / 100.0%7.56s / 100.0%
zstd0.04s / 100.0%0.02s / 100.0%
brotli0.04s / 100.0%25.38s / 100.0%
lzma9.25s / 101.4%10.56s / 101.4%
lz40.04s / 100.0%0.02s / 100.0%
lzip9.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)
FormatPurrchivernative
tar0.25s / 189.2%1.09s / 441.5%
cpio0.24s / 116.3%1.08s / 115.3%
iso0.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)
FormatPurrchivernative
tar0.17s / 100.0%0.18s / 100.0%
cpio0.21s / 100.0%0.66s / 100.0%
iso0.21s / 100.2%0.08s / 100.0%

4. Encrypted variants (AES-256 / AEA — crypto overhead)

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)
FormatPurrchivernative (7zz / aa)
zip + AES-2562.14s / 98.6%2.15s / 98.6%
7z + AES-2566.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
HostApple M4 (Mac mini, Mac16,10) — 10-core, 4P + 6E · 16 GB unified memory
OSmacOS 26.5 (25F71)
Enginepurrchiver rev d48d34e · libarchive 3.8.7 · level 5
Measured2026-05-29
Native tool versions on this machine
Native command-line tool versions on this machine
7-Zip (7zz)26.01 (arm64)
Info-ZIP zip3.0 (Apple-modified)
tar (bsdtar)3.5.3 (libarchive 3.7.4)
xz5.8.3
zstd1.5.7
lz41.10.0
lzip1.26
brotli1.2.0
bzip21.0.8
gzipApple gzip 479
cpio (bsdcpio)3.5.3 (libarchive 3.7.4)
ditto / aa / hdiutilmacOS 26.5 system tools

1. Multi-file containers

Compressible (47.2 MB)

Compressible (47.2 MB) — Purrchiver vs native command-line tools (seconds, lower is better)
FormatPurrchiverdittoziptar7zzaa
zip0.09s / 0.3%0.08s / 0.3%0.13s / 0.3%0.21s / 0.3%
7z0.15s / 0.0%0.14s / 0.0%
tar.gz0.09s / 0.3%0.08s / 0.3%
tar.bz24.24s / 0.0%4.45s / 0.0%
tar.xz0.17s / 0.0%0.42s / 0.0%
tar.zst0.02s / 0.0%0.01s / 0.0%
tar.lz0.30s / 0.0%0.40s / 0.0%
tar.lz40.02s / 0.4%0.02s / 0.4%
aar0.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)
FormatPurrchiverdittoziptar7zzaa
zip0.47s / 100.0%0.66s / 100.0%0.69s / 100.0%0.50s / 100.0%
7z1.47s / 100.0%1.49s / 100.0%
tar.gz0.68s / 100.0%0.68s / 100.0%
tar.bz22.90s / 100.5%2.96s / 100.4%
tar.xz4.82s / 100.0%8.99s / 100.0%
tar.zst0.04s / 100.0%0.03s / 100.0%
tar.lz6.73s / 101.4%8.96s / 101.4%
tar.lz40.04s / 100.0%0.03s / 100.0%
aar0.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)
FormatPurrchiverdittoziptar7zzaa
zip0.08s / 21.6%0.11s / 22.8%0.07s / 17.4%0.08s / 23.6%
7z0.15s / 1.2%0.07s / 0.7%
tar.gz0.12s / 2.6%0.10s / 2.4%
tar.bz20.38s / 0.7%0.38s / 0.7%
tar.xz0.12s / 1.2%0.26s / 1.1%
tar.zst0.11s / 1.4%0.11s / 1.5%
tar.lz0.18s / 1.2%0.26s / 1.1%
tar.lz40.11s / 3.1%0.11s / 3.1%
aar0.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)
FormatPurrchiverdittoziptar7zzaa
zip1.48s / 98.6%2.44s / 98.6%2.02s / 98.8%1.59s / 98.6%
7z4.60s / 97.5%5.06s / 97.5%
tar.gz2.52s / 98.6%2.51s / 98.6%
tar.bz210.48s / 99.0%10.73s / 98.8%
tar.xz6.68s / 97.5%32.62s / 97.5%
tar.zst0.18s / 97.9%0.10s / 97.9%
tar.lz23.98s / 98.2%32.49s / 98.2%
tar.lz40.12s / 98.9%0.11s / 98.9%
aar0.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)
FormatPurrchivernative CLI
gzip0.03s / 0.3%0.03s / 0.3%
bzip21.47s / 0.0%1.53s / 0.0%
xz0.11s / 0.0%0.11s / 0.0%
zstd0.01s / 0.0%0.01s / 0.0%
brotli0.02s / 0.0%0.28s / 0.0%
lzma0.11s / 0.0%0.09s / 0.0%
lz40.01s / 0.4%0.01s / 0.4%
lzip0.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)
FormatPurrchivernative CLI
gzip0.45s / 100.0%0.45s / 100.0%
bzip21.99s / 100.5%2.05s / 100.4%
xz4.42s / 100.0%4.42s / 100.0%
zstd0.03s / 100.0%0.01s / 100.0%
brotli0.03s / 100.0%20.46s / 100.0%
lzma5.73s / 101.4%5.75s / 101.4%
lz40.03s / 100.0%0.01s / 100.0%
lzip4.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)
FormatPurrchivernative
tar0.11s / 189.2%0.09s / 189.2%
cpio0.10s / 116.3%0.10s / 115.3%
iso0.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)
FormatPurrchivernative
tar0.08s / 100.0%0.07s / 100.0%
cpio0.08s / 100.0%0.45s / 100.0%
iso0.12s / 100.2%0.04s / 100.0%

4. Encrypted variants (AES-256 / AEA — crypto overhead)

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)
FormatPurrchivernative (7zz / aa)
zip + AES-2561.64s / 98.6%1.64s / 98.6%
7z + AES-2564.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.