HatchZip

Extract huge archives without needing double the disk space.

Star on GitHub

A 180 GB archive that unpacks to 200 GB needs 380 GB of disk with WinRAR, 7-Zip or unzip, because the archive and the extracted files have to exist at the same time. HatchZip needs a little over 200 GB: it extracts from the end of the archive and cuts each finished part off the archive file, so the space comes back as it goes.

Free and open source, for Windows, macOS and Linux.

An animation: HatchZip extracts the last part of the archive into the folder, then cuts that part off the archive, so the disk never holds the archive and all the files at once.

Download

Windows macOS Linux

Windows 10 and 11, 64-bit. The macOS download is for Macs with Apple Silicon (M1 and later); for an older Intel Mac, get the Intel version. The Linux download is an AppImage that runs on most distributions; .deb and .rpm packages are below.

How to use it

  1. Install it. HatchZip is not code-signed yet, so Windows may show "Windows protected your PC": choose More info, then Run anyway. On a Mac, open the app once, then allow it in System Settings, Privacy & Security.
  2. Right-click the archive, choose HatchZip, then Extract here (Windows and Linux). On Windows 11 the menu is under Show more options.
  3. Or open the HatchZip app, open the archive or drag it onto the window, and choose Extract.

HatchZip shows whether the files will fit before it changes anything. The archive is used up as the files come out, so when it finishes, only the extracted files are left.

The HatchZip window with an archive open: the list of files on the left, and on the right the disk space it needs, compared with a standard extraction.

All downloads

Command line
PlatformFileType
Windows x64hatchzip-x86_64-windows.zipzip
macOS Apple Siliconhatchzip-aarch64-macos.tar.gztar.gz
macOS Intelhatchzip-x86_64-macos.tar.gztar.gz
Linux x64hatchzip-x86_64-linux.tar.gztar.gz
Linux ARM64hatchzip-aarch64-linux.tar.gztar.gz
Desktop app
PlatformFileType
Windows x64HatchZip-x64-setup.exeInstaller
macOS Apple SiliconHatchZip-aarch64.dmgDisk image
macOS IntelHatchZip-x86_64.dmgDisk image
Linux x64hatchzip_amd64.debdeb package
Linux x64hatchzip-x86_64.rpmrpm package
Linux x64HatchZip-x86_64.AppImageAppImage

The Windows setup and the macOS apps are not code-signed yet. On Windows choose More info, then Run anyway. On macOS, open the app once, then allow it in System Settings, Privacy & Security.

Or install from a terminal. Linux and macOS:

curl -fsSL https://raw.githubusercontent.com/xevrion/hatchzip/main/install.sh | sh

Windows, in PowerShell:

irm https://raw.githubusercontent.com/xevrion/hatchzip/main/install.ps1 | iex

Or, with Rust installed: cargo install hatchzip

Then run hatchzip check game.zip to see whether it fits, and hatchzip extract game.zip to extract it. hz works as a short name, and man hatchzip has the full manual.

All releases

What it does

  • Extracts ZIP (including ZIP64 and self-extracting .exe files), 7z, plain tar, and split archives (.001, .002, ...) of ZIP or 7z.
  • Checks that the extraction will fit before it changes anything.
  • Keeps 2 GB of free space by default, so the disk never fills to zero. Change it with --keep-free.
  • Can be stopped with Ctrl+C, or crash, at any moment. Run the same command again and it picks up where it left off.
  • Checks each file's CRC-32 as it extracts. A damaged file stops the run, and it stays in the archive.
  • Never overwrites a file that is already there, so "extract here" is safe.
  • Opens password-protected ZIP and 7z archives. It checks the password on one file before anything is deleted, and never saves it.
  • Works on any filesystem that can shrink a file: ext4, btrfs, XFS, NTFS, APFS, and exFAT and FAT32 USB drives.

Measured results

The same 200 MB of game data (21 files), packed by the real tools, extracted on a 220 MiB disk with about 50 MB free:

Archiveunzip / 7-ZipHatchZip
ZIP, 180 MBunzip ran out of space at file 6 of 21Finished, every file byte-identical
7z from 7-Zip 25.01, -ms=20m (10 solid blocks)Needs 380 MBFinished in 0.64 s, every file byte-identical
7z split into 5 volumes of 40 MBNeeds 380 MBFinished; volumes deleted one at a time, peak 210 MB used
tar from GNU tar, 200 MBNeeds 400 MBFinished in 0.12 s, every file byte-identical
7z from 7-Zip with default settings (1 solid block)Needs 380 MBRefused before touching anything: one solid block can't be freed until all of it is out, so it needs 200 MB free

ZIP extraction of the same data took 0.25 to 0.35 s, against 1.48 to 1.50 s for unzip 6.00, including an fsync unzip skips. For crash safety, the process was killed at both unsafe moments of a batch at many points of each format's run; every resume finished with identical output.

Measured on Fedora 43, Intel Core i7-14700HX, SK Hynix NVMe SSD, warm page cache; the disk-space runs used a 220 MiB tmpfs to stand in for a full laptop disk, the speed runs ext4. Speed comes from decompressing files in parallel, so an archive holding one giant file extracts at the speed of a single core.

Limits

  • A 7z made with 7-Zip's default settings can be one solid block. HatchZip can only free it once all of it is out, so it needs free space for the whole block. hatchzip check tells you before anything changes.
  • Compressed tar (.tar.gz, .tar.zst, .tar.xz) and RAR are not supported yet. They are refused before extraction.
  • The archive is used up as it extracts. If the download itself is damaged, the files before the damage come out and the archive is partly gone. Use --verify-first when you can't download it again.