Skip to content
DiffCraft
  • 100% client-side isolated
  • no upload
  • 3 tools, no signup

Compare text, code and JSON without uploading a byte

Compare two texts, files or JSON payloads side by side: word-level highlights, a unified patch you can copy, and a semantic JSON inspector with exact paths.

  • Split & unified views
  • Semantic JSON paths
  • Similarity scoring
No upload and no account — verify it in DevTools.The patch is a real unified diff: feed it to gitapply.Myers O(ND) alignment, exact under 4,000 edits — and honest past it.

Free tools

Three comparison engines, one local workspace

A line diff for any text or code, a structural diff for JSON, and a cleaning pass with a similarity score. No accounts, no uploads and no size paywall: the documents are read by your own browser.

  • Diff Checker

    Live

    Compare two documents line by line: split panes or the unified patch order, word-level highlights inside changed lines, line numbers, whitespace and case rules, and a copy-ready unified patch with three lines of context.

    Open tool
  • JSON Diff

    Live

    Compare two JSON payloads structurally instead of textually: added, removed and modified keys reported with their exact path, key order ignored or enforced, and a formatter that points at the line and column where a payload stopped being JSON.

    Open tool
  • Text Compare

    Live

    Clean both sides first — case, trailing spaces, blank lines, accents, smart quotes and punctuation — then read a similarity score built from Levenshtein distance and Jaccard overlap, and see exactly what still differs.

    Open tool
  • Diff Explainer

    Soon

    An illustrated walk through Myers' greedy algorithm on this same engine: how the edit graph is built, why the shortest edit script is the readable one, and when a diff has to stop early and say so. In development on the same client-side code.

    In development

Compare two documents right now

The studio below is the full diff checker: drop a file on either side or paste your own text, and read the ledger — split or unified, down to the word that changed.

Comparison settings

Line alignment first, then the comparison unit for what changed inside a line.

View
Compare
Wrap long linesOff gives a horizontal scroll instead
Ignore caseOK equals ok
Ignore trailing spacesThe classic editor artifact
Ignore all whitespaceCollapse runs to one space
Ignore empty linesBlank lines are not differences
Original
8 lines · 136 charsDrop a file here or paste text
Changed
8 lines · 134 charsDrop a file here or paste text
4 added · 4 removed2 change blocks across 8 and 8 lines.
Added
4
Removed
4
Unchanged
4
Change blocks
2
Similarity
50.0%
Computed in
—
OriginalChanged
# deploy.yaml
# deploy.yaml
service: checkout
service: checkout
replicas: 2
replicas: 4
image: acme/checkout:1.4.2
image: acme/checkout:1.5.0
memory: 512Mi
memory: 1Gi
healthcheck: /healthz
healthcheck: /healthz
region: us-east-1
region: us-east-1
timeout: 30
timeout: 45
Unified patchcopy-ready3 lines of context
--- a/original.txt+++ b/changed.txt@@ -1,8 +1,8 @@ # deploy.yaml service: checkout-replicas: 2-image: acme/checkout:1.4.2-memory: 512Mi+replicas: 4+image: acme/checkout:1.5.0+memory: 1Gi healthcheck: /healthz region: us-east-1-timeout: 30+timeout: 45 

The patch mirrors the options you selected, so a comparison that ignores whitespace or case describes that difference rather than a byte-for-byte one.

Need the JSON inspector or the similarity score instead? Compare structures by path · Clean and score two texts

How it works

A diff engine that runs in your tab

No proxy, no sign-up and nothing to wait for: both documents are read by your browser, the alignment happens on this device and the patch is generated while you type.

  1. 1. Paste, drop or open both sides

    Two editor panes accept pasted text or a dragged file — .txt, .js, .py, .json, .csv or .md, up to 2 MB each. The comparison re-runs as you type, against a debounced copy of the text, so the panes never lag behind your keyboard.

  2. 2. Lines align first, then words are marked

    Myers' greedy algorithm finds the shortest edit script between the two documents, so rows pair up the way a reviewer expects. Only then are the changed words highlighted inside a changed line — rose for a removal, emerald for an addition.

  3. 3. Read the verdict, take the patch

    Added, removed, change blocks and a similarity score, followed by a unified patch with three lines of context. The export is a real diff file: the project's test suite applies a generated patch with git apply and compares the result byte for byte.

  4. 4. For JSON, read paths instead of lines

    The inspector parses both payloads and compares structures, reporting each difference at its path — user.address.zipcode, items[2].sku. Key order is ignored by default and enforced on request, and an invalid payload says which line and column stopped it.

Privacy by architecture

Nothing is uploaded — and you can verify it

A comparison tool sees the most sensitive text a team has: unreleased code, production payloads, contracts. Privacy claims are cheap, so this one is falsifiable — there is no server-side code path here that could receive your documents even if it wanted to.

  • No server, so nothing to log

    DiffCraft ships no backend route that accepts a document, a payload or a file. Open DevTools, watch the Network tab and use any tool: the only requests are the page assets and the social card.

  • Your documents stay in the tab

    Text, files and results live in React state inside this tab. They are never written to localStorage or sessionStorage — the only stored preference is the colour theme, under a key that says so.

  • Deterministic verdicts

    The same two documents and the same options always produce the same rows, the same JSON paths and the same patch. Only the reported duration varies with your machine, which is why it is labelled as a measurement and not a benchmark.

Free forever, no account required — the tools are static pages that run entirely on the client.

DiffCraft FAQ

Privacy, patch format, JSON semantics, the limits of the engine and what each number means.

Is my data uploaded anywhere?

No. There is no server route that accepts a document: the comparison, the JSON walk and the similarity score all run in this tab. Open the Network panel, use any tool and watch — the only requests are the page assets. Nothing is written to localStorage either.

How is this different from a textual JSON diff?

A textual JSON diff reports indentation and key order as changes. This inspector parses both payloads and compares values: in semantic mode a moved key is not a difference, and in strict mode it is reported as a reordered object. Arrays are matched by index, which is stated in the UI because a moved item then reads as one removal plus one addition.

Can I paste the exported patch into git?

Yes. The export is a standard unified diff with ---, +++ and @@ headers and three lines of context, and the build's own test suite applies a generated patch with git apply to prove it. One caveat: the patch mirrors the options you selected, so with ignore-whitespace on it describes that comparison rather than a byte-for-byte one.

How large a file can it compare?

Line alignment is Myers' O(ND) algorithm with an edit-distance ceiling of 4,000. Past that ceiling the two sides are reported as a single replaced region and labelled as such, instead of quietly returning a worse alignment. Word-level marking inside a changed line is skipped above 4,000 characters per line, and each upload is capped at 2 MB.

What does the similarity percentage actually measure?

It is the mean of the measures that could be computed: Levenshtein distance (character edits), word Jaccard and trigram Jaccard. Line overlap is reported next to it but left out of the mean, because on a single-line text it would always read as zero and drag a one-word change down to half.

Which languages are syntax-highlighted?

Plain text by default, plus JavaScript, TypeScript, Python, JSON, Go, PHP, Java and C#, auto-detected from the extension of an uploaded file. The highlighting is cosmetic: it never changes what is compared, and the comparison works the same with it switched off.