zm is a universal file archiver for macOS, Linux, and Windows, built for
high-performance compression, safe extraction, and seamless handling of
virtually any archive format.
The CLI is the open-source part of ZManager. It shares the Rust archive engine with the desktop GUI app, but it is useful on its own: create clean project archives, extract a broad set of formats safely, inspect archive contents, and script archive workflows without opening a GUI.
Release builds are published on the latest release page. Each release ships two flavors:
- full — all commands, including the online identity features behind
zm auth(default install) - offline — the same archive commands with no network features
zm --version reports which flavor is installed (zm 2.1.0 (full) or
zm 2.1.0 (offline)). For full installation details and checksum examples,
see docs/INSTALL.md.
Install the full build from the Homebrew tap:
brew install tzap-org/zmanager/zmanagerFor the offline build, install the offline formula:
brew install tzap-org/zmanager/zmanager-offlineInstall the latest matching release into $HOME/.local/bin:
curl -fsSL https://raw.githubusercontent.com/tzap-org/zmanager/main/install.sh | shPass --offline for the offline build:
curl -fsSL https://raw.githubusercontent.com/tzap-org/zmanager/main/install.sh | sh -s -- --offlineInstall with WinGet:
winget install FrankZhu.ZManagerCLIFor the offline build:
winget install TzapOrg.ZManagerCLI.OfflineFuture version manifests will use TzapOrg.ZManagerCLI; new releases use the
organization-scoped package identity.
The
Package Preview workflow
builds packages from the latest main without publishing a release. Install a
preview build with the install script (requires the
gh CLI):
curl -fsSL https://raw.githubusercontent.com/tzap-org/zmanager/main/install.sh | sh -s -- --previewCombine with --offline for the offline preview build. The latest successful
preview run is used; set ZMANAGER_RUN_ID to install a specific run.
zm -cf project.zip project/
zm -xf project.zip -C out/
zm create project.tzst project/
zm extract project.tzst -C out/
printf '%s\n' "$ZM_PASSWORD" | zm create backup.tzap project/ --password-stdin
printf '%s\n' "$ZM_PASSWORD" | zm extract backup.tzap -C out/ --password-stdin
zm list project.zip
zm test project.zipThe classic flags are there for users who already know archive tools. The subcommands are there for readable scripts.
- Extracts a broad range of archive, package, disk-image, and raw compression formats with safety checks enabled by default.
- Creates
.zip,.tzst(.tar.zst),.tgz(.tar.gz),.tzap,.7z, and.aar/.aea(Apple Archive) archives with focused defaults. - Opens common desktop, developer, package, and mobile archive formats by name: ZIP, ZIPX, JAR, WAR, IPA, APK, APPX, XPI, 7z, TAR, compressed TAR, RAR, CPIO, CPGZ, ISO, XAR, CAB, AR, DEB, RPM, SPK-style tar packages, Apple Archives (.aar/.aea), and raw compressed files.
- Supports passworded ZIP, 7z, TZAP, and RAR workflows through stdin or prompts; new encrypted ZIP, TZAP, and 7z archives use AES-256 encryption paths.
- Protects extraction by default against path traversal, unsafe links, duplicate normalized paths, case collisions, and accidental overwrite traps.
- Provides both classic archive flags and readable subcommands.
ZManager treats extraction and creation differently:
- Extract broadly. Open old, obscure, downloaded, package, mobile, and developer archives without knowing which backend normally handles them.
- Create deliberately. New archives should use practical, well-supported formats:
ZIP for universal sharing, TZST (
.tar.zst) for fast compression, TGZ (.tar.gz) for compatibility, TZAP for encrypted recoverable archives, 7z for high-compression encrypted archives, and Apple Archive (.aar/.aea) for Apple platforms. - TZAP: a modern, open-source RAR alternative. The
.tzapformat is engineered to be fast, secure, and resilient: state-of-the-art cryptographic signatures, multi-recipient encryption, secure passphrase protection, and self-healing error recovery. - Avoid legacy creation paths. Old compression methods matter for reading existing files, but new archives should use safer and faster defaults.
- Use strong password protection. Encrypted ZIP, TZAP, and 7z creation use AES-256 paths, and passwords are read through prompts or stdin rather than command arguments.
Archive extraction is hostile-input handling. zm rejects or guards against:
- absolute paths and
..traversal; - symlink and hardlink escapes;
- duplicate normalized output paths;
- Unicode/case-insensitive path collisions;
- unsafe special files by default;
- excessive expanded-size and compression-ratio cases;
- accidental overwrites unless the requested overwrite mode allows them.
Passwords are not accepted as command arguments. Use the prompt or
--password-stdin so secrets do not appear in shell history or process listings.
| Workflow | Formats |
|---|---|
| Create archives | .zip with Deflate/store and AES-256 encryption, .tzst (.tar.zst) with Zstandard, .tgz (.tar.gz) with gzip, .tzap with Zstandard plus encryption/recovery metadata, .7z with LZMA2 and AES-256 encryption, .aar/.aea (Apple Archive) |
| ZIP family | .zip, .zipx, .jar, .war, .ipa, .apk, .appx, .xpi, .cbz, .epub, split .z01… volumes, ZIP-content .exe files |
| 7z | .7z, .cb7, .sevenz, encrypted 7z archives, numbered .7z.001 volumes |
| RAR | .rar, .cbr, split .partN.rar volumes, RAR4/RAR5, passworded RAR data, encrypted RAR5 headers, Unicode paths, symlinks, hardlinks, and file-reference entries |
| TAR and variants | .tar, .cbt, .ustar, .pax, .tar.gz, .tgz, .tar.bz2, .tbz2, .tbz, .tar.xz, .txz, .tar.lzma, .tlzma, .tzst, .tar.zst, .tar.lz, .tar.lzo, .tar.Z, .taz, .tar.lz4, .tar.uu, .tar.b64 |
| TZAP | .tzap — a modern, open-source RAR alternative. Secure passphrase or multi-recipient encryption, cryptographic signatures, and self-healing error recovery; passphrase-protected create/list/test/extract |
| Raw compressed files | .zst, .gz, .bz2, .xz, .lzma, .lz, .br, .lz4, .lzo, .Z, .uu, .b64 |
| Packages and containers | .deb, .rpm, .a, .ar, .lib, .cpio, .cpio.gz, .cpio.bz2, .cpio.xz, .cpio.lzma, .cpio.zst, .cpgz, .spk, .iso, .xar, .cab, .msi, .pkg, .lha, .lzh, .warc, .mtree |
| Disk images | .dmg (Apple Disk Image), .vhd (Virtual PC/Hyper-V), .vmdk (VMware), .udf (optical) — extraction resolves MBR/GPT partitions and the inner filesystem (NTFS, FAT/exFAT, ext4, UDF) |
| Apple Archive | .aar, .aea encrypted Apple Archives (macOS/iOS) |
| Passwords | ZIP, 7z, TZAP, Apple Archive, and RAR list/test/extract through prompt or --password-stdin |
Creation is intentionally focused on formats people should use today. Extraction
is intentionally broad, so zm can be the one command you try first when
someone sends you an archive.
Packages install bash, zsh, and fish completions where the package manager supports it. The CLI can also print a PowerShell argument completer for manual Windows setup. For manual setup or troubleshooting, print the script for your shell:
source <(zm completions bash)
zm completions zsh > ~/.zfunc/_zm
zm completions fish > ~/.config/fish/completions/zm.fishzm completions powershell > zm.ps1
. .\zm.ps1Human-readable output uses --color auto by default: color is shown only on
terminal streams, and NO_COLOR disables automatic color. Use
--color always to force color or --color never to disable it. JSON output
and raw archive payloads from --to-stdout are never colorized.
GUI and other job-event consumers should follow the phase-aware job progress contract, especially for multi-pass TZAP creation.
git clone https://github.com/tzap-org/zmanager.git
cd zmanager
cargo build -p zmanager-cli --release
./target/release/zm --helpcargo fmt --check
cargo clippy --workspace --all-targets
cargo test --workspaceSome compatibility tests use optional external archive tools when installed, but the core suite is deterministic and should pass without network access.
crates/zmanager-cli: user-facingzmcommand.crates/zmanager-core: archive planning, creation, extraction, listing, testing, safety checks, and the engine-owned adapter/session registry.crates/zmanager-ffi: UniFFI-generated archive/session/job bridge consumed by the desktop and mobile GUI apps.crates/zmanager-unrar: bundled extraction-only UnRAR bridge for passworded RAR extraction.fixtures/: committed compatibility fixtures used by integration tests.fuzz/:cargo-fuzztargets for hostile archive and parser surfaces.packaging/: Homebrew and WinGet metadata templates.scripts/: release packaging helpers..github/workflows/: CI and release automation.
This workspace is released under the Apache License 2.0. The bundled UnRAR
source has its own extraction-only license; see
THIRD_PARTY_NOTICES.md and
vendor/unrar/license.txt.