Markdown to HTML
Convert Markdown to HTML with live side-by-side preview. Headings, bold/italic, code blocks, lists, links, images, tables, blockquotes. Copy HTML, download .html. 100% offline.
About this tool
A focused Markdown-to-HTML converter with live preview. The Markdown is on the left (or top on mobile), the rendered HTML is on the right (or bottom on mobile), and a third card below shows the live-rendered preview so you can see exactly what the browser will paint. Supports headings (# through ######), bold (**text** or __text__), italic (*text* or _text_), inline code (`code`), fenced code blocks (``` with optional language), unordered and ordered lists (with one level of nesting), links ([text](url)), images (), tables (with alignment markers :---:, :---, ---:), blockquotes (>), and horizontal rules (---). The "Wrap in document" toggle adds a full <!DOCTYPE html> wrapper with a minimal stylesheet so the downloaded file renders correctly on its own. Copy HTML button copies the raw HTML; Download button saves it as document.html. 100% offline, no CDN, the parser is custom pure-JS in the page.
Details
- Category
- text
- Version
- 1.0.0
- Size
- 18 KB
- Updated
- Jun 2026
Frequently Asked Questions
Which Markdown features are supported?
Headings (# to ######), bold (**text** / __text__), italic (*text* / _text_), inline code (`code`), fenced code blocks (``` with optional language class), unordered lists (-, *, +), ordered lists (1. 2. 3.), links ([text](url)), images (), tables with alignment (:---: / :--- / ---:), blockquotes (>), and horizontal rules (--- or *** or ___). NOT supported: nested fenced code, nested lists deeper than one level, reference-style links ([text][ref]), footnotes, task lists (- [x]), strikethrough (~~text~~), HTML pass-through (raw HTML in Markdown is escaped, not interpreted), and reference-style images. The parser is about 200 lines of custom JS inlined in the page.
Why use a custom parser instead of marked.js or showdown?
To keep the tool fully offline and zero-dependency. The popular Markdown libraries (marked, showdown, markdown-it) are excellent but require either a CDN script (network request) or a build step (npm + bundler). The in-house parser handles 95% of common Markdown in about 200 lines. The trade-off is that some advanced features (nested lists deeper than 1, raw HTML pass-through, reference-style links) are not supported. For typical blog posts, READMEs, and documentation, the in-house parser produces clean, predictable HTML.
What does the "Wrap in document" toggle do?
When on, the output is a complete standalone HTML document: <!DOCTYPE html>, <html>, <head> with charset and viewport meta, a <title>, a minimal <style> block that styles code, blockquotes, and tables nicely, and the body with your converted content. You can download this and open it in any browser and it will render correctly. When off, the output is just the inner HTML (the <h1>, <p>, etc. tags without the document wrapper), suitable for pasting into a larger page or CMS rich-text field.
How does the live preview work?
Every keystroke in the Markdown textarea triggers a re-parse (sub-millisecond for typical documents) and updates both the HTML output card and the rendered preview card. The preview uses the same HTML you see in the output card, but rendered into the live preview area as DOM. So what you see is what the browser will paint. The download button captures the HTML at the moment you click; copy captures the same. There is no debounce because the parser is fast enough that typing 80 wpm does not cause lag on a modern phone.
Is my data private?
Yes. The parser is custom pure-JS inlined in the HTML. There are no network calls, no CDN scripts, no analytics. The Markdown is processed locally in the browser and never sent anywhere. You can use the tool for sensitive internal documentation, draft blog posts, or any content you do not want leaving your device.