Benchmarks

Every comparison, exact figures.

The full telemetry size comparison, both REDLINE speed campaigns, how each figure is derived, and what was verified.

All configurations

Complete archive bytes on the 342,409,609-byte telemetry capture, measured 2026-09-06
ConfigurationArchive bytesDecimal MBCompared with ZJX compactCompletion and restore checkCreation wall s (indicative)
ZJX 1.29.0 fast4,412,9844.41 MBZJX compact is same sizecompleted, restored and matched187.7
zpaq -m57,125,6747.13 MBZJX is 38.1% smaller (strongest comparator)completed, restored and matched199.2
zstd --ultra -22 --long=31 (tar)7,280,1107.28 MBZJX is 39.4% smallercompleted, restored and matched460.4
brotli -q 11 (tar)7,345,5387.35 MBZJX is 39.9% smallercompleted, restored and matched293.2
xz -9e (tar)7,612,0527.61 MBZJX is 42.0% smallercompleted, restored and matched350.3
zstd -19 --long=31 (tar)7,800,3287.80 MBZJX is 43.4% smallercompleted, restored and matched156.9
zstd -19 (tar)8,149,0508.15 MBZJX is 45.8% smallercompleted, restored and matched149.9
7-Zip LZMA2 -mx=9, single thread9,392,5189.39 MBZJX is 53.0% smallercompleted, restored and matched64.6
7-Zip LZMA2 -mx=99,666,9629.67 MBZJX is 54.3% smallercompleted, restored and matched40.7
RAR5 -m59,842,9209.84 MBZJX is 55.2% smallercompleted, restored and matched10.0
7-Zip PPMd -mx=912,612,27012.61 MBZJX is 65.0% smallercompleted, restored and matched14.2
bzip2 -9 (tar)34,456,46834.46 MBZJX is 87.2% smallercompleted, restored and matched25.3
gzip -9 (tar)40,176,03140.18 MBZJX is 89.0% smallercompleted, restored and matched4.9
zip -9 (deflate)40,176,33440.18 MBZJX is 89.0% smallercompleted, restored and matched4.9
lz4 -12 (tar)56,999,95857.00 MBZJX is 92.3% smallercompleted, restored and matched8.4

The strongest comparator is the smallest completed and verified non-ZJX archive. Percentages are 100 × (1 − ZJX bytes ÷ comparator bytes); a negative result would read as larger, an equal result as same size.

Every row on one scale

A linear axis from zero to the largest archive, 57.00 MB. No row is rescaled, truncated, or omitted.

  1. ZJX 1.29.0 compact4,412,984
  2. ZJX 1.29.0 fast4,412,984
  3. zpaq -m57,125,674
  4. zstd --ultra -22 --long=31 (tar)7,280,110
  5. brotli -q 11 (tar)7,345,538
  6. xz -9e (tar)7,612,052
  7. zstd -19 --long=31 (tar)7,800,328
  8. zstd -19 (tar)8,149,050
  9. 7-Zip LZMA2 -mx=9, single thread9,392,518
  10. 7-Zip LZMA2 -mx=99,666,962
  11. RAR5 -m59,842,920
  12. 7-Zip PPMd -mx=912,612,270
  13. bzip2 -9 (tar)34,456,468
  14. gzip -9 (tar)40,176,031
  15. zip -9 (deflate)40,176,334
  16. lz4 -12 (tar)56,999,958

Derivation

Exact bytes are the stored facts; percentages and megabytes are derived at build time and in the browser from the same module, so every surface rounds the same way.

signed_reduction_percent = 100 × (1 − Z / C)   with comparator bytes C > 0
raw_reduction_percent    = 100 × (1 − Z / R)   with raw input bytes R > 0
MB = bytes / 1,000,000

Featured values: Z = 4,412,984, C = 7,125,674, R = 342,409,609. Result: 38.1% against the comparator, 98.7% against raw input. Nothing is calculated from rounded megabyte strings.

Timing is indicative only

Wall time and peak memory in the size campaign come from single sequential runs on the quiesced ZJX laboratory host. Read them as order of magnitude. ZJX speed is qualified separately, in the REDLINE campaigns below.

REDLINE verified-creation campaigns

Verified creation: archive creation plus an independent integrity check, 12 paired rounds per campaign, class-weighted geometric mean of per-round ratios, 95% bootstrap intervals. Subject: ZJX 1.29.0 ultrafast objective, four workers, then an independent test. Comparators: tar | zstd -1 (default, single admitted thread), verified by zstd -t, and tar | zstd -1 -T4 (four threads, the matched thread budget). Host: Quiesced laboratory host under an exclusive lease, 8 logical CPUs; the measured executable is the one shipped in the released package. A ratio is comparator time over ZJX time, so a value above 1 means ZJX was faster. The two campaigns measured different cohorts and each is reported on its own.

