What does a Markdown to HTML converter do?
A Markdown to HTML converter reads a document written in Markdown — a plain-text convention where a hash marks a heading and asterisks mark emphasis — and produces the equivalent HTML tags. The Markdown stays readable while you write it; the HTML is what a browser, a CMS or an email client actually needs.
The conversion here handles the constructs that appear in ordinary documents: headings from one to six hashes, bold and italic, strikethrough, inline code in backticks, fenced code blocks with an optional language, links and images, bulleted and ordered lists, blockquotes, horizontal rules and pipe tables. HTML that appears in the source is escaped by default, so a tag typed into the Markdown shows up as text rather than being executed — the difference between a converter you can paste untrusted text into and one you cannot.
Two optional modes cover the cases that come up most. Inline styles add a style attribute to headings, paragraphs, quotes and lists, because email clients strip stylesheets and a blockquote with no styling is indistinguishable from body text. The link option adds a target and a noopener rel, useful when the fragment goes onto a page where links should leave the current one. Both are off by default except the email style, which most people using this page want.
How to convert Markdown to HTML
- Paste or type the Markdown into the first box. The HTML and a rendered preview update as you type.
- Leave raw HTML escaping switched on unless you wrote every character yourself — with it off, a tag in the source passes straight through to the output.
- Keep the email styles if the HTML is going into an email; turn them off for a fragment you will paste into a stylesheet-driven page.
- Turn on the new-tab option only if the links should open away from the current page.
- Check the preview rather than reading the markup — a table separator row that was not recognised is obvious rendered and invisible in the tags.
- Copy the HTML. Everything is wrapped in a single div, which you can keep or strip depending on where it is going.
Markdown to HTML limits and rules
| Item | Limit |
|---|---|
| Headings | ATX style — one to six hashes, with optional closing hashes |
| Emphasis | Bold with two asterisks or two underscores, italic with one, strikethrough with two tildes |
| Code | Inline spans in backticks and fenced blocks with an optional language class |
| Lists | Bulleted with a dash, asterisk or plus, and ordered with 1. or 1) |
| Tables | Pipe tables with a dash separator row, including left, right and centre alignment |
| Also handled | Links, images, autolinks, blockquotes and horizontal rules |
| Not handled | Footnotes, definition lists, task-list checkboxes, nested lists and front matter |
| Raw HTML | Escaped by default, and passed through when that is switched off |
When to use it
- Turning a readme, changelog or release note into HTML for a site that stores content as markup.
- Pasting a Markdown draft into a newsletter where the editor only accepts HTML but strips stylesheets.
- Converting a notes file into a page inside a documentation platform with no Markdown support.
- Previewing a Markdown file locally to check a table or a code block renders as intended.
- Producing a self-contained HTML fragment from a plain text document with inline styles baked in.
Is it private?
The parser runs in your browser, so the Markdown never reaches a server. That matters for the same reason the escaping does: this page can be used for text that should not be sent anywhere, and there is no upload path to leak it.
Frequently asked questions
It is escaped rather than removed, which is the safer of the two. A tag in the source is turned into text that displays as the tag, so nothing it says is executed and nothing it names is loaded. The risk this addresses is a script tag or an onload attribute in Markdown you did not write, which is a real problem when content comes from a shared repository or a pull request. Switching escaping off passes the HTML straight through — correct for markup you control, dangerous for anything else.
Because email clients do not load external stylesheets and most strip a style block in the head. A blockquote styled by a class renders as an ordinary indented paragraph, code loses its monospace background, and headings arrive at browser default sizes. Putting the styles on the elements themselves is the old, unfashionable technique that still works everywhere. It is unnecessary for a fragment going into a page that already has a stylesheet, which is why the option can be turned off.
A practical subset of CommonMark with the pipe-table extension from GitHub Flavored Markdown. The constructs it supports are documented above; the ones it does not — footnotes, definition lists, task lists, front matter and nested lists — are handled by a full parser rather than this one. For a document that leans on those, a library such as markdown-it or a build step is a better choice than a page like this, and the honest thing is to say so.
Because the parser works a line at a time, and genuine nesting needs a recursive block parser that tracks indentation levels. The common case — a flat list, or a list item that wraps onto a second line — is handled correctly, including the continuation line being joined to its item. A three-level indented list is not, and it comes out as a single level. Reaching for a real CommonMark implementation is the right answer when the structure matters.
Yes, for the inline constructs: bold, italic, inline code, links and strikethrough are all rendered inside table cells. What it does not do is parse a block inside a cell — a nested list or a code block within a table cell will not be recognised, because the table row is split on the pipe character before block parsing happens. Keep cells to a phrase or a sentence, which is what a table is for, and everything inside them renders as expected.
You can convert one page at a time, and that is the useful scope. There is no bulk upload, no front matter reading and no file naming, because a static site generator already does all of that and does it better. This page is for the single document: the readme you want as HTML, the newsletter section, the note you are turning into a wiki entry. For a directory of files, run a converter in your build instead.
Related tools
Written and maintained by Md. Nur Hossain Repon.