ziggity
Fast keyboard-driven terminal UI for Git written in Zig
TLDR
SYNOPSIS
ziggity
DESCRIPTION
ziggity is a terminal user interface (TUI) for Git that provides a lazygit-style workflow in a small Zig binary. It drives plain git as a subprocess (no libgit2) and uses libvaxis for the UI. Split panels cover Status, Files, Branches, Commits, and Stash, with a live diff preview and a context-sensitive footer.Core operations are keyboard-driven: stage or unstage whole files or individual hunks and lines, commit with an in-app summary/body editor, manage branches and tags, stash with optional messages, fetch/pull/push without blocking the UI, and run interactive rebases through a visual plan editor. Additional features include a real git log --graph viewer, multi-selection ranges, custom patch building, merge-conflict resolution, GPG signature checks, worktree and submodule navigation, remappable keys, and themeable colours.Run ziggity inside any Git repository. Press ? for the keybinding overlay (scrolled to the focused panel) and q to quit. Prebuilt static binaries are published for macOS, Linux (musl), and Windows; Homebrew installs the macOS/Linux package from the project's tap.
CONFIGURATION
ZIGGITY_CONFIG
Environment variable pointing at an INI config file applied globally. There is no auto-loaded XDG path; set this in the shell profile to share settings across repositories.\<repo\>/.ziggity.ini
Per-repository INI file that overrides ZIGGITY_CONFIG. Without any config file, settings fall back to defaults and per-repo auto-detection (notably the editor).Common settings include panel layout (side_panel_width_percent, expand_focused_side_panel), commit editor guides (commit_summary_limit, commit_body_guide), refresh/fetch intervals, editor presets (editor_preset, editor_command), remappable keys (key.\<name\>), theme colours (color.\<name\> as terminal palette indices 0–255), and custom commands (command.\<key\>).
KEYBOARD SHORTCUTS
1–5: Focus Status / Files / Branches / Commits / Stashh l / arrows: Move focus between side panelsj k / arrows: Move selectiontab: Focus the Diff panel (and back)space: Stage file · checkout branch · apply stash (by focus)c: Commita: Stage/unstage all (Files)d / D: Discard menu / discard allf / p / P: Fetch / pull / pushi: Interactive rebase plan editorctrl+l: Commit graph viewerctrl+z: Undo last operation?: Keybindings helpq: Quit
CAVEATS
Requires git on PATH at runtime. Destructive history operations (hard reset, force push, rebase) should be used carefully. macOS prebuilt binaries may need a one-time quarantine clear (xattr -d com.apple.quarantine). Windows builds are cross-compiled and experimental. Feature parity with lazygit is intentionally incomplete in places (for example, redo after undo is not implemented).
HISTORY
ziggity was created by Simone Arpe and is written in Zig. It aims for a lazygit-like feel without being a line-by-line port, emphasizing a small dependency-light binary, explicit memory ownership, and plain git subprocesses.
