Markdown to HTML. Live, side-by-side.
Type Markdown on the left. See rendered HTML on the right, with raw HTML below. Toggle GitHub-flavored mode for tables, fenced code, autolinking. Powered by marked.js — every conversion happens in your browser.
Type Markdown on the left. The right shows the rendered preview live; raw HTML appears below for copy / download. Powered by marked.js (MIT) loaded once from the CDN — every conversion happens in your browser. Safe for unpublished drafts.
// raw HTML appears here
Sources used
- marked.js — MIT-licensed Markdown parser, loaded from jsDelivr CDN once at page load
- CommonMark — the strict Markdown spec marked.js implements
- GitHub Flavored Markdown — GFM extension spec (tables, autolink, task lists)
Markdown is parsed in your browser. After the initial library fetch, no network requests carry your content.
Privacy: Markdown is parsed in your browser. Nothing is sent or logged.
CommonMark plus GitHub Flavored features.
Headings, paragraphs, lists. Standard CommonMark — # through ###### for h1-h6, blank line separates paragraphs, hyphen / asterisk / number for lists. Nested lists with two-space indent. Task lists (- [x] done) under GFM mode.
Inline formatting. Bold (**bold**), italic (*italic*), code (`code`), strikethrough under GFM (~~strike~~). Standard double-asterisk for bold; underscore variant also works.
Links and images. [text](url) for links,  for images. GFM also autolinks bare URLs (https://example.com renders as a link without explicit syntax).
Code blocks. Indent four spaces or wrap in triple backticks. GFM allows a language tag after the opening backticks (```javascript) which our renderer surfaces as a class hint — pair with a syntax-highlighting library like Prism.js or highlight.js for colored output.
Tables (GFM only). Pipe + dash syntax — first row is the header, second row is the separator (|---|---|), subsequent rows are the body. Alignment via :---, :---:, ---: in the separator row.
Blockquotes and rules. > at line start for blockquotes (nestable). Three or more hyphens / asterisks on their own line for a horizontal rule.
Four jobs this tool covers.
Job 1: Email + newsletter formatting. Write release notes or a customer email in Markdown, paste here, copy the HTML, paste into your ESP. Most ESPs accept HTML directly but don't have a Markdown editor; this is the bridge. Pair with our UTM Builder to tag the links before pasting.
Job 2: CMS migration. Migrating from a Markdown-based CMS (Ghost, Hugo, Eleventy) to one that wants HTML (WordPress, Drupal, custom). Convert each post here, copy the HTML, paste into the new editor. For bulk migrations, use a build script with marked.js — but for a handful of posts this is faster than setting up the script.
Job 3: Documentation export. Writers who draft in Markdown sometimes need to deliver a polished HTML document for review. Convert here, click Download, share the .html file — it includes a basic stylesheet so it renders as a readable document standalone. Faster than installing pandoc just for one export.
Job 4: Quick HTML sanity-check. When a CMS is rendering Markdown weirdly, paste the source here to see the canonical CommonMark / GFM rendering. Discrepancies between the canonical render and what the CMS shows tell you which custom transformations the CMS layered on top.
Six questions users ask.
What's GitHub-flavored Markdown (GFM)?
GFM is the dialect of Markdown GitHub uses for READMEs, issues, and comments. On top of standard CommonMark it adds: tables (pipe + dash syntax), fenced code blocks with language tags, autolinking of bare URLs, task list checkboxes, strikethrough, and tighter paragraph rules. We default GFM on because that's the de-facto modern Markdown — most CMSes, Notion exports, Slack messages, and writing tools use a GFM-compatible flavor. Toggle it off for strict CommonMark behavior.
What does the sanitize option do?
When enabled, raw HTML inside the Markdown is escaped (rendered as text rather than executed). Useful for processing untrusted input — comments, user-submitted content, API output. When disabled, raw HTML in the Markdown source passes through unchanged, so you can mix Markdown and inline HTML for richer output. Default is off because the typical user is converting their own Markdown, where the inline HTML is intentional.
Which Markdown library does this use?
marked.js — the most-used JavaScript Markdown parser, MIT-licensed, ~50KB minified. It's what GitHub used internally for years and what most static-site generators (Eleventy, Next.js's MDX, Vercel's docs) depend on. We load the latest stable from cdn.jsdelivr.net via a script tag with defer, so the page is interactive as soon as Markdown is parsed for the first time. No build step, no server compute.
Why does some inline HTML render differently than I expect?
Markdown has subtle rules about blank lines around block-level HTML. A <div> inside a paragraph won't render as a block — wrap it in blank lines on both sides. Inline elements (span, a, em) render correctly inside Markdown without special handling. If you're trying to embed an iframe or video, leave a blank line before and after. The CommonMark spec at commonmark.org has the full rules; in practice, just remember: blank-line above and below for block HTML.
Can I export the rendered HTML?
Yes — click 'Copy HTML' to put the rendered HTML on your clipboard, or 'Download' to save as a complete .html file with a basic stylesheet so it renders in a browser standalone. Useful for one-off conversions where you need to email a rendered document or paste into a CMS that doesn't accept Markdown directly.
Is the Markdown I paste sent anywhere?
No. Conversion happens entirely in your browser using marked.js, which is loaded once at page-load from the jsDelivr CDN. After that initial library fetch, no further network requests are made. Your Markdown content is never sent to Digital Heroes servers. Safe for unpublished drafts, NDA'd documentation, or internal release notes.