Track unreleased commits across your GitHub repos — never forget to deploy again.
Built with bubbletea, lipgloss, and cobra.
brew install adhaniscuber/tap/repraccurl -fsSL https://raw.githubusercontent.com/adhaniscuber/reprac/main/install.sh | shgo install github.com/adhaniscuber/reprac@latestDownload the latest binary from Releases.
For each tracked repo, reprac:
- Fetches the latest release (falls back to latest tag)
- Compares that ref against the default branch (main/master)
- Shows how many commits are ahead → those are unreleased changes
# Create sample config
reprac init
# Default config location: ~/.config/reprac/repos.yaml# repos.yaml
repos:
- owner: your-org
repo: your-app
notes: "Production frontend"
- owner: your-org
repo: your-api
notes: "Backend API"reprac uses the GitHub API. Without a token you're limited to 60 requests/hour. With a token, 5000/hour.
- Go to https://github.com/settings/tokens/new
- Note:
reprac - Expiration: your preference
- Scopes: check
repo(for private repos) orpublic_repo(for public repos only) - Click Generate token → copy the token
Add to ~/.zshrc (or ~/.bashrc if you use bash):
echo 'export GITHUB_TOKEN=ghp_xxxxx' >> ~/.zshrc
source ~/.zshrcReplace ghp_xxxxx with your generated token.
If you already use gh CLI, the token is detected automatically with no extra setup:
gh auth loginreprac # default config
reprac --config ~/repos.yaml # custom config
reprac init # create sample config
reprac version| Key | Action |
|---|---|
j / k or ↑ / ↓ |
Move cursor |
r |
Refresh all repos |
R |
Refresh selected repo |
a |
Add repo (modal form) |
d |
Delete selected repo |
o |
Open repo in browser |
g / G |
Jump to top / bottom |
? |
Show key hints in status bar |
q |
Quit |
| Icon | Meaning |
|---|---|
▲ need deploy |
Has unreleased commits — needs deploy |
✓ up to date |
All commits are tagged/released |
◈ no release |
Repo has no tags or releases yet |
✗ error |
Failed to fetch (private repo, typo, etc.) |