fzip.org
Version 1.3.0 · Windows 10 & 11 · MIT licence

Unzip at 2,040 MB/s

A command-line zip tool for Windows that decompresses every file in an archive at the same time, one per CPU core. No installer, no graphical interface — a single 1.54 MB executable you drive from cmd or PowerShell.

Windows 10 & 11 · 64-bitWritten in Rust1.54 MB

Decompressing 171.7 MB · 360 files 20-thread laptop CPU
4 workers — fzip 0.084s
1 worker — the conventional way 0.287s
Same binary, same archive, only -t changed.

Get started

Three commands cover almost everything

Fzip has no window and no menus. You type a command; it does the work and prints what happened. Double-clicking fzip.exe shows the help screen and waits — that is expected, not an error.

1 · Unpack an archive

> fzip x archive.zip

Creates a folder named after the archive, right next to it — not in whatever directory you happen to be standing in.

2 · Look inside first

> fzip l archive.zip

Lists every entry with its size, compression method and whether it is encrypted — without writing anything.

3 · Make an encrypted zip

> fzip a backup.zip MyFolder -p

A bare -p prompts for the password without echoing it, so it never lands in shell history. You get real AES-256.

Opening a terminal where your archive is

  1. Open the folder containing the archive in File Explorer.
  2. Click the address bar, type cmd, press Enter.
  3. A terminal opens already pointed at that folder. Type your command.

To call it as fzip from anywhere, put fzip.exe in a folder such as C:\Tools and add that folder to your PATH. You can also just drag an archive onto fzip.exe in Explorer.

Reference

Every command and option

The complete surface of the tool. Also available as plain Markdown for scripts and assistants.

Commands — fzip <command> <archive> [options]
CommandWhat it doesExample
xExtract an archive. Output goes to a folder named after the archive, created beside it.fzip x data.zip
lList the contents: size, compression method, encryption, name. Writes nothing.fzip l data.zip
tTest integrity. Decompresses and verifies every CRC in memory, writing nothing to disk.fzip t data.zip
aCreate a zip from files and folders. Add -p for AES-256.fzip a out.zip src docs
(none)Passing just an archive is the same as x. This is what drag-and-drop uses.fzip data.zip
Options
OptionMeaning
-o <dir>Write output to this folder instead of the default.
-p [pass]Password. Give the value inline, or leave it off and Fzip prompts without echoing — which keeps it out of shell history.
-t <n>Number of worker threads. Defaults to every core.
-i <glob>Include only entries matching the pattern. Repeatable.
-x <glob>Exclude entries matching the pattern. Repeatable.
-eFlatten: ignore folder structure and put every file in one place.
-yAssume yes. Needed to overwrite an existing archive when creating one.
--overwrite <mode>all (default), skip, rename or newer — how to treat files that already exist.
-mx<0-9>Compression level for a. 0 stores without compressing, 9 is smallest.
--max-memory <n>RAM ceiling, e.g. 512M or 2G. Default 1G.
--no-crcSkip CRC verification.
--progressForce the progress bar even when output is redirected to a file.
-q / -vQuiet (errors only) / verbose (name every file).
-V / -hVersion / help.

Worked examples

# unpack somewhere specific
fzip x data.zip -o D:\output

# pull only the images out of a big archive
fzip x photos.zip -i "*.jpg" -i "*.png"

# unpack again without touching existing files
fzip x update.zip -o D:\app --overwrite skip

# smallest possible encrypted backup
fzip a backup.zip D:\work -mx9 -p

# check a download before trusting it
fzip t installer.zip

Exit codes, for scripts

CodeMeaning
0Success.
1Warning — something was skipped, the rest succeeded.
2Error — corrupt archive, wrong password, or could not write.
7Bad command line, or the file was not found.
@echo off
fzip x "%~1" -q
if errorlevel 2 (echo Extraction failed) else (echo Done)

Why it is fast

One archive, split across every core

A ZIP archive stores each file as an independent compressed block. That means they can all be decompressed at once, rather than queued behind one another. Below is the same 171.7 MB archive and the same binary, with only the worker count changed.

Decompression throughput by worker count

1 worker599 MB/s
2 workers1,087 MB/s
4 workers2,040 MB/s
8 workers1,817 MB/s
12 workers1,757 MB/s
20 workers1,892 MB/s

