挂载功能在 Windows 上依赖 WinFsp,open 版不含该库且不支持挂载;Franzen 加密的归档无法被原版 zpaq 7.15 解压;Windows 整盘镜像还原需借助单独的 WinPE ISO。
zpaqfranz
fcorbelliMIT活跃维护带加密和去重的归档备份工具,内置严格自检,能当勒索软件中和器用,适合做严肃的备份与灾难恢复。
Deduplicating archiver with encryption and paranoid-level tests. Swiss army knife for the serious backup and disaster recovery manager. Ransomware neutralizer. Win/Linux/Unix
zpaqfranz a backup.zpaq /home/me/data
zpaqfranz x backup.zpaq -to /tmp/restore -until 3README 未说明显存或 GPU 要求;面向多核 CPU 与现代 SSD/NVMe 优化,可在 Windows(含 XP)、Linux、macOS、FreeBSD、OpenBSD、TrueNAS、Synology、QNAP、ARM 与 ESXi 上运行。
带加密与去重快照的归档备份工具,单文件存多版本,适合严肃的备份与灾难恢复
带加密和去重的归档备份工具,内置严格自检,能当勒索软件中和器用,适合做严肃的备份与灾难恢复。
核心能力
- 单文件内存放去重后的多版本增量快照
- 用 AES-256 加密,可选 ChaCha20 系 Franzen 加密
- 支持 SHA-2/SHA-3/BLAKE3/XXH3 等多种哈希校验
- 可将归档只读挂载为盘符或目录浏览各版本
- 支持整盘镜像并还原为 VHD/VHDX/VMDK 虚拟磁盘
容易踩的坑
- 65.19Windows 32/64 bit executables and source code最新正式版2026-11-09 · 2026-11-09 11:43 UTC
zpaqfranz 65.19
updatecan be trusted (more or less)IMPORTANT: A DIGITAL SIGNATURE IS NOT A WARRANTY OF ANY KIND
My digital signature does not make me responsible for whether this software works, fails, or meets your expectations. zpaqfranz is open-source software, provided free of charge, which you are entirely free to use or not to use, at your own discretion.
The signature is simply a security measure designed to reduce the risk of installing an update from an untrusted source. It helps you verify that an update really comes from me and has not been tampered with.
This isn't a perfect solution (after all, nothing is), but it should be seen as an improvement: a way to mitigate a potential risk. In short, a service.
The best approach (and I've made all the necessary technical information available) is to compile the program from source. This is standard practice in the non-Windows world (although binary packages and even containers are also very common). In short, I hope you can see my commitment to the highest possible level of transparency.
And one more thing: YOU are always in control. YOU decide whether to run the update command. zpaqfranz NEVER updates itself automatically without an explicit command from YOU. No hidden "Windows update" here 😄
Ok, going back...
updatedownloads a new zpaqfranz from my site and replaces the one you have. What makes the new exe "good" is my digital signature: an Italian qualified electronic signature. In 65.19, that check has become stricter: zpaqfranz knows my certificate, byte by byte, and accepts nothing else. On Windows, BTW, downloads now use HTTPS, made by Windows itself (urlmon, then WinINet), with its own certificates. Not a big improvement (the signature is what counts), but better than nothing.zpaqfranz update is there a newer one? (the signature is checked) zpaqfranz update -force if there is, install it zpaqfranz update -paranoid check my signature yourself (openssl, or a web site) zpaqfranz update -force -kill install it regardless (and, if the signature cannot be verified, only after you type its URL)My signature: take it or leave it
The certificate is an Italian qualified electronic signature, on a SIM. In Italy it has full legal value but outside Italy it is not widely used.
I use it because I already pay for it, instead of paying for one more certificate to some "friend" of Microsoft. So, dear user: if you're comfortable with it, use it. If you are not... don't.
Downloading an executable from the Internet always requires some care, no matter where it comes from: it is a common problem, not specific to zpaqfranz. If you have doubts, take zpaqfranz from GitHub or SourceForge, or compile it yourself: I made a tool for that, zpaqbuilder.
I cannot do much more than this (and it is already much more than 99.99% of the software on the Internet).
BTW: if you are willing to pay for the M$ certificate for me, I'll adopt one :)
And:
updateon Windows uses HTTPS, and falls back to HTTP by itself where HTTPS cannot work (an old Windows Server, zpaqfranz32.exe on XP): the signature is checked anyway.updateis only for zpaqfranz.exe, zpaqfranzhw.exe and zpaqfranz32.exe: zpaqfranz-full and the XP build refuse it (see the final note).- When my certificate expires (2028-12-24), the zpaqfranz you have cannot know
the next one, and refuses it, as it must refuse a fake.
update -force -killcan install it all the same, after a captcha: the URL of the exe, typed exactly. Or download it by hand, once.
Other "things"
- The replacement of the exe is safe: if anyt
- 65.18Just about everything2026-11-07 · 2026-11-07 14:55 UTC
查看更新说明
zpaqfranz 65.18
Two main things in this release.
Franzen no longer needs libsodium. The cryptography of Franzen is now built into zpaqfranz: franzsodium. Nothing to install, nothing to download, no DLL. libsodium is not thrown away: it stays, optional, as a second and independent engine to check the first one against. This is cryptography, and it deserves the utmost care.
The compression levels have names:
-lean -fast -normal -good -better -ultra -max. A new scale, easy to remember. The zpaq models 1, 2 and 3 partly give way to the modern ones, faster and with much less RAM; 4 and 5, the ones that compress the most, stay.zpaqfranz a backup.zpaq c:\data the default (-normal): leave it zpaqfranz a backup.zpaq /share -lean a cheap NAS, little RAM zpaqfranz a backup.zpaq c:\data -good a bit smaller, a bit slower zpaqfranz a backup.zpaq c:\data -franzen MyLongPassword encrypted, nothing to installWhich level? My advice
In the vast majority of cases you do not need to change the level. Leave the default: today it is a very good balance between speed, resources used and size of the archive.
-fastis indeed a bit faster, but not by much. It is worth it only if you really want the fastest that zpaqfranz can give today.-goodhas its use: a little slower, a little smaller. It is probably the best choice after the default.The levels above it differ in one key point: the speed of extraction. With
-betterit is high. With-ultraand-maxit is about the same as the speed of compression, that is, slow. Those two are for data you expect to extract rarely, or for small data.In short:
Level When -leanweak hardware, little memory (a cheap NAS...). On really minimal hardware add -t1too-fastwhen you want top speed, at the cost of the size of the archive -normalthe default, the one I recommend -goodmy second choice -betterwhen you want to compress a lot, but you will extract often -ultrahigh compression, slow -maxthe smallest archive, with no compromise And:
-fastis a level now. The switch that stores the history for a fastlis-lfast(and-nolfast). If a script of yours writes-fast, read point 4.- Franzen everywhere: 32-bit Windows, the NAS, ESXi, the "open" build, static binaries. Before, none of them had it.
-franzenwith no password is an error. Before, the archive was written in clear, with "all OK".- The RAM in the last line is now the peak, and next to it the peak as the
operating system saw it (
OS REPORT). -turbowith few cores: faster, and with less RAM. The threads are counted on the cores the process is allowed to use.work proxmox audit: what it takes to rebuild a Proxmox node from an empty ISO, in two archives: one with the secrets, one without.-tar -not "X/*"keeps the folderX, empty, astardoes (issue 350).l -allshows#(changed) with every hash, not only with the "b" ones; the help says what each hash is (-sha3is SHA3-256) (issue 351).- Bugfix:
ppandx -stdoutcould hang forever with little RAM; an archiv
- 65.17Just about everything2026-11-01 · 2026-11-01 13:35 UTC
查看更新说明
zpaqfranz 65.17
This is the release of Proxmox. Until now, on Proxmox, zpaqfranz saved only the disks of the VMs that were files in
/var/lib/vz. Of the other VMs, just the.conf, with an exit code that looked like a backup. Containers: nothing.Now every guest, VM or container, on every kind of storage, in two ways, each one with its restore. A version each run, deduplicated.
zpaqfranz proxvzdump /backup -all zpaqfranz proxvzrestore /backup/proxvzdump-qemu-100.zpaq 999 -storage local-zfs zpaqfranz zfsproxbackup /backup -all zpaqfranz zfsproxrestore /backup/zfsproxbackup-qemu-100.zpaq 999 -storage local-zfsproxvzdump,proxvzrestore:vzdumpstraight into zpaqfranz, no temporary file, any storage, running guests too. The restore is simple: one command,qmrestoreorpct restorefed by a pipe.proxvzdump -proxmox: two runs of a guest give the same bytes. A run with nothing changed costs KB, not MB. See the note below before you use it.zfsproxbackup,zfsproxrestore: rewritten. The disks read as they are, from a snapshot where the storage has one (ZFS, LVM-thin, btrfs). A run with nothing changed costs KB.work proxmox: a small manager for a Proxmox of the LAN, a menu by numbers, from any zpaqfranz, Windows too.work prox user,work prox start: a user and a token that can do one thing, start one guest. A client that uses them needs no libcurl.
Restoring ZFS streams: go slowly
The restore of ZFS streams and volumes (
zfsreceive,zfsrestore,zfsproxrestore) needs more testing. It works on the test machines, it has not yet been through what real machines will do to it.And a restore is not a read. What it replaces is gone, and if something goes wrong halfway there is no key that brings it back. So, with care, in a safe place:
- Try it first on a machine you can afford to lose, one you can roll back. Not on the host that matters, not for the first time on the day you need it.
- Restore to a new dataset or a new vmid, not over the original. Look at what came out. Only then decide.
- Before replacing anything, have another copy of it, made in another way.
zfsreceiveandzfsrestorewrite a script: read it before running it.-forceis the switch that puts a restore on top of what is there. It does not belong in a cron.
Details in point 6 of part one.
-proxmox, in plain wordsWithout
-proxmoxthe stream of vzdump stays whole: what goes in the archive is whatvzdumpwrote, byte by byte. What comes out is the file Proxmox knows.With
-proxmoxthe stream is changed on its way in, so that two runs look alike. It is still a good VMA or a good tar, and in every test made so far the guest that comes back is the same. But it is no longer the file ofvzdump.So leaving it out is the safer choice, until
-proxmoxhas had more checks and more tests. The price is space: MB each run instead of KB. Nothing else.And:
mysqldumprewritten,mysqlrestorenew. No more script behind it. Exit code 0 only if every dump is whole: before, a wrong password, no database at all and a dump cut in half were all "OK".- The
zfscommands reviewed, on a real pool: one archive per dataset, a second run takes only the new snapshots, Franzen, datasets at any depth,-ttl. r -paranoid: what is copied is read back from the media, by pieces, during the copy.-m8, the default, no longer makes a file larger. A JPEG in a small archive paid for a decoder it did not use.-m 5,-t 2with the space work. A wrong command line stops with exit code 2, it no longer shows the help with exit code 0.- Bugfix: many
Part one, what is new, for the user
- [Proxmox: which one](#1-prox
- 65.16Just about everything2026-10-30 · 2026-10-30 19:00 UTC
查看更新说明
zpaqfranz 65.16
This is the release of
repack. A zpaq archive is a journal: every update is added at the end, nothing ever goes away. With years of backups in it, the old versions cost space and nobody needs them all. Until now there was no way out but extracting and starting again.zpaqfranz repack z:\backup.zpaq 7d4w12my -to z:\new.zpaqA new archive with only the versions you want: the last 7 days, 4 weeks, 12 months, every year. What they do not use is thrown away, and the new archive is checked to the last bit before it gets its name.
- Which versions: a list (
1,5,10-20), the last ones (47last,7-last), or rules by date, grandfather-father-son (7d4w12my), with a reserve of the latest versions that are always kept. repack -test: which versions would be kept, and why. Nothing written.repack -quick: the blocks whose data are all kept are copied as they are. Not decompressed, not compressed again.repack -all: every version, so the same archive in another method.- Another password, or none, or another kind of encryption: plain, AES, Franzen, AES + Franzen, from any of them to any of them.
purge: the same command, by another name.
And:
- Files of a Linux or a NAS archive lost on Windows, with "all OK": read point
9 of part one.
Case.txtandcase.txt,finale.andfinale,.bashrcand.BASHRC, a file callednul: one of the two was lost, andxsaid all OK, exit code 0. No more: every file comes out, and what is renamed is said. wandtwon many archives:tw z:\test\*.zpaq, with a list at the end of what is not OK.h -no*: the help of a switch takes*and?.-nodashboardworks for every command.-taron every build that can do it: an Oracle Linux 7.9 built by hand with-DANCIENTgave79531! Cannot get metadataon every file. Now it works. Where it cannot (ESXi, the open build) it says so, before writing.- After a control-C the console is as it was: no more all yellow, all green.
Part one, what is new, for the user
repack: only some versions- Which versions
repack -test: what would be keptrepack -quick: whole blocks copied- Another method, another password
- What you see while it works
wandtwon many archives-tareverywhere it can be- Names that are one file for Windows
h -no*,-nodashboard- Smaller things
1.
repack: only some versionszpaqfranz repack z:\1.zpaq 1,last -to z:\2.zpaq the first and the last zpaqfranz repack z:\1.zpaq 1,10,20-25 -to z:\2.zpaq some of them zpaqfranz repack z:\1.zpaq 7d4w12my -to z:\2.zpaq by date zpaqfranz repack z:\1.zpaq -all -m1 -to z:\2.zpaq all of them, -m1Version 3 of the new archive is the version it comes from: the same files, with the same dates, attributes and hashes, the same date of the version, its comment.
-untilwith a date says the same in both archives.The source is never touched: the output is another file (
-to), one file only. It is written as<name>.tmp, read again from the disk, checked, and only then renamed. Anything wrong: exit code 2, no output. With-forcean output that already exists is replaced, at the end, if all is good.By default the data are decompressed, checked and compressed again with
-m(default-m8,-m1in a build without zstd).-tas usual.2. Which versions
1,5,10-20version 1, version 5, from 10 to 20 (any order, each one on - Which versions: a list (
- 65.15Windows 32/64 bit executables and source code and first WinPEpre-release2026-10-27 · 2026-10-27 16:13 UTC
查看更新说明
zpaqfranz 65.15
DO NOT USE IN PRODUCTION: IT IS STILL TO BE STABILIZED
65.15 has two "things":
- Less RAM: to handle bigger archives (millions of files), and to work better where the RAM is little (a NAS, a VM, a small machine).
- Tests that can be trusted: a general strengthening of the integrated
test functions (
t,twith a folder,tw,pp,p, andxthat checks while it extracts). OK only when it is really OK.
1. Millions of files, little RAM
65.15 is about the extreme case: a folder of 3 million files, almost all duplicated (hundreds of versions of the sources of Wine, 60 GB), on a Windows 11 VM with 8 GB of RAM. Measured there, before and after:
G:\test, 3,092,753 files, 60.6 GB 65.14n 65.15a d g:\test -ssd, after the hashes ("thinking")459 s 32 s d g:\test -ssd, peak RAM (commit)6.48 GB 4.50 GB t g:\m6.zpaq(3,117,410 files), peak RAM (commit)6.09 GB 4.56 GB t g:\m6.zpaq, time1660 s 1686 s a g:\zt_a\a.zpaq g:\test(3,480,314 files)out of RAM at the end done, 23.8 min a g:\zt_a\a.zpaq g:\test, peak RAM (commit)7.02 GB 5.17 GB And when the RAM is not enough:
xof 16 blocks -m52, RAM limited to 150 MB65.14n 65.15a "Job N killed: std::bad_alloc" 16 0 files extracted right 0 of 8 8 of 8 exit code 2 0 zpaqfranz x z:\1.zpaq -to z:\out 03664$ RAM: 297.24 MB free for the blocks, 270.94 MB taken, this one 87.19 MB: fewer threads at a time (slower, but it goes) RAM: at most 2 blocks decompressed at the same time (16 threads) 98.937s (00:01:38,1.27GB) (all OK)For the index that does not fit at all there is
x -lowram: the archive is read once per pass, every pass takes a part of the names.65.15b adds a command,
tw: the test ofw -ramdisk -test -checksum -ssdin two letters, with a dashboard; a folder after the archive and it ist archive folder, but decompressing every file.2. Tests that can be trusted
65.15 tests the tests. Damaged copies of archives, made on purpose (every byte of them, one at a time, in six ways), given to
t,twith a folder,tw,pp,pandx, and what they say compared with what really comes out ofx. The rule: OK only if it is really OK; something that can be recovered is a WARNING; everything else is an ERROR. The same campaign, before and after:84,000 damaged copies, 4 archives, every byte, 6 kinds first run last run checks 759,042 844,420 a test OK (or WARNING) with a file lost or wrong not measured 0 hangs (over 1 s, killed) 626 0 tests that say different things (INCONSISTENT) 46,768 88 (then 6) the most RAM of one test 390 MB 6.2 MB Then 40,198 copies of real archives (-m1 ... -m5, -m8, -nofast, -key, three versions with files changed and deleted), damaged where the structure of the blocks says it matters, on FreeBSD:
t,twandppsay the same on every copy,pis never OK with a file lost, and the same copies under AddressSanitizer gave no memory error. None of this makes the normaltandxslower: measured, within 1%.Part one, what is new, for the user
1.
d: the duplicates of millions of filesAfter the hashes,
dlooked at every file of every group once more, by its name, to see the hard links: 2.9 million more opens, one thread, no output. Now who a file is on the disk (volume, file, how many names) is taken while it is hashed, from the very file that is read. The scan keeps only whatduses (size and date) and a small file is read with a small buffer (it was 512 KB made and zeroed for every file).d, 100,000 small files, warm cache, 32 threads65.14n 65.15a hashes 1.9 s 0.75 s after the hashes 2.33 s 0.23 s
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
zpaqfranz: advanced multiversioned archiver, with HW acceleration and SFX (on Windows)
Swiss army knife for backup and disaster recovery
High-performance archiver and backup for mission-critical data.
Like 7z or RAR on steroids, with deduplicated snapshots (versions) in a single file:
far more efficient and versatile than Time Machine or ZFS snapshots.
Built for speed on multi-core CPUs and modern SSD/NVMe drives: 1 GB/s and more, up to 3x faster than 7-Zip.
| program | time | archive |
|---|---|---|
| zpaqfranz (current) | 6.5 s | 5.44 GB |
| zpaqfranz (older) | 15.4 s | 5.64 GB |
tar | zstd -1 | 8.1 s | 6.22 GB |
7-Zip -mx1 | 21.9 s | 5.74 GB |
WinRAR -m1 | 40.4 s | 6.01 GB |
Quick-and-dirty comparison against popular archivers: Windows 11, Ryzen 9 7950X3D, RAM disk, a Debian virtual machine of 11.7 GB as test set. 7-Zip 26.03, RAR 7.23, zstd 1.5.7, each in its fastest mode; median of three runs. Full details in the release notes of 65.3 and 65.5.
And that is only the first run. On the second one 7-Zip, RAR and tar rewrite everything; zpaqfranz stores only what changed.
🖥️ catpaq - Official GUI, open source, ready to use on many platforms.
📥 Direct downloads (latest versions):
Key features
- Deduplicated, incremental and versioned backups
- Anti-ransomware integrity checks and deep validation
- Multi-hash support: SHA-2, SHA-3, BLAKE3, XXH3 and more
- Strong encryption: AES-256 (
-key) as standard, optional ChaCha20-based Franzen (-franzen), or even both! - Low bandwidth for cloud, NAS and USB: only the new data travel
- Full deduplicated disk imaging
- Read-only mount of archives as a drive or a folder
- GUI for Windows, Linux and macOS: catpaq
Cross-platform and lightweight: Windows (XP included), Linux, macOS, FreeBSD, OpenBSD, TrueNAS, Synology, QNAP, ARM and ESXi. Without Franzen encryption, every archive can still be extracted by the original zpaq 7.15.
15+ years of active development • 100% FOSS • Forever free
Third-party software
Projects made by others around zpaqfranz and the zpaq format.
They are independent and I have not developed or tested them, so give them a try with a bit of care:
Доверяй, но проверяй (doveryai, no proveryai: trust, but check)
| Project | Type | Description |
|---|---|---|
| rizpaq | Windows | ZPAQ power without the console. Desktop archiver for Windows: versioned ZPAQ backups, PAR2 protection, ZIP/7z/RAR support. GUI for zpaqfranz. |
| ZpaqTreeView | Python | Allows browsing and extraction of a zpaqfranz archive in a tree/hierarchical file structure view. |
Made something for zpaqfranz? Open an issue or a pull request to be listed here
What's new
⚡ Much faster, with nothing to change
The default of a (add) is now faster on every side: zstd compression (-m8), a multithreaded deduplicator (-turbo),
a cached list of the files (-fast: l in a fraction of a second).
The archive is still a normal zpaq archive: zpaq 7.15 extracts it too.
Smarter and faster
- Checking a backup against the disk (
t backup.zpaq c:\data -ssd): nothing is decompressed, the files are read in parallel. 116,725 files (6.5 GB) checked in 2.0 s (warm cache, 32 threads). - Windows, whole NTFS drives: the file list is read straight from the
$MFT, 7 times faster on aC:than the standard FindFirstFile/FindNextFile (12 times with a shadow copy). - Millions of files with little RAM: 3.5 million files added with only 8 GB of RAM.
💽 Images of C: (and of any drive)
zpaqfranz a z:\c.zpaq c: -image
One switch, and it chooses by itself: on NTFS the used clusters, from a shadow copy (VSS), without pagefile and hiberfil;
FAT, FAT32 and exFAT by their used clusters too; anything else byte by byte (-raw for that, always).
Deduplicated like everything else: the second image of the same C: stores only what changed.
- About 800 MB/s for the image of
C:on my workstation (2026, NVMe, 16 cores) - Thin images: the free clusters become zeros in the image.
- Back out as a virtual disk:
image z:\c.zpaq c: -to d:\c.vhd(or.vhdx,.vmdkfor VMware, VirtualBox, QEMU/Proxmox, or a raw file), any older version with-until, over 2 TB too - Back on a partition:
image z:\c.zpaq c: -to g: -image - The whole disk of Windows, for a restore that boots (beta):
ac z:\pc.zpaqtakesC:plus the hidden partitions and the partition table;xc z:\pc.zpaq -to 2: -forceputs it back (or-to x.vmdk/x.vhdx). There is a WinPE ISO to restore from.
On Linux, the BSDs and macOS a /dev/sdb -image takes the device byte by byte, and image gives it back as a raw file.
📂 Mount: browse a backup without extracting it
zpaqfranz mount z:\backup.zpaq (Windows: the first free drive letter, Explorer opens on it)
zpaqfranz mount z:\backup.zpaq Z: -all (every version, one folder each)
zpaqfranz mount /backup/nas.zpaq /mnt/zpaq (Linux, FreeBSD, OpenBSD, macOS)
The archive becomes a read-only drive or folder: open, copy, search, play, diff any file, with no temporary folder.
-all: one folder per version, each a full snapshot. "What did this file look like in June?" is acopy; "what changed between two backups?" is adiff -rbetween two folders-range 5:9: only what versions 5 to 9 added or changed- encrypted, Franzen and multipart archives too;
-testmounts, reads every file through the mountpoint and checks it - Images too:
mount d:\c.vhdattaches a.vhd,.vhdxor.isoread-only, and you look into yesterday'sC:
Windows needs WinFsp (mount offers to download and install it; zpaqfranz-full.exe carries it inside);
Linux and the BSDs FUSE, macOS FUSE-T or macFUSE. The mount of .vhd/.iso needs no WinFsp, only the administrator (it asks).
And more
proxvzdump / zfsproxbackup for every guest of Proxmox, with their restores ·
mysqldump / mysqlrestore ·
repack to keep only some versions (7d4w12my) ·
reports by e-mail (-mailfull, -mailprivacy) ·
x -recover on damaged archives ·
cloud upload in append ·
f -test surface test of a disk or a USB stick ·
SFX on Windows ·
help in English, Italian and Russian (-it, -ru)
Quick start
zpaqfranz a backup.zpaq /home/me/data # first run: everything; then only the changes
zpaqfranz i backup.zpaq # the versions
zpaqfranz l backup.zpaq # the files of the last version
zpaqfranz t backup.zpaq /home/me/data -ssd # is the backup equal to the disk?
zpaqfranz x backup.zpaq -to /tmp/restore -until 3 # restore version 3
zpaqfranz mount backup.zpaq /mnt/zpaq -all # browse every version
Windows is the same (zpaqfranz a z:\backup.zpaq c:\data).
Run zpaqfranz alone for the help, zpaqfranz h <command> for one command,
or zpaqfranz t with no archive to choose it on a screen.
The help follows the language of the system (English, Italian, Russian). To choose it, add -eng, -it or -ru
to any line: zpaqfranz -it, zpaqfranz h a -ru.
Seeing is believing
Archiving a folder 5 times, a daily run Monday to Friday, with 7z:
The same with zpaqfranz:
The five daily .7z take about 5 times the space of the .zpaq.

Classic archivers (tar, 7z, RAR...) are the wrong tool for repeated backups, and even more so for SQL dumps.
Physical Xeon machine with 8 cores, 64 GB RAM and NVMe disks, plus a Solaris-based NAS, 1 Gb ethernet.
rsync update, filesystem to filesystem (real speed):
rsync update to the Solaris NAS (real speed):
Backup update from the file system with zpaqfranz (real speed):
Backup update via zfsbackup (real speed):
Windows client, encrypted update of C: without the programs (-frugal), real speed:
Every-sector encrypted update of a 256 GB C: (accelerated):
Testing an archive at more than 1 GB/s (accelerated):
Update of a small server (300 GB) on a QNAP NAS: ~7 GB of Thunderbird mbox become ~6 MB, in ~4 minutes (real speed):
rsync of two remote backups, the .zpaq (file level) and zfsbackup (block level), one day of work of a small server (accelerated):
Download
🪟 Windows
| Variant | Download | Self-update | Notes |
|---|---|---|---|
| Windows 64 (recommended) | zpaqfranz.exe | zpaqfranz upgrade -force | HW acceleration auto-detected (SHA-1/SHA-2) |
| Windows 64 Full | zpaqfranz-full.exe | - | Every library inside, WinFsp included: no internet needed |
| Windows 64 Open | zpaqfranz-open.exe | - | Built only from the source: no binary blobs, no network, no mount of archives |
| Windows 64 HW | zpaqfranzhw.exe | zpaqfranzhw upgrade -force | Extra SHA-1 acceleration (AMD, ~+1.5%), with -hw |
| Windows 32 | zpaqfranz32.exe | zpaqfranz32 upgrade -force | Limited RAM and threads: slower |
| Everything | SourceForge | All the builds, the WinPE ISO, the older versions |
upgrade checks a digitally signed (.p7m) SHA-256 before replacing the executable.
🐧 Linux, BSD, macOS
| System | Version | Install | Demo |
|---|---|---|---|
pkg_add zpaqfranz | - | ||
pkg install zpaqfranz | - | ||
brew install zpaqfranz | - | ||
sudo apt install zpaqfranz | ▶️ Desktop | ||
sudo apt install zpaqfranz | - | ||
sudo zypper install zpaqfranz | - | ||
| AUR: zpaqfranz-git | ▶️ Terminal | ||
| static binaries | - |
The packages of the distributions follow the releases with some delay (green: up to date, red: behind). Every distribution that has zpaqfranz: Repology.
🖥️ catpaq, the GUI
catpaq is the official open-source GUI: direct downloads at the top of this page.
In the console there is tui too: zpaqfranz backup.zpaq opens it.
Real world: years of versions in one file
A file server of a mid-sized company, ~500,000 files and ~500 GB: 1042 versions in 817 GB.
root@f-server:/copia1/copiepaq/spaz2020 # zpaqfranz i fserver_condivisioni.zpaq
zpaqfranz v51.27-experimental snapshot archiver, compiled May 26 2021
fserver_condivisioni.zpaq:
1042 versions, 1.538.727 files, 15.716.105 fragments, 877.457.003.477 bytes (817.20 GB)
< Ver > < date > < time > < added > <removed> < bytes added >
00000001 2018-01-09 16:56:02 +00308608 -00000000 -> 229.882.913.501
00000002 2018-01-09 18:06:28 +00007039 -00000340 -> 47.356.864
00000003 2018-01-10 15:06:25 +00007731 -00000159 -> 7.314.709
(...)
00000147 2018-03-28 17:08:28 +00000422 -00000134 -> 277.237.055
(...)
00001041 2021-05-04 17:13:40 +00000605 -00000004 -> 95.909.988
00001042 2021-05-05 17:15:13 +00000579 -00000008 -> 82.487.415
The files as they were on 2018-03-28? That is version 147:
zpaqfranz x fserver_condivisioni.zpaq -to /tmp/restore -until 147
Another one, a ~200 GB server: 4904 versions from August 2017 to March 2021, in 186 GB. With tar, 7z or RAR the same 4900 copies would take 200 GB × 4900, about 980 TB. The same goes for virtual machines.
FAQ
Who made ZPAQ? One of the world's leading scientists in compression. No, not me, but this guy (ZPAQ on Wikipedia), from 2009 to 2016, on encode.su, one of the best-known (and super-niche) compression forums.
Why is it not as known as 7z or RAR, if it is so much better? Because few people use it. Try it!
Who are you? A user (and a developer) who proposed and made various improvements to ZPAQ over the years. When Dr. Mahoney retired, I made this fork to get the functions I need as a data storage manager.
What if zpaqfranz is abandoned tomorrow?
Your data are not locked in. A zpaqfranz archive is a standard zpaq archive: without Franzen encryption, the original
zpaq 7.15 of 2016 extracts it, the zstd methods (-m7, -m8, -m9) too, because their decoder is stored inside the archive.
With a -715 zpaqfranz writes plain zpaq 7.15 archives, without any extension of its own. And zpaqfranz itself is one MIT source file that builds almost anywhere.
Why should I trust this? It will be one of the 1000 programs that fail silently.
As the Russians (and the Italians) say: trust, but check!
Checking is the part of the program I have worked on the most: hashes of every fragment and of every file, t against the disk,
w and tw that decompress in RAM, p for the paranoid.
In 65.15 the tests themselves were tested: 84,000 copies of archives damaged on purpose, every byte, six ways.
Result: no test said OK with a file lost or wrong.
We already have borg, restic, hashbackup, bupstash...
Great programs, often very well made. They work on a repository: a folder with many files to keep together.
zpaqfranz keeps everything in one file that only grows at the end: a copy is a copy of one file,
rsync --append sends only the new tail, and the archive of today extracts the data of eight years ago.
If it is simple, maybe it will work.
Too good to be true?
It is not magic: a block deduplicator, a compressor and an archiver, chained.
There are faster compressors, better compressors, faster archivers, more efficient deduplicators.
What I never found is the four together, dead simple and reliable, with good handling of non-Latin file names, in one executable with 7z-like commands.
No tar | srep | zstd | something pipes, no program with dozens of dependencies.
The archive is never modified, only appended
So rsync --append (over ssh, to a NAS, to the cloud) copies only the part added by the last run:
not the 700 GB of the archive, the 2 GB of yesterday. Hundreds of GB of virtual servers can be sent over a VDSL line in minutes.
For a developer: a "super git"
Put a zpaqfranz a at the top of the makefile and every version of your software is kept, libraries and SQL dumps included, forever.
Never delete anything?
You can keep every version forever. When you want fewer, repack writes a new archive with only the ones you choose
(e.g. repack old.zpaq 7d4w12my -to new.zpaq: grandfather-father-son, by days, weeks, months and years; -test shows what would be kept).
Defects? Some.
- Extraction may need many seeks (deduplicated blocks): slow on spinning disks, not on SSDs. With enough RAM
wavoids it, andxxwrites the extracted files sequentially (much faster on spinning disks, less fragmentation). - Many small files: there
tar | zstdis faster at the first run (zpaqfranz does more work per file: path, attributes, hashes for the deduplication). From the second run on, zpaqfranz stores only the changes. - It is a tool for power users and administrators, used to the command line. catpaq and
tuihelp. - It is known and used by few.
How to build
One file, zpaqfranz.cpp, no dependencies (link pthread):
g++ -O3 -Dunix zpaqfranz.cpp -o zpaqfranz -pthread (Linux)
clang++ -O3 -Dunix zpaqfranz.cpp -o zpaqfranz -pthread (FreeBSD, OpenBSD, macOS)
g++ -O3 zpaqfranz.cpp -o zpaqfranz -pthread -static -lurlmon (Windows, MinGW)
With mount: add -DZPAQMOUNT and FUSE ($(pkg-config fuse3 --cflags --libs) on Linux); the lines for every system
are in "Building with Mount Support", at the top of the source.
Every release is built and tested on Windows, Linux (Fedora, openSUSE, Arch, Oracle Linux 7), FreeBSD, OpenBSD, macOS, Solaris, ESXi and ARM NAS.
- Almost "universal" (minimal) Makefile
- Quicker and dirtier!
- DEFINEs at compile time
- Target examples
- Hidden gems
- Strange things
Documentation
License
MIT, Copyright (c) 2021-2026 Franco Corbelli. Based on ZPAQ 7.15 by Matt Mahoney; the licenses of the built-in libraries are listed in the source.