A lightweight macOS menu bar app that keeps you on top of your GitHub pull requests.
PR view made simple, focused and always available.
Mainline lives in your menu bar and watches the pull requests you care about — the ones you opened and the ones waiting on your review. It notifies you when something changes: a PR turns green, a review lands, or CI breaks. It groups every PR by what needs your attention, and lets you approve, merge, or snooze straight from the keyboard. No browser tabs, no refreshing GitHub by hand.
Jump to: Install · Get started · Features · Screenshots · Docs
Mainline is distributed through a Homebrew tap.
brew tap mthines/mainline
brew install --cask mainlineThen open Mainline from Spotlight or your Applications folder. A menu bar icon appears — click it to open the panel.
Install a beta build
Beta builds are published on demand: comment /beta on a pull request to cut a beta from it.
brew tap mthines/mainline
# Latest beta
brew install --cask --force mthines/mainline/mainline-beta
# A specific pinned beta version
brew install --cask --force mthines/mainline/mainline-beta@1.2.3-beta.42.1--force is required because beta and stable share /Applications/Mainline.app.
To roll back to stable: brew install --cask --force mthines/mainline/mainline.
Requirements: macOS 13 Ventura or later, and a GitHub account.
Mainline needs a GitHub token to read your pull requests. Pick whichever option fits how you already work.
If you use the GitHub CLI and have run gh auth login, open Mainline Settings and click Import from gh.
Mainline reuses your existing gh token, which is already authorized for any SAML SSO organizations you belong to.
- Go to GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic).
- Grant the
repoandread:orgscopes. - If any of your PRs live in an organization that enforces SAML SSO, click Configure SSO on the token and authorize it for that org — otherwise GitHub silently returns no results for those repos.
- Open Mainline Settings and paste the token.
Note: a fine-grained token with only "read" access is usually not enough for org repos. Prefer a classic token with
repo+read:org, or use Import from gh.
Your token is stored in the macOS Keychain — never in a plain file or in app preferences.
A curated set of relevant PR's in your Inbox, or dedicated For me / Created tabs.
Not relevant, hover and press Q. For later, press S.
- New PR — fires a notification when a new PR appears in your search queries.
- Ready for review — notifies when a draft PR becomes ready, or when you're added as a reviewer.
- CI status changed — fires when CI passes or fails on any tracked PR.
- New review or comment — notifies when a review or comment is added (human comments only, by default — bot noise is filtered).
- Per-event attention levels — set each event type to a loud or quiet notification independently.
- Inbox tab — a unified view of every PR you opened or are asked to review, split into "Needs your review" and "Your PRs". Four configurable mute rules keep automated noise out: glob patterns matched against PR title and branch, bot-author detection (dependabot, renovate, …), label filtering, and a review-focus allow-list. Muted PRs collapse into a "Muted / low-priority" group at the bottom rather than disappearing entirely.
- Menu bar panel — click the icon to see your PRs grouped by actionability (Needs attention, Ready to merge, Waiting, …), each with CI status.
- Keyboard triage — drive the whole panel from the keyboard:
J/Kto move,Spaceto peek,↩to open,Mto merge,Sto postpone,Eto open the preview,Nto mark seen,Xto dismiss,Vfor multi-select,Dto toggle drafts,Qto mute (Inbox),Rto refresh,⌘Zto undo. Every key is rebindable in Settings → Keyboard. - Peek —
Spaceopens a glance card with the PR's changed-files list. - Row menu — right-click any PR for every action, including approve and request changes.
- Global shortcut — open Mainline from any app with a system-wide hotkey (default ⇧⌃ + the key left of
1; customizable in Settings). - Scope filter — narrow the panel and badge to a single org or repo.
See the keyboard reference for the full list and how to rebind.
- Write actions — approve, merge, or request changes without leaving the menu bar (each behind a confirmation; enable in Settings). See Write actions.
- Configurable polling — default 30s interval; adjustable in Settings (30s – 3600s).
- Custom search queries — default
is:open is:pr author:@meandis:open is:pr review-requested:@me. - Keychain storage — your token is stored securely in the macOS Keychain; never in app preferences or on disk.
- Opt-in telemetry — anonymous usage data is off by default; enable it in Settings → Privacy (see
docs/telemetry.md).
Mainline is a native SwiftUI app. To build it from source:
git clone https://github.com/mthines/mainline.git
cd mainline
xcodebuild -scheme Mainline -configuration Debug -destination "platform=macOS" buildThe built app lands in ~/Library/Developer/Xcode/DerivedData/Mainline-*/Build/Products/Debug/Mainline.app.
Building requires Xcode 15+.
Releases run through GitHub Actions: a push to main publishes a stable build automatically, and commenting /beta on a pull request publishes a beta on demand (PRs otherwise run a compile-only smoke check).
For code signing, notarization, the release pipeline, and Homebrew tap internals, see docs/release.md.
MIT — see LICENSE.