100% local — your data never leaves your browser

Markdown to HTML — Paste It Into a Template

Turn Markdown into HTML: GFM tables, task lists, strikethrough and footnotes, ready to drop into a page, an email template or a CMS field.

Instant Private Zero cookies

Markdown input

HTML output

What this tool does

Markdown in, HTML out.

# Title

Some **bold** and a [link](https://x.dev).
<h1>Title</h1>
<p>Some <strong>bold</strong> and a <a href="https://x.dev">link</a>.</p>

GitHub Flavored Markdown is on: tables, task lists, strikethrough and autolinks are all read. A fenced block keeps its language as class="language-js", which is what highlighters expect.

Footnotes, at last

Ada wrote the first algorithm[^1].

[^1]: On the notes of Menabrea, 1843.
<p>Ada wrote the first algorithm<sup class="footnote-ref"><a href="#fn-1" id="fnref-1">1</a></sup>.</p>
<section class="footnotes">
<ol>
<li id="fn-1"><p>On the notes of Menabrea, 1843. <a href="#fnref-1">↩</a></p></li>
</ol>
</section>

marked, the library behind this converter, has no rule for footnotes. [^1] was therefore read as a reference link and [^1]: On the notes of Menabrea, 1843. as its definition — the marker became a link to a page named after the note, and the note’s own text never appeared. That was a real defect, found while writing this page and fixed. Notes are numbered in the order they are referenced, and a marker with no note behind it stays the text it is.

The HTML is yours, and it is not sanitised

A [harmless link](javascript:alert(1)) and <div onclick="steal()">raw HTML</div>.

Both come through untouched, and that is Markdown doing what it promises: the format allows raw HTML, and a converter that stripped it would be lying about your document. The result on this page is displayed as text and never inserted into the page itself.

The consequence is yours to handle: if the Markdown came from someone else — a comment, an issue, a form — sanitise the HTML before you put it on a page. A library such as DOMPurify does it in one call, and it belongs where the HTML is published, not here.

What you do not get

  • A document. No <html>, no <head>, no charset, no stylesheet: this is a fragment to paste inside something.
  • Anchors on headings. GitHub adds an id to every heading; this is a rendering convention, not part of Markdown, so <h2> comes out bare.
  • A <br> for every newline. A single line break inside a paragraph stays a space, as the specification says. Two spaces at the end of a line, or a blank line, do what you expect.

Private by design

Everything runs locally in your browser with JavaScript. Your data is never uploaded, which makes the tool safe for sensitive content, and it keeps working offline.

Frequently asked questions

Is the HTML sanitised?
No, and that is Markdown’s rule rather than an oversight: the format lets you write raw HTML, so a `<script>` or an `onclick` in your Markdown comes out exactly as it went in. This page shows the result as text and never inserts it into itself. If you are converting Markdown you did not write and putting the result on a page, run it through a sanitiser first — a `[link](javascript:…)` passes through for the same reason.
Do footnotes work?
Yes, since this page was written. marked has no rule for them, so `[^1]` was read as a reference link and `[^1]: the note` as its definition: the marker became a link to a page called “the note”, and the note itself disappeared from the document. They are now numbered in order of reference, gathered at the foot with a back-link, the way GitHub renders them.
What exactly do I get?
A fragment, not a document: no `<html>`, no `<head>`, no stylesheet, and no `id` on headings. Paste it into a template or a CMS field. GFM is on, so tables, task lists, strikethrough, autolinks and fenced code with `class="language-…"` all come through.

Related converters