ByteScope

Word Compare

Word compare without Office: drop two `.docx` files and read the redline — added and deleted text marked paragraph by paragraph and word by word — without either file leaving your browser.

Your files never leave your browser — all processing is local.

Original (A)

Drop the original .docx here

Or click to browse. The file is read in this tab and never uploaded.

Revised (B)

Drop the revised .docx here

Or click to browse. The file is read in this tab and never uploaded.

Tracked changes

Applies to both files. All accepted is the text as it reads once every tracked change is accepted; all rejected is the wording from before those changes.

Limits

  • Only text is compared: not formatting, images, charts, field results, or list numbering (Word computes the numbers; they are not in the text).
  • All accepted and all rejected are worked out from the file's XML. Nested revisions, a change inside another change, can come out differently from Word.
  • A deleted paragraph mark does not join paragraphs here: when a tracked change merges two paragraphs, both views still show them as two.
  • Inside a run of changed paragraphs, a deleted and an added paragraph are shown as one edited paragraph only when at least half of their words match; the others stay deleted or added. A run with more than 2,500 possible pairs (deleted × added) is paired in order instead, so an inserted paragraph can show up as a change there.
  • A changed paragraph that needs more than 5,000 word edits is shown as replaced in full, not word by word. In the matching above it counts as not similar, so it shows up as a deletion plus an addition; in a run paired in order it shows up as one changed paragraph, replaced in full.
  • Order: the body (tables in place, one paragraph per cell), then headers and footers, footnotes, endnotes, and text boxes.
  • Comments are not compared. Hidden text is compared like any other text.
  • The result is a report. No .docx with tracked changes is produced, and there is no HTML report yet.

About this tool

A contract that has been back and forth four times, a manuscript that came back from an editor, a policy document with a new version and no changelog — and nobody switched on tracked changes. Drop both .docx files here and they are opened and compared in the page: a redline view with deletions struck through and insertions underlined, each also carrying its own marker so the result reads without colour, a summary of added, deleted and changed paragraphs and the word-count difference, and an export as Markdown or JSON. Paragraphs are compared in document order — body text with tables in place (each cell is a paragraph, labelled with its table, row and cell), then headers and footers, footnotes and endnotes, and finally text boxes.

Neither document leaves your browser. The point of comparing a contract locally is that the contract stays local: both files are read from your disk, unpacked and diffed in a Web Worker on your own machine, there is no upload endpoint, and the only thing the page reports back is that a comparison ran, whether it succeeded and which revision view was used — never a file name or a line of text.

Paragraphs first, then words

The diff runs in two layers. First the paragraphs of both documents are lined up with a Myers diff over their sequence, which finds inserted, deleted and changed paragraphs without reporting everything after an insertion as different. Then each changed paragraph is diffed again at word level. Latin text is split at spaces and punctuation; Chinese and Japanese have no spaces, so CJK text is compared character by character, and a paragraph that mixes scripts is split into runs and each run handled its own way. Whitespace, full-width versus half-width characters and letter case are each compared exactly by default, with a separate option to ignore each one.

Tracked changes: compare accepted or rejected

If either document still contains unresolved tracked changes, the comparison has to pick a version of it. By default both files are compared as they would read with every revision accepted — insertions counted, deletions dropped — and one switch flips both to the rejected view, the text as it stood before the revisions. When either file carries revisions the result says so at the top, with the number of affected paragraphs on each side. The accepted and rejected texts are worked out from the document XML; a revision nested inside another revision follows the innermost one, which can differ from how Word resolves it, and formatting-only revisions are not counted as changes to the text.

What it does not compare

Only the text is compared. Bold, fonts, paragraph styles, images, charts and comments are out of scope, and so is the numbering of automatic lists, because those numbers are computed by Word at display time and are not stored as text. A deleted paragraph mark in a tracked change does not merge the two paragraphs here, which can shift paragraph boundaries compared with Word. And the output is a report — redline on screen, Markdown or JSON to take away — never a .docx with tracked changes written into it.

Frequently asked questions

Are my documents uploaded?

No. Both .docx files are read from your disk and unpacked, extracted and diffed in a Web Worker inside the page. No server sees them, and closing the tab leaves nothing behind. The anonymous usage event records only that a comparison ran, whether it succeeded and whether the accepted or rejected view was used.

Can I compare two Word documents without Word or Office installed?

Yes — that is what this page is for. It reads the .docx package directly, so it needs nothing installed and works the same on a Mac, a Linux desktop or a Chromebook. The file has to be .docx; the old binary .doc format and encrypted documents are not supported.

The other side sent the file with tracked changes still in it. Which version is compared?

By default the version you would get by accepting every change in both files — insertions kept, deletions removed. One switch compares the rejected view of both instead, the text before any of the revisions. The result header tells you when either file still carries revisions and how many paragraphs they touch, so you know the comparison depends on this choice.

Does it produce a Word file with the differences as tracked changes?

No. The result is a report: the redline on screen, plus Markdown and JSON exports. Writing a new .docx with revision marks is deliberately out of scope, so the files you compare are never modified and nothing you download could be mistaken for one of them.

How is Chinese or Japanese text compared?

Character by character. Word-level diff on Latin text splits at spaces and punctuation; Chinese and Japanese have no spaces, so each character is a unit, and a single changed character in a sentence shows up as exactly that character rather than the whole sentence. Mixed paragraphs are split into runs of Latin and CJK text and each run is handled its own way.

Why does a renumbered list not show up as a change?

Because the numbers are not in the document text: Word computes them from the list definition when it lays out the page, and the .docx stores only the paragraph and its list reference. The comparison sees the text of each item, so adding an item appears as an inserted paragraph while the renumbering of the items after it does not appear at all.

Where do tables, headers and footnotes appear in the result?

In a fixed order: the body with tables in their original position (each cell is one paragraph, labelled with the table, row and cell it came from), then headers and footers, then footnotes and endnotes, then text boxes. Comments are not included. The order is the same for both files, so the two sides stay in step.

A space or a full-width character changed and it counts as a difference. Can I ignore that?

Yes. Whitespace, full-width versus half-width characters and letter case each have an ignore option, all off by default so that the first run shows exactly what the files contain. Switch on the ones that are noise for your documents and run the comparison again.