Skip to content
FormatKit

Free online Markdown preview

Markdown preview in both flavours

Paste Markdown and this page renders it immediately, free and without an account, the way a repository host would show it — tables, task list checkboxes, strikethrough, footnotes and heading anchors included. One switch re-renders the same text as strict CommonMark, so you can see which parts of the document only work because the GitHub extensions are available. Documents up to 2 MB are accepted, and the HTML behind the rendering is one click away.

  • 100% free
  • No signup
  • Up to 2 MB
  • GitHub and CommonMark
  • HTML you can copy

The rendered document appears here, styled the way a repository host would show it.

How to preview Markdown

Paste, read, and leave with the HTML if you need it.

  1. Drop the Markdown in

    Paste into the box at the top, hit Ctrl+V (⌘V) anywhere on the page, drag a .md file onto it, or press Sample for a release note that exercises tables, checkboxes, a footnote and a bare URL. The document underneath redraws while you paste — there is no Render button.

  2. Read it, and try the other flavour

    The outline strip lists every heading down to level three, so a long README can be jumped through rather than scrolled. Switch GitHub to CommonMark to see the document a strict parser would produce, and read the line beneath it: it counts the tables, checkboxes, strikethroughs and footnotes that only exist because the GitHub extensions are on.

  3. Take the HTML

    The HTML source tab shows the exact markup behind the rendering — semantic tags, no wrapper divs and no class names to inherit. Copy HTML puts that fragment on the clipboard for a template or a CMS field, and Download .html writes a complete page with the stylesheet inlined, which opens straight from a file manager.

Technical specifications

FlavoursGitHub (CommonMark 0.29 plus tables, task lists, strikethrough, autolinks) and strict CommonMark, switched live
Also renderedFootnotes with back-links, reference-style links and images, setext headings, indented code blocks, per-column table alignment
Line-break modesParagraph reflow (the file default) or a break on every newline (the GitHub comment box)
Maximum input2 MB — a 250 KB document renders in about 22 ms and a 2 MB one in about 180 ms
Raw HTMLEscaped and displayed as text, never executed; the tag count is reported under the document
Link destinationshttp, https, mailto, tel, ftp and relative paths pass through; javascript: and data:text/html are dropped and the link degrades to plain text
HTML outputSemantic tags with no wrapper divs or class names, heading ids included, copyable as a fragment or downloadable as one self-contained page
Cost and processingFree, no signup and no rendering quota; parsing happens in your browser, so the document is never uploaded

Frequently asked questions

Why does my table not render?

Almost always because the delimiter row does not have the same number of cells as the header row — GitHub flavour treats a mismatch as an ordinary paragraph rather than guessing, so three headers over two dashes rows gives you a line of pipes. The other four causes, in the order they come up: no delimiter row at all under the header; an unescaped pipe inside a cell, which needs to be written as a backslash followed by a pipe; a table indented four spaces, which makes it a code block; and CommonMark selected here, which has no tables in it whatsoever. Extra cells past the header count are dropped and missing ones are filled with blanks, so a ragged table renders but loses the overflow.

What is the difference between CommonMark and GitHub flavoured Markdown?

GitHub flavour is CommonMark plus five extensions: tables, task list checkboxes, strikethrough with tildes, autolinked bare URLs, and a filter on dangerous raw HTML. Everything else — headings, emphasis, lists, links, code fences, blockquotes — behaves identically, because the GFM spec is written as a diff against CommonMark 0.29 rather than as a separate language. Switch the toggle on this page and the difference is visible: a pipe table collapses into a paragraph, checkboxes turn back into square brackets, ~~text~~ keeps its tildes and footnote markers become literal text.

Why did my single line breaks vanish?

Because a single newline inside a paragraph is whitespace in every Markdown spec, and the paragraph reflows. GitHub confuses this by breaking on newlines inside issue, pull-request and comment boxes while keeping the standard behaviour for .md files in a repository — the same text renders two ways on one site. Tick “Treat every newline as a line break” to see the comment-box version. To force a break in a file that has to work everywhere, end the line with two spaces or a backslash.

Why is the HTML in my README shown as text?

By design: this preview escapes every character that arrives in the box, so a script tag, an iframe or an inline style shows as the characters someone typed instead of running. The counter under the document tells you how many tags were treated that way. A repository host takes a different route — GitHub allows a filtered subset of HTML and strips the rest — so a details/summary block or an align attribute will work there even though it stays visible here.

Does this render exactly like GitHub?

For the specified language, yes: the same block and inline rules, the same table and task-list extensions, the same anchor ids on headings, plus footnotes. What it does not reproduce is the layer GitHub adds on top of Markdown — Mermaid diagrams inside a fenced block, LaTeX between dollar signs, :emoji: shortcodes, alert blockquotes such as a NOTE or WARNING callout, and #123 or @user references that only mean something inside a repository. Those all show as plain text here, which is worth remembering before concluding that a document is broken.

Is there a limit on the document size?

Two megabytes per document, which is far more than any README and enough for a full changelog. Rendering a 250 KB document takes about 22 ms and a 2 MB one about 180 ms, so even the extremes redraw between keystrokes. Past 2 MB the page stops rendering rather than freezing the tab and asks you to check the document in halves.

Why do two identical headings get different links?

Because anchor ids have to be unique, so the second one gets a numeric suffix — two sections called “Options” become #options and #options-1, exactly as they would in a repository. The id itself is built the same way: lowercase the text, drop punctuation, turn spaces into hyphens, keep letters outside ASCII. That is why a heading like “Step 1: install” links as #step-1-install, with the colon gone rather than encoded.

About Markdown flavours

Markdown had no specification for its first decade. John Gruber’s 2004 release was a Perl script and a page of prose, and everything the prose left open — how deep a nested list must be indented, whether emphasis may start in the middle of a word, what happens to a stray bracket, where an HTML block ends — each implementation answered on its own. CommonMark, begun in 2014 and now at version 0.31.2, closed those gaps with about 650 executable test cases, and the answers are occasionally surprising: an underscore between letters never opens emphasis, which is why snake_case survives; a list whose bullet character changes is two lists, not one; and four leading spaces make a code block even when you meant to indent a paragraph.

GitHub published a formal GFM spec in 2017 and moved its renderer onto a CommonMark engine, which is why so much older advice is now wrong — nested lists no longer need four spaces, for instance. GFM is defined as CommonMark 0.29 with five additions: tables, task list items, strikethrough, extended autolinks for bare URLs, and a tag filter that neutralises dangerous raw HTML. Anything else GitHub renders sits outside that spec entirely. Footnotes arrived in 2021, alert callouts in 2023, and Mermaid diagrams and LaTeX are handled by JavaScript after the Markdown is already HTML. Useful distinction to keep: features in the spec travel to other parsers, features on top of it usually do not.

The practical consequence is that “does it render” is the wrong question — the question is where. A README that looks right on GitHub can lose its whole options table on npmjs.com or in a docs generator with tables switched off, and a comment written in an issue box can lose every line break when the same text is pasted into a file. Checking a document under both flavours here is a two-second version of that test. When the answer is that you need the markup rather than the picture, the Markdown to HTML converter covers the conversion end of it, and the Markdown editor is the place to fix what the preview just showed you, with the source and the rendering side by side.

What happens to the document you paste

Parsing and rendering both run in this tab, so an unpublished README or an internal runbook stays on your machine — nothing is uploaded, logged or stored, and no copy of it outlives the tab you close. It is also why the page keeps rendering with the network switched off once it has loaded.