Self-hosted Renovate is great until you have 30 repos and wake up to 47 open PRs. You click into GitHub, merge the safe ones, wait for CI, click the next repo, realize half of them need a rebase, go back and comment /rebase one by one...
lazyreno puts everything in one keyboard-driven TUI. See every PR across every repo, bulk-merge the safe ones with M, rebase the rest with R, watch the Renovate job queue drain in real time. No browser tabs. No clicking.
- Bento layout — repo sidebar, PR table + detail, Renovate status + jobs + activity log
- Bulk merge —
Mmerges all safe PRs (minor/patch, mergeable, checks passing);Amerges everything - Queue-based merging — handles GitHub's lazy mergeability computation automatically, no repeated retries
- Renovate commands —
rrebase,erecreate,tretry — posts comments directly to PRs - Job monitoring — live view of running/pending Renovate jobs with queue depth
- Vim navigation —
hjkl,g/G,Ctrl+u/Ctrl+d, mouse scroll, context-sensitive hints - PR status — checks pass and mergeable status fetched per PR, displayed in table + detail
- Fuzzy repo filter —
aopens a searchable overlay with scrollbar across all repos - Fork filtering —
ftoggles fork visibility (hidden by default) - 1Password integration —
op://secret references resolved automatically viaopCLI - Auto-refresh — configurable polling interval with real-time activity log
| Rust 2024 edition | Systems language |
| ratatui | Terminal UI framework |
| tokio | Async runtime |
| crossterm | Terminal manipulation |
| reqwest | HTTP client (native-tls) |
| clap | CLI argument parsing |
| chrono | Date/time handling |
| tracing | Structured logging |
yay -S lazyrenogit clone https://github.com/limehawk/lazyreno.git
cd lazyreno
cargo build --release
cp target/release/lazyreno ~/.local/bin/Pre-built binaries on the releases page.
Create ~/.config/lazyreno/config.toml:
[renovate]
url = "https://your-renovate-instance.example.com"
secret = "your-renovate-api-secret"
[github]
owner = "your-github-org"
token = "your-github-token"
[ui]
refresh_interval = "30s"
accent = "cyan"Secrets can use 1Password secret references — resolved automatically:
[renovate]
secret = "op://Dev/Renovate CE API/credential"
[github]
token = "op://Dev/My GitHub Token/token"export LAZYRENO_RENOVATE_SECRET="your-renovate-api-secret"
export LAZYRENO_GITHUB_TOKEN="your-github-token" # or GITHUB_TOKENEnable the APIs on your Renovate CE instance:
MEND_RNV_API_ENABLED=true
MEND_RNV_API_ENABLE_SYSTEM=true
MEND_RNV_API_ENABLE_REPORTING=true
MEND_RNV_API_ENABLE_JOBS=true
RENOVATE_REPOSITORY_CACHE=enabled
| Key | Action |
|---|---|
j / k |
Move down / up |
h / l |
Prev / next panel |
g / G |
Jump to top / bottom |
Ctrl+u / Ctrl+d |
Half page up / down |
Tab / Shift+Tab |
Cycle panel focus |
Enter |
Focus PR table from sidebar |
| Mouse scroll | Scroll lists (sidebar, PR table, overlays) |
| Key | Scope | Action |
|---|---|---|
m |
PR table | Merge selected PR |
M |
PR table | Merge all safe PRs in repo |
A |
PR table / sidebar | Merge all PRs in repo |
x |
PR table | Close PR + delete branch |
r |
PR table | Rebase PR (/rebase comment) |
R |
PR table / sidebar | Rebase all PRs in repo |
e |
PR table | Recreate PR (/recreate comment) |
t |
PR table | Retry PR (/retry comment) |
o |
PR table | Open PR in browser |
s |
global | Trigger Renovate sync |
P |
global | Purge finished jobs |
| Key | Action |
|---|---|
a |
All repos overlay (type to filter) |
f |
Toggle fork visibility |
? |
Help |
q |
Quit |
