About
About this project
Haven started as an internal tool for moving build output between two CI runners without paying for the same bytes twice.
Origin
In early 2025 we were pushing a 400 MB tarball to object storage on every merge. Storage was cheap enough that nobody minded, but restore time was not, and neither was the bandwidth bill once the pipeline ran on every pull request. The first version was 600 lines and did nothing but chunk and reassemble. It has grown, but not by much.
It was published in January 2026 because a few people outside the team asked for it. That is the entire ambition of the project: be useful to the small number of people with the same problem.
Scope
Things Haven will not become:
- A backup tool. Use restic or borg; both are better at it and have been reviewed properly.
- A package manager or artifact registry.
- An encryption tool. Compose it with something built for that.
- A general compression format. Chunk compression is planned, but the goal remains deduplication rather than ratio.
Reporting problems
Bugs and questions go to hello@zanity.net.
For anything involving an archive that will not extract, include the output of
haven inspect and the version you created it with.
If you believe you have found a way to make extract write outside its
destination directory, please write to the same address with
security in the subject and we will get back to you within a few days.
Contributing
Patches are welcome, preferably small ones. The test suite must pass on linux/amd64 and the reproducibility fixture digest must not change unless the change is deliberate and accompanied by a format version bump.
make test # unit tests
make test-repro # reproducibility fixture
make lint
License
MIT. The vendored BLAKE3 implementation is CC0 and Apache-2.0 dual licensed;
see vendor/ for the full texts.