Each TUI list and detail view has one layout, which the diagrams draw with the example data from the protocol specs.
Layout · List views · Detail views · Routes
Each structured detail view has these parts, from top to bottom:
▏ bar on the leftThe keys of each view are in TUI-KEYS.md; the diagrams do not show the footer.
╭─ ICON[⇡] Subject (40ch) · Author · FormatTime · [repo]#hash ───────────╮
│ │
│ ▏Subject (bold) │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏State value RowStylesWithWidths(14, 0) │
│ ▏Field value │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏Body (markdown) │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Section (count) │
│ ───────────────────────────────────────────────────────────── │
│ ... items ... │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Comments (count) │
│ ───────────────────────────────────────────────────────────── │
│ │
│ [comment card] │
│ │
│ key:label key:label /:search X:retract │
╰─────────────────────────────────────────────────────────────────────────╯
; and , move between the links of the selected card, enter follows the focused one, and a click hits a link. The n-th link a render marks is the n-th entry of the card's Links(); anchors_test.go checks each detail view.
| Text | Target |
|---|---|
#commit: ref in a subject or body | the item, else the post of a cached commit, else the commit diff |
#branch:, #file:, #list: ref | the Repository view on the branch, the Code view at the path and lines, the list |
#tag: ref | the release that names the tag, else the diff of the tagged commit |
| ref of a repository the cache does not hold, or a url that carries one | outside, at the url |
@user@host in a subject or body | the author: search |
| Author, Merged by, Closed by, Signed by | the author: search, when the row carries an email |
| Assignees, Reviewers, Labels | the assignee:, reviewer: and label: search |
| Referenced by | the citing commit, resolved as a #commit: ref |
| Base, Head, a stack row, a card's branch pair | the Repository view on the branch |
| the tip after Base or Head | the commit it records |
Depends on, stacked on a card | the pull request it builds on |
| Tag of a release | the Tags view at the tag |
file:line on feedback | the Code view at the lines: the head for a new line, the base for an old one, at the recorded tip |
| Adopted from, on the card and the row | the original item |
| the repository of a notification card | the Repository view |
| Source URL, artifacts, markdown links and urls | outside |
Each list view except List repositories is a CardList: one card per item, a ▏ bar on the selected card, and a separator between cards. MaxLines is the height of the card body.
Timeline cards have MaxLines 5 and show interaction counts.
╭─ Timeline ──────────────────────────────────────────────────────────────╮
│ │
│ ▏• Alice · 2h ago · #abc123456789 │
│ ▏Hello world! │
│ ▏↩ 2 ↻ 1 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ↩ Bob · 5h ago · #def456789abc │
│ Great idea! I especially like the part about... │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ↻ Alice · 1d ago · #bcd234567890 │
│ ┊ Bob · Great idea! │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
The title carries the follow state: workspace, followed, mutual or unfollowed.
╭─ ⊡ ✓ user/repo · 1/5 ─────────────────────────────────────────────────╮
│ │
│ ▏• Alice · 2h ago · #abc123456789 │
│ ▏Hello world! │
│ ▏↩ 2 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ • Alice · 1d ago · #def456789abc │
│ Add dark mode support │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
My Branches in the navigation, or b on a repository, opens its branches. The first row reads every branch, and a feature branch of the workspace counts only the commits ahead of the default branch.
╭─ ⎇ user/repo branches ────────────────────────────────────────────────╮
│ │
│ ▸ All branches · 16 commits │
│ feature/dark · 3 ahead · 1h ago │
│ main · 12 commits · 1d ago · default │
│ gitmsg/social · 1 commit · 2d ago │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
My Tags in the navigation, or t on a repository or on a branch, opens the tags of the local clone, highest version first. A row shows the commits since the previous tag, the date and the author, and a release mark when a release names the tag. Enter opens that release, else the diff of the tagged commit; c opens the code at the tag.
╭─ ⌂ user/repo tags ────────────────────────────────────────────────────╮
│ │
│ ▸ v1.0.0 · 4 commits since v0.9.0 · 1h ago · Alice · release │
│ v0.9.0 · 12 commits · 1d ago · Bob │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
w on My Repository opens the working tree of the workspace: one row per changed or untracked file with the two columns of git status --short, and under the list the diff of the selected file, the staged diff before the unstaged one. s and u stage and unstage the selected file, S and U every file. C opens the commit form when the index holds a change; the commit is the index, through git commit, so the hooks and the signing of the repository run as from the shell.
╭─ ± Changes · 3 files · 2 staged ──────────────────────────────────────╮
│ │
│ ▸ A added.txt · staged │
│ MM both.txt · staged, then changed again │
│ ?? new.txt · untracked │
│ │
│ ▌ staged: added.txt +2 │
│ 1 + one │
│ 2 + two │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
c on a repository or on a branch opens the tree of the branch; with no branch picked, the default branch. Enter descends into a directory or opens a file, and backspace goes up. A file shows line numbers and syntax color; a line range named by a reference is selected and scrolled into view. A binary file and a Git LFS pointer show their size only. The view reads the workspace or the local clone of a followed repository, and is read-only.
╭─ ▤ user/repo · main · src ────────────────────────────────────────────╮
│ │
│ ▸ .. │
│ lib/ │
│ main.go · 2.0KB │
│ vendor · submodule │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
╭─ ▤ user/repo · main · src/main.go ────────────────────────────────────╮
│ │
│ 1 package main │
│ 2 │
│ 3 func main() { │
│ 4 run() │
│ 5 } │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
The view is a text list, with an input field for a local list.
╭─ ☷ My List ───────────────────────────────────────────────────────────╮
│ │
│ + | │
│ url [branch | *] │
│ │
│ ▸ user/repo ✓ followed · https://github.com/user/repo │
│ bob/repo ✓ mutual · https://github.com/bob/repo │
│ alice/repo · https://gitlab.com/alice/repo │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
The view shows the posts from each repository in a list.
╭─ ☷ My List ───────────────────────────────────────────────────────────╮
│ │
│ ▏• Alice · 2h ago · user/repo#abc123456789 │
│ ▏Hello world! │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ • Bob · 5h ago · bob/repo#def456789abc │
│ Great idea! │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
Issue cards have MaxLines 1. n opens the issue form.
╭─ ○ Open Issues · (3) ─────────────────────────────────────────────────╮
│ │
│ ▏○ Add dark mode support · Alice · 2h ago · kind/feature │
│ ───────────────────────────────────────────────────────────── │
│ ○ Add dashboard analytics · Bob · 1d ago · kind/feature │
│ ───────────────────────────────────────────────────────────── │
│ ● Add keyboard shortcuts · Alice · 3d ago · kind/task │
│ │
╰────────────────────────────────────────────────────────────────────────╯
╭─ ◇ Open Milestones · (2) ─────────────────────────────────────────────╮
│ │
│ ▏◇ Release v2.0 · Alice · due Mar 15 · ████████░░░░ 3/5 │
│ ───────────────────────────────────────────────────────────── │
│ ◇ Design System Epic · Bob · due Feb 15 · ░░░░░░░░░░░░ 0/4 │
│ │
╰────────────────────────────────────────────────────────────────────────╯
╭─ ◷ Active Sprints · (2) ──────────────────────────────────────────────╮
│ │
│ ▏◷ Sprint 23: UX Polish · Alice · Feb 1-14 · ████░░░░ 2/5 · 8d │
│ ───────────────────────────────────────────────────────────── │
│ ◷ Sprint 24 · Bob · Feb 14-28 · ░░░░░░░░░░░░ 0/3 · planned │
│ │
╰────────────────────────────────────────────────────────────────────────╯
Release cards have MaxLines 2.
╭─ ⏏ Releases (2) ──────────────────────────────────────────────────────╮
│ │
│ ▏⏏ Release v1.0.0 · Alice · 2d ago │
│ ▏ Pre-built binaries for Linux, macOS, and Windows. │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ⏏ Release v2.0.0-beta.1 · Alice · 2w ago │
│ Implements dark mode support. │
│ │
╰────────────────────────────────────────────────────────────────────────╯
Pull request cards have MaxLines 2.
╭─ ⑂ Pull Requests (2) ─────────────────────────────────────────────────╮
│ │
│ ▏⑂ Add dark mode support · Alice · 3h ago · open │
│ ▏ main ← dark-mode · ✓1 ✗0 · +120 -45 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ⑂ Add keyboard shortcuts · Bob · 1d ago · open │
│ main ← feature/shortcuts · +42 -8 │
│ │
╰────────────────────────────────────────────────────────────────────────╯
The input is at the top, and the results are cards under it, with the matches highlighted.
╭─ Search ────────────────────────────────────────────────────────────────╮
│ │
│ > dark mode█ │
│ │
│ • Alice · 2h ago · #abc123456789 │
│ Add [dark] [mode] support │
│ ↩ 2 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ○ Add [dark] [mode] support · Alice · 3d ago · kind/feature │
│ Users can toggle between light and [dark] themes... │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
Read items are dimmed.
╭─ Notifications ─────────────────────────────────────────────────────────╮
│ │
│ ▏• Bob mentioned you · 1h ago │
│ ▏Hey @[email protected], thoughts on this approach? │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ↩ Alice commented · 3h ago (dimmed = read) │
│ Love this idea, I'll start on it. │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ⎇ Bob started following · 1d ago (dimmed = read) │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
The view shows a thread: the parent (dimmed), the post, then the replies, indented by depth.
╭─ • Alice <[email protected]> · Jan 6, 2025 10:30 UTC · #abc1234 ───────╮
│ │
│ [parent - dimmed, max 5 lines] │
│ Alice · 2h ago │
│ Original post content... │
│ │
│ ──────────────────────────────────────────────────────── (white) │
│ │
│ ▏Alice · 2h ago · #abc123456789 │
│ ▏Hello world! │
│ ▏↩ 2 ↻ 1 │
│ │
│ ──────────────────────────────────────────────────────── (white) │
│ │
│ ↩ Bob · 1h ago · #def456789abc │
│ Great idea! │
│ │
│ ───────────────────────────────────────────────────────── (dim) │
│ │
│ ↩ Alice · 30m ago │
│ I agree! │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
╭─ ○ Add dark mode support · Alice · 2h ago · #abc123456789 ─────────────╮
│ │
│ ▏Add dark mode support │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏State open │
│ ▏Assignees [email protected] │
│ ▏Due Feb 15, 2025 │
│ ▏Milestone Release v2.0 due Mar 15 │
│ ▏Sprint Sprint 23: UX Polish Feb 1 - Feb 14 │
│ ▏Labels kind/feature, priority/high │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏Users can toggle between light and dark themes in settings. │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Comments (2) │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ↩ Bob · 1h ago │
│ Love this idea, I'll start on it. │
│ │
│ ───────────────────────────────────────────────────────────── (dim) │
│ │
│ ↩ Alice · 30m ago │
│ Adding real-time collaboration to the scope. │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
╭─ ◇ Release v2.0 · Alice · 5d ago · #def456789012 ──────────────────────╮
│ │
│ ▏Release v2.0 │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏State open │
│ ▏Due Mar 15, 2025 │
│ ▏Progress ████████░░░░░░░░ 3/5 (60%) │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏Dark mode and dashboard analytics. │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Linked Issues (3) │
│ ───────────────────────────────────────────────────────────── │
│ ▏○ Add dark mode support kind/feature │
│ ○ Add dashboard analytics kind/feature │
│ ● Add keyboard shortcuts kind/task │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Comments (1) │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ↩ Bob · 3d ago │
│ Adding real-time collaboration to the scope, extending due date. │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
╭─ ◷ Sprint 23: UX Polish · Alice · 5d ago · #abc123456789 ──────────────╮
│ │
│ ▏Sprint 23: UX Polish │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏State active │
│ ▏Progress ████░░░░░░░░░░░░ 2/5 (40%) │
│ ▏Days left 8 │
│ ▏Dates Feb 1 - Feb 14, 2025 │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏Two-week sprint for user experience improvements. │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Sprint Backlog (3) │
│ ───────────────────────────────────────────────────────────── │
│ ○ Add dark mode support kind/feature │
│ ● Add keyboard shortcuts kind/task │
│ ○ Add dashboard analytics kind/feature │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Comments (1) │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ↩ Alice · 2d ago │
│ Retrospective: Good velocity this sprint. │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
s opens the SBOM view.
╭─ ⏏ Release v1.0.0 · Alice · 2d ago · #abc123456789 ────────────────────╮
│ │
│ ▏Release v1.0.0 │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏Version 1.0.0 │
│ ▏Tag v1.0.0 │
│ ▏Artifacts app-linux-x64.tar.gz, app-darwin-arm64.tar.gz │
│ ▏Artifact URL refs/gitmsg/release/v1.0.0/artifacts/ │
│ ▏Checksums sha256:abc123def456... │
│ ▏Signed by SHA256:abc123... │
│ ▏SBOM sbom.spdx.json (SPDX) · 127 packages [s] │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏Pre-built binaries for Linux, macOS, and Windows. │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Comments (1) │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ↩ Bob · 1d ago │
│ Implements dark mode support. │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
╭─ ⏏ SBOM · Release v1.0.0 ────────────────────────────────────────────╮
│ │
│ ▏Format SPDX-2.3 │
│ ▏Packages 127 │
│ ▏Generator syft-1.0.0 │
│ ▏Licenses MIT (42) │
│ ▏ Apache-2.0 (15) │
│ ▏ BSD-3-Clause (8) │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Packages (127) │
│ ───────────────────────────────────────────────────────────── │
│ ▏github.com/pkg/errors v0.9.1 MIT │
│ golang.org/x/sys v0.15.0 BSD-3-Clause │
│ github.com/mattn/go-sqlite3 v1.14.22 MIT │
│ ... │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
d opens the diff, and i opens the interdiff between versions.
╭─ ⑂ Add dark mode support · Alice · 3h ago · #abc123456789 ─────────────╮
│ │
│ ▏Add dark mode support │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏State open │
│ ▏Base main │
│ ▏Head dark-mode │
│ ▏Behind 3 commits behind main │
│ ▏Reviewers [email protected] │
│ ▏Closes #commit:def456789012 │
│ ▏Files 3 changed +120 -45 [d] │
│ ▏Reviews 1 approved, 0 changes req, 0 pending │
│ ▏Status Ready to merge │
│ ▏───────────────────────────────────────────────────────────── │
│ │
│ Commits (2) │
│ ───────────────────────────────────────────────────────────── │
│ abc1234 Dark mode theme engine Alice · 3h ago │
│ def4567 Add theme toggle component Alice · 2h ago │
│ │
│ ▏───────────────────────────────────────────────────────────── │
│ ▏Users can toggle between light and dark themes in settings. │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Reviews (2) │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ✓ Bob · approved · 1h ago · reviewed v2, no code changes │
│ LGTM! │
│ │
│ ───────────────────────────────────────────────────────────── (dim) │
│ │
│ ✗ Carol · changes requested · 2d ago · reviewed v1 [stale] │
│ The transition timing needs work │
│ │
│ ───────────────────────────────────────────────────────────── (dim) │
│ │
│ ↩ Bob · 2h ago · src/theme.js:42 │
│ Consider caching this value │
│ 40 function getTheme() { │
│ 41 const stored = localStorage.getItem('theme'); │
│ > 42 return stored || detectSystemTheme(); │
│ 43 } │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ Comments (1) │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ↩ Alice · 30m ago │
│ Clean separation of theme variables. │
│ │
╰─────────────────────────────────────────────────────────────────────────╯
Each view has a route; a view with no diagram uses the list or the detail layout.
| Section | Routes |
|---|---|
| Social | /social/timeline, /social/my-repository, /social/repository, /social/repository/lists, /social/repository/branches, /social/repository/tags, /social/repository/code, /social/changes, /social/commit-form, /social/list, /social/list/repos, /social/detail, /social/thread, /social/post-form, /social/history, /social/history/diff, /social/explore, /social/followers |
| PM | /pm/board, /pm/issues, /pm/issue, /pm/new-issue, /pm/edit-issue, /pm/milestones, /pm/milestone, /pm/new-milestone, /pm/edit-milestone, /pm/sprints, /pm/sprint, /pm/new-sprint, /pm/edit-sprint, /pm/config, and /pm/<item>/history with /history/diff for each item type |
| Review | /review/prs, /review/pr, /review/new-pr, /review/edit-pr, /review/feedback, /review/diff, /review/pr/interdiff, /review/pr/history, /review/pr/history/diff |
| Release | /release/list, /release/detail, /release/new, /release/edit, /release/sbom, /release/history, /release/history/diff, /export-artifact |
| Memo | /memo/list, /memo/project, /memo/personal, /memo/inherited, /memo/inherits, /memo/session, /memo/session/items, /memo/detail, /memo/new, /memo/edit, /memo/history, /memo/history/diff |
| Core | /search, /search/help, /notifications, /lists, /analytics, /diff, /settings, /config, /config/forks, /config/identity, /config/site, /cache, /errorlog, /help |