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 gh and skips straight to its issues
  • Open in browser — press o to open the current item on github.com
  • mdr integration — press r to 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

KeyAction
j / k / arrowsNavigate up/down
EnterSelect / drill down
Esc / BackspaceGo back
TabSwitch tabs
/Search / filter
oOpen in browser
rRead body in mdr (detail view)
tTheme picker
?Help
q / Ctrl-cQuit
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

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.

Code