Terminal-based TUI dashboard for monitoring GitHub PRs requiring your attention
Project description
PR Dash
Terminal-based TUI dashboard for monitoring GitHub pull requests that need your attention. Built with Textual for a rich terminal experience.
Prerequisites
Installation
Homebrew (macOS)
brew tap prdash/prdash
brew install prdash
Note: You may see
Failed changing dylib IDorFailed to fix install linkagewarnings during installation. These are cosmetic — Homebrew tries to rewrite dylib IDs in pydantic-core's compiled extensions but the Mach-O headers lack sufficient padding. The app works correctly despite these warnings.
From PyPI
# Using uv (recommended)
uv tool install prdash-tui
# Using pipx
pipx install prdash-tui
# Using pip
pip install prdash-tui
Dev build (latest main branch)
brew install --head prdash
This builds from the latest commit on main. The version will reflect the dev state (e.g., 0.1.dev47+gc54497e). Not recommended for general use.
From source (development)
git clone https://github.com/prdash/prdash.git
cd prdash
uv sync # install dependencies
uv tool install -e . # add `prdash` to your PATH (editable)
Updating
prdash --update
This auto-detects your install method (Homebrew/uv/pipx/pip) and runs the appropriate upgrade command.
Quick Start
prdash
Or, if running from the project directory without a global install:
uv run prdash
On first run, a setup wizard walks you through configuration:
- Repository — org and repo name (auto-detected from git remote if available), or skip to monitor all repos
- Username — your GitHub username (auto-detected from your auth token)
- Teams — team slugs for team review requests (auto-detected from GitHub API)
- Confirm — review and save
After setup, the dashboard launches automatically.
Configuration
Config file location: ~/.config/prdash/config.toml
Example config
username = "octocat"
repos = ["my-org/my-repo"] # empty list = all repos
team_slugs = ["frontend", "platform"]
poll_interval = 300
timeout = 30.0
[[query_groups]]
type = "direct_reviewer"
name = "Requested Reviewer"
enabled = true
[[query_groups]]
type = "team_reviewer"
name = "Team Reviewer"
enabled = true
[[query_groups]]
type = "mentioned"
name = "Mentioned/Involved"
enabled = true
[[query_groups]]
type = "authored"
name = "My PRs"
enabled = true
[[query_groups]]
type = "label"
name = "Labeled"
labels = ["needs-review"]
enabled = false
Field reference
| Field | Type | Default | Description |
|---|---|---|---|
username |
string | (required) | Your GitHub username |
repos |
list[str] | [] |
Repo filters as "org/name" — empty = all repos |
team_slugs |
list[str] | [] |
Team slugs for team review queries |
poll_interval |
int | 300 |
Auto-refresh interval in seconds (min 30) |
timeout |
float | 30.0 |
HTTP request timeout in seconds (min 1.0) |
theme |
string | "textual-dark" |
Color theme (20 built-in options) |
query_groups |
list | 5 defaults | PR query groups (see below) |
Query group fields
| Field | Type | Default | Description |
|---|---|---|---|
type |
string | (required) | One of the query group types below |
name |
string | (required) | Display name in the PR list |
labels |
list[str] | [] |
Label filters (only for label type) |
enabled |
bool | true |
Whether this group is active |
CLI Flags
| Flag | Description |
|---|---|
-V, --version |
Print version and exit |
--update |
Update to the latest version |
Usage
prdash
The dashboard has a split-pane layout:
- Left pane — PR list organized by query group, with collapsible sections showing title, author, age, CI status, and review status
- Right pane — Detail view for the selected PR with reviewers panel, Markdown description, labels, CI checks, and timeline
Keybindings
| Key | Action |
|---|---|
j / Down |
Move cursor down in PR list |
k / Up |
Move cursor up in PR list |
Enter |
Toggle group collapse/expand, or open PR in browser |
Left / Right |
Collapse / expand group header |
Tab |
Switch focus between left and right panes |
r |
Refresh PR data |
c |
Checkout selected PR branch (via gh pr checkout) |
y |
Copy selected PR URL to clipboard |
Y |
Copy PR reference (org/repo#123) or branch name |
/ |
Search / filter PRs by title, author, repo, or number |
Ctrl+P |
Open command palette |
? |
Show keyboard shortcuts help |
S |
Open settings screen |
Escape |
Close overlay / clear filter |
q |
Quit |
Query Groups
Query groups define which PRs appear in the dashboard. There are 5 types:
| Type | Description |
|---|---|
direct_reviewer |
PRs where you are directly requested as a reviewer |
team_reviewer |
PRs where one of your teams is requested for review |
mentioned |
PRs where you are mentioned or involved |
authored |
PRs you authored |
reviewed_by |
PRs you have already reviewed |
assigned |
PRs assigned to you |
label |
PRs matching specific labels (set via labels field) |
ready_to_pr |
Local branches without open PRs (ready to create a PR) |
PRs are deduplicated across groups — each PR appears only in its highest-priority group (priority follows the order listed above).
You can customize query groups by:
- Adding/removing groups in
config.tomlor via the in-app query groups screen - Reordering to change display and deduplication priority
- Toggling
enabledto hide groups without deleting them - Using labels with the
labeltype to track specific categories
In-App Settings
Press S to open the settings screen where you can edit:
- Repos (comma-separated
org/nameslugs, empty = all repos) - Username
- Team slugs
- Poll interval
From settings, you can also open the Query Groups screen to add, remove, reorder, and toggle query groups. Changes are saved immediately and trigger a data refresh.
Command Palette
Press Ctrl+P to open the command palette with fuzzy search across all actions:
- Jump to group — scroll to any query group by name
- Sort PRs — sort by newest/oldest, CI status, review status, or diff size
- Change theme — switch between 20 built-in themes (dracula, monokai, nord, solarized, catppuccin, etc.)
- Refresh, Settings, Query Groups
PR List Indicators
Each PR row shows:
- CI status —
CI:pass(green),CI:fail(red),CI:pend(yellow) - Review status —
Rev:ok(green),Rev:chg(red),Rev:pend(yellow) - Merge state —
CONFLICT(red),BLOCKED(yellow),BEHIND(yellow) - Diff size —
+350/-120(additions in green, deletions in red) - Comments —
5💬when comments exist - Draft badge — cyan
DRAFTindicator for draft PRs - New PR marker — bold dot for PRs appearing since last refresh
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file prdash_tui-0.2.0.tar.gz.
File metadata
- Download URL: prdash_tui-0.2.0.tar.gz
- Upload date:
- Size: 161.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7ceeef77371520a7496e1f86bafdbd5b22ec40292aa7abf1c10068cc5583f58
|
|
| MD5 |
fab53af7bbffcc356df714cc350b7685
|
|
| BLAKE2b-256 |
a585b912f63631dc6fdd9c07bacd175e6a2d73da9421042a5aaf236b135b138b
|
Provenance
The following attestation bundles were made for prdash_tui-0.2.0.tar.gz:
Publisher:
release.yml on prdash/prdash
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
prdash_tui-0.2.0.tar.gz -
Subject digest:
d7ceeef77371520a7496e1f86bafdbd5b22ec40292aa7abf1c10068cc5583f58 - Sigstore transparency entry: 1286945925
- Sigstore integration time:
-
Permalink:
prdash/prdash@38ce9950c4f4bce28196021156d549963f9bf8e4 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/prdash
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@38ce9950c4f4bce28196021156d549963f9bf8e4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file prdash_tui-0.2.0-py3-none-any.whl.
File metadata
- Download URL: prdash_tui-0.2.0-py3-none-any.whl
- Upload date:
- Size: 45.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07ce8ec41be426a6e47ec34709b1ea6ae93d623f0a5b94faace169b4385b2c8b
|
|
| MD5 |
30f3caca07b33a4e048dff1a02e6cd2c
|
|
| BLAKE2b-256 |
6cf67a5f81d78274fa5cf23be5ddb86f43df642794323fb2a921e6208a492ee3
|
Provenance
The following attestation bundles were made for prdash_tui-0.2.0-py3-none-any.whl:
Publisher:
release.yml on prdash/prdash
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
prdash_tui-0.2.0-py3-none-any.whl -
Subject digest:
07ce8ec41be426a6e47ec34709b1ea6ae93d623f0a5b94faace169b4385b2c8b - Sigstore transparency entry: 1286945995
- Sigstore integration time:
-
Permalink:
prdash/prdash@38ce9950c4f4bce28196021156d549963f9bf8e4 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/prdash
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@38ce9950c4f4bce28196021156d549963f9bf8e4 -
Trigger Event:
push
-
Statement type: