Diff checker - compare code, contracts, or translations
Diff checker with three modes - code, prose, and translation. Word-level granularity for prose, no whole-line-red. Both texts stay in your browser.
A diff checker compares two pieces of text and surfaces what changed. This one ships three modes: Code, Prose, and Translation, because what counts as a change depends on the kind of text. Code diffs compare line by line; prose diffs compare words inside paragraphs; translation diffs compare sentence-sized segments, useful when source and target keep similar sentence boundaries. Pick the mode that matches the job.
Differences
How do I compare two contracts?
For two contract drafts, pick Prose mode. Paste the previous version on the left and the new one on the right. Changed words are marked inside the paragraph, not the entire line, so a single edited clause shows the edit rather than a wall of red. For a long contract, the Change-list view drops the unchanged paragraphs and shows only the edits, before-and-after.
- Ignore-whitespace is on by default in Prose mode; reflowed paragraphs, double spaces, and wrapping changes don't register as edits.
- Ignore-case is a separate toggle, useful when an editor lowercased every heading mid-pass.
- The Change-list view groups contiguous edits into one row - "before → after" for changed clauses, single-side rows for added or removed passages.
Short clause reviews live in Split view; full-document review lives in Change-list.
What's the difference between line, word, and character diff?
Line-level diff flags the whole line whenever anything inside changes; that's fine for code, where a missed brace shifts the line anyway. Word-level diff marks only the words that changed inside the surrounding paragraph, the right granularity for prose. Character-level diff highlights the exact letters that differ inside a word, useful for catching typos or a one-character key edit.
| Mode | Granularity | Best for |
|---|---|---|
| Code | Line, with character detail inside | Snippets, JSON, config files |
| Prose | Word inside paragraph | Contracts, emails, blog drafts |
| Translation | Sentence or segment | Source vs target language |
Every mode keeps the finer level as a secondary cue: prose mode still shows which letters changed inside a word.
Will my text stay private?
The comparison runs locally in your browser - no server call carries your input text away, no diff endpoint sees the contract draft. When you copy the share link, both texts are encoded in the URL fragment (the part after #), and browsers don't send fragments as part of the HTTP request. Our analytics events also strip the fragment from $current_url before sending, so an inbound share-link can't smuggle the texts in via the pageview.
Here's how the share link works in practice: clicking "Share private link" base64url-encodes both texts and writes them into the URL fragment. The link lands on your clipboard; opening it reads the texts back out of the fragment and refills the inputs. Above the tool's 8 KB share-link cap, the texts get dropped - the link then carries only your settings, and you share the texts separately.
The mechanism is structural: fragments are part of the URI standard HTTP is built on (RFC 3986), not a feature this tool added on top.
Frequently Asked Questions
Which view should I pick?
Split shows both sides side-by-side, the default for short texts. Unified folds the changes into a single column, the classic diff look. Change-list shows just the edits without surrounding context, useful for long contracts where you don't want to scroll past the unchanged paragraphs.
What happens with very long texts?
Above 100,000 characters per side, the tool surfaces a notice that browser processing may take a few seconds; the comparison still runs. The share link has its own 8 KB cap on fragment payload; texts above that get dropped and the link carries only your settings, so you share the texts separately.
Does Code mode work with JSON or YAML?
Yes. Code mode compares line by line and adds character-level highlights inside changed lines. There's no syntax highlighting today, but bracket changes, comma shifts, and value edits show clearly. For structured formats like JSON, the comparison works well as long as indentation is consistent.