README.md

August 2, 2026 · View on GitHub

 ██████╗ ██╗████████╗   ███████╗██╗   ██╗███████╗███████╗██╗   ██╗
██╔════╝ ██║╚══██╔══╝   ██╔════╝██║   ██║╚══███╔╝╚══███╔╝╚██╗ ██╔╝
██║  ███╗██║   ██║█████╗█████╗  ██║   ██║  ███╔╝   ███╔╝  ╚████╔╝ 
██║   ██║██║   ██║╚════╝██╔══╝  ██║   ██║ ███╔╝   ███╔╝    ╚██╔╝  
╚██████╔╝██║   ██║      ██║     ╚██████╔╝███████╗███████╗   ██║   
 ╚═════╝ ╚═╝   ╚═╝      ╚═╝      ╚═════╝ ╚══════╝╚══════╝   ╚═╝   
                                                                  

License: MIT zshrs plugin

[FULL-SCREEN FZF GIT UI — COMPILED]

"a self-reentrant fzf UI with no per-keystroke re-sourcing."

[NATIVE ZSHRS PLUGIN]

git-fuzzy — the full-screen fzf-driven git interface — ported to a native zshrs plugin. This port covers the status command end-to-end.

zshrs · znative · upstream


Table of Contents


[0x00] OVERVIEW

git-fuzzy is a self-reentrant fzf UI: every preview and keybinding calls back into the tool. In bash that re-execs the script and re-sources its library per keystroke (git-fuzzy even ships "dispatch-aware sourcing" to make that cheap). As a compiled plugin, the helpers are builtins — no per-keystroke library sourcing.

Requires git and fzf (>= 0.71) on PATH. delta / diff-so-fancy are used for diff rendering when present.


[0x01] INSTALL

znative load MenkeTechnologies/zshrs-git-fuzzy

Put that one line in your .zshrc. znative, zshrs's package manager, installs the plugin on the first shell start — clones it, runs cargo build --release, and zmodload -Rs the resulting libgit_fuzzy — then loads it from the store, zero-network, on every start after. No separate install step.

Manual build

cargo build --release
zmodload -R ./target/release/libgit_fuzzy.dylib   # .so on Linux
gf status

[0x02] COMMANDS

commandwhat it does
gf statusinteractive git status UI
gf / gf menusame as gf status — the upstream menu is not ported yet
git-fuzzy …second registered name for the same builtin

Inside the status view: live diff preview, full-screen inspect, and key-bindings to stage / unstage / discard / amend / patch / commit / edit, plus a --listen-driven watcher that live-reloads on repo changes.

Environment

Set GF_STATUS_WATCH=0 to turn off that live-reload watcher.

Every key-binding is overridable; the defaults match upstream git-fuzzy:

variabledefault
GIT_FUZZY_STATUS_ADD_KEYAlt-S
GIT_FUZZY_STATUS_ADD_PATCH_KEYAlt-P
GIT_FUZZY_STATUS_RESET_KEYAlt-R
GIT_FUZZY_STATUS_DISCARD_KEYAlt-U
GIT_FUZZY_STATUS_COMMIT_KEYAlt-C
GIT_FUZZY_STATUS_AMEND_KEYAlt-M
GIT_FUZZY_STATUS_EDIT_KEYAlt-E
GIT_FUZZY_INSPECT_KEYAlt-I
GIT_FUZZY_SELECT_ALL_KEYAlt-A
GIT_FUZZY_SELECT_NONE_KEYAlt-D
GIT_FUZZY_PREVIEW_WRAP_KEYAlt-W
GIT_FUZZY_PREVIEW_SIZE_INCREASE_KEYAlt-=
GIT_FUZZY_PREVIEW_SIZE_DECREASE_KEYAlt--

[0x03] HOW IT WAS PORTED

The self-reentrant pattern is documented in the zshrs plugin porting guide, "self-reentrant fzf tools": docs/PORTING_ZSH_PLUGIN.md. fzf runs bind/preview commands via sh, which can't call a plugin builtin, so a generated shim runs zshrs -fc 'zmodload -R <self>; gf --helper …' — one dlopen of an mmap'd dylib per action.


[0xFF] LICENSE

MIT. Ported from bigH/git-fuzzy (MIT). See LICENSE.