nordisk/znippy
.nornir/README-full.md
# znippy — complete overview
<!-- nornir:class: readme -->
> The **real** README: the full pitch, quickstart, what's-new, and every measured
> benchmark table. The repo-root [`README.md`](../README.md) is the slim face
> (title · mashup · pointers); this chapter is the heavy detail, and it is also
> folded into the manual [`docs/manual.pdf`](../docs/manual.pdf) by `nornir docs book`.
**Why znippy** — 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:
| capability | **znippy** | tar + zstd | zip | 7z | parquet |
|---|:--:|:--:|:--:|:--:|:--:|
| All-core **compress** | **✅** | ~ (`-T0`) | ◐ | ✗ | ✅ |
| All-core **decompress** | **✅** | ✗ serial | ✗ | ✗ | ✅ |
| Random single-file read | **✅** | ✗ | ✅ | ✗ (solid) | — (columnar) |
| **Query without the tool** (DuckDB / Polars) | **✅** | ✗ | ✗ | ✗ | ✅ |
| Per-file "skip if already compressed" | **✅** | ✗ | ✗ | ✗ | ✗ |
| Package/ecosystem metadata (maven / python / …) | **✅** | ✗ | ✗ | ✗ | ✗ |
| Best pure **ratio** | ◐ | ✅ (`-19`) | ✗ | ✅ | — |
*Full per-backend throughput tables are below — generated by `nornir bench run
znippy` and historized in the warehouse (machine + core count in each header).*
## What it does
- **Pack a directory at all-core speed** — a no-barrier Gatling pipeline across
every core; already-compressed inputs (`.jar`, `.gz`, `.crate`, `.png`,
`.parquet`, …) are stored verbatim, never re-coded.
- **Pull any single file back** without unpacking the rest — `O(log n)`/`O(key)`
via the sorted lookup sub-index + FST trie + `ZNPYMIDX` footer (`znippy get`).
- **Query it with no znippy library** — the lookup sub-index is a valid Arrow IPC
stream, so DuckDB / Polars / DataFusion read it directly (see
`.nornir/random-access.md`).
- **Package-aware metadata** via plugins (maven, python, …) — the ecosystem view
for airgap mirrors.
- **Dynamic ⇆ sealed** — an Iceberg-backed store that resumes across restarts,
then `seal()`s to a static, content-addressed native `.znippy` (blobs reused
byte-for-byte).
## Quickstart
```sh
# pack a directory across all cores, list it, then pull ONE file back
znippy compress ./mydir mydir.znippy
znippy list mydir.znippy
znippy get -i mydir.znippy -p path/inside/archive.txt -o out.txt # omit -o ⇒ stdout
# the index is plain Arrow IPC — query it with zero znippy code, e.g.:
# SELECT relative_path, blob_offset, blob_size FROM '<lookup>.arrow' WHERE relative_path = '…'
```
## What's new
The latest release cascade (znippy **0.9.2**, znippy-common **0.9.4**,
znippy-compress **0.9.3**, znippy-decompress **0.9.2**, znippy-cli **0.9.2**,
znippy-iceberg **0.1.3**, znippy-zoomies **0.1.11**, osm-katana **0.2.0**):
- **Iceberg with skade as the default catalog.** `znippy-iceberg`'s
`IcebergSink` / `IcebergZnippyReader` keep the archive's sub-index rows in
skade/Iceberg tables backed by a durable `catalog.redb` (`RedbCatalog`) — the
*dynamic* archive store: it survives a process restart, accepts new commits
(resume), and is queryable live (DuckDB/Polars over the Iceberg tables). The
`.znippy` sidecar holds pure blobs; metadata lives in the warehouse.
- **Sealed native export — `seal()`.** `znippy seal` (and
`znippy_iceberg::seal()`) snapshots that dynamic Iceberg store into a
**static, immutable, content-addressed native arrow-ipc `.znippy`**. Blobs are
reused **verbatim** (no recompress); only the metadata tail (sorted lookup +
fst trie + manifest + `ZNPYMIDX` footer) is rewritten, **byte-identical to a
fresh `compress`**. The result opens with the ordinary `ZnippyArchive` reader
with no warehouse needed. See `.nornir/iceberg-seal-export.md`.
- **Reboot-capable `ArrowIpcSinkAppend`.** A clone of the native arrow-ipc
writer that supports the full **write → restart → resume → seal** lifecycle:
append more entries across a process boundary, resume, then seal to a static
file — proven byte-exact by `znippy-iceberg/tests/lifecycle_seal.rs`, with A/B
parity against the one-shot writer (znippy-common 0.9.4 `meta_sink_append`).
- **osm-katana region-clip (`--clip` / `--poly`).** OSM → GeoParquet/PBF now
carves a region during conversion: `--clip` takes a bbox or preset
(`europe` / `nordics`), `--poly` clips to a region's **real shape** from an
Osmosis `.poly` or GeoJSON (Polygon/MultiPolygon) — e.g. the real Sweden
polygon — via a point-in-polygon test on the node stream. See
`.nornir/osm-katana-gatling-vs-rayon.md`.
- **Five arrow-ipc baseline benches.** The single-threaded metadata-seal tail
and cold random-access read path are now isolated, stable metrics (sub-index
write, footer seal, lookup re-materialise, fst trie, `locate_file`), baselined
**before** any write-path optimisation lands (bench-first gate) and audited
A/B against the append-clone. See `.nornir/arrow-ipc-benches.md`.
| crate | version | role |
|---|---|---|
| `znippy` | 0.9.2 | top-level (re-exports compress + decompress) |
| `znippy-cli` | 0.9.2 | `znippy` binary (compress/decompress/list/verify/seal/handlers) |
| `znippy-common` | 0.9.4 | trait + plugin API + `ArrowIpcSink` / `ArrowIpcSinkAppend` |
| `znippy-compress` | 0.9.3 | write path (walk → extract → chunk → compress → seal) |
| `znippy-decompress` | 0.9.2 | read path (decompress → reconstruct) |
| `znippy-iceberg` | 0.1.3 | Iceberg backend (skade default catalog) + `seal()` |
| `znippy-zoomies` | 0.1.11 | fast primitives: OSM index, gatling, psort, stree32 |
| `osm-katana` | 0.2.0 | OSM → GeoParquet/PBF + region-clip (`--clip`/`--poly`) |
<!-- nornir:gen:start:benches bold=false exclude=_st name=archive -->
**v0.9.6 · oden · 32 cores · 2026-07-22**
| workload | compress_mbs | compressed_chunks | cores | decompress_mbs | files | in_mb | ratio_x | raw_chunks |
|---|---|---|---|---|---|---|---|---|
| archive_binary_500mb | 1495 | 63 | 32 | 2714 | 1 | 500 | 6675 | 0 |
| archive_huge_2gb | 5335 | 256 | 32 | 2743 | 1 | 2048 | 8396 | 0 |
| archive_mixed | 1734 | 500 | 32 | 9087 | 700 | 207.30 | 1.01 | 200 |
| archive_mixed_repo | 2833 | 2 | 32 | 5522 | 6 | 530 | 1 | 67 |
| archive_random_500mb | 103.62 | 0 | 32 | 2730 | 1 | 500 | 1 | 63 |
| archive_real_crates | 2382 | 0 | 32 | 8954 | 9170 | 4280 | 1 | 9220 |
| archive_real_jars | 2047 | 0 | 32 | 10659 | 4731 | 5134 | 1 | 4805 |
| archive_real_wheels | 116.29 | 1670 | 32 | 8986 | 779 | 8945 | 1.02 | 7 |
| archive_small_10k | 154.48 | 10000 | 32 | 1730 | 10000 | 97.70 | 32.34 | 0 |
| archive_text_500mb | 1826 | 63 | 32 | 1393 | 1 | 500 | 7832 | 0 |
<!-- nornir:gen:end:benches -->
## Benchmarks
All numbers are generated by `nornir bench run znippy` (no hand-editing) and
stored in the warehouse keyed by git SHA. The header shows the machine + cores.
**`_st` rows are single-core** — the same decode pinned to one CPU
(`taskset -c 0`, so `available_parallelism()==1`); the rest use all cores. The
faster cell of each ours-vs-legacy pair is **bold**; `speedup_x` is ours ÷ legacy.
### znippy-zoomies decompressors vs legacy
Parallel pure-Rust decompressors against the legacy C tools, decoding the same
real Maven Central artifacts (the `_st` row is the honest per-core comparison).
**Raw SIMD-DEFLATE core (`linflate`) vs `miniz_oxide`** — single stream, single
core, decoding real class-file data (the shared inflate engine under
ljar/lgz/lzip-parallel; see `.nornir/inflate.md`).
<!-- nornir:gen:start:benches name=linflate -->
**v0.9.6 · oden · 32 cores · 2026-07-22**
| workload | linflate_mbs | miniz_mbs | speedup_x |
|---|---|---|---|
| linflate_guava | **651.98** | 480.05 | 1.36 |
| linflate_scala | **646.21** | 601.07 | 1.08 |
<!-- nornir:gen:end:benches -->
**Parallel JAR decode vs `unzip -p`**
<!-- nornir:gen:start:benches name=ljar -->
**v0.9.6 · oden · 32 cores · 2026-07-22**
| workload | ljar_mbs | speedup_x | unzip_mbs |
|---|---|---|---|
| ljar_guava | **1063** | 18.54 | 57.36 |
| ljar_scala | **1357** | 22.93 | 59.19 |
<!-- nornir:gen:end:benches -->
**Parallel ZIP decode vs `unzip -p`**
<!-- nornir:gen:start:benches name=lzip -->
**v0.9.6 · oden · 32 cores · 2026-07-22**
| workload | lzip_mbs | speedup_x | unzip_mbs |
|---|---|---|---|
| lzip_guava | **1266** | 22.95 | 55.13 |
| lzip_scala | **1747** | 31.19 | 56 |
<!-- nornir:gen:end:benches -->
**Parallel bzip2 decode vs C `lbzip2` (1995-lineage bzip2)**
<!-- nornir:gen:start:benches name=lbzip2 -->
**v0.9.6 · oden · 32 cores · 2026-07-22**
| workload | lbzip2_c_mbs | lbzip2_mbs | speedup_x |
|---|---|---|---|
| lbzip2_guava | **74.70** | 60.78 | 0.81 |
| lbzip2_scala | **134.73** | 86.07 | 0.64 |
<!-- nornir:gen:end:benches -->
**Parallel gzip decode vs `pigz -dc`**
<!-- nornir:gen:start:benches name=lgz -->
**v0.9.6 · oden · 32 cores · 2026-07-22**
| workload | lgz_mbs | pigz_mbs | speedup_x |
|---|---|---|---|
| lgz_guava | **334.32** | 274.19 | 1.22 |
| lgz_scala | **314.08** | 293.68 | 1.07 |
<!-- nornir:gen:end:benches -->
## Tests
Every Rust test in the workspace, grouped by the standard categories. Run
with `cargo test --workspace` (or `cargo nextest run --workspace`). Vendored
upstream-zstd C tests (see *Vendored C tests* below) run through the C
toolchain, not Cargo.
<!-- nornir:gen:start:tests -->
**Unit tests** (111)
| file | tests |
|---|---|
| `znippy-cli/src/lib.rs` | `compress_sign_then_verify_signed_round_trip`, `build_signer_missing_cert_emits_red_row`, `green_roundtrip_then_red_on_corruption` |
| `znippy-common/src/archive.rs` | `extract_file_verified_catches_corruption_fast_path_does_not`, `duplicate_rows_for_one_path_do_not_double_the_extracted_bytes`, `extract_file_rejects_out_of_bounds_blob_without_huge_alloc` |
| `znippy-common/src/codec.rs` | `test_roundtrip`, `test_multi_compress_same_ctx`, `test_parallel_contexts` |
| `znippy-common/src/decompress.rs` | `safe_output_path_accepts_normal_relative_paths`, `safe_output_path_rejects_zip_slip_and_absolute_paths`, `decompress_corrupt_archive_errors_not_panics`, `decompress_archive_with_wrong_index_schema_errors_not_panics`, `honest_chunk_reassembles_verbatim`, `absurd_fdata_offset_errors_instead_of_allocating`, `overflowing_fdata_offset_errors_instead_of_panicking`, `out_of_bounds_blob_still_errors` |
| `znippy-common/src/index.rs` | `skips_already_compressed_and_encrypted`, `compresses_plain_dump_and_config`, `current_and_older_versions_are_accepted`, `newer_version_is_rejected_clearly`, `writer_records_the_current_version`, `narrow_checksum_column_errors_instead_of_panicking`, `wide_checksum_column_errors_instead_of_truncating`, `correct_width_checksum_is_read_verbatim` |
| `znippy-common/src/meta_sink_append.rs` | `clone_fresh_path_is_byte_identical_to_original`, `native_append_roundtrips_old_and_new_files`, `create_archive_seeds_then_grows`, `create_archive_to_vec_is_filesystem_free_and_round_trips`, `archive_reader_matches_free_functions` |
| `znippy-common/src/plugins/conda_native.rs` | `matches_conda_extensions`, `filename_fallback_splits_name_version`, `schema_has_name_version_build_subdir` |
| `znippy-common/src/plugins/deb_native.rs` | `filename_fallback_splits_name_version_arch`, `matches_deb_and_udeb_only`, `schema_has_name_version_arch_control`, `extract_falls_back_to_filename_for_garbage`, `parses_control_from_uncompressed_control_tar`, `parses_control_from_xz_control_tar`, `parses_control_from_zst_control_tar`, `unknown_codec_falls_back_to_filename`, `malformed_ar_never_panics` |
| `znippy-common/src/plugins/gem_native.rs` | `matches_gem_only`, `filename_fallback_splits_at_version`, `filename_platform_suffix_is_not_a_distinct_field`, `schema_has_name_version_platform`, `parse_metadata_yaml_reads_name_version_platform`, `parse_metadata_yaml_defaults_platform_to_ruby` |
| `znippy-common/src/plugins/npm_native.rs` | `matches_tgz_only`, `filename_fallback_splits_at_version`, `schema_is_name_version` |
| `znippy-common/src/plugins/rpm_native.rs` | `parses_real_nevra_including_epoch_from_header`, `falls_back_to_filename_when_not_an_rpm`, `extract_prefers_header_over_filename`, `matches_rpm_only`, `schema_has_nevra_and_primary_columns`, `extracts_rich_primary_fields`, `malformed_headers_never_panic` |
| `znippy-common/src/plugins/skeletons.rs` | `parse_coords_splits_name_and_version`, `parse_coords_handles_no_version`, `skeletons_have_unique_sequential_type_ids`, `every_skeleton_matches_and_extracts` |
| `znippy-common/src/sign.rs` | `ed25519_round_trip`, `p256_round_trip`, `signer_from_pkcs8_round_trip_both_algs`, `tamper_chunk_hash_breaks_verification`, `wrong_ca_is_rejected`, `archive_root_changes_when_an_artifact_changes`, `archive_round_trip_signs_root`, `seal_signed_archive_round_trip`, `unsigned_seal_writes_no_signature_sections`, `tampering_a_signed_archive_is_detected`, `holger_verifies_a_served_artifact` |
| `znippy-common/src/poolplan.rs` | `pool_plan_is_bounded_by_input_and_budget` (the slot-pool lifecycle tests moved upstream with the pool, to `znippy-zoomies/tests/chunk_revolver_coalescing.rs`) |
| `znippy-compress/src/slot_packer.rs` | `fallback_byte_identical_to_io_uring` |
| `plugins/native/znippy-plugin-maven/src/pom.rs` | `test_parse_simple_pom`, `test_parse_project_gav`, `test_coord_filename` |
| `plugins/native/znippy-plugin-maven/src/resolver.rs` | `test_resolve_guava_transitive` |
| `plugins/native/znippy-plugin-media/src/tests.rs` | `png_dimensions_and_color`, `jpeg_exif_camera_orientation_datetime`, `wav_duration_rate_channels`, `mp3_tags_and_properties`, `mp4_video_dims_codecs_framerate`, `webm_matroska_dims_codecs_audio`, `plugin_meta_and_matching`, `plugin_schema_matches_row_keys`, `non_media_path_is_ignored`, `matrix_per_format_extraction` |
| `plugins/native/znippy-plugin-python/src/lib.rs` | `test_extract_metadata_from_path`, `test_sdist_not_wheel` |
| `plugins/native/znippy-plugin-python/src/native.rs` | `test_matches_path`, `test_extract_from_filename`, `test_sdist_extraction` |
| `plugins/native/znippy-plugin-python/src/wheel.rs` | `simple_wheel`, `pure_python_wheel`, `with_build_tag`, `normalized_name`, `not_a_wheel`, `dist_info_dir` |
| `plugins/native/znippy-plugin-skidbladnir/src/lib.rs` | `tags_a_db_dump`, `parses_manifest_version_and_watermark`, `manifest_with_garbage_json_falls_back_never_panics`, `secret_is_flagged_encrypted`, `does_not_claim_foreign_paths`, `schema_and_meta_are_consistent` |
| `plugins/native/znippy-plugin-skidbladnir/src/member.rs` | `classifies_every_top_level_dir`, `age_anywhere_is_secret`, `unknown_paths_are_not_claimed`, `component_mapping` |
**Integration tests** (49)
| file | tests |
|---|---|
| `tests/tests/append_and_reader_test.rs` | `archive_reader_selective_restore_roundtrip`, `archive_reader_missing_path_is_not_found_not_panic`, `append_files_grows_archive_and_both_generations_read_back` |
| `tests/tests/integration_test.rs` | `test_stream_compress_single_small_file`, `test_stream_compress_multiple_files`, `test_stream_compress_empty_file`, `test_stream_compress_large_file_multi_chunk`, `test_stream_compress_already_compressed_file_skipped`, `test_stream_compress_no_skip_forces_compression`, `test_stream_compress_empty_archive`, `test_compress_dir_basic`, `test_compress_dir_with_mixed_file_types`, `test_compress_dir_slots_roundtrip`, `test_index_schema_fields`, `test_read_znippy_index_after_compress`, `test_incompressible_data_stored_raw`, `test_selective_extract_by_pkg_type_and_repo`, `test_verify_via_decompress`, `test_list_archive_contents`, `test_manifest_roundtrip`, `test_manifest_empty_roundtrip`, `test_interpret_footer_single_v06`, `test_interpret_footer_multi_v07`, `test_multi_index_write_read_roundtrip`, `test_single_group_writes_v07`, `test_znippy_archive_extract_file_multi_chunk`, `test_get_file_via_lookup_and_trie`, `test_verify_detects_flipped_blob_byte` |
| `tests/tests/plugin_decompress_bomb_test.rs` | `npm_bomb_falls_back_to_filename`, `gem_bomb_falls_back_to_filename`, `conda_bomb_falls_back_to_filename` |
| `tests/tests/plugin_integration_test.rs` | `test_ingest_batch_cargo_plugin_extracts_metadata`, `test_ingest_batch_drain_transfers_ownership`, `test_ingest_batch_threshold_check`, `test_cargo_plugin_hyphenated_names` |
| `tests/tests/plugin_read_api_test.rs` | `maven_view_roundtrip_snapshot_and_classifier`, `maven_view_is_cached_and_o1`, `rust_view_roundtrip_and_isolation`, `python_view_roundtrip_wheel_and_sdist`, `npm_view_roundtrip_scoped_and_isolation`, `gem_view_roundtrip_platform_and_isolation`, `conda_view_roundtrip_index_json_and_isolation` |
| `tests/tests/rayon_free_law.rs` | `whole_workspace_is_rayon_free`, `only_the_shared_gatling_engine_owns_a_worker_pool`, `no_manifest_declares_rayon` |
| `tests/tests/repro_crate.rs` | `repro_crate_roundtrip` |
| `tests/tests/testmatrix_wiring.rs` | `testmatrix_roundtrip_and_render_inject_assert` |
| `znippy-iceberg/tests/lifecycle_seal.rs` | `iceberg_write_restart_resume_seal_static` |
| `znippy-iceberg/tests/round_trip.rs` | `iceberg_reader_round_trips_fixture_dir` |
**Doc tests** (1)
| file | doc-tests |
|---|--:|
| `znippy-common/src/plugins/gem_native.rs` | 1 |
<!-- nornir:gen:end:tests -->
## Criterion benchmarks
11 criterion targets across 4 bench files. Run with `cargo bench -p <crate>` and view HTML reports under `target/criterion/`.
### `znippy-zoomies/ljar`
| bench file | group | targets |
|------------|-------|---------|
| `znippy-zoomies/ljar/benches/inflate_bench.rs` | `benches` | `bench_inflate`, `bench_table_build`, `bench_flush_scan`, `bench_vs_miniz` |
| `znippy-zoomies/ljar/benches/jar_throughput.rs` | `benches` | `bench_jar_decompress`, `bench_jar_vs_zip_crate` |
### `znippy-zoomies/lzip-parallel`
| bench file | group | targets |
|------------|-------|---------|
| `znippy-zoomies/lzip-parallel/benches/inflate_bench.rs` | `benches` | `bench_inflate`, `bench_flush_scan`, `bench_vs_miniz` |
| `znippy-zoomies/lzip-parallel/benches/zip_throughput.rs` | `benches` | `bench_zip_decompress`, `bench_lzip_vs_zip_crate` |
## Vendored C tests (`znippy-zoomies/zstd-sys-rs/zstd`)
Upstream Facebook/zstd test suite carried in-tree for reproducible builds of the `zstd-sys-rs` bindings.
<details><summary><b>164 vendored test files</b> (click to expand)</summary>
| file |
|------|
| `znippy-zoomies/zstd-sys-rs/zstd/build/meson/tests/valgrindTest.py` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/compiler.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/errno.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/kernel.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/limits.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/math64.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/module.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/printk.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/stddef.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/swab.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/types.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/unaligned.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/include/linux/xxhash.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/macro-test.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/static_test.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/linux-kernel/test/test.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/test/OptionsTest.cpp` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/test/PzstdTest.cpp` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/test/RoundTrip.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/test/RoundTripTest.cpp` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/utils/test/BufferTest.cpp` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/utils/test/RangeTest.cpp` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/utils/test/ResourcePoolTest.cpp` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/utils/test/ScopeGuardTest.cpp` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/pzstd/utils/test/WorkQueueTest.cpp` |
| `znippy-zoomies/zstd-sys-rs/zstd/contrib/seekable_format/tests/seekable_tests.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/DEPRECATED-test-zstd-speed.py` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/automated_benchmarking.py` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/bigdict.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/checkTag.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/check_size.py` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/basic/args.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/basic/help.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/basic/memlimit.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/basic/output_dir.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/basic/version.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/cltools/zstdgrep.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/cltools/zstdless.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/common/format.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/common/mtime.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/common/permissions.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/common/platform.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/adapt.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/basic.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/compress-literals.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/format.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/golden.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/gzip-compat.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/levels.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/long-distance-matcher.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/multi-threaded.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/multiple-files.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/row-match-finder.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/stream-size.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/verbose-wlog.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/compression/window-resize.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/decompression/detectErrors.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/decompression/golden.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/decompression/pass-through.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/dict-builder/empty-input.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/dict-builder/no-inputs.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/dictionaries/dictionary-mismatch.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/dictionaries/golden.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-handling/directory-mirror.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-stat/compress-file-to-file.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-stat/compress-file-to-stdout.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-stat/compress-stdin-to-file.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-stat/compress-stdin-to-stdout.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-stat/decompress-file-to-file.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-stat/decompress-file-to-stdout.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-stat/decompress-stdin-to-file.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/file-stat/decompress-stdin-to-stdout.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/progress/no-progress.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/progress/progress.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/run.py` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/cli-tests/zstd-symlinks/zstdcat.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/datagencli.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/decodecorpus.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/external_matchfinder.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/external_matchfinder.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fullbench.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/block_decompress.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/block_round_trip.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/decompress_cross_format.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/decompress_dstSize_tooSmall.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/dictionary_decompress.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/dictionary_loader.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/dictionary_round_trip.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/dictionary_stream_round_trip.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/fse_read_ncount.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/fuzz.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/fuzz.py` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/fuzz_data_producer.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/fuzz_data_producer.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/fuzz_helpers.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/fuzz_helpers.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/fuzz_third_party_seq_prod.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/generate_sequences.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/huf_decompress.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/huf_round_trip.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/raw_dictionary_round_trip.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/regression_driver.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/seekable_roundtrip.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/seq_prod_fuzz_example/example_seq_prod.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/sequence_compression_api.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/simple_compress.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/simple_decompress.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/simple_round_trip.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/stream_decompress.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/stream_round_trip.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/zstd_frame_info.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/zstd_helpers.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzz/zstd_helpers.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/fuzzer.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/gzip-env.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/helin-segv.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/help-version.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/hufts.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/init.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/keep.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/list.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/memcpy-abuse.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/mixed.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/null-suffix-clobber.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/stdin.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/test-driver.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/trailing-nul.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/unpack-invalid.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/z-suffix.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/zdiff.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/zgrep-context.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/zgrep-f.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/zgrep-signal.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/gzip/znew-k.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/invalidDictionaries.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/largeDictionary.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/legacy.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/libzstd_builds.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/longmatch.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/loremOut.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/loremOut.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/paramgrill.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/playTests.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/poolTests.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/rateLimiter.py` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/config.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/config.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/data.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/data.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/levels.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/method.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/method.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/result.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/result.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/regression/test.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/roundTripCrash.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/seqgen.c` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/seqgen.h` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/test-license.py` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/test-variants.sh` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/test-zstd-versions.py` |
| `znippy-zoomies/zstd-sys-rs/zstd/tests/zstreamtest.c` |
</details>
## Dependency graph
<!-- nornir:gen:start:depgraph -->

<!-- nornir:gen:end:depgraph -->