πŸ”€ Diff Checker

Compare two versions of anything text based, then export the result as a real unified .patch, a shareable HTML report or a printable PDF. Free, no signup, and nothing about the exports is held back.

Files are read in this browser and are never uploaded. The page downloads its diff engine and its PDF writer from a public CDN, and sends anonymous usage counts: a page view, and which comparison mode was used. Your text, your file names and your exports never leave the device. Text files up to 5 MB per side. Windows CRLF line endings are normalised to LF before comparing, so a line ending change on its own is not reported as a difference, and a .patch built here applies to an LF copy of the file.

no changes

Export

The text has changed since this comparison, so these exports would describe the old version. Press Compare to refresh first.
🎬 Plus PDF editing, e-signatures, transcription & 300+ more free toolsOpen Castwright

The exports are the point

Comparing two blocks of text on screen is the easy half, and every diff site does it. The half that is normally behind a subscription is getting the result out: a unified patch a developer can apply, a report you can email to a client for sign off, and a PDF you can attach to a change request. This page gives away all three. The paid leader in this category charges around nine dollars a month and export is one of the things you are paying for.

What each export actually is

The .patch file is a genuine unified diff, the same format git apply and the patch command read. It carries the two file names, a timestamp header and standard hunk headers, and it round trips: applying it to the original reproduces the changed version exactly. It is always built from the exact text on both sides, so ticking Ignore whitespace or Ignore case changes what you read on screen but never what the patch contains, and the patch keeps every space the on screen view is ignoring. One caveat worth knowing: Windows CRLF line endings are converted to LF before comparing, so a patch made here applies to an LF copy of the file. A unified diff is line based by definition, so the patch is always built from a line by line comparison even when you are reading the word view on screen.

The HTML report is one self contained file with its own styles inside it. There is nothing to load, so it opens correctly from an email attachment, a shared drive or an offline laptop, and it prints cleanly. It mirrors the view you are looking at, including the word level highlighting inside changed lines.

The PDF is written with real text, not a screenshot of the page. That matters for a diff: the reader can select a line, copy it, and search the document. It also keeps a long diff down to a few hundred kilobytes instead of a stack of images. It stops at 5,000 diff lines, which is roughly a hundred pages in landscape, and prints a line on the last page saying so, so it never truncates quietly.

The four comparison modes

Lines is the default and the right choice for code, config, CSV and anything long. Words is better for prose, a rewritten paragraph or ad copy, because it highlights the words that changed rather than flagging the whole line. Characters is for short strings where a single digit or a stray space is the thing you are hunting. JSON reformats and sorts the keys on both sides before comparing, so two objects that hold the same data in a different key order come out identical instead of showing a wall of false changes.

What ignore whitespace does in each mode

It is not the same operation everywhere, so the page tells you what it is doing as you switch. In Lines mode it trims the start and end of each line, so a re indent stops showing up, but two spaces in the middle of a line are still a change. In Words mode it treats any run of whitespace as equal to any other, so a re wrapped paragraph reads as unchanged. In Characters mode the library ignores the option entirely, and in JSON mode the output is regenerated anyway, so the checkbox switches itself off in those two rather than sitting there doing nothing.

Honest limits

Two inputs that are almost entirely different are expensive to compare, because the underlying algorithm costs roughly the square of the number of edits. Rather than freeze the tab, the page stops at a sensible edit budget and offers a slower second attempt you have to ask for.

Only the .patch export is guaranteed complete. The on screen view draws the first 4,000 rows, or the first 12,000 segments in Words and Characters mode, and says so under the diff. The HTML report carries up to 20,000 rows, and in Words or Characters mode it stops at the same 12,000 segments the screen does. The PDF stops at 5,000 diff lines. Each of those exports prints a line where it stops.

The comparison has no concept of a move. A line, a row or a paragraph that was reordered is reported as a removal in one place and an addition in another, not as a single move.

The PDF uses a built in monospace font that covers Latin characters only, so emoji, Arabic, Urdu and CJK text are replaced with a question mark in the PDF, and you are told when that happened. The patch and the HTML report keep every character exactly.

Where this earns its keep

Checking what a client actually changed in the copy they sent back. Proving which three lines of a config file changed before a deploy. Diffing yesterday's export against today's to find the row that broke an import. Attaching a before and after to a change request so nobody has to take your word for it.