A terminal interface for browsing GitHub — repos, issues, pull requests, and notifications — built with Go, Bubbletea, and the gh CLI.
Run ghx to browse your repositories. Run it inside a git repo to jump straight to that repo’s issues.
Features
- Repository browser — browse your repos with fuzzy search/filter, configurable source (user, org, or starred)
- Repo detail screen — description, stars, language, license, topics, and a glamour-rendered README preview
- Issues & pull requests — tabbed view with sub-tab toggle between issues and PRs, plus fuzzy filtering
- PR CI status — visual check indicators inline: ✓ pass, ✗ fail, ● pending
- Detail view — full issue/PR body rendered as markdown (via glamour), with labels, metadata, and comment threads. Scrollable.
- PR diff review — view pull request diffs directly in the terminal
- Notifications — dedicated tab for GitHub notifications
- Context mode — detects the current repo via
ghand skips straight to its issues - Open in browser — press
oto open the current item on github.com - mdr integration — press
rto read issue/PR body in the full mdr markdown reader - Configurable themes — TOML-based themes loaded from
~/.config/ghx/themes/(falls back to~/.config/mdr/themes/). Ships with Tokyo Night Moon. - Help overlay — press
?for a keybinding reference
Key Bindings
| Key | Action |
|---|---|
j / k / arrows | Navigate up/down |
Enter | Select / drill down |
Esc / Backspace | Go back |
Tab | Switch tabs |
/ | Search / filter |
o | Open in browser |
r | Read body in mdr (detail view) |
t | Theme picker |
? | Help |
q / Ctrl-c | Quit |
Navigation
Home (Repos / Notifications tabs)
→ Select repo → Repo Detail (Overview / Issues / PRs tabs)
→ Select issue/PR → Detail view (body + comments)
Context mode: run ghx inside a git repo to skip the repo list and land directly on that repo’s issues.
Requirements
- Go 1.21+
- GitHub CLI (
gh) — must be installed and authenticated - mdr (optional) — for full markdown reading experience
Architecture
Elm-architecture TUI via Bubbletea. All GitHub data flows through gh CLI subprocess calls with JSON output — no direct API tokens or REST calls. The UI is a screen stack: each drill-down pushes a new screen, Esc pops back. Markdown bodies are rendered via glamour and cached per viewport width to avoid re-rendering on scroll. Async data fetching uses Bubbletea’s command system with spinner feedback. Themes are loaded from TOML files at startup with fallback to mdr’s theme directory.