Your whole Git workflow,
keyboard-first
Stop juggling a Git GUI, your terminal, and the browser. coco ui puts history, diffs, staging, PRs, and issues behind muscle-memory keystrokes — one fast surface, sharpened by AI.
npx git-coco@latest ui- 16
- views
- 108
- themes
- <100ms
- boot
- 0
- mouse
Explore every surface
Sixteen specialized views, plus the cross-view actions that span them — each purpose-built for a specific Git workflow. Toggle between them and hover to preview.
History
Browse commit history with graph visualization.
↑ ↓ to explore · click to enlarge
Every repo, one keystroke away
coco ws scans your directory for repositories and gives you a sortable, filterable overview — dirty state, ahead/behind, open PRs. Clone a remote or add a repo by path without leaving the TUI, then press Enter to drive any of them as a full workstation.
c — cloneClone a remote straight into your launch directory; the destination auto-fills from the URL.
a — addRegister an existing repo by path, with tab completion as you type.
enter — drive itBrowse the multi-repo overview — dirty state, ahead/behind, open PRs — then Enter any repo to drive it as a full workstation.
Key workflows
Real Git operations, not just a viewer. Stage hunks, compose commits, review PRs, and rewrite history — all from the keyboard.
Tactile hunk staging
Open a changed file and stage it hunk by hunk. Each hunk carries a ● staged / ○ unstaged badge, the selected hunk is highlighted with an accent bar, and ↑/↓ walk between them — so you stage exactly what you mean, never the whole file by accident.
Never memorize a key
Press g? in any view for a live strip of its single-key actions — cherry-pick, revert, mark-compare, stage — sourced from that view's bindings, so the list changes as you move between views. It's the per-view sibling of the g-chord which-key menu: the same letter can mean different things in different views, and g? always tells you which.
Stash like a pro
Stash from any view with gZ — even mid-diff — then manage stashes that actually read: every entry shows its origin branch, file count, and age, with a live contents preview. Rename one, branch off it, apply keeping your index, or undo a drop, all without leaving the keyboard.
Worktree-aware checkout
Check out a branch that's already checked out in another worktree and coco doesn't dead-end on git's error — it names the worktree holding it and offers a way forward: s to switch into that worktree (it opens as a nested frame), r to remove it and check out here, or x to remove it and delete the branch. Dirty worktrees are guarded.
Side-by-side diff
Read changes in a split-pane diff with syntax highlighting and line-level navigation — staged or unstaged, any commit or file, without leaving the keyboard.
Stage, draft, ship — the inner loop
The whole everyday loop without leaving the keyboard: open a changed file, stage the hunks you mean, jump to compose, and let coco draft a Conventional Commit message from exactly what's staged — ready to review, edit, and commit. commitlint respected.
Review a PR end to end
Open the current branch's pull request — body, CI checks, and reviews right in the inspector — then cross to the multi-PR triage list and cycle filters. Merge, approve, request changes, and comment without a browser round-trip.
History mutations, with a real undo button
Revert, reset, rebase, and cherry-pick from the history view. Cursor to any commit and apply the operation with a single key. Made a mistake anyway? z is lazygit's undo safety blanket, reflog-powered: it reads what actually just happened, shows you the exact inverse it's about to run, and reverts it on confirm — no manual reflog archaeology required.
Batch it: mark, range-select, one confirm
Stop deleting five stale branches five separate times. x marks a branch or stash and auto-advances to the next; v anchors a range extended with j/k. Delete the marked branches, drop the marked stashes, or cherry-pick a whole commit span as one git cherry-pick oldest^..newest — the confirm panel names every item so nothing runs blind.
Resolve conflicts in place
When a merge, rebase, cherry-pick, or revert stops on conflicts, the conflicts view lists every file. Keep theirs (u) or keep ours (U) per file, or open it in your editor — then continue the operation (C) once it's clean, without dropping to the shell.
Bisect a regression
Drive git bisect from the workstation: mark the cursored commit good (g) or bad (b) and watch the candidate range collapse toward the culprit, with a running decision log and the revisions-left estimate — no remembering the bisect verb soup.
Fits any terminal
Down to an 80×24 tmux split, the three-pane IDE folds to a single full-width pane you Tab between — no feature locked behind screen real estate. Press v to peek the sidebar without losing your place, then snap right back.
Power moves
The high-leverage gestures that reward discovery — diff any two refs, surface every key, and stage in bulk.
Compare any two refs
Mark a branch, tag, or commit with m, then Enter on another to read the full base..head diff — without leaving the workstation or remembering git diff syntax.
Discover every key
Press g for a live which-key menu of every view jump, or g? for the single-key actions in the view you're in. The density that makes it fast never leaves you stuck — there's no cheat sheet to memorize.
Stage in bulk
Stage everything with A, or type a git pathspec with + — a path, a directory, or a glob like src/*.ts — to stage exactly the set you mean. Globs go straight to git, no shell.
Search by what changed, not just when
Filter history by diff content, not just message or author: /S:token finds commits that added or removed a string (git log -S), /G:regex finds commits whose patch matches a pattern (git log -G). Same live-filter UX as path:/author:.
Sharp commands, too
The workstation isn't the whole story. coco's standalone commands bring the same AI to your everyday flow — no TUI required.
coco commitAI-drafted Conventional Commit messages from your staged changes.
coco changelogRelease notes generated from any branch, range, or tag.
coco commit --splitBreak a messy staging area into clean, AI-planned commits.
108 ways to make it yours
From Catppuccin to Gruvbox to Synthwave — every preset is a complete palette, surface and all. Plus full NO_COLOR support for minimal environments.
NO_COLOR support
Set NO_COLOR=1 to strip all color output. Respects the no-color.org convention.
How coco stacks up
Coming from another Git client? Here's what you get with coco ui.
| Feature | coco ui | GitKraken | lazygit | gitui | tig |
|---|---|---|---|---|---|
| Terminal-native (no Electron) | ✓ | ✗ | ✓ | ✓ | ✓ |
| Keyboard-first navigation | ✓ | ~ | ✓ | ✓ | ✓ |
| Hunk-level staging | ✓ | ✓ | ✓ | ✓ | ✗ |
| AI commit messages | ✓ | ~ | ✗ | ✗ | ✗ |
| AI code review | ✓ | ✗ | ✗ | ✗ | ✗ |
| AI changelog generation | ✓ | ✗ | ✗ | ✗ | ✗ |
| AI commit splitting | ✓ | ✗ | ~ | ✗ | ✗ |
| Multi-provider / local AI | ✓ | ✗ | ✗ | ✗ | ✗ |
| Multi-forge (GitHub + GitLab) | ✓ | ✓ | ✗ | ✗ | ✗ |
| One-keystroke PR / MR creation | ✓ | ✓ | ✗ | ✗ | ✗ |
| Issue + PR / MR triage | ✓ | ✓ | ✗ | ✗ | ✗ |
| Conflict resolution helper | ✓ | ✓ | ~ | ~ | ✗ |
| Bisect & reflog recovery | ✓ | ~ | ~ | ✗ | ~ |
| Global undo (reflog-powered) | ✓ | ~ | ✓ | ✗ | ✗ |
| Multi-select / batch operations | ✓ | ~ | ~ | ✗ | ✗ |
| Content search (pickaxe -S / -G) | ✓ | ~ | ✗ | ✗ | ~ |
| Recursive submodule drill-in | ✓ | ~ | ~ | ✗ | ✗ |
| Theming + NO_COLOR | ✓ | ~ | ~ | ~ | ~ |
| Free & open source | ✓ | ✗ | ✓ | ✓ | ✓ |
Try the workstation
Install coco and launch the TUI. One command to get started.
npx git-coco@latest init