Interactive Log TUI
coco log -i remains supported and now opens the broader coco ui workstation in history mode.
Use this page when you specifically care about the history/log experience. For status, dedicated diff viewing, staging, hunk actions, commit compose, AI drafts, and GitKraken migration notes, see the full Coco UI guide.
Start The TUI
1# Open the interactive log
2coco log -i
3
4# Equivalent primary entrypoint
5coco ui --view history
6
7# Override the default interactive history window
8coco ui --view history --limit 500
9
10# Browse all local and remote refs
11coco ui --view history --all
12
13# Filter the loaded history before opening
14coco ui --view history --path srcIf the command is not running in a TTY, Coco falls back safely so automation and smoke tests do not hang.
By default, stdout/JSON coco log loads 30 commits, while coco log -i starts with 300 commits so the TUI has a useful browsing window. When you scroll near the end of the loaded commit buffer, the TUI loads the next older 300-commit batch automatically. Use --limit to cap the loaded history explicitly.
Layout
The history view uses the same persistent multi-panel layout as coco ui:
- Header: repository, branch, dirty state, PR/provider summary, active search text, and a
›-separated breadcrumb showing where you are in the navigation stack (e.g.history › diff). - Sidebar: tabs for status, branches, tags, stashes, and worktrees.
- Commits: searchable commit graph/list with compact and full graph modes.
- Right dock: selected commit metadata, changed files, file stats, and selected-file hunk preview.
- Footer: two slots — view-specific contextual hints on the left, and persistent global affordances anchored to the right (
g jump · < back · ? help · : cmds · q quit).
The UI intentionally avoids showing every workflow at once. Advanced actions live behind the command palette, help panel, or confirmation prompts.
Navigation
Even though coco log -i opens in the history view, the full coco ui navigation model is available without re-running the command — g h, g s, g d, g c, g b, g t, g z, g w, g p, g x, g r, g B jump to history / status / diff / compose / branches / tags / stash / worktrees / pull-request / conflicts / reflog / bisect; < or Esc pops back.
For the complete navigation reference (chord rules, contextual transitions, palette, search, help, breadcrumb, themes, accessibility), see TUI Navigation.
v0.34.0 migration:
gis now a chord prefix. The graph toggle moved to\.
Keys for the history surface
| Key | Action |
|---|---|
j / k, arrow keys | Move in the focused panel |
PageUp / PageDown | Page commits, or page the detail diff preview when detail is focused |
gg | Jump to first visible commit |
G | Jump to last visible commit |
n / N | Next or previous visible search result |
Tab / Shift+Tab | Move focus between panels |
[ / ] | Previous or next sidebar tab |
1-5 | Jump to sidebar tabs: status, branches, tags, stashes, worktrees |
\ | Toggle compact/full graph display |
r | Refresh repository context |
Enter (on a commit) | Push the diff view for the selected commit |
Status, diff, and compose surface keys are documented in Coco UI.
Search
Search uses ranked fuzzy matching across commit hash, date, author, message, and refs. Exact and prefix matches rank higher, while fuzzy matches still make quick filters useful for abbreviated intent.
The commit panel shows the visible match count as filtered/total commits.
When more history is available, the commit panel shows more below. As you move near the end of the loaded list, it briefly shows loading older commits while fetching the next batch.
Detail Preview
Selecting a commit loads details lazily for that commit only. The detail panel includes:
- full hash, author, date, refs, and message body,
- changed file list,
- commit-level numstat summary,
- per-file additions/deletions or binary marker,
- selected-file hunk preview.
When the detail panel is focused, j/k move through changed files and PageUp/PageDown scroll the preview window.
Theme Configuration
coco log -i supports semantic theme presets through .coco.config.json:
1{
2 "logTui": {
3 "theme": {
4 "preset": "catppuccin",
5 "borderStyle": "round"
6 }
7 }
8}coco ships 49 built-in color themes (50 selectable presets counting the bare default), 17 of them light — default, monochrome, catppuccin, gruvbox, dracula, nord, tokyo-night, solarized-dark, rose-pine, github-dark, gruvbox-light, catppuccin-latte, and many more. Browse the full gallery with live previews at coco.griffen.codes/docs/themes.
The active/selected row stays readable on every theme — light or dark, on truecolor and downgraded (16/256-color) terminals alike.
You can override individual semantic color tokens:
1{
2 "logTui": {
3 "theme": {
4 "preset": "gruvbox",
5 "colors": {
6 "accent": "#83a598",
7 "focusBorder": "#8ec07c",
8 "selection": "#504945"
9 }
10 }
11 }
12}NO_COLOR=1 is respected and forces a readable monochrome theme. Dumb or legacy terminals use the ASCII-compatible border path.
Date Bucketing
The history view groups adjacent commits under section headers based on when they landed:
── Today ──────────────────────────────
● 64e1757 feat(search): trigram-based subject filter
│
● 817dc35 fix(payments): handle 3D-secure redirect
│
── Yesterday ──────────────────────────
● a01b22c chore(deps): bump simple-git to 4.x
│
── April 2026 ──────────────────────────
● fa10b4c refactor(api): centralise error shapes
Buckets, from most recent to oldest:
| Bucket | Range |
|---|---|
| Today | Same UTC day |
| Yesterday | 1 day ago |
| This week | 2–6 days ago |
| Last week | 7–13 days ago |
| Earlier this month | Same calendar month, > 13 days ago |
| Month YYYY | Older calendar months (one bucket per month) |
Bucketing is on by default and replaces the per-row date column. The freed cells go to the commit subject so long messages truncate less aggressively. To opt out and get the per-row date column back, set:
1{
2 "logTui": {
3 "dateBucketing": false
4 }
5}Bucketing automatically suppresses itself while a search filter (/) is active — filtered results aren't chronological, so the divider invariant would break and read as noise. The per-row date column comes back for the duration of the filter.
Automation-Safe Output
Use the non-interactive modes for scripts:
coco log --format table
coco log --format json
coco log --commit HEAD --format jsoncoco log -i is meant for human inspection. Plain stdout and JSON output should remain stable for automation, release tooling, and tests.