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
idto 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.