⚡ GitKraft
A Git IDE written entirely in Rust — desktop GUI & terminal UI
GitKraft ships two front-ends from a single Rust workspace:
| Binary | Use case |
|---|---|
gitkraft |
Desktop GUI — mouse, drag-to-resize panes, commit graph |
gitkraft-tui |
Terminal UI — keyboard-driven, great for SSH & headless machines |
Preview
Desktop GUI

Terminal UI

Features
- Branch management — create, checkout, delete, rename, merge, rebase (local & remote)
- Commit log with graph — canvas DAG in GUI, box-drawing in TUI
- Commit actions — cherry-pick, revert, reset (soft/mixed/hard), create branch/tag at commit, copy SHA
- Commit search — incremental search across the commit log
- Diff viewer — working-dir, staged, and per-commit diffs with coloured hunks
- File history & blame — per-file commit history and line-by-line blame
- Staging area — stage/unstage files or all at once, discard or delete files
- Stash management — save, apply, pop, drop with optional messages
- Multi-tab — open multiple repos in tabs (GUI & TUI), sessions persisted
- Remote operations — fetch, push, force-push (
--force-with-lease), pull (rebase), remote branch checkout/delete - Context menus (GUI) — right-click branches, commits, stashes, and files for the full action set
- Editor integration — open files, blame, or
settings.jsonin your configured editor - UI zoom (GUI) — Ctrl/Cmd +/− to scale, persisted across launches
- Directory browser (TUI) — press
oto browse and open repos - 43 colour themes — Dracula, Nord, Catppuccin, Tokyo Night, Kanagawa, Rose Pine, Cyberpunk, Synthwave, and more
- Virtual scrolling — smooth performance with large histories and long diffs
- Two-phase diff loading — file list appears instantly, diffs load per-file
- Draggable pane dividers (GUI) — layout saved automatically
- Persisted settings — theme, layout, recent repos, open tabs (
~/.config/gitkraftstyle JSON, no external DB)
Installation
# Desktop GUI
# Terminal UI
Or download pre-built binaries from the Releases page.
Keyboard Shortcuts
TUI — global (any pane)
| Key | Action |
|---|---|
| ←/→ or Tab / Shift+Tab | Switch panes |
| / | Search commits |
| , | Open settings.json in editor |
| o | Browse & open repo |
| N / W | New tab / close tab |
| ] / [ | Next / previous tab |
| p / P | Pull (rebase) / push |
| r / f | Refresh / fetch |
| t | Cycle theme |
| T / O / E | Theme panel / options panel / editor panel |
| q or Ctrl+C | Quit |
TUI — Branches pane
| Key | Action |
|---|---|
| j/k, Enter | Navigate, checkout selected branch |
| b | Create new branch |
| D | Delete selected (local) branch |
| X | Delete selected remote branch |
| m | Merge selected branch into HEAD |
| R | Rebase HEAD onto selected branch |
| e | Rename selected branch |
TUI — Commit Log pane
| Key | Action |
|---|---|
| j/k, g/G | Navigate, jump to first/last |
| J/K, Space | Range-select / toggle multi-select |
| Enter | Load diff for selected commit |
| C | Cherry-pick commit(s) |
| e | Revert commit(s) |
| n / x / X | Reset to commit — mixed / soft / hard |
| F | Force push (--force-with-lease) |
| y | Copy commit SHA to clipboard |
| a | Open commit action popup (branch/tag here, etc.) |
TUI — Diff View pane
| Key | Action |
|---|---|
| j/k, l/Enter, h | Navigate files, open, back to file list |
| J/K | Range-select files |
| g/G, d/u | Scroll to top/bottom, page down/up (in content) |
| H | File history |
| B | Blame |
| e | Open in editor |
| o | Restore file from commit to working directory |
TUI — Staging pane
| Key | Action |
|---|---|
| j/k, Space | Navigate, toggle selection |
| Tab | Switch focus: unstaged ↔ staged |
| s/u | Stage / unstage (selected files, or current) |
| S/U | Stage / unstage all |
| d | Discard changes (press twice to confirm) |
| D | Delete file (press twice to confirm) |
| c | Commit |
| z/Z | Stash save / pop |
| H/B | File history / blame |
| e | Open in editor |
TUI — Stash pane
| Key | Action |
|---|---|
| j/k | Navigate |
| Enter / p | Pop selected stash |
| a | Apply selected stash (keep in list) |
| d | Drop selected stash |
GUI
| Key | Action |
|---|---|
| Ctrl/Cmd + +/−/0 | Zoom in / out / reset |
| Ctrl/Cmd + F | Toggle search |
| Ctrl/Cmd + T or N | New tab |
| Ctrl/Cmd + W | Close current tab |
| Ctrl/Cmd + R or F5 | Refresh |
| Ctrl/Cmd + , | Open settings.json in editor |
| Shift + ↑/↓ | Extend range selection |
| Esc | Close overlay / context menu |
Right-click branches, commits, stashes, or files for the full context menu.
Building from Source
# Run
Prerequisites: a recent stable Rust toolchain (2021 edition).
On Linux, the GUI also needs windowing/graphics dev libraries (X11 + Wayland):
Themes
43 built-in themes, persisted per-user and shared between GUI and TUI:
Default · Default Light · Grape · Ocean · Sunset · Forest · Rose · Mono · Neon · Dracula · Nord · Solarized Dark/Light · Gruvbox Dark/Light · Catppuccin Latte/Frappé/Macchiato/Mocha · Tokyo Night/Storm/Light · Kanagawa Wave/Dragon/Lotus · Moonfly · Nightfly · Oxocarbon · Cyberpunk · Rose Pine/Moon/Dawn · Ayu Mirage · Everforest Dark · Atom One Dark/Light · Night Owl · Poimandres · Flexoki Dark/Light · Carbonfox · Andromeda · Synthwave
Development
CI runs on both GitHub Actions and Gitea Actions with automated nightly dependency updates.
Architecture
gitkraft-gui ──┐
├──▶ gitkraft-core ──▶ git2, serde/serde_json, chrono
gitkraft-tui ──┘
gitkraft-core owns all Git logic and shared types (branches, commits, diff, log, remotes,
staging, stash, persistence, themes) — no UI code. Both front-ends are thin wrappers around
it and follow The Elm Architecture (State → View → Message → Update). Settings, recent
repos, and layout are persisted as plain JSON on disk — no embedded database.
Contributing
- Fork → branch → make changes → ensure
just check-allpasses → PR
License
Made with 🦀 by Sorin Irimies