Pakka documentation
Pakka is a C library (libpakka) for reading, writing, and editing
the archive formats used by id Software, Ritual, Ion Storm, and Valve
game engines — Quake 1 / 2 and Half-Life / GoldSrc PAK, SiN SPAK,
Daikatana PAK, Doom IWAD / PWAD, Quake 3 PK3, and Doom 3 PK4. The
pakka(1) command-line tool is a thin wrapper around the same API.
The project README is the quickstart and launching-off point. These pages are the supporting reference.
Reference
- Installation — build options, install layout, Windows MSVC build, DEFLATE backend selection.
- Format support — compression policies, Daikatana codec, ZIP feature subset, links to per-format on-disk references.
- Using libpakka from C — API inventory grouped by responsibility, structured-error model, threading and ownership rules.
- Security — full entry-name rejection rules, normalized-collision preflight, symlink / reparse handling, decompression-bomb cap.
- Supported platforms — full CI matrix, legacy floor, additional CI jobs (lint, fuzz, sanitizers, coverage, zlib-backend, win32 lint).
- Testing — Windows CTest path, realpak opt-in
suites,
make lint.
On-disk format references
For format internals — directory geometry, header layout, byte ordering, codec opcode tables — see the per-format pages:
- Quake PAK —
"PACK", 56-byte names, 64-byte directory entries. - SiN —
"SPAK", 120-byte names, 128-byte directory entries. - Daikatana — 72-byte entries, custom byte-codec opcode table.
- PK3 / PK4 — ZIP container subset.
- Doom WAD — IWAD / PWAD, 16-byte entries, 8-byte lump names, duplicates allowed.
- Windows codepage — PK3 / PK4 filename encoding policy on Windows.
Releases
See the
GitHub releases page
for source tarballs and pre-built binaries (Windows x64 / x86, macOS
Intel / Apple Silicon) — plus library-only libpakka zips for Windows —
each with SHA-256 sidecars.
License
MIT — see
LICENSE in
the repository.