Text Compare

Compare original and revised passages live. Show all lines or changes only, with optional case, Unicode and blank-line matching rules.

NFC normalization affects matching keys, not the displayed source text.

Text is processed locally in your browser and is not uploaded.

Unchanged lines
2
Added lines
1
Removed lines
1
Page guide

How to use this tool

  1. Paste the earlier passage into Original text and the later one into Revised text.
  2. Choose which differences to ignore and whether the report includes unchanged lines. Read the live line totals and +, − or two-space prefixes.
  3. Copy or download the report. Swap texts reverses additions and removals; Clear both empties the inputs and Undo last clear restores them.

Understanding the output

Totals count lines in the chosen alignment, not changed words. Plus marks additions, minus marks removals and two spaces mark unchanged lines. Changes-only output hides unchanged rows without changing their count. Blank-line exclusion removes whitespace-only lines before alignment. Optional NFC normalization changes comparison keys only; matched output still displays the original spelling and spacing.

Replacing the middle line

Original lines red, blue, green compared with revised lines red, yellow, green produce two unchanged lines, one removed line (blue), and one added line (yellow). The displayed lines are prefixed with two spaces, a minus, a plus, and two spaces respectively.

Line comparison keeps the surrounding context

Line boundaries matter here. Reflowing the same paragraph into different lines can create a large comparison even when its words barely change. For prose copied from a PDF, first decide whether the original wrapping should be preserved. A reordered line can appear as a removal and an addition; this tool does not identify a separate move operation.

Alignment favors nearby matching lines

Repeated lines make more than one alignment possible. The comparison searches ahead for the next match on each side and takes the nearer match, preferring a removal when distances tie. This keeps large inputs bounded, but it does not promise the shortest possible edit script. Use a version-control diff when you need a patch suitable for automated application.

Method and supported input

CRLF and CR become LF and each input is limited to 100,000 UTF-16 code units. Empty inputs have zero lines. Trailing newlines create final empty lines unless blank-line exclusion is enabled.

Matching applies the selected trimming, NFC and lowercase transformations. Indexed positions support greedy look-ahead without a quadratic matrix. Counts cover the full selected alignment, while changes-only display omits matched rows.

  • The inputs are plain text, and line order is meaningful.
  • Ignore case uses JavaScript lowercase conversion rather than language-specific case folding.

Limitations

  • The output is an annotated comparison, not a unified diff patch.
  • There is no word-level highlight, move detection, or minimum-edit guarantee.
  • Ignoring differences changes the matching criteria; it does not rewrite the pasted passages.

Common questions

Why does a blank final line appear?

A final line break is retained as an empty last line. Adding or removing that ending therefore appears in the comparison.

Will this compare formatting in Word or PDF files?

No. Paste their text first. Fonts, tracked changes, images, and document formatting are outside this comparison.

Can matching lines have different visible capitalization?

Yes, when Ignore letter case is selected. The unchanged output displays the original line, while the revised spelling remains in the input.

Does changes-only output change the totals?

No. It hides unchanged rows, while Unchanged lines still counts matching lines in the full alignment. Ignoring blank lines is a separate option that does change the compared inputs.

Sources and further reading

Reviewed on