ScriptsApr 14, 2026·3 min read

GitUI — Blazing-Fast Terminal UI for Git Written in Rust

GitUI brings a Rust-fast terminal interface to Git: browse commits, stage hunks, view diffs, manage branches, and resolve conflicts — all without leaving the keyboard. A great complement (or alternative) to lazygit.

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.ron

Self-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

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets