Ziggity – A terminal UI for Git, written in Zig
Ziggity: A High-Performance Git TUI Crafted in Zig
Ziggity is an ultra-responsive, keyboard-centric terminal user interface (TUI) for Git. It provides a workflow heavily inspired by lazygit but is implemented from the ground up in the Zig programming language for maximum efficiency.
Ziggity allows you to manage your staging area, commit changes, handle branches, perform rebases, and explore your commit history—all without ever leaving your terminal.
🛠 Technical Philosophy
While it mirrors the feel of lazygit, Ziggity is not a direct port. Instead, it leverages:
- Idiomatic Zig: Utilizing explicit memory management and ownership.
- Subprocess Execution: It communicates via plain
gitcommands rather than relying onlibgit2. - Modern UI: Powered by
libvaxisto deliver a smooth interface.
🚀 Installation
Ziggity requires the git binary to be available in your system's PATH.
📦 Quick Start Checklist
- Install Git
- Choose installation method (Homebrew, Binary, or Source)
- Verify installation with
command -v ziggity
1. Homebrew (macOS & Linux)
The easiest way to install and keep Ziggity updated:
brew install simoarpe/ziggity/ziggity
Note: This automatically taps simoarpe/homebrew-ziggity. To update, simply run brew upgrade ziggity.
2. Manual Binary Installation
Static binaries are provided for various platforms. Since they are static, they don't require a Zig toolchain to run.
| OS | Architecture | Binary Suffix |
|---|---|---|
| macOS | ARM64 / x86_64 | aarch64-macos / x86_64-macos |
| Linux | ARM64 / x86_64 | aarch64-linux-musl / x86_64-linux-musl |
| Windows | x86_64 | x86_64-windows-gnu |
For macOS/Linux:
# Example for macOS ARM64 v0.1.0
VERSION=v0.1.0
curl -LO https://github.com/simoarpe/ziggity/releases/download/$VERSION/ziggity-$VERSION-aarch64-macos.tar.gz
tar -xzf ziggity-$VERSION-aarch64-macos.tar.gz
sudo mv ziggity /usr/local/bin/
[!IMPORTANT] macOS Gatekeeper: Because the binary isn't notarized, you may need to remove the quarantine attribute:
xattr -d com.apple.quarantine /usr/local/bin/ziggity
For Windows:
Download the .zip file, extract ziggity.exe, and add its location to your system PATH.
Warning: Windows builds are cross-compiled and currently considered experimental.
3. Compiling from Source
Prerequisites: Zig 0.16.0 and git.
git clone https://github.com/simoarpe/ziggity
cd ziggity
zig build -Doptimize=ReleaseSafe
# The binary will be located at ./zig-out/bin/ziggity
To run tests: zig build test.
🔍 Verification
You can ensure your download is untampered by checking the checksums.txt file:
- Linux:
sha256sum --ignore-missing -c checksums.txt - macOS:
shasum -a 256 --ignore-missing -c checksums.txt
✨ Key Features & Highlights
Ziggity aims for a performance profile where the perceived latency .
🗂 Core Interface
The UI consists of several specialized panels: Status, Files, Branches, Commits, and Stash, all supporting a live diff preview and a dynamic footer.
🛠 Advanced Git Workflow
- Granular Staging: Enter a file to stage specific lines or hunks. It even supports a side-by-side view of staged vs. unstaged changes.
- Interactive Rebasing:
- Perform
drop,squash,fixup,edit,reword, ormoveoperations. - Use the plan editor (
i), cherry-pick commits, or userebase --onto. - Supports autosquash and custom patch building.
- Perform
- Deep History Inspection:
- View the DAG via
git log --graph(ctrl+l). - Jump between first-parents or perform ref-to-ref diffs (
W) with three-dot merge-base modes. - Verify GPG signatures (
x) and filter logs (/).
- View the DAG via
⚡ Power-User Tools
- Multi-Selection: Use
vorShift + Arrowsto select ranges of files, commits, or branches. Use*to select all commits on a specific branch. - Asynchronous Sync: A background
git fetchkeeps your "commits to pull" indicator updated without freezing the UI. - Quality of Life:
prepare-commit-msghook integration.- Stash snapshots (keep working tree) and custom stash naming.
- Bracketed paste support to prevent premature submission of multi-line messages.
⌨️ Usage & Configuration
Once installed, simply run ziggity inside any Git repository.
- Help: Press
?to open the keybindings overlay. - Exit: Press
qto quit. - Customization: Ziggity features fully remappable keys and themeable colors.
Summary of Capabilities
| Feature | Capability |
|---|---|
| Binary Size | Small & Lightweight |
| Dependencies | Minimal (No libgit2) |
| UI Engine | libvaxis |
| Control | Fully Keyboard-Driven |