Skip to content

The desktop app

tt-git-gui is tt-git as a desktop app. It runs in a window of its own on Windows, macOS and Linux instead of in a terminal. Under the window it’s the same program: the same panes, the same keys, the same config and plugins. Everything else on this site applies to it.

The tt-git desktop app on Windows: the tt-git, Repository, View and Graph menus in the title bar, the commit graph on top, the status pane and the branch list below, and the help bar along the bottom
The desktop app on Windows, on the same project as the rest of this site's screenshots.

The desktop app is drawn with GPUI, the UI framework the Zed editor is built on. GPUI draws every frame on the GPU (Direct3D 11 on Windows, Metal on macOS, Vulkan on Linux), so the graph, diffs and blame scroll smoothly, at any size and zoom. The title bar, menus and right-click menus come from gpui-component; the panes are tt-git’s own, in the same theme as the terminal app. By default they’re drawn as rounded cards with headers in your system’s UI font; the terminal style draws them in the same monospace boxes as the terminal app.

GPUI only draws. What the app does, from the keymap to the git commands it runs, is shared with the terminal app, which is why the two can’t drift apart. How it’s built shows the crates and how the two front ends share them.

The desktop app adds what a window can do and a terminal can’t:

  • Menus listing every command with its key.
  • Right-click a pane for a menu of what you can do on the row you clicked.
  • Drag the borders between panes to resize them.
  • One window per repository. Open another repository and it gets its own window.
  • A start window when you open it outside a repository, with the repositories you opened last.
  • Notifications when a fetch brings new commits, or an agent commits in another worktree, while you’re in another window, if you turn them on, each kind on its own.
  • The taskbar on Windows, and the dock on Linux, shows a push, pull or fetch still running, and with notifications on, a badge for new commits or conflicts. The Windows jump list has your recent repositories.
  • The Dock on macOS has your recent repositories in its menu, and with notifications on, a badge for new commits or conflicts.

Every pane and dialog from the terminal app is here, drawn in the window.

A commit open full size in the desktop app: its changed file on the left and the diff with syntax colors on the right
A commit's files and diff (enter on a commit).
Staging a file in the desktop app: the unstaged hunks of NotificationBell.tsx, the first hunk picked
Staging a file a hunk at a time.
Blame of src/api/client.ts in the desktop app: each line's commit, author and age beside the code
Blame, with each line's commit, author and age.
The command palette over the graph in the desktop app, filtered by sta
The command palette (:).
The keybindings popup over the graph in the desktop app
The help popup (?), listing every key for the pane you're in.
The desktop app in the Catppuccin Latte light theme, with a commit's details open below the graph
Any theme works, light ones included (here Catppuccin Latte).

The app is the same on all three. What changes is where the menus go and how the window fits in with the desktop.

The window draws its own title bar: the tt-git icon, the menus (tt-git, Repository, View and one for the focused pane), the window’s title, and the minimize, maximize and close buttons.

The Graph menu open in the desktop app's title bar on Windows, listing the graph's commands with their keys
The menus live in the title bar on Windows.

Install it with the setup program or the zip; see Install and open.

The desktop app runs the same app as tt-git, so you don’t learn anything twice:

  • The panes. Graph, Details, Status, staging, Blame, Branches and its tabs, in the same places and doing the same things.
  • The keys. Every key works as in the terminal, in every pane and dialog, with the same defaults. The keymap is the only place keys are bound: the menus, the right-click menus, the help bar, the help popup (?) and the command palette all show the keys from it. See Keyboard shortcuts.
  • Your config. The desktop app reads the same config.toml, the repository’s own .tt-git.toml and .git/tt-git.toml, your key bindings, your layout and your theme. A key you rebind for one is rebound for both.
  • Plugins. The same installed plugins load, with their actions, event hooks, startup commands and panes. Plugin panes and the agent pane are terminals drawn inside the window.
  • git. It runs the git on your PATH for everything, as the terminal app does (see How tt-git uses git).