Deterministic
The same input tree always produces the same archive bytes. Timestamps and ordering are normalised, so archive hashes are comparable across machines.
v0.9.4 · MIT licensed
Haven packs directories into a single file with content-addressed chunks, so repeated builds of the same tree cost almost nothing to store. One static binary, no runtime dependencies, deterministic output.
Most CI pipelines end up tarring a build directory and pushing it somewhere. That works until the directory is 400 MB and 98% of it is identical to yesterday's build. Haven splits files into content-addressed chunks and stores each unique chunk once, so the incremental cost of an artifact is roughly the size of what actually changed.
It is not a backup tool and not a package manager. It does one job: take a directory, produce a single verifiable file, and unpack it byte-for-byte somewhere else.
The same input tree always produces the same archive bytes. Timestamps and ordering are normalised, so archive hashes are comparable across machines.
Rolling-hash chunking with a 64 KiB target. Shared chunks between archives in the same store are written once.
Every archive carries a manifest of chunk digests. haven verify
re-hashes the contents and fails loudly on mismatch.
Archives can be written to and read from a pipe. No seeking required for the common create and extract paths.
Statically linked, around 4 MB. No shared libraries, no interpreter, nothing to install on the target host.
Six subcommands. The format specification is nine pages. Both are meant to stay that way.
$ haven create --store ./cache -o dist-2f9c.hv ./dist
scanned 1841 files 412.6 MiB
chunked 6702 chunks 409.1 MiB
written 213 chunks 18.4 MiB (95.5% deduplicated)
archive dist-2f9c.hv 18.7 MiB
$ haven verify dist-2f9c.hv
ok 1841 files 6702 chunks manifest digest b3:41d9e0c7…
$ haven extract dist-2f9c.hv --into /srv/release/2f9c
restored 1841 files 412.6 MiB in 2.31s
The 95.5% figure is what a second build of an unchanged frontend bundle typically looks like. Cold archives dedupe far less; see the measurements.
The format is frozen for the 0.9 line. Anything that would change archive bytes is deferred to 1.0.