diffnotes_
freehosted or self-hostedopen source · MITGitHub · GitLab · Bitbucket

Your agent explains the pull request. Your team reads it in the diff.

A free account with GitHub, then one command sets up Claude Code, Codex, Cursor or any Agent Skills tool, and the extension connects in one click.

extension for Chrome, Edge, Brave and Arc · Firefox and Safari: developer install for now

read a real annotated pull request, no sign-up →

◉acme / shopPull requests

Express shipping at checkout #42

Open ana wants to merge 3 commits into main
Conversation 2Commits 3Files changed 3DN3
DNDiffNotes · 3 notesnotesexpand allopen in DiffNotes
Adds an express shipping option. Empty carts now stop before the payment call. Tested on mobile and desktop. test report · timings.csv
⌄ app/checkout.ts +3 −1
4141 export async function checkout(cart: Cart) {
4242 const total = sum(cart.items)
DNCharge the express fee, stop on empty cartshigh riskline 43–45
An empty cart used to reach the payment provider with $0. It now returns early; express orders pay the fee.
43- if (total > 0) await charge(cart.card, total)
43+ if (total <= 0) return { status: "empty" }
44+ const fee = cart.express ? EXPRESS_FEE : 0
45+ await charge(cart.card, total + fee)
4446 return { status: "paid" }
⌄ app/ShippingPicker.tsx +3
1212 <CartSummary items={items} />
DNShipping picker on checkoutline 13–15
Customers choose standard or express before paying. Checked at three widths:
standardexpress
pay $42
standardexpress
pay $42
standardexpress
pay $42
13+<ShippingPicker
14+ options={["standard", "express"]}
15+ onChange={setShipping} />
1316 <PayButton total={total} />
⌄ app/OrderTotal.tsx +2 −1
88 <Line label="Subtotal" value={subtotal} />
9-<Line label="Total" value={subtotal} strong />
DNThe total follows the shipping choiceline 9–10
Try it: pick express and watch the total.
live demo · sandboxedexpand ⤢
Standard 3–5 daysExpress tomorrowTotal $40.00$47.00
9+{express && <Line label="Express" value={EXPRESS_FEE} />}
10+<Line label="Total" value={subtotal + fee} strong />
DN3 notesnotes↑ summary

Review the why, not just the diff.

Your agent knows why every line changed. Ask it to “annotate this PR with diffnotes”, and your team reviews faster.

freehosted or self-hostedany agentnothing posted to the PR
  1. sign up with GitHub
  2. add the extension, press Sign in
  3. one command sets up your agent
how to install ↓
A pull request on GitHub, like any other day.

A coding agent attaches plain-language notes, screenshots and live demos to the lines it changed. Reviewers see them right inside the diff on GitHub, GitLab or Bitbucket, through a small browser extension. Nothing is posted to the PR.

create a free account → start in 5 minutes

not another review bot

Review bots read your diff from the outside and post their opinions as PR comments. DiffNotes is the other side: the agent that wrote the code explains what it changed and why, while it still knows the intent, the trade-offs and what to test. Nothing is posted to the pull request, and it works next to any review bot you already use.

why developers like it

review faster

Reviewers read why each block changed before reading how. Less back-and-forth, fewer “what does this do?” comments.

context from the author

The agent that wrote the code explains it while it still remembers why: decisions, trade-offs, what was left out.

screenshots, recordings, demos

Images next to the lines that caused them, a before / after slider for UI changes, short screen recordings of a flow, and small HTML demos you can click, locked in a sandbox.

where to look hardest

The agent flags the risky parts (money, auth, migrations) and the boring ones. Reviewers get a short list at the top and jump straight there.

diagrams in the diff

A flow or a state change drawn right above the code that implements it, from a Mermaid flowchart the agent writes. No library, no network.

notes that stay true

Before every upload the agent checks each note against the current diff; after new commits it fixes or drops stale ones, and reviewers see what changed since their last visit.

zero noise in the PR

Nothing is posted to the PR. No bot comments, no notification spam; the notes live beside the diff, only for your team.

your server, your data

Use the free server at diffnotes.dev, or run your own and code context never leaves your infrastructure. Notes expire on their own (after a year by default).

any agent, any team

Claude Code, Codex, Cursor and other Agent Skills tools, or any MCP client. Chrome, Edge, Brave and Arc; connect several servers in one browser for different teams or clients.

option 1 · on diffnotes.dev

start in 5 minutes

Use this server: nothing to install on your side but the skill and the extension.

diffnotes.dev is run by Igor Kasyanchuk, who wrote DiffNotes. It is free, with no paid plan. Notes and files are deleted 365 days after a pull request's last upload; each account holds up to 10,000 pull requests and 1 GB of files. For code that must not leave your company, self-host it (option 2). Privacy.

  1. ~30 screate a free account

    One click with GitHub: your user and a team account to invite people into.

    create a free account →

  2. ~1 minadd the browser extension

    From the Chrome Web Store (Edge, Brave and Arc too). It opens a tab by itself: press Sign in and connect, then allow. Nothing to copy.

    add to Chrome

  3. ~1 minset up your agent with one command

    Claude Code, Codex, Cursor and other Agent Skills tools. The setup page gives you the command with your token in it: run it once, no shell profile to edit.

  4. ~1 minask your agent to explain a PR

    On a pushed branch with an open pull request (GitHub, GitLab or Bitbucket). The agent finds it with gh or glab, or asks you for its address. Then open the PR's “Files changed”.

    Use the diffnotes skill to annotate this pull request for its reviewers: explain each changed file and the non-obvious lines in plain language, flag the risky parts (auth, money, migrations), add before / after screenshots of UI changes, then upload the notes to DiffNotes.
or
option 2 · your own server

self-host it

Keep code context on your own infrastructure. One container with a volume, free and open source (MIT), also for commercial use.

$ docker run -d -p 3000:3000 -v diffnotes:/data -e [email protected] \
  -e PUBLIC_URL=https://diffnotes.your-company.com ghcr.io/igorkasyanchuk/diffnotes

Change ADMIN_EMAIL to yours and PUBLIC_URL to the address it will have. Put it behind HTTPS (Caddy, Coolify, Cloudflare…): the extension connects only to https servers (and localhost). Or docker compose up, Coolify, Render, Fly.io, Railway or any Docker host: see the deploy guides. The first admin password is printed in the logs. Then follow the steps of option 1 with your server's address.

Free on this server, or on yours. Your agent’s next pull request can carry its notes.

create a free account → see the live demo