Skip to content
fcorbelli edited this page Sep 28, 2026 · 2 revisions

Not everybody loves the command line. For them (and for the lazy days) there is catpaq: "Catpaq - ZPAQ Archive Explorer". And yes, it is named after cats.

Quick summary

catpaq is a graphical front-end for zpaqfranz: open a .zpaq, browse the versions and the files, extract, test, add. It is written in Free Pascal with Lazarus (catpaq.lpr, catpaq.lpi, the ufrm*.pas/.lfm forms).
The project was once called "Spakka" (a word game on the Italian "spacca"); it was renamed catpaq in version 13, because in English slang "Spakka" is considered offensive.

Power user usage

  • catpaq does not compress by itself: it runs zpaqfranz.exe, in the same folder as catpaq. If it is missing, catpaq says so (and can download it); a security check compares its hash before using it.
  • The listing comes from zpaqfranz pakka archive -catpaqmode (see pakka); extraction, test and hashing use x ... -catpaqmode, t ... -catpaqmode, hash ... -catpaqmode -terse.
  • The output of zpaqfranz is captured through a temporary file: slow, but it works with very large archives. (An older DLL-based method was removed, because it did not work well with very large archives.)
  • Double click on an archive: the last version of the files is opened, in a "normal" way (for those not used to ZPAQ).
  • Command line: the archive name, plus the passwords
catpaq.exe z:\1.zpaq
catpaq.exe z:\1.zpaq -key mypassword
catpaq.exe z:\1.zpaq.franzen -franzen mypassword
  • Forms: main window (Versions, Log, Settings, Info), "Add to Archive" (archive name, AES and Franzen passwords, find/replace), extraction, password.
  • Settings: file associations for .zpaq and .zpaq.franzen, tree font, interface zoom, language, "Internet Update", "Browse Catpaq builds".
  • Languages: English (default), plus languages_dutch.ini, languages_italiano.ini, languages_russian.ini.
  • Settings are saved in catpaq.ini (window, fonts, columns, zoom, language, recent archives and paths, [Updates] CheckOnStartup, [Extract] ForceOverwrite, [History] SaveHistory...). The 32 bit build uses catpaq32.ini.
  • paq9a/paq9b archives can be listed and extracted too (upaq9reader.pas, upaq9b_lazarus.pas).

Lo spiegone

  • Entry point catpaq.lpr: -key sets the AES password, -franzen the Franzen password, the first other parameter is the archive (frmMain.LoadArchiveFromCommandLine).
  • uzpaqbridge.pas: builds the zpaqfranz command lines and parses the output; @SPK@ telemetry lines of -catpaqmode are filtered.
  • Updates (ucatpaq_update.pas): version.txt / version32.txt list version, date, SHA-256 and size of catpaq and of zpaqfranz.exe; each one has a .p7m digital signature, checked by ucatpaq_p7m.pas (SHA-256 in ucatpaq_sha256.pas).
  • Builds: catpaq.exe (64 bit) and catpaq32.exe (32 bit).
  • Links used by the program: http://www.francocorbelli.it/catpaq/ and https://github.com/fcorbelli/catpaq/wiki

Real-world examples

Open an encrypted archive directly from a shortcut or a script

catpaq.exe z:\backup.zpaq -key mygoodpassword

What catpaq runs to get the listing (the same can be done by hand)

zpaqfranz pakka z:\backup.zpaq -catpaqmode

Also in the same folder: zpaqfuse

The folder contains also zpaqfuse (zpaqfuse.cpp, zpaqfuse_core.h, libzpaq.cpp, its own Makefile and README.md, MIT license by Daniel Lee Witzel): a standalone read-only FUSE filesystem (Linux, C++17, libfuse3) that mounts a zpaq archive with one folder per version. It has no encryption support. zpaqfranz has its own mount command.

Clone this wiki locally