Compare two JSON documents semantically. Free, private, runs in your browser.
100% private — your files never leave your browser. All processing happens locally on your device.
A text diff on two JSON documents is noisy — reorder a key, drop a trailing newline, or change 1.0 to 1 and a line-diff screams red. A semantic diff parses both sides first, then walks the resulting data structure comparing values at matching paths. Reordered keys are identical. Equivalent numbers are identical. Inconsequential whitespace is invisible. Only real structural or value differences are surfaced, each one anchored to a precise path like `$.users[2].email` so you can navigate straight to the change.
Every diff entry falls into exactly one of three categories. `Added` means a key or array element exists on the right that didn't exist on the left. `Removed` is the mirror — a key or array element that was on the left but is gone on the right. `Changed` is when a path exists on both sides but the value differs: a number became a string, a boolean flipped, a nested object was rewritten. The summary bar shows counts at a glance; the per-change list shows the old value alongside the new so the intent is obvious.
When arrays differ, index matters. If the left array is `["a","b","c"]` and the right is `["a","b"]`, the diff reports `Removed $[2]` with value `"c"` — the third element is gone. If the right is instead `["b","a","c"]` (reordered), the diff reports CHANGE at `$[0]` and `$[1]`. For config files where order doesn't matter semantically, this is a limitation — consider sorting both sides first. For API response shapes where order is meaningful, index-anchored reporting is exactly what you want.
Both documents are parsed and compared entirely in your browser using the microdiff library (~5 KB). Nothing is transmitted to our servers. This is important for real-world JSON diff: the documents you want to compare are usually API responses, config files, or database dumps — all material you do not want to see mirrored into an external service. If you need to diff a payload from a staging environment against production, you can paste both sides here with confidence.
Semantic. We parse both sides, then compare the resulting data structures — so reordered keys, inconsistent whitespace, and equivalent number formats (1.0 vs 1) are treated as identical rather than spurious diffs.
By index. `users[2].name` shows exactly which element changed. Array element additions and removals appear as CREATE / REMOVE entries on a numeric index.
Yes, to any depth. Paths are reported in JSONPath-style (e.g., `$.user.addresses[0].city`) so you can navigate straight to the differing field in a large document.
No. Both documents are parsed and diffed entirely in your browser using the microdiff library. Nothing is transmitted to our servers — the tool would be useless to privacy-conscious teams if it did.