oyui: a TUI merge editor for jj and git
2026/6/22 · 9:21

oyui: a TUI merge editor for jj and git

oyui (emilien-jegou/oyui) is a Rust ratatui TUI that replaces vimdiff as the interactive diff editor for Jujutsu (`jj split`, `jj diffedit`) and Git (`git difftool`) — 101 stars in two weeks from v0.1.0, scriptable via the Rune language with hot reload, GPL-3.0, install with `cargo install oyui`.

You're mid-refactor, splitting a large jj commit into two logical pieces with jj split. Jujutsu (jj) is a Git-compatible version control system that models history as a series of mutable changes rather than immutable commits — it's been gaining traction in teams that do heavy interactive history editing. The built-in interactive prompt drops you into your $DIFFTOOL — and if you haven't configured one, that means vimdiff. You stare at two 200-line files in a terminal that turns color into a liability, hunt for the hunk you want to move, and wonder why there isn't just a purpose-built TUI for this. 1
oyui is that TUI.

What it does

oyui (emilien-jegou/oyui) is a Rust TUI merge and interactive diff editor purpose-built for Jujutsu and Git. It plugs into the same hooks as vimdiff — jj diffedit, jj split, jj squash -i, and jj restore -i — and replaces the raw diff view with a two-pane editor backed by ratatui (the Rust terminal UI library) and syntect. Syntax is highlighted for 20+ languages via tree-sitter parsers; the diff gutter runs character-level resolution, not just line-level. 1
Git support is also present (git difftool), though jj resolve and git mergetool are still on the roadmap. The author, Emilien Jegou — a French fullstack engineer working primarily in Rust and TypeScript — has shipped five releases in under two weeks of public availability, all of them additive. 2
The configuration story is unusual for this class of tool: oyui uses Rune, an embeddable scripting language, for its config file, with hot reload. You don't restart the editor to try a new keybind or theme — you save the config file and the change propagates immediately. There's also a command palette (Ctrl+P), binary file support via magic-number detection, and 40+ built-in themes. 1
コンテンツカードを読み込んでいます…

Concrete scenario

You have a working branch with two unrelated changes bundled into one jj commit — a schema migration and a logging refactor. You want to separate them before pushing for review.
jj split
Instead of vimdiff, your terminal opens oyui's two-pane layout. Left pane: the full working-tree diff, syntax-highlighted in your language. Right pane: the selection you're building into the first commit. You navigate hunks with arrow keys, move individual lines to the right pane with Enter, flip between file tabs, and hit Ctrl+S to confirm. The split is clean; no temporary files, no external editor config needed beyond setting $DIFFTOOL=oyui.
The same workflow applies to jj squash -i (pick which lines of a descendant commit to fold into a parent) and jj restore -i (selectively restore specific hunks from a prior revision). If your team has standardized on Git, git difftool -t oyui drops you into the same editor. 1

Install

Two paths, no extra dependencies beyond a working Rust toolchain for the cargo route:
MethodCommand
cargocargo install oyui
Nix flakesgithub:emilien-jegou/oyui
AUR (Arch Linux)yay -S oyui
Once installed, configure your diff tool:
# for jj
jj config set --user ui.diff-editor oyui

# for git
git config --global diff.tool oyui
git config --global difftool.oyui.cmd 'oyui "$LOCAL" "$REMOTE"'
The binary is a single statically-linked Rust executable. Cold start is near-instant. 3
統計カードを読み込んでいます…
コンテンツカードを読み込んでいます…

Release history

v0.2.1 (June 19, 2026) fixed broken x86 release targets from v0.1.0 and v0.2.0 — prebuilt binaries for x86_64-linux, x86_64-apple-darwin, and aarch64-apple-darwin are now available. v0.2.0 (June 18) was the larger update: a full theming overhaul that switched the default theme from weywot to ansi, added tmTheme external theme loading, improved color parsing (rgb / hsl / hex / ansi / ansi256), and introduced a confirm window for destructive actions. The breaking change in v0.2.0 is that theme::get() was removed — any custom config calling it needs updating. 2
v0.1.0 (June 8) was the first public release. That means 101 stars accumulated in roughly two weeks, with three feature releases following the initial drop — an unusually dense pace for a solo Rust TUI project.

Community signals and caveats

Orhun Parmaksız (@orhundev), the creator of ratatui and git-cliff, shared oyui publicly, singling out the syntax highlighting, command palette, binary file support, and hot-reloaded Rune config. 1 That's a meaningful signal in the ratatui ecosystem — Parmaksız promoted bmm on release day too, and that project went on to become Terminal Trove's Tool of the Week. Beyond that post, there are no Hacker News threads or Reddit discussions yet. oyui is listed on Terminal Trove but has no community troubleshooting record to speak of — you'd be using it before the crowd arrives. 4
License. GPL-3.0, declared in crates/oyui/Cargo.toml. The repo root currently has no LICENSE file, which is unusual and worth watching — packagers and tooling that scan repo roots for license files will come up empty. GPL-3.0 is a copyleft license; if you're building a proprietary tool that shells out to oyui as a subprocess that's fine, but embedding the library directly would trigger the GPL's distribution requirements. For daily terminal use as a diff tool, the license is irrelevant.
jj coverage is partial. jj resolve (three-way merge) and git mergetool aren't implemented yet. If three-way conflict resolution is your primary need, oyui isn't ready for that workflow. The two-pane interactive selection mode — split, squash -i, diffedit, restore -i — is fully supported. 1
Very early crates.io adoption. 204 total downloads as of the research date. The tool works, but the community troubleshooting surface is essentially zero. You're on your own if you hit an edge case on a less common terminal emulator.

Quick-reference

Data current as of June 22, 2026. 1 2 3
FieldValue
Repositoryemilien-jegou/oyui
Versionv0.2.1 (released June 19, 2026)
LanguageRust (93.2%)
LicenseGPL-3.0
Stars101
Releases5
Installcargo install oyui
jj supportdiffedit, split, squash -i, restore -i (full); resolve (planned)
git supportdifftool (partial)
Install if: you use jj or git daily; you're tired of dropping into vimdiff for interactive diff selection; you want a fast TUI that starts immediately and doesn't need a project-level config to be useful.
Skip if: you need three-way conflict resolution right now; you're on a GPL-incompatible project that would embed the library; or you prefer a tool with an existing community troubleshooting record before adopting it.

関連コンテンツ

このコンテンツについて、さらに観点や背景を補足しましょう。

  • ログインするとコメントできます。