Markdown to HTML Converter
Convert Markdown to clean HTML with a live, sandboxed preview.
100% in your browser — nothing uploadedConvert Markdown to HTML online
Preview
The preview does not load external images — this page never contacts another server. The copied HTML keeps the original image URLs.
About this Markdown to HTML converter
Write or paste Markdown and get clean HTML instantly, next to a rendered preview. The converter covers the everyday CommonMark set — headings, emphasis, links, images, lists, blockquotes, and code — plus GitHub-style extras: tables with column alignment, strikethrough, and fenced code blocks tagged with their language.
Everything runs in your browser, so drafts, README files, and internal docs never leave your device. The output is also built defensively: raw HTML embedded in the Markdown is escaped and shown as text instead of being passed through, and javascript: links are neutralized, which makes the generated code safe to paste into a page or CMS.
Converting Markdown to HTML in the tools you already use
Away from this page, these are the usual ways to turn Markdown into HTML in your own workflow.
| Tool | How to convert | What you get |
|---|---|---|
| Python — markdown | import markdown; markdown.markdown(text) | An HTML string. Install with pip install markdown. |
| Node — marked | import { marked } from 'marked'; marked.parse(text) | An HTML string, returned synchronously. |
| pandoc | pandoc -f markdown -t html | A fragment on stdout. Add -o page.html to write a file, and -s for a full document with head and body. |
| VS Code | Ctrl+Shift+V (Cmd+Shift+V) opens the preview | A rendered view only — not an .html file. See the note below. |
VS Code's built-in preview renders Markdown but never exports it — there is no built-in command that writes an .html file. To get a file you install an extension or pipe the document through pandoc. Everything above produces a fragment by default; wrap it in your own <head>/<body>, or use pandoc -s, when you need a standalone page.
Two reasons a snippet won't render
When something looks right in the editor but comes out as one flat paragraph, it is almost always one of these two.
| What you wrote | What renders | The fix |
|---|---|---|
| A line of text with - item on the very next line | The list is swallowed into the paragraph | Leave a blank line before the first item. |
| A header row of | pipes | with no dashes under it | A literal line of text with pipes, not a table | Add a delimiter row: | --- | --- | beneath the header. |
The blank line is the portable rule. Strict CommonMark does let a bulleted list interrupt a paragraph, but an ordered list only interrupts when it starts at 1 — so a list that begins at 2. quietly won't render, and plenty of other renderers want the blank line regardless. For a GFM table, the row of hyphens is what makes it a table at all; colons set alignment: :--- is left, ---: is right, and :---: is center.
FAQ
Which Markdown syntax is supported?
The everyday CommonMark subset: headings, paragraphs, bold, italic, strikethrough, inline code, fenced code blocks, links, images, ordered and unordered lists (one nesting level, including hand-wrapped items and blank lines between items), blockquotes, horizontal rules, hard line breaks, backslash escapes, and GitHub-style tables with alignment. Reference-style links, setext (underlined) headings, autolinks, footnotes, underscore emphasis, and indented code blocks are not supported.
Why does raw HTML show up as text in the output?
That’s intentional — it’s a security feature. Any HTML tags inside your Markdown are escaped and rendered as visible text, which blocks script injection, and links using the javascript: scheme are neutralized. The generated HTML is safe to embed as-is.
Is my Markdown uploaded to a server?
No. Parsing, conversion, and the preview all run in your browser with JavaScript, and the preview is isolated in a sandboxed iframe. Nothing is sent anywhere, so private notes and internal docs stay private — that is also why the preview does not load images hosted on other sites, although the HTML you copy keeps their original URLs.