Skip to content

zpack

One directory in, one .zpak out. Streamed, hashed, and byte-for-byte reversible.
Terminal window
$ zpack pack assets/ game.zpak
Packed 56 files (77.2 MiB -> 71.7 MiB, 7.1% smaller)
$ zpack unpack game.zpak extracted/
Extracted 56 files
$ diff -r assets/ extracted/ # no output: identical

Nothing is buffered whole

Contents stream through reused 64 KiB buffers, packing and extracting alike. An asset directory is never resident in memory, however large it is.

Reversible by construction

Every entry carries an XxHash64 of its original bytes, checked on every read. Entries are sorted before writing, so packing the same tree twice produces the same archive.

A library, not just a binary

main.zig is argument handling and nothing else. A game depends on the zpack module directly and never shells out to the CLI.

No dependencies

The standard library and nothing beyond it. Deflate, hashing, and the filesystem all come from std.