A cross-platform 7z GUI built with Tauri.
See ARCHITECTURE.md, CONTRIBUTING.md, and SECURITY.md.
- macOS 26 or later. The universal build supports Intel and Apple silicon Macs that can run macOS 26+.
- Windows 10 version 2004 (build 19041) or later, on x64 or ARM64. The modern Explorer integration requires a signed NSIS install.
- Linux x64: Ubuntu 24.04+, Debian 13+, or Fedora 43+ (or a compatible distribution with the required WebKitGTK runtime). The public release ships x64 AppImage, DEB, RPM, and sideloaded Flatpak bundles. ARM64 AppImage/DEB/RPM are published only when explicitly built for that release; Flatpak stays x64.
npm installnpm run tauri:devcargo doc --manifest-path src-tauri/Cargo.toml
Direct Cargo commands work without a separate npm run prepare:7z; the Tauri
build script refreshes ignored sidecar binaries from tracked assets before the
native build runs.
- Zinnia registers common archive file types in packaged builds.
- Windows NSIS builds add per-user Explorer verbs for
Open with Zinnia,Extract with Zinnia, andCompress with Zinniaas the classic fallback (including Explorer’s “Show more options” path when the modern package is unavailable). - Signed Windows NSIS builds also register a Win11 modern context menu via a
sparse identity MSIX +
zinnia_shell.dll(Zinniasubmenu, plus top-level Extract on archives). After a successful modern registration, classic verbs are removed so they do not stack under Show more options; they remain the fallback when package registration fails. Zinnia itself stays a normal per-user NSIS Win32 install; the MSIX is not a Store/AppX app package; it only grants package identity so Explorer can load the shell DLL. Seesrc-tauri/windows/shell/README.mdanddocs/QA-CONTEXT-MENUS.md. - Linux
deb,rpm, and Flatpak bundles include desktopOpen,Extract, andCompressactions. - macOS users can choose Zinnia from Finder's Open With/Get Info default-app flow; Zinnia routes archive launches to the quick extract window. Packaged builds also expose Finder Sync context-menu items and Finder Services: Extract with Zinnia and Compress with Zinnia. Finder Sync only monitors Desktop, Documents, Downloads, Movies, Music, Pictures, and currently mounted volumes. Use Finder Services for files in other folders.
- Windows:
npm run build:win - macOS:
npm run build:mac:universalthennpm run build:mac:zip - Linux x64:
npm run build:linux(ornpm run build:linux:x64) - Linux ARM64 (on native ARM64 hardware/emulation):
npm run build:linux:arm64 - Flatpak:
npm run flatpak:bundle
npm run release:sign:gpg
- Updater is already configured in
src-tauri/tauri.conf.json. - CI runs tests and checks on Linux, Windows, and macOS. It never builds release binaries, publishes releases, or consumes release signing secrets.
- Signed releases are intentionally explicit: run the platform-specific
release:win,release:mac, andrelease:linuxscripts for the same version.release:linuxis x64; runrelease:linux:arm64only from a suitable ARM64 build environment. They stage updater manifests, artifacts, checksum files, and detached.ascsignatures in the matching draft GitHub release. - Beta
release:*:continuesigning auto-syncs that VM'slatest-*-beta-*.jsonmanifests onto the latest stable/releases/latest, including while the tag is still a draft. That is intentional: beta clients poll the live feed, so each platform's updater JSON is published as soon as that VM signs. Usenpm run release:sync-beta-manifestsonly for recovery/re-sync after a published beta if needed. - After the draft is complete, run
npm run release:verify:draft(read-only). After publishing, runnpm run release:verify:published. It requires the complete standard target matrix for the current stable or beta channel and verifies the exact release version, then downloads referenced updater artifacts and checks their signatures. Stable verification also requires the beta-target endpoints that move final-beta installs onto stable.REQUIRED_UPDATER_TARGETSadds intentional optional targets such as Linux ARM64 to that required set. - GitHub may temporarily expose an unpublished draft under an
untagged-*identifier. Release scripts accept it only when the draft name and target commit match exactly, then set the intendedvX.Y.Ztag during publication. - Each full release command prepares and runs every non-E2E quality gate once.
Native E2E is skipped for local release commands because CI runs it on Linux,
Windows, and macOS; a direct
npm run test:allstill includes E2E. Ifrelease:preparewas already run separately on the same VM, use the matchingrelease:*:resumecommand; its build session is bound to the exact commit, lockfiles, platform, architecture, and Node/Rust toolchain and expires after 24 hours. - After editing
package.jsonversion, runnpm run u/u2. They copy that version through native manifests, changelog download URLs, and AppStream, then refresh lockfiles. They still do not install packages or execute dependency code.release:prepare/workspace:bootstrapalso write AppStream. You can runsync-versionand the metainfo script alone.--checkremains available if you only want validation. - Do not push a release tag until every platform artifact is present and its updater signature and checksum have been verified.
