Markdown Preview

This renders a small, deliberately conservative subset of Markdown: the core CommonMark constructs and two GitHub extensions, with no tables, no footnotes, and no raw HTML passed through. That is enough to check a README before you push it and not enough to be your final proof of a complex document.

Markdown Preview — Render Basic Markdown and Copy the HTMLBuildFigure

Which flavour this is, and what it leaves out

The renderer covers the CommonMark core plus two GitHub Flavored Markdown extensions, and nothing else. Being precise about the boundary matters more than the feature count, because the things it does not do are the things people get caught by.

RenderedNot rendered
ATX headings, # to ######Setext headings (underlined with = or -)
Bold, italic, inline code, fenced code blocksIndented (four-space) code blocks
Strikethrough ~~text~~ (GFM)Tables (GFM)
Inline links [text](url)Reference links and link definitions
Unordered and ordered lists, one levelNested lists, task lists - [ ]
Block quotes, including nested contentFootnotes, definition lists
Horizontal rulesRaw HTML blocks and inline HTML
Autolinked bare URLs inside [](…)Images — shown as a placeholder, never loaded

Nested lists are the omission most likely to affect you. An indented sub-list is folded into the parent item as continuation text rather than becoming its own list, so a deeply structured document will look flatter here than it will on the platform you publish to.

Why your HTML shows up as text

The entire input is HTML-escaped first — every < becomes &lt; — and only then are the Markdown rules applied to the escaped string. A pasted <script> tag, an <img onerror=…>, an onclick attribute: all of them render as visible text and none of them execute. Link targets are filtered separately, with only http, https, mailto, absolute paths, fragments and relative paths allowed through; a javascript: URL is replaced with #. Images are never fetched, so nothing you preview here can make an outbound request either.

Escape-then-convert is the correct order for any Markdown renderer that will ever see text it did not write, and it is worth knowing that most renderers do the opposite by default. CommonMark specifies that raw HTML passes through, so a spec-compliant library plus untrusted input is a cross-site scripting hole unless you sanitise the output afterwards. The trade here is deliberate and it costs you something: a document that mixes HTML into its Markdown — a <details> block, a centred image, an anchor tag for a table of contents — will not preview correctly on this page.

The single line break question

Original Markdown and CommonMark both ignore a single newline inside a paragraph; you need two trailing spaces or a backslash to force a break, and a blank line to start a new paragraph. GitHub comments and issues, most chat apps and several note-taking tools break the line instead, on the reasonable grounds that people writing in a comment box expect Enter to do something.

The checkbox switches between the two so you can preview against the destination's behaviour rather than a generic one. When in doubt, separate your paragraphs with a blank line — that works identically under every flavour, and it is the only construct in Markdown about which that is unambiguously true.

What the HTML output is good for

The generated markup is semantic and carries no styling: h2, p, ul, blockquote, pre and so on, with a language-* class on fenced code blocks for a syntax highlighter to pick up. It is meant to be pasted into somewhere that already has a stylesheet — a CMS in HTML mode, an email template, a static site's content directory.

Do not treat the preview panel as a proof. The type sizes, colours and spacing you see are this page's own, applied for legibility; your destination will apply its own and the result will look different. Use the preview to check structure — that the heading levels nest correctly, the list broke where you meant it to, the link caught the right text — and check appearance where it will actually be published. Input is capped at 200,000 characters, and the whole conversion happens locally; nothing is uploaded.

Questions people ask

Why is my table not showing?

Tables are a GitHub Flavored Markdown extension and this renderer does not implement them. If you need to build one, the table to Markdown converter generates the syntax from a spreadsheet paste, and you can check how it renders on the platform you are publishing to. There is no plan to add tables here — a correct implementation needs alignment parsing and cell escaping that would roughly double the size of the renderer.

My line breaks are ignored, or there are too many of them.

Toggle the "single line break" checkbox and preview again. With it off you get CommonMark behaviour, where a single newline inside a paragraph is just whitespace. With it on you get GitHub comment behaviour, where every newline becomes a
. Blank lines start a new paragraph under both settings, which is why separating paragraphs with a blank line is the portable habit.

Why are my images not displayed?

Deliberately. An image in the source is replaced with a text placeholder showing its alt text, and no img tag appears in the HTML output either. Loading an arbitrary remote image from pasted text means making a request to a third-party server and leaking the fact that you previewed the document, which is not a reasonable default for a tool that people paste unpublished drafts into.

Can I use HTML inside my Markdown?

Not here. Every angle bracket is escaped before conversion, so HTML you embed will be displayed as text rather than interpreted. That is a security decision, not an oversight — this page must be safe to paste text you did not write into. If your document genuinely depends on embedded HTML, preview it with the platform's own renderer; this page will show you the structure of everything around it but not that block.

Related