NewRead the launch post →

Reviewing diffs is a chore fine, actually.

diffle opens any git diff in your browser, wires in the language servers you already have, and lets you write in the margins. Then yy hands every note back to your agent as one prompt.

# run once
pixi exec diffle
# install
pixi global install diffle
# run once
npx @moritzwilksch/diffle
# install
npm install -g @moritzwilksch/diffle
# run once
nix run github:moritzwilksch/diffle
# install
nix profile install github:moritzwilksch/diffle
# linux / macos
curl -fsSL https://diffle.app/install.sh | sh
# windows
irm https://diffle.app/install.ps1 | iex
Two notes on a rate limiter. yy. Done.

Review in diffle.
Hand off to your agent.

Click a line, drag over a block, or press C for the whole file. Every note includes the file path, line range and the code it's about, so your agent knows exactly what you mean. Also perfect for directly posting as a comment.

diffle maincyy
c
line
C
file
yy
copy all

what lands in your agent's chat:

shortlink/app.py:19-20

>     forwarded = request.headers.get("x-forwarded-for")
>     client = forwarded or request.client.host

`x-forwarded-for` is client-controlled, so a new value per request dodges the limit. Only trust it behind our proxy.

---

shortlink/ratelimit.py:24

>         now = time.time()

Use `time.monotonic()`: a wall-clock jump would refill or drain every bucket.

A diff that understands your code.

diffle boots the language servers already on your PATH — pyrefly or ty, rust-analyzer, gopls, tsserver. Hover for signatures. Jump to the definition. Peek at every caller without leaving the review.

gd
definition
gy
type
gA
every reference
space
peek

Scroll. Move.

Vim motions through lines, hunks, files and every commit in the range. Mark files viewed, filter the tree, search all of it.

j k
line
] [
hunk
J K
file
< >
commit
v
viewed
g/
search all

Any range.
Any commit.
Any branch.

Same revision syntax plus a few shortcuts for the diffs you open ten times a day. Everything runs locally and offline, except fetching PRs.

# everything you haven't committed
diffle working
# what this branch did since main
diffle main
# a GitHub PR, by number or URL
diffle pr 27
# one commit against its parent
diffle show a1b2c3d
# any revspec git diff accepts
diffle main..feat