Settings

Theme

Show HN: Deff – side-by-side Git diff review in your terminal

github.com

43 points by flamestro 3 hours ago · 32 comments · 1 min read

Reader

deff is an interactive Rust TUI for reviewing git diffs side-by-side with syntax highlighting and added/deleted line tinting. It supports keyboard/mouse navigation, vim-style motions, in-diff search (/, n, N), per-file reviewed toggles, and both upstream-based and explicit --base/--head comparisons. It can also include uncommitted + untracked files (--include-uncommitted) so you can review your working tree before committing.

Would love to get some feedback

llbbdd 2 hours ago

I was looking for a good TUI tool for diffs recently, but I'm not sure yet if what I want exists already (and I don't think this tool does it (yet?)). I've been moving my workflow out of VSCode as I'm using TUI-driven coding agents more often lately but one thing I miss from my VSCode/GitHub workflow is the ability to provide a comment on lines or ranges in a diff to provide targeted feedback to the agent. Most diff tools seem to be (rightfully) focused on cleanly visualizing changes and not necessarily iterating on the change.

I admit I haven't looked super hard yet, I settled on configuring git to use delta [0] for now and I'm happy with it, but I'm curious if anyone has a workflow for reviewing/iterating on diffs in the terminal that they'd be willing to share. Also open to being told that I'm lightyears behind and that there's a better mental model for this.

[0] https://github.com/dandavison/delta/

  • kodomomo an hour ago

    Octo [0] for nvim lets you submit reviews, add comments on ranges, reply to threads, etc.

    This in conjunction with gh-dash [1] to launch a review can get you a pretty nice TUI review workflow.

    [0] https://github.com/pwntester/octo.nvim

    [1] https://github.com/dlvhdr/gh-dash

    *Edit: I see you meant providing feedback to an agent, not a PR. Well that's what I get for reading too fast.

  • mckn1ght 40 minutes ago

    I use delta for quick diffs in a shell (along with the -U0 option on git-diff), but in my claude workflow, i have a 3 pane setup in tmux: :| where the right side is a claude session, the top left is emacs opened to magit, and the bottom left is a shell. Magit makes navigating around a diff pretty easy (as well as all the other git operations), and I can dive into anything and hand edit as well.

  • jfyne 37 minutes ago

    Not TUI based but I made something called meatcheck. The idea being that the LLM requests a review from the human, you can leave inline comments like a PR review.

    Once you submit it outputs to stdout and the agent reads your comments and actions them.

    https://github.com/jfyne/meatcheck

  • coryrc 34 minutes ago

    magit

k_bx 2 hours ago

What I would love to see is "tig" replacement that is:

- even faster, especially if you have couple thousand files and just want to press "u" for some time and see them very quickly all get staged

- has this split-view diff opened for a file

Otherwise tig is one of my favorite tools to quickly commit stuff without too many key presses but with review abilities, i have its "tig status" aliased to "t"

meain 2 hours ago

I have been using https://github.com/jeffkaufman/icdiff for the longest time to get side by side diffs.

  • flamestroOP 11 minutes ago

    This looks great as well! I personally prefer a bit more context. Thats why I added a bit more of it to deff. It also allows to mark files as reviewed by pressing `r` which is quite handy for my flow.

  • lf-non 2 hours ago

    I also use icdiff, but it is good to have the file-awareness for git diff esp. the ability to quickly skip files that I know aren't important.

rileymichael 2 hours ago

getting users to adopt a new tool with its own incantations is a tough sell. git supports specifying an external pager so folks can plug in alternatives (such as https://github.com/dandavison/delta) while still using the familiar git frontend

yottamus 2 hours ago

    git difftool --tool=vimdiff
  • flamestroOP 8 minutes ago

    I personally find vimdiff a bit harder to navigate for my usecase. The reason is that I am context unaware of the file often in larger projects and wanted something that allows me to check all lines in a touched file. However, I have to admit vimdiff comes quite close to what I need and is a great tool!

  • metalliqaz 2 hours ago

    but is it blazingly fast?

    • syngrog66 an hour ago

      if its not in Rust or browser-based or a "cloud" service or the result of multi-GWH of LLM "training" or a VSCode plugin or ideally all of the prior then the HN kids wont be interested :-)

jamiecode 2 hours ago

The specific gap side-by-side covers for me is reviewing changes on a remote box without firing up an IDE. Delta is great but keeps the unified format. icdiff does the split view but is pretty barebones. So there's definitely space here.

What nobody's mentioned yet is difftastic. Takes a completely different approach - parses syntax trees instead of lines, so indentation changes and bracket shuffles don't show up as noise. Worth a look if you're comparing options.

Main question I'd have: how does it hold up on large files? 5k+ line diffs are where most of these tools either choke or produce unreadable output. That'd be the test I'd run first.

raphinou an hour ago

Looks interesting. I'm currently using https://tuicr.dev/ , of which I like that the first screen it shows is the choice of commit range you want to review. Might be something to consider for deff?

dec0dedab0de 8 minutes ago

looks pretty good at a glance, though I would like to see three views for handling conflicts. Target on the left, source on the right, and the combined result in the middle.

...I really just like the way the Jetbrains IDEs do it, and I wish there were a TUI version that I could launch automatically from the git cli.

ZoomZoomZoom 2 hours ago

Why shouldn't this be a simple wrapper to tie Delta to some kind of file browser or a thing like television[1]?

[1]: https://alexpasmantier.github.io/television/

teddyh 2 hours ago

  emacs --eval='(ediff-files "file1" "file2")'
(The “|” key toggles side-by-side view.)
hatradiowigwam an hour ago

vimdiff is pretty fast, and is likely installed on your linux system without you realizing it.

insane_dreamer an hour ago

we need something like this in lazygit -- which is excellent all around but lacking in visual diffing/merging.

What is most useful though is a 3-panel setup, like JetBrains -- still the best git client I have worked with.

  • flamestroOP 4 minutes ago

    What would the third panel contain in this case? Do you mean the setup that IntelliJ has in merge conflicts?

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection