✨ Features
- Fullscreen Terminal UI: Designed using
ratatui and crossterm with modern visual styling.
- Config-Driven Layout: Driven by
config.toml for persistence and custom configurations.
- In-App Card Management: Add, edit, delete, and label items directly from the UI with automatic disk persistence.
- Global Summary Header Bar: High-level dashboard stats showing aggregate counts of repos, dirty repos, ahead counts, and stale repos as a row of tabs. Click a tab or press
Tab/Shift+Tab to cycle the list filter through them.
- Background Auto-Refresh: Non-blocking background status checking every 10 seconds to keep your repo cards live and up-to-date; a list sorted by Latest Changes re-sorts itself when a repository gets a new commit.
- Scheduled Auto-Fetch: Automatically runs
git fetch for every repository on a configurable cadence (auto_fetch_interval_mins, default 10 minutes, 0 disables), with per-repository and per-label interval overrides (in Repository Settings and Label Settings) so each repo — or a whole label group — can fetch on its own schedule or opt out.
- Uncommitted Work Warning Badge: Highlights repositories with a
⚠ PARTIAL badge when staged and unstaged changes coexist simultaneously.
- Fuzzy Jump Picker: Instantly jump to any repository by name using the
/ overlay.
- Command Palette: Press
Ctrl-P on the home screen or inside a repository to fuzzy-find every action available in that view, see its current key, and run it by name — no shortcut memorising required.
- Pin Repositories: Press
p to keep a repository at the top of the list, and of its label groups, whatever the sort order; a faint dashed rule under the last pinned row sets the pinned block apart from the rest.
- Favorite / Star Repositories: Bookmark important repositories with
* separate from pinned items.
- Home View Modes: Press
v to cycle between standard 4-row cards, a dense 1-row view (Compact), and a grid-based Tile view. A label can carry its own layout (View Mode in Label Settings), used while that label’s filter is active.
- Show / Hide Separators: Turn off Show Separators in Settings → Theme & Style (
show_separators = false) for a cleaner home page: the rule under the summary bar, the sort rule’s dashes (the Sort: … caption stays) and the pinned-block rule are all hidden.
- Label / Group Collapsing: Organize repositories on the home page with collapsible label headers.
- Label Filter / Project View: Press
L to pick a label from a fuzzy picker and stick the home list to that project until you deselect it — the filter survives Esc and app restarts, the applied label is pinned as a highlighted badge in the frame’s top border above the summary tabs (click to change), and the tab counts scope to it. If the label has a theme set in its Label Settings, the home list is tinted with it while the filter is active. Up to nine labels are also shown as numbered chips under the summary bar — a label takes the next free slot the first time you view it and keeps that number (FIFO, oldest evicted once all nine are taken; empty on first run; persisted in state.toml, beside config.toml): press 1-9 (or click a chip) to jump straight to that project view, and press the active slot again to clear it.
- Per-Label Settings: Press
→ on a label in the picker to open Label Settings — theme, page size, max commits, resync-on-tab, auto-fetch interval, and editor shared by every repository carrying that label. Settings resolve most-specific-first: per-repository override, then label, then the global default. The popup also holds a per-label sort order (Sort By and Sort Reverse) and layout (View Mode): while that label’s filter is active the home list uses the label’s sort and layout instead of the global ones, the sort caption names the label (Sort: Alphabetical · work), and o/O/v then cycle the label’s setting rather than the global — so an archive label can stay alphabetical while everything else sorts by recent visit, or a large work label can use the compact rows while the rest keeps cards.
- Full-Screen Detail View: Press
Enter to open a multi-tab inspection interface (Workspace, Files tree with preview, Graph log, Branches, Tags, Remotes, Stashes, Worktrees, Submodules, Reflog, Forge Issues, Forge PRs). Tab headers dynamically fallback to their first character under restricted widths to prevent overflow.
- Resizable Panels: Drag the splitter lines between Detail panels with the mouse, or press
+ / - to grow / shrink the focused panel from the keyboard.
- Embedded Terminal Panel: Press
t (or Ctrl-T from anywhere) to open an IDE-style integrated terminal docked above the status bar, running your $SHELL in a PTY starting in the selected repository’s directory. The single session survives hiding the panel — long-running commands keep going — and supports scrollback (Shift+PgUp/Shift+PgDn), click-to-focus, and full key forwarding. T still opens the classic full-screen external shell (with multi-select batch support).
- Mode-Aware Status Bar: Shows contextual shortcuts dynamically with support for collapsed/expanded view (
.). When expanded, it dynamically wraps the shortcut items and calculates the exact number of rows needed based on terminal width.
- Global Code Search: Press
Ctrl-F to search for string patterns across all tracked repositories using a fast, multithreaded offline file scanner. Hitting Enter on a result automatically jumps to and opens that repository.
- Track Launch Directory: Start Gitwig from inside a Git repository that is not on your list and it offers to add it, walking up from the working directory to the repository root (so launching from any subdirectory adds the right path). Press
y to add, n/Esc/Enter to skip. Turn the prompt off permanently with prompt_cwd_repo = false, or from Settings.
- Automatic Workspace Sync: Monitor directories (e.g.
watch_dirs = ["~/development"]) to automatically sync newly created or cloned repositories to your workspace in real-time. This feature can be toggled on or off via the enable_watch_dirs configuration.
- Git LFS Integration: Automatic visual indicators (
[LFS]) for tracked files, with LFS workflows (git lfs pull files, git lfs track <pattern>, and checking local LFS storage usage) accessible inside Repository Settings.
- Forge / GitHub Integration: Dedicated PR/MR Viewer tab (fetching PRs, status checks, reviews, checking out branches, opening in browser), Issue Tracker tab (filtering by assignee/all open), and Code Review Mode (wizard input popups to asynchronously post line comments to PRs).
- App Usage Dashboard: Press
U to open the usage statistics dashboard tracking session duration, commit counts, Git operations (merges, rebases, fetches, pushes, pulls), branches managed, stashes, Forge PR reviews and comments, and a visual 52-week Activity Heatmap.
- External Mergetool Integration: Easily resolve complex conflicts by pressing
M to instantly launch your configured external git mergetool (e.g. VSCode, KDiff3, Meld) directly from the TUI.