browse remote source-control systems from your terminal. clone nothing.
Jump across repos, search code, inspect files, and open exactly what you need — without cloning a dozen repositories or leaving your terminal.
github · gitlab · bitbucket · your company forge
already installed? rootle update · the modeline chimes when a release lands · what's new
prebuilt binary · x86_64 + arm64 · sha256-verified · tarballs ↗
read-only against every forge · tokens stay in your environment · no telemetry
install
one static binary — the box above covers curl, brew, cargo, mise.
auth
gh auth login covers GitHub; everything else is one env var — tokens stay in your environment, rootle never sees provider auth.
run
rootle opens repo search; rootle owner/repo jumps straight in; @branch pins a revision.
beyond github
rootle provider install gitlab — checksum-verified, 30 seconds. have an internal forge? four methods add it. declare it once, and updates ride rootle update.
watch the workflow — then pick a palette
The demo re-renders in your pick — the same eleven palettes
:settings lists in the app. First launch opens repo search;
rootle owner/repo jumps straight into a repo.
what it does
browse
Three miller columns — orgs → repos → trees — with a live syntax-highlighted preview pane: line numbers, theme-following colors, ␣ / find-in-file with n/N. No local clone.
find & grep
Full-screen, Zed-style results in decorated per-file boxes: quoted literals, negation and language: qualifiers, streaming facet chips, and enter expands a hit into the whole file at the match line. Scope to a repo or search globally. syntax docs per forge.
open & yank
Any file opens read-only in your editor. Yank the browser URL of anything you're looking at — anchored to the preview cursor line (#L42).
clone
Mark repos, run the wizard. Org selections fan out; destinations land at <dest>/<org>/<repo>.
configure
In-app settings write config.toml and hot-reload themes — code colors follow. The ? popup lists every keybinding.
providers
GitHub ships in-tree. Anything else wraps in as a stdio child speaking NDJSON-RPC — the protocol is four methods; the scaffolding skill wraps your backend with you.
when it clicks
"someone sends you a repo you've never seen"
rootle it instead of cloning it. Search, open, browse the tree, read the file, yank the permalink — done before a clone would finish.
"how do our five services call this API?"
Grep remotely across the org — quoted literals, negation, language: qualifiers, streaming results with facet chips. No checkouts, no local index.
"we have github + gitlab + an internal forge"
Browse them through one interface. GitHub is built in; gitlab and bitbucket install from the provider manager; anything else is a small stdio adapter away.
keybindings — first-session cheatsheet · press ? in-app for the rest
navigate
| j / k | down · up |
| h / l | out · in |
| J / K | preview line cursor |
| / | filter any list |
| v | visual multi-select |
search
| ␣ s | repo search |
| ␣ f | find file |
| ␣ g | grep — "exact" · -not · language:rs |
| enter | a hit opens the whole file |
| tab | facet chips (repo · language) |
the pane
| ␣ p | preview takes focus, zoomed |
| gg·G·^D·% | vim motions · :42 jumps |
| ␣ b | branches & tags |
| h · b | in the pane: history · blame |
act
| ␣ y | yank URL (line-anchored; commit-anchored in history) |
| ↵ | open in editor |
| : | command line · :clone |
| ? | every keybinding |
| q | quit |