CruxDevCruxDev Tools Prompts
dev Utility • Zero-Server Privacy • 100% Client-Side

Diff Checker

Compare text or code side by side or unified, with ignore rules, word-level highlights, a change summary, and a git-apply-ready patch export.

Overview

A client-side text and code diff with four independent ignore rules, word-level highlighting inside changed lines, side-by-side and unified views, synchronised scrolling, a live change summary, and a unified-diff patch export that applies cleanly with git apply — all computed locally with no upload.

How It Works

Paste the original on the left and the changed version on the right; the diff recomputes as you type. Four ignore toggles — whitespace, case, blank lines, and trailing whitespace — each reshape the comparison independently. Side by side shows matched rows in two synchronously scrolling columns (one scroll container, so panes can never drift apart); Unified shows a single +/- column like a patch file. Blue highlights inside a changed line mark exactly which words or characters moved. The summary bar counts added, removed, modified, and unchanged lines plus a similarity percentage.

Step-by-Step Usage Guide

  1. Paste the original and modified text into the two input panes.
  2. Toggle ignore rules if formatting noise is hiding the real changes.
  3. Read the diff in side-by-side or unified view, with in-line word highlights on changed lines.
  4. Copy or download the unified patch, then apply it with git apply.

Technical Specifications & Standards

The engine splits input into lines while preserving each line's original terminator, so a CRLF-versus-LF file does not mark every line changed — it is reported in a separate banner as a line-ending-only difference, including a missing trailing newline. Alignment uses an LCS dynamic program on small inputs; when a middle section is too large the engine switches to patience-style unique-line anchoring, and if it still cannot converge within a fixed deadline it emits coarse delete/insert blocks and says so rather than hanging the tab. The export produces real unified diff hunks — ---/+++ headers, @@ -start,count +start,count @@ hunk headers with three lines of context, and \ No newline at end of file markers — and was verified to apply byte-exactly with git apply, including CRLF files. Note that patches generated with ignore options enabled describe the filtered comparison and may not apply to the raw files.

Targeted Use Cases

  • Comparing a config file between staging and production to find the one differing value.
  • Reviewing what a formatter, codemod, or AI edit actually changed before committing.
  • Diffing two API responses captured minutes apart while debugging.
  • Producing a patch file to hand to a colleague who applies it with git apply.

Notes & Gotchas

  • If every line is marked changed, line endings are usually why — check the line-endings banner before scrolling the diff.
  • Ignore options change what counts as a difference, so the summary and patch reflect the filtered comparison, not the raw bytes.
  • Very large or wholly different files degrade to coarse blocks with an explicit warning instead of freezing the page.
  • Format both sides with the same formatter before diffing generated code, otherwise you are comparing formatting rather than logic.

Frequently Asked Questions

Can I apply the exported file with git apply?

Yes. The export is a standard unified diff with hunk headers and context lines, verified against git apply — including files with CRLF endings or a missing trailing newline.

Does my code leave the browser?

No. The diff engine runs entirely in the page; there is no server and nothing is uploaded, which is what makes it usable for proprietary source.

What do the ignore options affect?

Only the comparison. Whitespace-only, case-only, blank-line, or trailing-whitespace differences stop marking lines as changed, and the summary and patch are computed from that filtered view.

How large can the inputs be?

Exact alignment is capped deliberately: past a cell budget the engine anchors on unique lines, and past a deadline it falls back to coarse blocks with a visible warning. The tab stays responsive.