differ.nvim
the neovim diff and review loop in one unified plugin: local diffs, file history, hunk staging, GitHub PR review, and 3-way merge conflicts, all with the same UX.
stack
about
differ.nvim pulls the entire diff and review workflow into a single neovim plugin. tools for these tasks do all exist, but only separately; i couldn’t find one tool that could handle everything with a nice consistent UX, so i decided to try and build one. staging a hunk and replying to a PR comment become one and the same, running through one diff engine and one renderer. the default stacked dual-rail layout interleaves old and new lines per hunk, and side-by-side is available at runtime as a toggle. the GitHub portion runs in a separate Go sidecar, so opening a PR or posting a review never blocks the editor, and results always stay cached between calls.
features
- stacked dual-rail and side-by-side layouts from one hunk model, switchable at runtime as a pure re-render
- in-editor GitHub PR review: inline comment threads, pending-review drafts, thread resolve, per-file viewed-state, CI checks, and lifecycle actions (merge, checkout, ready/draft, close)
- Go sidecar owns the GitHub API so reviews never block the editor, with results cached between calls
- file panel with the changed-file tree, status icons, +/- counts, and hunk- and file-level staging
- file history for single files and branch ranges, each step a diff through the same engine
- 3-way merge conflict resolution through the n-column renderer, resolved into the working-tree file
- word-level highlighting and Treesitter syntax by default, with real buffer lines so search, yank, and motions work