How to track markdown changes across drafts
- Step 1Switch to Upload file mode — Reviewing two drafts needs the Upload file tab. Paste text offers a single box (File A); the second draft (File B) is supplied as an upload, so switch to Upload first.
- Step 2Load the approved draft as File A — File A is the baseline — the version that was signed off. Anything removed since approval shows as
-. Accepts.md,.mdx,.markdown,.txt. Name it clearly (e.g.policy-v4-approved.md) since the patch header uses File A's filename. - Step 3Load the new draft as File B — File B is the version awaiting re-approval. New content shows as
+. Keep approved = A, new = B so the diff reads as 'changes since sign-off'. - Step 4Run the diff — Click run; the diff is computed locally. There are no options — md-diff is a fixed line-by-line unified diff with 4 lines of context, which keeps every review round consistent.
- Step 5Review each change against the approval — Walk the patch hunk by hunk.
lines are unchanged context,-lines were in the approved draft,+lines are new. Decide per hunk whether each change is within scope of the original approval. - Step 6Attach the diff to the review record — Download the diff as
diff.patch(or copy it) and file it with the review round. It's a standard unified diff, so it's a durable, tool-agnostic audit artifact of exactly what changed.
What the diff records for an audit trail
A line-by-line unified diff is an exact record of source changes. These are the change types and how each appears in the audit artifact.
| Change type | Diff representation | Audit note |
|---|---|---|
| Text added | + lines in a hunk | Exactly what was inserted, in context |
| Text removed | - lines in a hunk | Exactly what was deleted |
| Text edited | Paired - (old) and + (new) lines | Both wordings preserved for the record |
| Heading level changed | -/+ pair on the heading line | Recorded as a line change, not interpreted |
| Section reordered | Block removed in old spot, added in new | Line diff records move as delete + insert |
| Whitespace-only change | -/+ pair (whitespace significant) | Captured — no ignore-whitespace option |
Per-draft plan limits
Each draft is checked independently against your plan's limits. md-diff is a dedicated two-input tool and isn't restricted by batch-file limits.
| Plan | Max size per draft | Max characters per draft |
|---|---|---|
| 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 for the review record. Trimmed to the relevant hunk.
A claim changed after sign-off
Between the approved draft and the new one, a quantitative claim changed — exactly the kind of edit an approval workflow must catch.
File A (approved): Our platform handles 1 million requests per second. File B (new draft): Our platform handles 2 million requests per second. Diff (hunk): @@ -1 +1 @@ -Our platform handles 1 million requests per second. +Our platform handles 2 million requests per second.
A disclaimer line removed
A legal disclaimer was dropped in the new draft. The diff makes the removal explicit for the audit record.
File A (approved): Results may vary. Past performance is not indicative of future returns. File B (new draft): Results may vary. Diff (hunk): @@ -1,2 +1 @@ Results may vary. -Past performance is not indicative of future returns.
A new section added
A new subsection appeared after approval. Shown as a clean block of + lines for the reviewer to scope-check.
File A (approved): ## Pricing Contact sales for a quote. File B (new draft): ## Pricing Contact sales for a quote. ## Refunds 30-day money-back guarantee. Diff (hunk): @@ -1,2 +1,4 @@ ## Pricing Contact sales for a quote. +## Refunds +30-day money-back guarantee.
No change between rounds
A draft resubmitted unchanged produces an empty diff body — proof for the record that nothing changed since approval.
File A (approved): identical content File B (resubmitted): identical content Diff: Index: policy-v4-approved.md =================================================================== --- policy-v4-approved.md File A +++ policy-v4-approved.md File B (no @@ hunks — the drafts match exactly)
Section reordered after approval
A reviewer moved a section. A line diff records it as a deletion plus an insertion rather than a 'moved' note.
File A (approved): ## Overview ## Details ## Summary File B (new draft): ## Overview ## Summary ## Details Diff (hunk): @@ -1,3 +1,3 @@ ## Overview -## Details ## Summary +## Details
Edge cases and what actually happens
Drafts loaded in the wrong order
Inverted resultIf the new draft is File A and the approved one is File B, the diff inverts — genuine additions show as -. File A is always the baseline. For an accurate audit, keep approved = A, new = B.
File B not loaded
ExpectedAn empty File B diffs the approved draft against nothing, so the whole draft shows as removed. An all-- result means the new draft wasn't uploaded — not that everything was deleted.
No change to record
ExpectedIf the new draft is byte-identical to the approved one, the patch has a header but no @@ hunks. The empty body is itself a useful audit fact: nothing changed since sign-off.
Section reorder reads as delete + insert
Line granularityMoving a section is recorded as a removal in the old location and an addition in the new one, not as a 'moved' annotation. Reviewers should read paired hunks together so a reorder isn't mistaken for substantive rewriting.
Whitespace changes appear in the audit diff
ReportedThere is no ignore-whitespace option, so trailing spaces, indentation changes, and blank-line edits show as differences. For an audit this is honest (it's a real source change) but can add noise; note such hunks as cosmetic if they are.
Hard-wrapped drafts inflate the diff
NoisyIf drafts are hard-wrapped, a small edit reflows the wrap and many lines change, making the audit diff longer than the real change. Author one sentence (or paragraph) per line for tight, reviewable diffs.
Draft over the character limit
RejectedA draft beyond your plan's per-file character limit (Free: 500,000) is rejected with an error naming the file and its size. Split large policy documents with md-splitter or upgrade.
Expecting a tracked-changes style view
Not supportedmd-diff produces a unified diff, not a Word-style inline tracked-changes view with author names and timestamps. It records what changed between two files, not who changed it or when.
Frequently asked questions
What changed since the approved version?
Load the approved draft as File A and the new draft as File B; the unified diff lists every change. - lines were in the approved version, + lines are new in the latest draft, with 4 lines of context around each so you can review in place.
Can I use the diff as an audit artifact?
Yes. The output is a standard unified diff you can download as diff.patch and file with the review round. It's a durable, tool-agnostic record of exactly what was added and removed between two drafts.
Does it show who made each change?
No. md-diff compares two files and reports what differs between them; it has no author or timestamp information. For attribution you'd need a tracked-changes tool or version control. This records the content delta only.
Is this like Word's tracked changes?
It captures the same kind of information (what was added/removed/edited) but as a unified diff, not an inline review view. There are no comments, author labels, or accept/reject buttons — it's a precise, line-level change report.
Does an empty diff mean the drafts are the same?
Yes — byte-identical, including whitespace and line endings. The patch shows its header but no @@ hunks. That empty body is itself a useful audit fact: nothing changed since approval.
Will whitespace changes clutter the audit?
They can — there's no ignore-whitespace option, so trailing spaces and indentation changes show as differences. That's honest (they're real source changes) but you may want to annotate purely cosmetic hunks in your review notes.
Which draft goes in File A?
The approved one — the baseline you're comparing from. Removed content shows as -, new content as +. Keep approved = A, new = B so the diff reads as 'changes since sign-off'.
Are the drafts uploaded anywhere?
No. The diff runs in your browser, so sign-off drafts, embargoed announcements, and regulated content are compared locally and never sent to a server.
How is a reordered section recorded?
As a removal in the old location plus an addition in the new one — a line-by-line diff has no 'moved' concept. Read the paired hunks together so a reorder isn't logged as a rewrite.
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 independently against the limit.
How many lines of context does each change show?
Four, the engine default. There's no setting to widen or narrow it — md-diff has no options panel, which keeps every review round formatted the same way.
What if I need to combine or split drafts for review?
Use md-merger to assemble sections into a single draft, md-splitter to break a long document into reviewable parts, or md-prettifier to normalise formatting first so the audit diff shows only content changes.
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.