Three and a half times a single worker, levelling off at four. Past that the whole archive is done in under a tenth of a second, and thread scheduling costs more than it saves — which is why the last three rows wobble rather than climb. Measured with fzip t, which decompresses and verifies without writing to disk; five runs at each count, best taken.

What you actually see on disk

Extracting the same archive to an SSD takes 0.54 seconds — about 318 MB/s end to end, against 277 MB/s on one worker. Writing is what sets the pace there, not decompression, which is why the gap almost disappears. Fzip is fastest where decompression is the bottleneck: many files, fast storage, or fzip t where nothing is written at all.

One number is never the whole story

Throughput depends on what is in the archive. The figures above come from documents, which compress well. Run the same binary against an archive that is two thirds incompressible binary and it verifies at 584 MB/s instead — still 4.5× what 7‑Zip manages on that same file, but nowhere near 2,040. Both were measured; neither is the number. On the harder archive, extraction to disk takes 0.67 s against tar.exe's 0.82 s and 7‑Zip's 1.79 s. Reproduce all of it with run_bench.ps1 in the repository.

0
Privileged API imports
7.5 MB
Peak RAM, any size
AES-256
Zip encryption
1.54 MB
One file, no installer

Formats

What it opens, and what it writes

Zip, done properly

Deflate and stored entries, ZIP64, archives past 65535 entries, UTF-8 and legacy CP437 names, WinZip AES-256/192/128 and legacy ZipCrypto. Version 1.x also read rar and 7z; 2.0 dropped them to do one format well.

Writes zip, encrypted

Parallel deflate with genuine AES-256. Fzip refuses to create legacy ZipCrypto, so a password always means real encryption.

Ignores the extension

Format is read from the magic bytes at the start of the file, so a zip named .rar still opens — and a genuine RAR gets told apart by name, not a puzzling parse error.

Memory stays flat

Entries above 32 MB stream straight to disk. A 200 MB file peaks at 7.5 MB of RAM; a 50 GB one does the same.

Safety

An archiver opens files it did not create

Fzip 2.0 is a rewrite, but not a fresh start on safety: every defect the 1.x audits turned up — thirteen from two audits, five more from the field — came across as a regression test first and a fix second. 66 integration tests and 18 unit tests run against every build.

  • Path traversal blocked. Entries with .., drive letters or absolute roots cannot write outside the destination, and each one is reported by name.
  • Zip bombs refused. A 199 KB archive claiming 1 KB but holding 200 MB is stopped one byte past what it declared, not after filling the disk.
  • Device names renamed. An entry called CON or NUL becomes _CON — files named after a device are nearly impossible to delete.
  • Long paths work. Past 260 characters Fzip writes through the extended form, and never reports success for a file it failed to create.
  • Encrypt-then-MAC. AES entries are authenticated before decryption, so tampered data is rejected instead of decoding into garbage.
  • CRC on every entry by default, hardware-accelerated so it costs almost nothing.
  • Nothing privileged in the import table. No AdjustTokenPrivileges, no process injection, no registry writing. Five system DLLs, and the C runtime is linked in rather than imported, so there is no Visual C++ Redistributable to install.
  • Hardened binary. Control Flow Guard, ASLR, DEP and high-entropy address space, with a full application manifest. Section entropy 6.31 — ordinary compiled code, never packed or obfuscated.
  • Code-signed by Tcoder LLC, with a timestamp, so the signature keeps validating after the certificate expires. Windows names the publisher before you run it.

Download

One file. Nothing to install.

No runtime, no DLLs, no registry entries. Put it anywhere and run it.

fzip.exe · version 1.3.0

Windows 10 and 11, 64-bit. 1,612,288 bytes. Reads and creates zip, with AES-256.

SHA-2563FB3B422A400C8DF95904B488DCB7B4277D04E757BE9D6EA4D0A261DC2CA7A8C
Download · 1.54 MB

Check it before you run it

PS> Get-FileHash fzip.exe -Algorithm SHA256

That hash identifies this published binary. It is also signed by Tcoder LLC, so Windows can tell you who published it before you run it — right-click, Properties, Digital Signatures, or:

PS> Get-AuthenticodeSignature fzip.exe | Format-List Status, SignerCertificate

Compiling the source yourself gives a functionally identical executable with a different hash, because Rust builds are not bit-for-bit reproducible — expected, not tampering. Every dependency is pinned in Cargo.lock, and there are fourteen of them, each reachable from code Fzip actually runs.

Limits

What Fzip will not do

Said up front, so nothing surprises you later.