Diffle is a keyboard-driven Git diff viewer with LSP support and agent-prompt export

Diffle is a tool for reviewing a Git diff in the browser. According to its README, a reviewer can comment on single lines, blocks or whole files, and then hand those comments to an agent as a prompt, or to GitHub as a pending review. The project says it is inspired by difit and renders diffs with the @pierre/diffs library.
Installation comes in several forms: pixi global install diffle (conda-forge), npm install -g @moritzwilksch/diffle, a standalone binary that needs no Node.js (shell installer for Linux x64 and arm64 with glibc, and Apple silicon macOS; a PowerShell installer for Windows x64 and arm64), or a Nix package. The shell installer puts the binary in ~/.local/bin, and DIFFLE_VERSION can pin a release (the README's example is v0.1.9). To try it without installing, the README offers pixi exec, npx and nix run.
What gets compared is chosen on the command line. A bare diffle shows HEAD against the worktree, like git diff. diffle working covers staged, unstaged and untracked changes; diffle develop shows what the branch added since it left develop; diffle pr 27 opens GitHub PR 27 (or, without a number, the current branch's PR); diffle show a1b2c3d shows one commit; any git-diff revspec such as main..feat works; and diffle range-diff main..v1 main..v2 shows how a series of commits was reworked. A PR from another repository opens in a temporary clone.
Navigation is built around the keyboard. j and k move by line (10j goes ten lines down), J and K by file, ] and [ by hunk. c comments, C comments on the whole file, V selects a block, R resolves, v marks a file viewed, / searches the current file, g/ searches all changed files, gf filters files, F opens the full file, Ctrl+o goes back, and yy copies all comments. Pressing ? shows the full list. A comparison lists its commits above the threads, so a reviewer can look at one commit alone and return with All changes.
Comments live in
On the GitHub side, a pull request icon adds one thread, or all open threads, to a pending review on the PR. Diffle never submits the review: the user edits, drops and submits the comments on GitHub. Adding a thread again updates its comment instead of duplicating it. Export works only when the comparison matches the PR's committed diff, so unpushed commits and worktree changes rule it out, and stale threads are skipped. diffle pr needs a GitHub token, taken from GITHUB_TOKEN, then GH_TOKEN, then a signed-in gh. Without a token, everything except the GitHub features still works.
Language server support is the other main feature. Diffle starts a language server for each language in the diff if it finds one on PATH. Keys include gd or Ctrl/Cmd+click for definition, gy for type definition, gA for references, gs and gS for file or repository symbols, and gh for hover, including schema docs for JSON, YAML and TOML. w, b, 0 and $ step through a line's symbols, and the symbol under the cursor is tinted wherever it recurs in the file, with writes shown apart from reads. Results outside the diff, such as the standard library, open read-only, and large repositories can take a while to index. diffle lsp shows which server each language gets (the README's example shows python using pyrefly lsp and rust not on PATH), and diffle config set-lsp, unset-lsp or the --lsp and --no-lsp flags override or disable servers.
The README also covers shell completions for bash, zsh and fish, running behind a proxy under a path prefix (the proxy must strip the prefix, including for WebSocket upgrades at /diffle/ws, and the public origin must be trusted via --allowed-origin), and a development setup with npm scripts, a fixture repository for tests and Docker-based screenshot tests.
Key facts
- Diffle is a browser-based Git diff reviewer: comment on lines, blocks or whole files, then hand the comments to an agent as a prompt or to GitHub as a pending review.
- Navigation is keyboard-first: j/k by line, J/K by file, ]/[ by hunk, c to comment, V to select a block, yy to copy all comments.
- It starts a language server per language found on PATH, giving definition, type definition, references, symbols and hover inside the diff.
- Comments are stored in the git directory, never touch the worktree, and diffle never submits the GitHub review itself.
- Installs via pixi, npm, Nix or a standalone binary for Linux (x64, arm64, glibc), Apple silicon macOS and Windows (x64, arm64).
Why it matters
Diffle puts line-level code review, language-server navigation and a hand-off to an agent or to GitHub into a single keyboard-driven browser view of a Git diff. Comments can leave the tool in two ways: as a prompt for an agent, or as a pending GitHub review that the user submits personally. The README says it is inspired by difit, and gives no comparison beyond that.
Who it affects
Developers who review diffs from the command line: their own working tree, a branch against develop, a single commit, a commit range or a GitHub pull request. Platform coverage for the standalone binary is Linux (x64, arm64, glibc), Apple silicon macOS and Windows (x64, arm64); others can use the npm, pixi or Nix routes. Teams that run it behind a proxy have documented settings for that.
How to use it
Install with pixi global install diffle, npm install -g @moritzwilksch/diffle, the curl or PowerShell installer, or try it with npx @moritzwilksch/diffle working. Run diffle in a repository for HEAD against the worktree, diffle working for staged, unstaged and untracked changes, or diffle pr 27 for a pull request (this needs a GitHub token). Press c to comment, V to select a block, and the pull request icon to add threads to a pending review. Press ? for the full key list, and run diffle lsp to see which language server each language gets.
How solid is it
The only source is the project's README, which describes features and commands but no outside testing. It states no licence, pricing, release date or current version number (v0.1.9 appears only as a pinning example), and gives no benchmarks, user counts or adoption figures. The source names no author, biography or affiliation beyond the moritzwilksch namespace in package and repository paths. The README does mention a test suite, including Docker-run screenshot tests, for development.
Risks and caveats
Language servers run through a shell inside the repository and can read anything the user can; --no-lsp starts none. Large repositories can take a while to index. Export to a PR works only when the comparison matches the PR's committed diff, so unpushed commits and worktree changes rule it out, and stale threads are skipped. Without a GitHub token, the GitHub features do not work. The source does not name which agents or AI coding tools the prompt export targets, and does not say which languages are covered beyond the python and rust examples.
“Review a Git diff in the browser and comment on lines, blocks, or whole files. Then hand the comments to an agent as a prompt, or to GitHub as a pending review.”
— Diffle README