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) |