Repon
Repon is short for 'Repo-N', where N stands in for many. It is a terminal UI for seeing and acting across many git repositories at once.
What it is
Repon owns the outer loop: the combined state of many Repos, and acting on many of them in one gesture. It does not own the inner loop (staging, committing, diffing, rebasing inside one Repo). That work belongs to lazygit or your editor, and Repon hands off to them rather than reimplementing what they already do. Repon complements lazygit; it does not replace it. This boundary is the product's identity, so it is recorded as ADR 0002 rather than left as a preference.
Status
Pre-alpha, but no longer the skeleton this section once described. Repon discovers Repos, Worktrees and Submodules and refreshes their state in a cancellable background generation. The list filters live against a total, three-valued Filter language, where an unsettled cell answers neither a term nor its negation. Configured or typed Actions fan out across a Selection as PTY-backed child processes, with the detail pane showing each step's output as it runs. A Launcher hands off to lazygit, an editor or a shell in the Repo under the cursor and restores the terminal on return. ignore, unignore and delete manage the [[repo]] entries Repon owns. Themes correct the terminal's own palette, degrading to a vetted ASCII glyph set when a font lacks the full one.
The periodic fetch and the fast-forward-only auto-update it can carry run whenever config.toml turns them on. Unix-only, deliberately. The release pipeline is built and every channel below is wired to one tag, but no tag has been cut yet: docs/spec/releasing.md.
Installing
Repon runs on macOS and Linux. It is not portable to Windows and will not be: an Action puts each step in a new session with setsid(2) and reads it back over a PTY, and Windows has neither.
Once the first release is tagged, Homebrew is the shortest route and needs no Rust toolchain:
crates.io opens with the same tag:
No tag has been cut yet, so until then install from the repository:
That needs a Rust toolchain and takes about a minute. If your git configuration rewrites GitHub HTTPS URLs to SSH, cargo's own git client cannot authenticate against it; prefix the command with CARGO_NET_GIT_FETCH_WITH_CLI=true to fetch through the git CLI instead.
What each channel is and what feeds it is ADR 0021 and docs/spec/releasing.md.
Building
Needs a Rust toolchain that supports edition 2024, and just for the task recipes.
The workspace is two crates. crates/repon-core computes state and knows nothing about rendering; crates/repon is the terminal interface and, for now, its only consumer. The boundary between them is ADR 0005, and it exists so that a second consumer can never become a second interface stack.
Design principles
Every displayed value knows whether it is unknown, loading, fresh, stale, or failed, and rendering is a total function of that state. The screen never contradicts itself, and an absent value never renders as zero. This is the central decision of the project, recorded as ADR 0001.
Anything automatic performs the narrowest operation that cannot lose work, or none at all. Anything ineligible is reported rather than fixed.
Repon is useful pointed at a directory with no configuration at all. Configuration layers named Sets, Launchers and Actions on top of that; it never gates basic use.
One keystroke reaches lazygit, an editor, or a shell in the Repo under the cursor, and the terminal comes back exactly as it was found.
Influences
The problem statement comes from mrx, a multi-repo tool covering similar ground. It established that the outer loop is worth a tool of its own, and it is where Repon's design principles came from: per-cell provenance, and the feedback rules. mrx carries no licence file, so all rights are reserved and its source is not consulted here. Repon takes the problem and none of the code, which is ADR 0003.
The visual language comes from superfile: bordered panels, restrained colour, calm spacing, and the philosophy of picking a narrow lane and polishing it.
The interaction structure comes from lazygit: context-sensitive keybindings, an always-visible footer, and a Selection that drives a detail pane.
superfile and lazygit are both MIT licensed.
Documents
- llms.txt: agent-friendly project index and configuration quickstart.
- AGENTS.md: how work moves through this repo, for agents and for people.
- GLOSSARY.md: the project glossary. Terms like Repo, Worktree, Set, Filter, Selection, Launcher and Action are used in their defined senses throughout this repo.
- docs/adr/: architecture decision records.
- docs/spec/: the specifications those decisions point at.
- docs/research/: the research the decisions rest on.
Licence
MIT. See LICENSE.