Ghost Themes
Ghost Themes A living gallery of the best, updated as new ones ship. 444 demos from 112 publishers. Search themes
Two versions in, every real change out. Reordered keys and trailing whitespace don't count.
Drop, paste, or type two versions. The differences appear below as you type.
.patch, or hit Share link to put the whole comparison in a URL.Keyboard: Alt+↓ and Alt+↑ jump to the next and previous change.
The viewer picks a strategy per format instead of treating everything as text:
If a document won’t parse as its claimed format, the viewer says so and compares it as plain text instead. Nothing throws.
Everything runs in your browser. The two documents, the diff, the patch, the share link: none of it is uploaded, because there is no server to upload to. The libraries are bundled into the page, so it works offline and keeps working if this site ever goes away. Close the tab and the only trace left is whatever you copied to your own clipboard, plus a draft saved to your browser’s localStorage so the panes survive a reload.
No. The diff is computed locally in JavaScript. There are no network requests after the page loads.
Drops are capped at 2 MB, and binary files are rejected. Past about 2,000 lines the viewer drops intra-line highlighting and re-diffs when you click away rather than on every keystroke, to stay responsive.
Because JSON objects are unordered by definition. The viewer compares the parsed structure, not the text. Turn off “Sort keys” if you want key order to count.
Both documents and your current options, compressed into the URL after the #. The link never hits a server, so very large inputs can make it too long for some apps to pass around.
You can, but it is rarely useful. The viewer detects one format for the pair. Set it explicitly from the Format menu if auto-detect guesses wrong.
Yes — 25+ languages, detected from the file extension (.py, .cpp, .rs, .go, …) or, for pasted snippets, from the content. Both the unchanged context and the changed lines are syntax-highlighted; changed lines also keep the word-level diff. Pick a language by hand from the Format menu if auto-detect guesses wrong. (A .h header is treated as C — switch it to C++ if you need C++-only keywords.)
“Ignore comments” drops comment-only edits, so a reworded comment isn’t flagged — line and single-line block comments, with multi-line blocks handled best-effort. “Ignore import order” treats a run of import / #include / use lines as a set, so reordering them shows nothing (it canonicalizes their order in the view).
Long stretches of unchanged lines collapse into one separator, labelled with the enclosing function or class, so a small change in a large file stays readable — click a separator to expand it. It also keeps very large files fast.