Does this preview the rendered output?
No. The tool diffs the Markdown source text, not the HTML a renderer would produce. That is intentional. Two documents can render to identical HTML and still have meaningfully different sources, for example bullets written with * versus - or bold written with ** versus __. Source-level diff preserves that signal. If you want to see how the document renders, paste it into your usual previewer like the GitHub web UI, VS Code, or your static-site generator.
How is this different from comparing rendered HTML?
A rendered-HTML diff tells you what readers will see. A source diff tells you what was actually changed in the file. They answer different questions. For Markdown, the source diff is almost always the more useful one because it shows the writer's edits faithfully: a heading level changed from ## to ###, a fenced code block switched language tags, a relative link became absolute. If you want HTML-level comparison, run both files through your renderer first and diff the output.
What about CommonMark vs GitHub Flavored Markdown ambiguity?
The diff itself does not parse Markdown, so it does not care which dialect you use. Tables, task lists, strikethrough, and autolink extensions all just look like text. The flavour matters when you ask whether your document still renders correctly. CommonMark is the closest thing to a baseline spec, and GitHub Flavored Markdown is CommonMark plus tables, task lists, strikethrough, and autolinks. Pick whichever your target renderer supports.
How does it handle YAML or TOML frontmatter?
Frontmatter is just text at the top of the file, fenced by --- for YAML or +++ for TOML. Static-site generators like Hugo, Jekyll, and MkDocs use it for page metadata. The diff treats the block as ordinary text, so changes to title:, date:, or tags: show up like any other line. If your frontmatter is large and indent-sensitive, our YAML diff page is the better pick for that block in isolation.
Does it work for MDX or JSX inside Markdown?
Yes. MDX is Markdown with embedded JSX components, and the JSX is just more text from the diff's point of view. You can paste a .mdx file in either pane and the diff will surface changes to imports, component props, and the surrounding Markdown the same way it handles .md. The only thing the tool will not do is validate that your JSX compiles; that is the MDX compiler's job. For straight code review of the JSX bits, paste them into our text diff.
How are line endings (CRLF vs LF) handled?
Line endings are characters, so a file saved with Windows-style CRLF and a file saved with Unix-style LF will diff as different at every line. If your panes look full of phantom changes, this is almost always the cause. The fix is to normalise both files to the same line ending in your editor before pasting; in VS Code the active ending is shown in the bottom status bar and is one click to switch. Git's core.autocrlf setting can also introduce surprise CRLF differences between machines.
Does the diff care about CommonMark vs GFM or MDX differences?
It is a text diff, so any character-level change shows up regardless of dialect. CommonMark is the strict spec; GitHub Flavored Markdown adds tables, task lists, strikethrough, and autolinks; MDX adds JSX inside Markdown bodies. A renderer that normalises **bold** to __bold__ (some Pandoc filters do this) produces text-diff noise even though the HTML output is identical. If you want semantic equivalence, render both sides through the same renderer and diff the output with our HTML diff page.
How does the diff handle YAML or TOML frontmatter at the top of the file?
Frontmatter is the metadata block at the top, between --- lines for YAML (Hugo, Jekyll, Astro), +++ for TOML (Hugo TOML mode), or ;;; in some setups. The text diff sees frontmatter and body as one stream, so a date update or tag reorder shows up alongside body changes. For SEO-significant fields like title, description, or slug, that is good. For volatile fields (updated_at, build hashes), strip them before diffing. Hugo and Jekyll _config.yml define which fields rotate per build.
Is it free, and do I need to sign up?
Free, with nothing to sign up for. No account, no email, no trial countdown, no locked Pro tier. Paste two documents, read the diff, close the tab. The whole thing runs as client-side JavaScript, so once the page loads it keeps working even with the network off. Upload, Format, and Sample all work on the first visit, the same as every visit after.
How is this different from GitHub's diff or a tool like StackEdit or Dillinger?
GitHub's diff is great when both versions already live in a repo, but it leans toward the rendered view and you have to dig for the raw source. StackEdit and Dillinger are Markdown editors with live preview, not diff tools. This page does one thing: a side-by-side source diff of two documents you paste, with nothing uploaded. Reach for it when the two versions are in clipboards, not in a branch.
Can I upload two .md files instead of pasting?
Yes. Click Upload on either pane and pick a .md, .markdown, or .mdx file. The browser reads it locally through the File API and drops the text straight into the editor, so the file never leaves your machine. Uploading one side and pasting the other is common too: the committed README loaded from disk against a draft pasted from an editor.
Can I compare more than two Markdown files at once?
Not in a single view. The tool is built around two panes, so you diff exactly two documents at a time. For a three-way case, like reconciling a doc across main and two feature branches, run it twice: the base against branch A, then the base against branch B. Reading two clean diffs in turn is easier than squinting at three columns of Markdown side by side.
Is it safe to paste private notes or unpublished drafts?
Yes. The diff runs entirely in your browser, so your text never reaches a server. There is no upload, no logging of pane contents, and no analytics on what you type. That makes it fine for an unreleased blog post, internal runbooks, or personal notes you would not want sitting in someone's logs. If you want to confirm it, open your browser's DevTools and watch the Network tab stay quiet while you paste.