Image Optimizer
Compress, resize, crop and convert up to 20 images at once, in your browser, with before-and-after sizes.
Image, PDF and Documents↑↓ to navigate · Enter to open · Esc to close
Compare two texts line by line, word by word or character by character, and export the report.
Runs in your browser. Nothing is uploaded — your input is processed on this device and discarded when you close the tab.
0 / 1,000,000 characters
0 / 1,000,000 characters
How these options work is documented in plain language in the limitations section below — including exactly what “ignore whitespace” does to the comparison text before the diff runs. For texts up to 50,000 characters combined, the comparison also updates live as you type.
The Load sample pair button loads a three-line original — a sentence about a fox, a team meeting on Monday, and an instruction to send a report by Friday — against a revised version in which the fox leaps instead of jumps, the meeting moves to Tuesday, the Friday line is unchanged, and a fourth line, “Thank you for your help.”, is added.
In line mode the verdict is exact: 2 lines removed, 3 lines added, 1 line unchanged. Because the two edited lines sit next to each other, they form a single change block; the appended line is the second block, so change navigation reports 2 changes. Switch to word mode and the same comparison reads differently: 2 words removed (“jumps”, “Monday”), 7 words added (“leaps”, “Tuesday” and the five words of the new closing line), 20 words unchanged. Neither answer is wrong — they count different units, which is the whole point of having modes. These counts were produced by running the computeDiff function from the shipped text-compare.js in Node, with the global Diff set to the vendored diff.min.js (jsdiff 5.2.0) — the same two files, in the same arrangement, that this page loads when you press Compare.
--- Original +++ Revised - The quick brown fox jumps over the lazy dog. + The quick brown fox leaps over the lazy dog. - Our team meets every Monday at nine. + Our team meets every Tuesday at nine. Please send the report by Friday. + Thank you for your help.
Two versions of a text always differ in ways the eye is bad at finding. A contract redraft changes one “may” to a “must”; a colleague “tidies” a document and quietly drops a paragraph; a configuration file works on one machine and not another for the sake of one line. Reading both versions side by side and hoping to spot it does not scale, and memory is worse: by page two you no longer trust your recollection of page one. A diff replaces that hope with a procedure. This tool computes the difference with the jsdiff library (version 5.2.0, vendored and loaded from this site — nothing is fetched from a CDN), which implements the Myers algorithm: it finds a shortest sequence of insertions and deletions that turns one text into the other, and presents exactly those, with everything else certified unchanged.
The three modes are three different questions. Line mode asks “which lines changed?” and suits documents, code and data files, where the line is the natural unit of editing. Word mode asks the same question at the granularity prose is actually edited at — invaluable when a word processor has re-wrapped every paragraph, making a line comparison report that everything changed. Character mode is the microscope: it catches the changed digit in a long number, the swapped letters in a name, the one altered character in a licence key. Choosing the mode is choosing what counts as a change, and the summary counts always state their unit so the numbers can never be mistaken for one another.
The two options answer the most common objection to a raw diff: “these are not real changes”. Ignore case folds capitalisation away by comparing case-folded copies and mapping the results back, so the display keeps your original capitals. Ignore whitespace compares whitespace-normalised text, so re-indented code and re-wrapped prose can compare as unchanged. Both are implemented carefully and described exactly in the limitations below — including the one place where the underlying library’s own option proved not to do what its name suggests, and what we did instead.
Finally, the result is built to leave the page. A comparison is usually evidence in a conversation — with an editor, a reviewer, a client — so you can copy the unified result, download it as a .diff file, save a plain-text summary of the counts, or download a complete HTML report that opens anywhere and shows the counts and the marked-up text in one file. And all of it happens in your browser: contracts, drafts and data files are compared on this device and never uploaded.
Size limit. Each input is capped at 1,000,000 characters. An input over the cap is refused with a message naming its size, and nothing is compared; trim the text or split it at a natural boundary and compare in parts. Files are read as text in the browser: .txt, .md, .html, .csv and .json work; Word .docx files are not extracted (save as .txt first), and binary files simply fail to read, with an error saying so.
How “ignore whitespace” really works. In word and character modes, both texts are pre-normalised — every run of whitespace collapses to a single space — and the comparison runs on the normalised text, so the preview reflects that collapsed spacing. In line mode, each line is trimmed and its internal whitespace runs collapsed for comparison, while the display always shows your original lines. We document this because the alternative was not honest: the vendored jsdiff 5.2.0 accepts an ignoreWhitespace option for character diffs but ignores it — we verified this by running the shipped diff.min.js in Node with the option on and off and getting identical output — so character mode uses the same pre-normalisation as the other modes rather than a setting that pretends to work.
How “ignore case” really works. The comparison runs on lower-cased copies, folded one Unicode code point at a time so results map back exactly to your original text (the display keeps your capitals). One honest caveat: folding code point by code point cannot reproduce context-sensitive whole-word rules, such as the Greek capital sigma that lower-cases differently at the end of a word, so a sigma in that one position may be reported as a difference even with Ignore case on.
Counting details. Line endings are normalised (CRLF and CR become LF) before comparing, so the same file saved on Windows and on Mac compares as unchanged. Summary counts count units of the chosen mode — lines, words or characters (Unicode code points) — and in word mode a change that only moves whitespace appears as a change block but adds and removes no words, which the status line points out. If both inputs are empty you get a plain “nothing to compare” message, and if exactly one is empty the other counts in full as added or removed, as you would expect. Very large inputs near the cap, in character mode especially, can take a few seconds: the underlying algorithm’s cost grows with the number of differences, and there is no progress bar — the tab stays responsive, but be patient before pressing Compare twice.
No. Both texts — pasted or loaded from files — are compared entirely in your browser, and the reports are generated on this device too. That makes the tool safe for drafts, contracts and data files that should not leave your machine, subject to your own organisation’s rules about handling such documents on any website.
Any file your browser can read as plain text: .txt, .md, .html, .csv and .json are the intended ones. The tool reads the raw text, so an HTML or CSV file is compared as source text, not as a rendered page or a spreadsheet. Word .docx files are not supported — the format is a zip archive, not text — so save or export a .txt copy first.
Because each mode counts a different unit. Changing one word inside a line is one changed line in line mode, one removed and one added word in word mode, and perhaps a handful of characters in character mode. The summary always labels its unit, and the worked example above shows the same pair of texts counted two ways so you can see the effect.
It changes the text that gets compared, not just the display: runs of whitespace are collapsed to a single space first (per line, in line mode), so spacing-only differences vanish. The full method — and why character mode does it this way instead of using the library’s own option — is set out in the limitations section above.
It is a single self-contained .html file, generated on this device, containing the comparison settings, the summary counts and the full marked-up diff. Unlike a .diff file it needs no special software to read — it opens in any browser — which makes it the right format for emailing a comparison to a colleague, an editor or a client as evidence of what changed.
Up to 1,000,000 characters per side — roughly 150,000 to 200,000 words of prose. Inputs over the limit are refused with their exact size in the message. For whole books or log files, split at a natural boundary (a chapter, a date) and compare in sections; the counts from each section can be quoted separately.
Compress, resize, crop and convert up to 20 images at once, in your browser, with before-and-after sizes.
Image, PDF and DocumentsMerge PDFs, extract or delete pages, rotate and reorder them — processed locally, never uploaded.
Image, PDF and DocumentsAdd "Page 2 of 3"-style numbers to a PDF in your browser, with six positions and a custom start count.
Image, PDF and DocumentsCompare two versions of a document and get an exact list of what was added, removed, and left alone. Covers line, word, and character modes — with a tested example showing how the same edit produces three different reports — plus a review workflow and the limits of text comparison.
Structural comparison beats text diff for JSON: key order is not a change, array order usually is, and a number that became a string is a real change. Worked pairs run through a structural differ, with the exact added, removed and changed paths it reported.
Merge several PDFs into one file in the order you choose, or split one PDF by page range — in your browser, with no upload. Includes a tested merge/split example with measured page counts and file sizes, and an honest account of the password-protected case.