Skip to content

Acknowledgements

None of this would exist without the people who built the formats, libraries, and tools Archivey leans on — whether we depend on their code directly, learned from their design, or just used their project to check our own work. This page is where we say thanks and give credit properly.

License texts for adapted kernels live next to the code (src/archivey/internal/streams/unix_compress.py, src/archivey/internal/backends/rar_parser.py). Packaging extras and codec rationale: Formats, library analysis.

Thanks

Thanks to the maintainers and contributors of every project below — especially the ones whose work shaped our design without ever becoming a dependency. When we built our own parser or stream layer instead of wrapping a library, it’s usually because it needed to fit Archivey’s architecture and behave consistently across formats, not because the original wasn’t good. If we missed a project that should be here, open an issue or a PR — genuinely.

Adapted source

Project Role in Archivey License
uncompresspy (Tiago Gomes) LZW kernel for unix-compress (.Z) adapted into UnixCompressDecompressorStream / LzwState. Not a runtime dependency; [unix-compress] was removed when the kernel was vendored into core. BSD-3-Clause
rarfile (Marko Kreen) RAR3 SHA-1 / string-to-key and Unicode filename decompression ported into the native RAR metadata parser. Also a dev-only oracle and fixture source (below). ISC

Format references, oracles, and corpora

These are not on the primary read path (except where noted).

Project Role
py7zr (Hiroshi Miura et al.) 7z format reference and dev oracle / optional external corpus (ARCHIVEY_PY7ZR_TEST_FILES). Reading is native (a pure-Python header parser over stdlib codecs, so the common 7z archive needs no third-party package); writing is not shipped yet.
rarfile RAR format reference, dev oracle, optional corpus (ARCHIVEY_RARFILE_TEST_FILES), and two legacy fixtures under tests/fixtures/rar/ (RAR 1.5 / 2.0). Reading metadata is native; member data uses RARLAB unrar, because the RAR decompression algorithm is not licensed for reimplementation.
libarchive (+ libarchive-c) Optional cross-format corpus oracle (ARCHIVEY_LIBARCHIVE_TEST_FILES → libarchive’s libarchive/test uuencoded archives). Dev-only; not a runtime backend.
7-Zip / 7z CLI (p7zip) Fixture builder and anti-item / encrypted-ZIP oracle in tests (when installed).
RARLAB unrar / rar Runtime decompressor for RAR member data; fixture generator for committed RAR samples.

Seekable-stream design references

Indexed / seekable decompressors shaped the stream layer even when Archivey does not depend on them. Archivey loads one accelerator library per process: rapidgzip covers gzip and bzip2, and standalone indexed_bzip2 is deliberately not imported because loading both corrupts the heap on macOS. Full scoring lives in library analysis; the accelerator lifecycle notes are in known issues.

Project Role
python-xz (Rogdham) Design reference for native XZ block-index seeking / synthetic single-block streams (xz.py over stdlib lzma). Evaluated and not used as a dependency (was briefly pinned dead in [all], then removed).
rapidgzip (mxmlnkn) Runtime [seekable] accelerator for gzip and bzip2 (IndexedBzip2File bundled inside rapidgzip).
indexed_bzip2 / indexed_gzip Evaluated for random access; standalone indexed_bzip2 is deliberately not imported (macOS dual-load heap corruption with rapidgzip). Same author lineage as rapidgzip; also relevant via ratarmount.
indexed_zstd (martinellimarco) Evaluated for efficient seeking over arbitrary .zst; deferred (frame-granularity only; C++ coexistence risk). Tracked in IDEAS.md.
pyzstd Evaluated for zstd decode / SeekableZstdFile (Seekable Zstd container only). Decode instead targets stdlib compression.zstd (Python 3.14+) and backports.zstd below it, so zstd needs no permanent third-party dependency.
zstandard Former zstd backend; replaced after the compression-library evaluation.

Runtime dependencies (optional extras)

Bare pip install archivey has no third-party runtime deps. Named extras pull:

Extra Packages
[recommended] pyppmd, inflate64, brotli, lz4, pybcj, backports.zstd (Python before 3.14; 3.14+ uses stdlib compression.zstd), cryptography, pycdlib, tqdm
[seekable] rapidgzip
[free-threaded] the subset of [recommended] that keeps the GIL disabled — pycdlib, lz4, tqdm, backports.zstd, and cryptography on 3.14+ only. See Platforms and threading
[all] [recommended] + [seekable]

There is no extra per format: member codecs are shared across containers, so [recommended] is one broad bundle rather than a set of names a caller has to reason about. RAR member data additionally needs the RARLAB unrar binary, which no extra can supply. RAR5 BLAKE2sp verification needs no package at all — it is implemented natively on stdlib hashlib.

Stdlib (always): zipfile, tarfile, gzip, bz2, lzma, zlib, and on 3.14+ compression.zstd.

Development and test dependencies

Declared in the PEP 735 dev / docs / fuzz groups (not user-facing extras):

Package Use
py7zr, rarfile, libarchive-c Format oracles / optional external corpora
ncompress LZW compressor for .Z fixtures (decode is native)
pycdlib, cryptography, backports.zstd, lz4, brotli Exercise optional backends in the default dev env
urllib3, fsspec Real third-party stream objects in input tests
hypothesis Property tests for safety logic
pytest, pytest-cov, pytest-timeout, coverage Test runner / coverage
ruff, pyrefly, ty, pre-commit Lint and type-check
mkdocs, mkdocs-material, mkdocstrings, … Docs site (docs group)
atheris Coverage-guided fuzz (fuzz group; CI-only)