Gunnar

nordisk/znippy

znippy

znippy

A parallel, random-access archive: pack a directory at all-core speed, pull any single file back without unpacking the rest — and query the index in DuckDB / Polars / DataFusion, because it's just Arrow IPC.

⚡ GATLING — one all-core engine · zero rayon · zero-copy · ~11/12 cores

Mashup — one archive vs tar/zip/7z/parquet

znippy is the only archive that's all-core on both ends, random-access per file, and directly queryable — without pretending to beat zstd/7z on raw ratio:

capabilityznippytar + zstdzip7zparquet
All-core compress✅~ (-T0)◐✗✅
All-core decompress✅✗ serial✗✗✅
Random single-file read✅✗✅✗ (solid)— (columnar)
Query without the tool (DuckDB / Polars)✅✗✗✗✅
Best pure ratio◐✅ (-19)✗✅—

The full capability matrix and every measured per-backend throughput table (JAR / ZIP / gzip / bzip2 decode vs the legacy C tools) are in the full overview.

Measured — znippy vs Arrow-IPC / zstd

One byte-identical mixed corpus (compressible text + incompressible blobs) packed into a single compressed, queryable Arrow-IPC container two ways — znippy's all-core pipeline vs a stock arrow-rs FileWriter with CompressionType::ZSTD — then fully read back. Same box, same run, warmup + iterations:

v0.9.6 · oden · 32 cores · 2026-07-22

workloadcompress_mbscoresdecompress_mbsfilesin_mbpeak_rss_mbratio_x
arrowipc_mashup416.2232908.108000100052081.44
znippy_mashup111.893284668000100052081.47

Not the same job: znippy stores every file as its own random-access, blake3-verified chunk behind a queryable FST index and an immutable seal; the Arrow-IPC/zstd rival concatenates ~1000 files per record-batch into one zstd stream — smaller granularity traded away, no per-file addressing. So arrow's simpler batching wins raw compress throughput while znippy wins decompress and keeps capabilities arrow can't offer; both hit the same ratio on identical distinct data. Each side uses its library's default codec settings.

Read the real docs

Files

.cargo/
.githooks/
.github/
.nornir/
assets/
doc/
docs/
git-storage-trait/
legacy/
plugins/
tests/
xtask/
znippy/
znippy-build-thing/
znippy-cli/
znippy-common/
znippy-compress/
znippy-decompress/
znippy-iceberg/
znippy-zip-fixtures/
.gitignore
CLAUDE.md
Cargo.lock
Cargo.toml
LICENSE
README.md
WORKSPACE.md
bench_history.jsonl
rustfmt.toml

The list is cut short here. Clone the repository for every file.

Newest commits

c410c1681abdMerge qxml/quick-xml-0.41 into master (lane QXML): znippy-plugin-maven 0.10.1 on quick-xml 0.41 (RUSTSEC-2026-0194/-0195)2026-10-29
12b8b79783a9GREEN znippy-plugin-maven 0.10.1: quick-xml 0.36 -> 0.41 (RUSTSEC-2026-0194, RUSTSEC-2026-0195)2026-10-29
9c148549c4e3RED znippy-plugin-maven: pom parsing must build on quick-xml with the RUSTSEC-2026-0194/-0195 fixes2026-10-29
13eb229d5f85Merge pub/plugin-git-0.2.1 into master (lane PUB-R5H2): znippy-plugin-git 0.2.1, lock follows the sibling mains2026-10-28
544f3134509eznippy-plugin-git 0.2.1: the FORGE-SHALLOW header-probe fix as a publishable version; the lock follows the sibling mains2026-10-28