revision

module
v1.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 7, 2026 License: MIT

README

revision logo

revision

CI status Go version MIT License

Documentation · Quick start · Keybindings · Configuration

A lazygit-style terminal UI for Subversion (SVN). revision gives you a fast, keyboard-driven interface over the svn command line — review changes, stage with changelists, commit, update, and browse history without leaving your terminal.

Why

SVN's command line is powerful but verbose for day-to-day work. revision wraps it in a focused TUI — inspired by lazygit — so common tasks are a keystroke away. It shells out to your existing svn binary, so it respects your working copy, credentials, and configuration.

Features

  • lazygit-style layout — Status, Files and Log panels down the left, a Main detail view beside them, and the svn command log beneath; switch with the number keys or Tab
  • Changed files as a collapsible directory tree, grouped under their folders, with the visible count in the panel footer
  • Colour-coded diffs that follow your selection — read one side by side with s, save it to a file with w, or highlight a directory for the combined diff of everything beneath it
  • Staging built on a native SVN changelist — space stages a file or a whole subtree, c commits the set through an inline message editor
  • Named changelists — group the staged set into real SVN changelists, drill into one in a tabbed view, and commit it on its own
  • Update to HEAD with u, or to any revision picked in the Log panel — conflicts are spelled out before you confirm
  • Resolve conflicts side by side with m — each conflict, or each hunk a patch could not place, laid out two panes wide with a key to take either side, both, or your editor
  • Add, revert and delete a single file or every change beneath a directory, with confirmation prompts
  • Instant staging — the row restyles on the keypress while svn confirms behind it, and a failure puts the previous state back; revert, delete and commit mark their rows as in flight rather than claiming a success they do not have yet
  • Live refresh — an edit made outside revision reaches the Files and diff panels on its own, with the cursor and scroll where you left them; L turns the watcher off
  • Reads once, and only what you look at — diffs and history pages are cached for the session, so startup costs a single svn status and revisiting a file is instant
  • Filter or search any panel with /rev:, user:, state: and cl: parameters plus free text, and n / N to jump between matches
  • Open the highlighted file in vim, nvim, nano, or the editor around you — including a VS Code tab when revision is running on a remote host
  • Themes and in-app settings — six colour schemes, edited with S and saved to your config file
  • svn+ssh ready, self-updating release builds, a contextual footer and a full ? keybindings menu

Requirements

  • The svn command-line client on your PATH
  • Run revision from inside an SVN working copy (or pass --path)
  • OpenSSH's ssh-add and ssh-keygen if your working copy is served over svn+ssh://

Install

revision is a single self-contained binary.

Quick install (Linux / macOS)

curl -fsSL https://raw.githubusercontent.com/bapatchirag/revision/main/install.sh | sh

The script detects your OS and architecture, downloads the matching binary from the latest release, and installs it without sudo (falling back to ~/.local/bin). Prebuilt binaries cover macOS on Apple silicon and Intel, and Linux on x86-64 and 64-bit ARM.

With Go

go install github.com/bapatchirag/revision/cmd/revision@latest

Prebuilt binaries

Download the binary for your platform from the Releases page and put it on your PATH. Each release publishes revision-darwin-arm64, revision-darwin-amd64, revision-linux-amd64 and revision-linux-arm64.

Updating

Release builds check for a newer version on startup and offer to upgrade themselves; revision --update does the same from the command line. See Updating revision.

Quick start

cd /path/to/working-copy
revision                 # or from anywhere: revision --path /path/to/working-copy
  • 1 2 3 4 0 or Tab — move between the Status, Files, Log, Command Log and Main panels
  • space — stage the selected file, or every change beneath the selected directory
  • c — commit the staged set · u — update the working copy
  • / — filter or search the focused panel · R — refresh
  • S — settings and themes · ? — every keybinding
  • q — quit

Full flag list: revision --help.

Documentation

bapatchirag.github.io/revision — installation, workflows, the full keybindings reference, configuration, troubleshooting, and the architecture notes.

Contributing

Issues and pull requests are welcome — bug reports, feature ideas, and documentation fixes all help. See Contributing for the layout of the tree and what to run before opening a PR.

License

MIT © Chirag Bapat

Directories

Path Synopsis
cmd
gallery command
Command gallery renders each reusable TUI component in isolation, so every widget can be eyeballed on its own (make run-gallery).
Command gallery renders each reusable TUI component in isolation, so every widget can be eyeballed on its own (make run-gallery).
keymapdump command
Command keymapdump prints keymap.HelpSections as a flat JSON array, one row per binding, so the website's keybindings page renders the same table as the in-app "?" overlay.
Command keymapdump prints keymap.HelpSections as a flat JSON array, one row per binding, so the website's keybindings page renders the same table as the in-app "?" overlay.
revision command
Command revision is a lazygit-style terminal UI for Subversion.
Command revision is a lazygit-style terminal UI for Subversion.
internal
app
Package app is the composition layer: it is the only package that knows both the SVN domain (internal/svn) and the reusable component library (internal/tui/component).
Package app is the composition layer: it is the only package that knows both the SVN domain (internal/svn) and the reusable component library (internal/tui/component).
cache
Package cache provides small, domain-agnostic in-memory caches.
Package cache provides small, domain-agnostic in-memory caches.
config
Package config locates, loads, and persists revision's user configuration.
Package config locates, loads, and persists revision's user configuration.
selfupdate
Package selfupdate checks GitHub for a newer released binary and performs the upgrade through one of the project's documented install paths (the install.sh script via curl, or `go install`).
Package selfupdate checks GitHub for a newer released binary and performs the upgrade through one of the project's documented install paths (the install.sh script via curl, or `go install`).
sshagent
Package sshagent inspects the running ssh-agent so revision can tell whether the SSH key used for svn+ssh access is already loaded before it starts talking to a remote repository.
Package sshagent inspects the running ssh-agent so revision can tell whether the SSH key used for svn+ssh access is already loaded before it starts talking to a remote repository.
svn
Package svn provides a thin, typed wrapper around the Subversion command-line client.
Package svn provides a thin, typed wrapper around the Subversion command-line client.
tui
Package tui defines the domain-agnostic contracts shared by every reusable terminal-UI component.
Package tui defines the domain-agnostic contracts shared by every reusable terminal-UI component.
tui/component
Package component is the reusable, domain-agnostic widget library.
Package component is the reusable, domain-agnostic widget library.
tui/focus
Package focus cycles input focus across a ring of Focusable components, guaranteeing that exactly one holds focus at a time.
Package focus cycles input focus across a ring of Focusable components, guaranteeing that exactly one holds focus at a time.
tui/keymap
Package keymap defines the shared key bindings injected into components.
Package keymap defines the shared key bindings injected into components.
tui/layout
Package layout provides composition helpers for arranging rendered blocks: placement within a box and overlaying a popup on top of a background.
Package layout provides composition helpers for arranging rendered blocks: placement within a box and overlaying a popup on top of a background.
tui/msg
Package msg holds the decoupled messages that components emit through returned commands.
Package msg holds the decoupled messages that components emit through returned commands.
tui/theme
Package theme holds the color palette injected into every component.
Package theme holds the color palette injected into every component.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL