Introduction
GitUI is a Rust-powered terminal interface for Git, built around a single design goal: feel instant. Its libgit2 backend makes operations like "status on a 100K-file repo" finish in milliseconds, and all features are keyboard-driven.
With over 22,000 GitHub stars, GitUI is lazygit's main rival. Both are excellent; GitUI is faster on large repos and has a cleaner default layout, while lazygit has a slightly richer feature set and a larger community.
What GitUI Does
GitUI offers tabs for Status, Log, Files, Stashing, and Stash operations. Each tab is keyboard-navigable with hjkl or arrows. You can stage/unstage hunks with Enter, commit with c, push/pull with P/p, branch, rebase, and inspect history — all without typing git once.
Architecture Overview
[GitUI (Rust + tui-rs)]
|
[libgit2 — fast Git backend]
|
+-----+-----+-----+-----+
| | | | |
Status Log Files Branch Stash
hunks graph tree rename/apply
|
[Keybinds]
Vim-style navigation
global "1-5" to jump tabs
"?" shows context help
|
[Config]
~/.config/gitui/
theme.ron, key_bindings.ronSelf-Hosting & Configuration
# Quick reference keybinds (press ? inside gitui)
# 1 Status (stage/unstage/commit)
# 2 Log (browse + reset/checkout)
# 3 Files (explore + open)
# 4 Stashing
# 5 Stashes (apply/pop/drop)
# e edit in $GIT_EDITOR
# c commit
# P push
# p pull
# b branches
# t tags
# s switch branch// ~/.config/gitui/theme.ron — Catppuccin-ish colors
(
selection_bg: Some(Rgb(69, 71, 90)),
selection_fg: Some(Rgb(205, 214, 244)),
cmdbar_bg: Some(Rgb(30, 30, 46)),
cmdbar_extra_lines_bg: Some(Rgb(30, 30, 46)),
branch_fg: Some(Rgb(245, 194, 231)),
diff_line_add: Some(Rgb(166, 227, 161)),
diff_line_delete: Some(Rgb(243, 139, 168)),
)Key Features
- Instant on large repos — libgit2 native, no Git CLI subprocess
- Stage/unstage hunks — line-level granularity with Enter
- Interactive rebase support — reorder / squash / edit commits via TUI
- Stash management — create, apply, pop, drop stashes visually
- Branch + tag management — create, rename, delete, checkout, merge
- Blame + file history — inspect who changed what when
- Custom keymaps + themes — RON-format config files
- GPG signing support — respects your Git config
Comparison with Similar Tools
| Feature | gitui | lazygit | tig | gh dash | git-gui |
|---|---|---|---|---|---|
| Language | Rust | Go | C | Go | Tcl/Tk |
| Backend | libgit2 | git CLI | libgit2 | git CLI | git CLI |
| Speed on large repos | Best | Fast | Fast | Fast | Slow |
| Feature breadth | Good | Best | Good (read-only focus) | Limited (GitHub-focused) | Basic |
| Community size | Growing | Largest | Established | GitHub-specific | Legacy |
| Best For | Speed-first terminal UI | Feature-rich TUI | Log/diff browsing | GitHub PRs | Legacy GUI |
FAQ
Q: GitUI vs lazygit? A: Both excellent. lazygit has more features and bigger community. GitUI is faster on large repos and cleaner UI. Try both, pick the one that fits your muscle memory.
Q: Does GitUI work over SSH? A: Yes — it's a TUI, so run it in any terminal including SSH sessions. Install gitui on the remote or on your local machine against a mounted remote repo.
Q: Can it handle merge conflicts?
A: Yes, the Status tab marks conflicted files; press e to open your editor to resolve, then stage with s. For complex conflicts, many users still switch to a GUI.
Q: Does it support submodules / worktrees?
A: Yes — worktrees and submodule status show in the UI. Advanced operations still require the git CLI.
Sources
- GitHub: https://github.com/gitui-org/gitui
- Author: extrawurst (Stephan Dilly)
- License: MIT