Development cohort (RG017)

Sealed development cohort: silesia, enwik8, and a synthetic deduplication case; 12 paired rounds, 468 of 468 cells usable. The cohort the recipe was calibrated on.

1.247x the verified-creation speed of default tar | zstd -195% [1.223, 1.267]; Bonferroni over the three preregistered primary comparisons, lower bound 1.221; archive bytes 1.0005x the comparator's

Against default tar | zstd -1

  1. ZJX 1.29.0: ultrafast, four workers1.247x, faster
  2. tar | zstd -1, default1.00, the reference

Primary comparison: 95% [1.223, 1.267], Bonferroni-adjusted lower bound 1.221.

Against the matched thread budget

  1. ZJX 1.29.0: ultrafast, four workers0.820x
  2. tar | zstd -1 -T41.00, the reference

Exploratory comparison: 95% [0.807, 0.832]; -T0 measured the same. About 1.19x the default comparator's CPU.

Held-out cohort (RG018, one shot)

Four sealed members plus six privately held-out cases (about 1.86 GB, six workload classes) selected by a rule frozen before any measurement; ten classes, 12 paired rounds, 360 of 360 cells usable, run once. Held out and unseen at the freeze, measured once against the unchanged package.

1.1959x the verified-creation speed of default tar | zstd -195% [1.1867, 1.2043]; 6 of 6 held-out cases restored exactly before the timed rounds

Against default tar | zstd -1

  1. ZJX 1.29.0: ultrafast, four workers1.1959x, faster
  2. tar | zstd -1, default1.00, the reference

Reported lane: 95% [1.1867, 1.2043]. Faster on seven of ten cases.

The preregistered gate: matched thread budget

  1. ZJX 1.29.0: ultrafast, four workers0.8236x
  2. tar | zstd -1 -T41.00, the reference

Class-weighted point 0.8236; 95% bootstrap interval on a single preregistered comparison; no familywise adjustment: lower bound 0.8170 against a required 0.80. PASS. Per-case rows and the held-out-only reading, 0.7917 [0.7832, 0.8004], are in the tables below.

Development cohort (RG017): worker sweep and thread budgets

Sealed development cohort: silesia, enwik8, and a synthetic deduplication case; 12 paired rounds, 468 of 468 cells usable. The cohort the recipe was calibrated on. Archive bytes were identical at every worker count and byte-identical to both earlier release candidates. The qualified ultrafast configuration with four workers costs about 1.19x the CPU of default tar | zstd -1 and admits about 65 MiB at the default 4 MiB units and four workers (about 71 MB at four workers against about 12 MB at one).

ZJX 1.29.0 ultrafast at each worker setting against default tar | zstd -1, paired per-round ratios (comparator over ZJX)
ZJX settingRatio95% bootstrapReading
--workers 10.548x[0.539, 0.555]ZJX slower
--workers 21.062x[1.046, 1.077]ZJX faster
qualified configuration (ultrafast, four workers)1.247x[1.223, 1.267]ZJX faster
--workers 4, explicit1.261x[1.242, 1.282]ZJX faster
--workers 80.976x[0.962, 0.987]ZJX slower
The ZJX 1.29.0 ultrafast configuration with four workers against tar | zstd -1 at each thread budget (comparator over ZJX)
ComparatorRatio95% bootstrapReading
tar | zstd -1 -T20.964x[0.947, 0.980]exploratory; ZJX slower
tar | zstd -1 -T40.820x[0.807, 0.832]exploratory; ZJX slower
tar | zstd -1 -T00.820x[0.806, 0.836]exploratory; ZJX slower

Four workers is the sweet spot: it beats one, two, and eight workers, on this development cohort.

Held-out cohort (RG018): every case, both lanes

Four sealed members plus six privately held-out cases (about 1.86 GB, six workload classes) selected by a rule frozen before any measurement; ten classes, 12 paired rounds, 360 of 360 cells usable, run once. The six held-out cases were selected by a written eligibility rule and a deterministic hash before any compressor touched them, frozen with a manifest, and measured once against the unchanged package; 6 of 6 held-out cases restored exactly before the timed rounds. They are described here by workload class and size only. The gate lane compares ZJX ultrafast with four workers against tar | zstd -1 -T4 (four threads, the matched thread budget); the reported lane compares it with tar | zstd -1 (default, single admitted thread), verified by zstd -t. The last column is ZJX archive bytes over the comparator's.

