Splicebench
Splicebench was created by Diego Cabello to demonstrate the advantages of nab, a diffing utility also created by Diego Cabello.
Benchmark space100 versions · lower is better ↙
DRAG TO ORBIT · SCROLL TO ZOOMLOGARITHMIC AXES
The 3D library could not load. Check your internet connection and reopen this file.
About the benchmark
- Each point represents the selected history: 100 synthetic versions or 1,000 consecutive Wikipedia revisions. All three axes are logarithmic; less time and storage is closer to the shared origin.
- Distance measures how far a point is from (1 ms, 1 ms, 1 KiB), using equally weighted, normalized logarithmic axes. It depends on the axis limits. Each axis ends at a rounded tick just above the largest result in the selected history, so normalized distances can change between histories.
- A zigzag break mark on an axis indicates a compressed empty interval of at least a decade containing no measured points. Tick values on either side keep their units. Breaks are chosen per axis for the selected history and appear in 3D and in projections showing that axis; table values and distance rankings use the original, unbroken logarithmic scale.
- Measured timings include startup for every utility. Additional delta-only startup-adjusted points are estimates, not directly comparable to the measured store rows.
- For delta utilities, rebuild sums sequential patch applications from the initial base: 99 for synthetic histories or 999 for Wikipedia; storage excludes an index and checkpoints.
- For each startup-adjusted delta point, the measured time of the same number of no-work invocations is subtracted from rebuild time. These estimates still include file I/O and differ from actual in-process patch execution.
- Git is repacked after every commit; patch time includes the repack. Packed Git was measured in a separate run on the same seeded histories.
- Mercurial and Mercurial (chg) were measured separately on the same histories. The chg client uses a warmed, isolated command server; its client startup is included. Repository size counts the store and requirements file, excluding the working copy.
- Pijul 1.0.0-beta.26 rebuild uses
pijul archiveto create a compressed whole-repository tar file on disk; other stores return the file on stdout, so read timings are not identical operations. - NAB was remeasured separately on the same seeded histories. The graph measures patch and rebuild, not pack or recovery. A separate pack and recover comparison and its script measure those operations on identical records; the older and newer binaries use different archive framing.
- The measured NAB build uses zstd 1.5.7 for compressed literals.
- Warm cache, CLI startup included; median of three trials for every history except Linux MAINTAINERS. Synthetic histories use sparse edits.
- Linux MAINTAINERS is a single trial. It was measured once, not three times, so its numbers are one observation with no median and no spread; treat small differences between tools as noise. Sizes can also vary slightly between runs: Pijul's three Linux trials ranged from 34,634,601 to 34,669,453 bytes (0.1%), and only its first is plotted, to match.
- Machine: MacBook Air, Apple M4 (10 cores: 4 performance and 6 efficiency), 16 GiB memory, macOS 26.0.1.
- Hardware, operating system, and background load affect timing. Hardware alone should not change archive sizes for the same inputs, tool versions, settings, and metadata; different metadata or software versions can change sizes.
- NAB uses CommonCrypto for SHA-256 on macOS and OpenSSL on Linux. Both can use hardware SHA instructions; the checked Linux ARM OpenSSL build detected SHA support, but Linux x86 SHA-NI was not verified. NAB has ARM and x86 SSE4.2 hardware CRC32C paths selected at compile time, with a scalar fallback when the target features are unavailable. Hardware acceleration depends on the build and CPU.
- DNAB's patch and rebuild operations do not use application-level multicore workers. Some scanning uses ARM NEON SIMD on a single core; this is based on source inspection, not CPU profiling.
- Synthetic histories use seed
17879179514528422438. The George W. Bush Wikipedia workload uses 1,000 consecutive wikitext revisions from 2004-12-04 to 2005-01-09; revision manifest, results, Pijul results, and benchmark script. Pijul verified five historical revisions per trial; other tools verified all 1,000. - The Linux kernel MAINTAINERS workload uses 1,000 commits that touched that file, taken from the GitHub commits API pinned to
d89e1d18, ordered by committer timestamp (2026-06-02 to 2026-10-29). This is path history, not first-parent history: 417 of the 1,000 commits are merges, and only 173 of the 999 consecutive pairs are a Git parent and child, so successive versions can differ by more than one logical edit. The file is 0.90 to 0.95 MB per version. Manifest (commit IDs, Git parents, timestamps, SHA-256), results, Pijul results, benchmark script. Pijul verified five sampled historical revisions per trial; other tools verified all 1,000. - Read the synthetic scripts: Mercurial with chg, packed Git, other version stores, delta utilities, and the shared fixture generator.
- Full results: NAB, Mercurial, Mercurial with chg, Pijul (script), packed Git, other version stores, delta utilities, and startup baselines. See the data renderer for aggregation.
- Delta chains apply each patch in a separate process and read and write intermediate files; their timings include those costs as well as the patch algorithms.