giff

April 11, 2026 · View on GitHub

giff

A terminal UI for git diffs with interactive rebase support.

CI Crates.io License

giff demo


Features

  • Side-by-side & unified diffs — toggle between layouts with a single key
  • Syntax highlighting — language-aware coloring for 130+ languages via syntect
  • Dark & light themes — built-in themes with full customization through config
  • Interactive rebase — accept or reject individual changes, then commit
  • Rebase detection — notifies you when your branch is behind or has diverged
  • Vim-style navigation — keyboard-first with mouse scroll support
  • Help overlay — press ? anywhere to see all keybindings in context
  • Configurable — persistent settings via ~/.config/giff/config.toml

Syntax highlighting

Rust syntax highlighting

Unified view

Unified diff view

Light theme

Light theme

Help overlay

Help overlay

Install

cargo install giff

Or build from source:

git clone https://github.com/bahdotsh/giff.git
cd giff && cargo build --release

Usage

giff                        # uncommitted changes vs HEAD
giff main feature-branch    # diff between two refs
giff main                   # diff ref against working tree
giff --theme light          # override theme
giff -d "--stat"            # pass custom git diff args
giff --auto-rebase          # auto-rebase if behind upstream

Keybindings

Diff mode

KeyAction
j / kNavigate down / up
PageDown / PageUpPage down / up
Home / EndJump to first / last item
TabToggle focus between file list and diff
h / lFocus file list / diff content
uToggle unified / side-by-side view
tToggle dark / light theme
rEnter rebase mode
?Show help
q / EscQuit

Rebase mode

KeyAction
j / kNext / previous change
a / xAccept / reject change
n / pNext / previous file with changes
cCommit accepted changes
?Show help
EscCancel rebase

Mouse

Scroll wheel works in both the file list and diff panes.

Configuration

~/.config/giff/config.toml

theme = "your_custom_theme_name"

[themes.your_custom_theme_name]
base = "dark"
accent = "#89b4fa"
fg_added = "#a6e3a1"
fg_removed = "#f38ba8"

See the built-in dark and light themes in src/ui/theme.rs for all available color keys.

Contributing

Contributions welcome — feel free to open an issue or submit a PR.

License

MIT or Unlicense, at your option.