Markdown to HTML

Turn Markdown into clean HTML you can paste into a template.

Your inputs stay on your deviceFREE · NO SIGN-UP
HTML in the Markdown
Heading links
Headings come out as plain h1 to h6, with no attributes.

Raw HTML in the input is written out as visible text, so the result carries nothing you did not write as Markdown. Supported: headings, both # and underlined, bold, italic, and strikethrough, links, images, and <https://autolinks>, fenced and indented code, with a language, nested bullet, numbered, and task lists, blockquotes and thematic breaks, tables with column alignment, reference links and [id]: definitions. Not supported: footnotes, definition lists, front matter, math and diagram blocks, emoji shortcodes, heading attributes in braces. Up to 200,000 characters.

Result

Start typing and the result appears here. No button needed.

THE LITTLE DETAILS

Markdown to HTML, without the extra steps.

Paste Markdown and get the HTML beside a live preview of how it renders. The flavour is CommonMark's common core plus the GitHub extensions people assume are standard - tables, task lists and strikethrough - and raw HTML in your input is shown as text unless you ask for it to be passed through.

How to use this tool

  1. 1Paste your Markdown.
  2. 2Choose what happens to any raw HTML in it.
  3. 3Copy the HTML, or read the preview beside it.

When Markdown to HTML is the right tool

  • A README has to go on a web page, and the site's editor only takes HTML.
  • Release notes written in Markdown need pasting into an email template.
  • A CMS field accepts HTML but the draft was written in a Markdown editor.
  • You want to check how a table or a nested list will actually render before committing it.
  • A static-site template needs the body of a post as HTML, without a build step.
  • Someone sent you Markdown with raw HTML mixed in, and you need to see what is actually in there.

Which Markdown this is, precisely

There is no single Markdown. This one handles CommonMark's common core - headings both ways, fenced and indented code, nested lists, blockquotes, reference links, emphasis, hard breaks and escapes - plus the three GitHub extensions people assume are standard: tables with alignment, task list items, and strikethrough. Footnotes, definition lists, front matter, math and emoji shortcodes are not converted, and the page lists them rather than silently dropping them into your output as stray text.

Raw HTML is shown as text unless you say otherwise

A converter that passes HTML straight through will happily carry a script tag or a tracking pixel out of someone else's Markdown and into the page you paste the result into. So the default writes any raw HTML out as visible text, which is inert, and the page tells you how much of it was in there. Passing it through is one click away for Markdown you wrote yourself, where an embedded iframe or a div is deliberate.

A link destination is a place, not a program

Markdown will let you write a link to javascript: or to data:text/html, and both of those run code rather than going anywhere. Those destinations are dropped, the words that were linked are kept, and the count is reported so nothing disappears quietly. Data URLs for actual images are allowed through, because a base64 PNG is a picture. This applies whichever way you set the raw HTML option.

The preview cannot reach the network

The rendering beside the HTML is drawn in a sandboxed frame with scripts disabled and a policy that blocks every outside request. That means an image URL in your Markdown is never fetched just because you pasted it, which is the whole promise of a tool that runs on your own machine - and it is why pictures from the web appear broken in the preview while embedded data URLs still show. The HTML you copy is unaffected.

GOOD TO KNOW

A few quick answers.

Paste your Markdown. Choose what happens to any raw HTML in it. Copy the HTML, or read the preview beside it.

Tool inputs are processed in your browser. Crate has no upload endpoint and no accounts. Downloaded site assets and a cookie-free page-view count still require a connection; your files and text are not included in those requests.

CommonMark's common core plus GitHub tables, task lists and strikethrough. Footnotes, definition lists, front matter, math blocks and emoji shortcodes are not converted. Raw HTML is escaped by default. A javascript: or data:text/html link destination is dropped rather than written into the output. The preview runs with no scripts and no network access, so images from the web show as broken in it.

Because an underscore inside a word is almost always part of a name rather than emphasis. The same rules CommonMark uses are applied here, so file_name_here and MAX_RETRIES survive intact while _real emphasis_ still works. Asterisks are treated differently, since a*b*c really is emphasis in the middle of a word.

Nothing in your text is fetched. The preview blocks all outside requests, so an image hosted on the web cannot load in it - that is the point rather than a fault. The src attribute in the HTML you copy is correct and the picture will appear once the HTML is on a page that is allowed to load it.

No wrappers and no styling hooks, except on code blocks: a fenced block with a language becomes pre and code with class="language-js", which is what highlighters look for. Task lists get class="task-list" so the bullets can be hidden. Everything else is plain h1 to h6, p, ul, ol, li, blockquote, table, hr, a, img, em, strong, del and code, indented so it reads when pasted into a template.

It stays as the text you wrote - [like this][missing] - rather than becoming a link to nowhere, and the page counts how many there were. Definitions that nothing uses are counted too, since a definition that produces no output usually means a typo in one of the two labels.

Back to all tools