rootle iconrootle

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

v0.8.7 github built-in any forge via stdio rust MIT alpha
$ curl -fsSL https://rootle.dev/install.sh | sh linux · macOS

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

[01]

install

one static binary — the box above covers curl, brew, cargo, mise.

[02]

auth

gh auth login covers GitHub; everything else is one env var — tokens stay in your environment, rootle never sees provider auth.

[03]

run

rootle opens repo search; rootle owner/repo jumps straight in; @branch pins a revision.

[04]

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

rootle v0.8.7 · press ? for keybindings
rootle demo: searching, browsing miller columns, grep, yanking a URL

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

[01]

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.

h/lJ/K␣ /n/N
[02]

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.

␣ f␣ g/
[03]

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).

␣ y
[04]

clone

Mark repos, run the wizard. Org selections fan out; destinations land at <dest>/<org>/<repo>.

v:clone
[05]

configure

In-app settings write config.toml and hot-reload themes — code colors follow. The ? popup lists every keybinding.

:settings?
[06]

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.

stdioNDJSON-RPC

when it clicks

[01]

"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.

rootle owner/repo
[02]

"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.

␣ glanguage:rust
[03]

"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.

provider install

keybindings — first-session cheatsheet · press ? in-app for the rest

navigate
j / kdown · up
h / lout · in
J / Kpreview line cursor
/filter any list
vvisual multi-select
search
␣ srepo search
␣ ffind file
␣ ggrep — "exact" · -not · language:rs
entera hit opens the whole file
tabfacet chips (repo · language)
the pane
␣ ppreview takes focus, zoomed
gg·G·^D·%vim motions · :42 jumps
␣ bbranches & tags
h · bin the pane: history · blame
act
␣ yyank URL (line-anchored; commit-anchored in history)
open in editor
:command line · :clone
?every keybinding
qquit

backends