A TUI for devs who review PRs faster than GitHub can load.
Stop juggling browser tabs. All your repositories in one view, switch with Tab.
j/k, gg/G, and all the keys you expect. Your muscle memory just works.
Dependabot opened 15 PRs? Select all, approve, merge. Done in seconds, not minutes.
Full PR review in your terminal. Syntax highlighting, inline comments, submit reviews—no browser needed.
CI failed? Jump straight to errors with n. Navigate through workflows → jobs → steps in a tree.
Forgot a keybinding? Ctrl+P and fuzzy search. Every action is discoverable.
Green check, red X, yellow spinner. Know instantly which PRs are ready to merge.
- PR filtering by status/type
- Merge queue — Land PRs one-by-one with CI checks between each merge. Queue up approved PRs, and the tool merges them sequentially: merge → wait for CI → next PR. Ensures main stays green.
- Session persistence
- Live status updates
cargo install --git https://github.com/sassman/gh-pr-lander-rs.git gh-pr-landerRequires the GitHub CLI (gh) to be installed and authenticated.
✨ To authenticate with your GitHub Enterprise Server run: gh auth login --web --hostname <your-gh-enterprise.adress>
- Launch:
./target/release/gh-pr-lander - Add a repository:
r → a - Navigate PRs:
j/kor arrow keys - Select PRs:
Space - Merge selected:
p → m - View diff:
d → d - View build logs:
p → l - Open command palette:
Ctrl+P
| Key | Action |
|---|---|
j / ↓ |
Next item |
k / ↑ |
Previous item |
gg |
Go to top |
G |
Go to bottom |
Tab |
Next repository |
Shift+Tab |
Previous repository |
| Key | Action |
|---|---|
Space |
Toggle selection |
Ctrl+A |
Select all |
u |
Deselect all |
Enter |
Open in browser |
p → m |
Merge |
p → a |
Approve |
p → c |
Comment |
p → d |
Request changes |
p → x |
Close |
p → r |
Rebase / update branch |
p → l |
View build logs |
p → i |
Open in IDE |
d → d |
View diff |
Ctrl+R |
Refresh PRs |
| Key | Action |
|---|---|
? |
Toggle keyboard help |
Ctrl+P |
Command palette |
` |
Toggle debug console |
q / Esc |
Close / go back |
Ctrl+C |
Quit |
| Key | Action |
|---|---|
r → a |
Add repository |
r → o |
Open repo in browser |
| Key | Action |
|---|---|
n |
Jump to next error |
N |
Jump to previous error |
t |
Toggle timestamps |
e |
Expand all |
E |
Collapse all |
| Key | Action |
|---|---|
j/k |
Navigate lines |
n |
Next hunk |
N |
Previous hunk |
Tab / Space |
Switch pane (file tree ↔ diff) |
h / l |
Focus file tree / diff content |
c |
Add comment on current line |
d → r |
Submit review (approve/request changes/comment) |
Full code review in terminal — Add inline comments on any line with
c, then submit your review withd → rto approve, request changes, or leave a comment. Complete PR reviews without opening a browser.
Tracked repositories are stored in .gh-pr-lander.repos.json:
[
{ "org": "your-org", "repo": "your-repo", "branch": "main" },
{ "org": "another-org", "repo": "another-repo", "branch": "develop" }
]Create ~/.gh-pr-lander.toml (or .gh-pr-lander.toml in the current directory):
# IDE to open PRs in (default: "code")
ide_command = "zed" # or "code", "cursor", "vim"
# Directory for cloning PRs (default: system temp dir)
temp_dir = "/tmp/gh-pr-lander"
# Default messages for PR actions
approval_message = "LGTM! :rocket:"
comment_message = ""
request_changes_message = "Please address the following:"
close_message = "Closing this PR."Configure external issue trackers (Jira, Linear, GitHub Issues, etc.) to open related issues directly from the command palette. The tool extracts issue references from PR titles and descriptions using regex patterns.
# GitHub Issues - uses repo context variables
[[issue_tracker]]
name = "GitHub"
pattern = "#(\\d+)"
url = "https://$HOST/$ORG/$REPO/issues/$ISSUE_NO"
# Jira - with repo filter (only for specific orgs)
[[issue_tracker]]
name = "Jira"
pattern = "PROJ-\\d+"
url = "https://jira.example.com/browse/$ISSUE_NO"
repos = ["my-org/*"]
# Linear
[[issue_tracker]]
name = "Linear"
pattern = "LIN-\\d+"
url = "https://linear.app/team/issue/$ISSUE_NO"Configuration options:
name: Display name in command palettepattern: Regex to match issue references. Use capture groups like#(\\d+)to extract just the number for the URL while showing#42in the paletteurl: URL template with placeholders:$ISSUE_NO- matched issue (or first capture group if present)$ORG- repository owner$REPO- repository name$HOST- GitHub host (supports GHE)
repos(optional): Glob patterns to restrict tracker to specific repos (e.g.,["my-org/*", "other/specific-repo"])
When viewing a PR, open the command palette (Ctrl+P) to see "Open GitHub: #42" or "Open Jira: PROJ-123" if the PR references an issue.
Clean Redux-inspired architecture with middleware, reducers, and unidirectional data flow. See ARCHITECTURE.md for details.
MIT
Contributions welcome! Please open an issue first to discuss changes.
