How to compare two markdown drafts
- Step 1Choose Upload file mode — Comparing two drafts needs the Upload file tab. The Paste text tab only has one box (File A); the second draft (File B) is supplied as an upload, so switch to Upload first.
- Step 2Load the earlier draft as File A — File A is the version you are comparing *from* — typically the draft the author last approved. Anything present only in this draft will show as a
-(removed) line. Accepts.md,.mdx,.markdown,.txt. - Step 3Load the later draft as File B — File B is the newer draft — the version you are comparing *to*. New wording appears as
+(added) lines. Keep the slots consistent across rounds (older = A, newer = B) so your diffs read the same way every time. - Step 4Run the comparison — Click run. The diff is computed locally. There are no settings — md-diff is a fixed line-by-line unified diff with 4 lines of context, so there's nothing to configure between rounds.
- Step 5Read the deltas — Walk the patch top to bottom. Each
@@header points to where the next edit sits;-lines are the old wording,+lines the new. A clean draft pass shows a short patch; a heavy round shows many hunks. - Step 6Save the diff to the round's notes — Copy the diff into your review notes or download it as
diff.patchto attach to the round's record. The patch header carries File A's filename, so name your drafts clearly (post-v3.md) before diffing.
Proofreading changes and how the diff renders them
The small edits that dominate late proofreading rounds, and how a line-by-line unified diff shows each one.
| Proofreading edit | Diff appearance | Notes |
|---|---|---|
| Straight quote → curly quote | Line shows as a -/+ pair | Looks identical rendered; differs in source |
| Comma moved inside vs. outside a quote | -/+ pair on that line | Classic late-stage style fix; easy to miss by eye |
| Double space collapsed to single | -/+ pair (whitespace is significant) | Caught — md-diff does not ignore whitespace |
| Hyphen replaced by en/em dash | -/+ pair on the line | Different characters → different line |
| Oxford comma added | -/+ pair on the affected line | Shows the whole line, not just the comma |
| Paragraph re-ordered (moved up) | Block shows as removed in old spot, added in new spot | Line diff can't represent 'moved'; it shows delete + insert |
Plan limits per draft
Each of the two drafts is checked independently against your plan's character and size limits. md-diff does not count against batch limits.
| Plan | Max size per file | Max characters per file |
|---|---|---|
| Free | 1 MB | 500,000 |
| Pro | 10 MB | 5,000,000 |
| Pro-media | 50 MB | 20,000,000 |
| Developer | 500 MB | Unlimited |
Cookbook
Before/after draft excerpts and the unified diff md-diff produces. Trimmed to the relevant hunk.
Straight quote turned curly between rounds
The house style switched to curly quotes in the final pass. Identical rendered; the source line changed.
File A (draft v3): She said "yes" without hesitation. File B (draft v4): She said “yes” without hesitation. Diff (hunk): @@ -1 +1 @@ -She said "yes" without hesitation. +She said “yes” without hesitation.
Comma moved inside the quotation
A US-style edit moved the comma inside the closing quote. The diff isolates the exact line.
File A: He called it "interim", not final. File B: He called it "interim," not final. Diff (hunk): @@ -1 +1 @@ -He called it "interim", not final. +He called it "interim," not final.
Double space collapsed
A find/replace removed a double space after a period. Whitespace is significant in the diff, so it shows.
File A: The report is done. It ships Friday. File B: The report is done. It ships Friday. Diff (hunk): @@ -1 +1 @@ -The report is done. It ships Friday. +The report is done. It ships Friday.
Sentence added to a paragraph
A new sentence was inserted mid-paragraph. Because the source is one sentence per line, the addition is a clean single +.
File A: The launch is confirmed. Tickets open Monday. File B: The launch is confirmed. Early access begins this weekend. Tickets open Monday. Diff (hunk): @@ -1,2 +1,3 @@ The launch is confirmed. +Early access begins this weekend. Tickets open Monday.
A paragraph moved up the page
A reorder reads as a delete in the old spot and an insert in the new one — a line diff has no concept of 'moved'.
File A: Intro paragraph. Details paragraph. Summary paragraph. File B: Intro paragraph. Summary paragraph. Details paragraph. Diff (hunk): @@ -1,3 +1,3 @@ Intro paragraph. -Details paragraph. Summary paragraph. +Details paragraph.
Edge cases and what actually happens
Drafts loaded in the wrong order
Inverted resultIf the newer draft goes into File A and the older into File B, additions and removals flip — your genuine additions appear as - lines. md-diff can't tell which draft is newer; File A is always the baseline. Keep older = A, newer = B every round.
File B not uploaded
ExpectedLeaving File B empty diffs the draft against nothing, so the whole draft shows as removed. An all-- result means you forgot the second draft.
No changes between rounds
ExpectedIf a 'new' draft is actually byte-identical to the old one, the patch has a header but no @@ hunks. An empty diff body confirms the two drafts match exactly — useful for catching a save that didn't take.
Reordered paragraphs look like two big edits
Line granularityMoving a paragraph shows as a deletion where it was and an insertion where it went, not as a 'moved' annotation. Reviewers should read both hunks together to recognise a reorder rather than a rewrite.
Hard-wrapped prose creates noisy diffs
NoisyIf drafts are hard-wrapped, a small edit reflows the wrap and many lines change. For cleaner proofreading diffs, author with one sentence (or one paragraph) per line so a small change touches a small number of lines.
Curly-quote vs straight-quote everywhere
ReportedIf a global style change converted every quote, nearly every line with a quote will show as changed. That is accurate — the source did change on each line — but the diff will be long. Consider running the change on its own pass so its diff is isolated from content edits.
Draft over the character limit
RejectedA draft larger than your plan's per-file character limit (Free: 500,000) is rejected with an error naming the file and its size. Split the document with md-splitter or upgrade for larger drafts.
You wanted word-level highlighting
Line granularity onlyA single-word fix shows as a full old-line/new-line pair, not an inline word highlight. md-diff has no word- or character-level mode; it reports whole changed lines.
Frequently asked questions
Does this show changes word by word?
No. md-diff is line-by-line: a one-word edit appears as the whole old line (-) plus the whole new line (+). There is no inline word or character highlighting. Writing one sentence per line keeps those line pairs tight.
Will it catch a straight quote changed to a curly quote?
Yes. Those are different characters, so the line shows as a -/+ pair even though it renders the same. Whitespace and punctuation are all significant.
Does it ignore whitespace differences?
No, and there is no option to. A collapsed double space, a trailing space, or a tab-vs-space change all show as line differences. That is often exactly what a proofreader wants to see.
Which draft should go in File A?
The earlier one — the version you are comparing from. File A is the baseline, so anything removed since then shows as - and anything new shows as +. Keep older = A, newer = B for consistent diffs across rounds.
Can I paste both drafts instead of uploading?
Only the first draft can be pasted (File A). File B is upload-only, so save the second draft as a .md or .txt file and upload it. There is no two-textarea paste mode.
Is the comparison private?
Yes — it runs in your browser. Unpublished or embargoed drafts are compared locally and never uploaded to a server.
What does an empty diff mean?
The two drafts are byte-identical, including whitespace and line endings. The patch will show its header but no @@ hunks. It's a fast way to confirm a 'new' draft actually differs from the old one.
Why is a reordered paragraph shown as removed-and-added?
A line-by-line diff has no concept of a moved block. It records the paragraph as deleted from its old position and inserted at the new one. Read both hunks together to recognise the move.
How large can each draft be?
Free 1 MB / 500,000 characters, Pro 10 MB / 5,000,000, Pro-media 50 MB / 20,000,000, Developer 500 MB / unlimited. Each draft is checked separately, so one large file won't block a small one — only the oversized side fails.
Can I download the diff for my review notes?
Yes. Copy the text or download it as diff.patch. It's a standard unified diff, so it reads cleanly in any editor and can even be applied with git apply if both drafts are real files.
How much context does each change show?
Four unchanged lines around each change, the engine default. There's no setting to change it — md-diff has no options panel.
What if I need to normalise formatting before comparing?
Run both drafts through md-prettifier first so cosmetic differences (spacing, bullet style) disappear and the diff shows only real content edits. To combine accepted drafts use md-merger, or md-lint to flag style issues before a round.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.