Held-out campaign, per-case medians as paired ratios (comparator over ZJX), 12 rounds
CaseStatusClassInput bytesvs default tar | zstd -1vs tar | zstd -1 -T4Size ratio
Production telemetry capture, a later day than the sealed oneheld outstructured records821,029,7631.820x faster1.281x faster1.0015
Event-stream ticksheld outevent stream90,770,0110.859x slower0.638x slower1.0012
Application logheld outapplication logs195,392,1091.402x faster0.926x slower0.9936
Agent session traceheld outagent traces84,846,0901.139x faster0.712x slower1.0014
Database snapshotheld outdatabase snapshot95,162,3680.783x slower0.686x slower1.0046
Repository working tree, 24,997 filesheld outmixed repository575,334,2501.052x faster0.666x slower1.0812
Service telemetry capture, 2026-06-03sealedstructured telemetry342,409,6091.564x faster1.086x faster1.0014
enwik8 (public)sealedbulk text100,000,0001.785x faster0.921x slower1.0006
silesia (public)sealedpublic mixed211,938,5801.972x faster1.090x faster1.0005
Synthetic deduplication casesealedsynthetic dedupNot reported0.529x slower0.535x slower1.1034
The preregistered gate (class-weighted geometric mean against tar | zstd -1 -T4, lower bound must reach 0.80) and how it reads under other class structures
ReadingPoint95% bootstrapAgainst 0.80
The six held-out cases alone (exploratory, not the rule)0.7917[0.7832, 0.8004]exploratory
Reported lane: default tar | zstd -1, ten classes1.1959[1.1867, 1.2043]context, not a gate

The gate verdict follows the class structure fixed before measurement, where the two telemetry captures count as two classes (as one class, the ten-case reading is 0.7913). Against the four-thread comparator, ZJX led on the three large-record cases.

Public release record · REDLINE source note · Release Chronicle · The 1.29 support contract

How to read a measurement

Start with the version, dataset, settings, and comparison target. Then ask which operation was measured, whether every comparator completed, and exactly what was verified. Complete archive size includes format overhead; comparing it with raw input answers a different question from comparing it with another compressed archive, and the second question is the one that prices a migration.

  • Creation time: elapsed time to make an archive. Less time is not the same percentage as increased speed. Qualified timings come from a dedicated controlled host.
  • Memory: peak RSS is observed process memory. Configured limits and reserved memory are separate quantities.
  • Restoration: archive integrity testing, exact source comparison, and metadata comparison must be named separately.
  • Money: multiply the size advantage by eligible retained bytes and the storage rate you actually pay, then subtract compute, temporary space, migration, licensing, and restoration cost. The savings page does the first step only.

Missing measurements are Not reported, never zero.

Historical records

Earlier results from before the current campaign format, listed for lineage. Some compare with raw input rather than a competitor archive.

Previous campaign on the same input

ZJX 1.27 CIPHERGLASS (2026-09-05, development host) wrote 4,412,968 bytes for the compact objective against the same 7,125,674-byte strongest comparator. The 1.28.0 archive is exactly 16 bytes larger: the manifest-integrity footer LOCKWIRE adds to every archive. Previous campaign source note

Pre-NIGHTMARKET size records (incomplete version attribution)

Historical size records: bytes, with incomplete version attribution
DatasetInputZJX archiveComparator archive
Real telemetry (the featured capture, earlier build)342,409,6094,412,9687,125,674
Combined real telemetry1,256,880,59021,881,73925,717,553
Generated compact JSONL1,107,297,28813,088,37156,367,866
Generated sharded NDJSON256,002,0482,451,1233,976,428
Generated workflow artifacts10,655,25227,126186,018

Exact ZJX version and compression settings are not reported for these rows; they stay historical. Historical source note, updated 2026-08-22

Raw-input example: Silesia v1, ZJX 1.21 STREAMWALL

Twelve files from a public benchmark collection, compared with the uncompressed input rather than a competitor archive. The 2026-08-30 record reports integrity testing and exact extraction under a 1 GiB host ceiling, 768 MiB ZJX memory ceiling, and 64 GiB temporary-disk ceiling. The exact compression profile is not named in the public note.

Silesia v1: complete archive bytes, ZJX 1.21 STREAMWALL
QuantityExact bytesDecimal MB
Uncompressed input211,938,580211.938580
Complete ZJX archive52,997,29952.997299

The reduction is 100 × (1 − 52,997,299 / 211,938,580) = 74.994%, rounded to 75.0%. The historical ZJX 1.2 reference failed without producing an archive, so its memory figure compares a completed run with an incomplete one. Original source note, archive digest, and conditions

Release-to-release measurements

NIGHTMARKET (Fast versus Compact on four corpora) and RELICWIRE (1.26 versus 1.25.1 creation time on two corpora) are release-to-release results, not competitor comparisons. They are summarized with their scope on the releases page. The REDLINE predecessor gate (ultrafast against released 1.28.0 fast: a creation ratio of 335x and a verified-creation ratio of 253x on the four-member cohort at the diagnostic tier, with ultrafast archives were 27% to 1,000% larger than fast's on those corpora) compares two objectives with different goals within ZJX.

Sources

The evaluation report includes the command recipes for your data. Commercial evaluation