A native macOS menu bar app that keeps your GitHub pull requests visible at a glance.
GitHub Tray shows PRs in focused sections and lets you jump straight to each PR from the menu bar.
- Shows Review Requested PRs in your menu bar.
- Splits your authored PRs into:
- Approved
- Returned to You
- My Open PRs (everything else)
- Shows PRs where you are Mentioned In.
- Displays per-PR status indicators for checks (pending, success, failure).
- Supports optional launch-at-login (Autostart).
- Rust core (
github-tray-core) for GitHub API access and app state. - UniFFI for Rust <-> Swift bindings.
- Swift/AppKit macOS menu bar UI (
SwiftApp). - Tokio + Reqwest for async GitHub calls.
github-tray/
├── Cargo.toml
├── justfile
├── build-xcode.sh
├── github-tray-core/ # Rust core + UniFFI
│ └── src/
└── SwiftApp/ # Swift macOS app
├── project.yml # XcodeGen spec
└── GitHubTray/
└── Sources/
Install helpers:
cargo install just
brew install xcodegenCreate config file:
just setup-configThis creates:
~/Library/Application Support/github-tray/config.toml
Example:
github_token = "ghp_xxx"
refresh_interval_secs = 300
autostart = trueToken notes:
- Use a GitHub Personal Access Token.
reposcope is required for private repositories.
just gen-xcode
just freshjust runjust build-appApp bundle output:
SwiftApp/build/Build/Products/Release/GitHubTray.app
just check # cargo check
just test # cargo test
just lint # cargo clippy -- -D warnings
just fmt # cargo fmt
just ci # fmt-check + lint + test + checkUseful:
just clean # clear Rust + Xcode build artifacts
just rebuild # clean + build app
just open-bundle # open existing built app- Swift app starts
GitHubTrayCore(Rust). - Rust loads config from
~/Library/Application Support/github-tray/config.toml. - Rust fetches PRs from GitHub GraphQL API on an interval.
- Rust sends
AppStateupdates via UniFFI callback trait. - Swift rebuilds the menu UI from the latest state.
Run:
just setup-configVerify github_token is set and not placeholder text.
Run:
just gen-xcodeRun a full rebuild:
just rebuildopen SwiftApp/build/Build/Products/Release/GitHubTray.appMIT