Paste Markdown on the left and get HTML you can drop into a page, template or CMS field — or switch to the preview to see how it renders. Headings, emphasis, links, images, nested lists, blockquotes, fenced code and pipe tables are all supported. Raw HTML in your source is escaped rather than executed, so the preview is safe even for text you did not write.
Raw HTML in the source is escaped rather than executed, and link schemes are restricted to http, https, mailto, tel and relative paths — so the preview is safe even for text you did not write.
How it works
The converter works in two passes. First the document is split into blocks: a line starting with one to six hashes is a heading, three or more dashes are a horizontal rule, a fenced block between backticks is code, lines beginning with “>” are a quote, lines beginning with a bullet or a number are a list, a line of pipes followed by a row of dashes is a table, and anything else is a paragraph. Then each block’s text goes through the inline pass: code spans, images, links, bold, italic, strikethrough.
Order matters inside the inline pass. Everything is HTML-escaped before any markdown is applied, then code spans are pulled out and set aside so the emphasis rules cannot reach into them — that is why `**not bold**` in backticks stays literal. Underscores are only treated as emphasis at word boundaries, so snake_case_identifiers survive intact, which plain regex converters routinely mangle.
Link and image URLs pass a scheme allowlist: http, https, mailto, tel, and relative paths or anchors. Anything else — javascript:, data:, vbscript: — loses its href and the link text is rendered as plain text. Combined with escaping every input character, that is what makes the live preview safe to render directly in the page.
A deliberate difference from CommonMark: real Markdown lets raw HTML through, and this tool does not. Escaping HTML is the right default for a converter that previews pasted text, but it means a document that mixes in <div> wrappers or an iframe will show those tags as text instead of applying them. Reference-style links, footnotes and setext headings are also outside the supported subset.
Practical examples
README into a web page
Paste a project README with headings, a bullet list and a fenced code block, and you get the matching h1/h2, ul/li and pre/code markup — ready for a docs page without pulling a Markdown library into the build.
A table from a spec
The three lines “| Field | Type |”, “|:---|---:|” and “| id | int |” become a full table with thead, tbody and per-column text alignment taken from the colons in the separator row.
Checking someone else’s Markdown
Paste text from an untrusted source that contains <script>alert(1)</script> and a [link](javascript:alert(1)). The script tag appears as visible text, the link loses its href — you see what the document says without running any of it.
A nested list for a CMS field
Two-space indentation under a bullet produces a nested ul inside the parent li, which is what a CMS rich-text field expects. Flat converters emit two sibling lists instead and the indentation silently disappears.
Frequently asked questions
Which Markdown features are supported?
Headings (# to ######), paragraphs with single-line breaks preserved, bold, italic, bold-italic, strikethrough, inline code, fenced code blocks with a language class, links, images, unordered and ordered lists including nesting, blockquotes, horizontal rules and GFM pipe tables with alignment.
What is not supported?
Reference-style links ([text][ref]), footnotes, setext headings (underlined with = or -), definition lists, task-list checkboxes rendered as inputs, and raw HTML passthrough. These are either rare in pasted text or unsafe to render, and leaving them out keeps the output predictable.
Why is my HTML shown as text instead of being applied?
Because every character is escaped before conversion. That is the trade-off that makes previewing pasted text safe: no tag from the source can execute or restructure the page. If you need HTML passthrough, run your Markdown through a build-time library instead.
Is the live preview safe?
Yes, by construction rather than by filtering afterwards. Input is escaped, code content is isolated, and URL schemes are allowlisted, so there is no path for a script to reach the DOM. Nothing is stripped after the fact, which is where sanitiser bypasses usually happen.
How do I force a line break inside a paragraph?
End the line with two spaces, or with a backslash. Both produce a <br />. A single newline without either is kept in the output as a newline inside the same paragraph, which HTML renders as a space — the standard Markdown behaviour.
Does it keep the code language for syntax highlighting?
Yes: ```js becomes <code class="language-js">, the convention Prism and highlight.js expect. The tool does not highlight anything itself — it just leaves the hook in place for whatever highlighter your page already loads.
Why did my *italic* not render?
Emphasis needs the marker to hug the text: *word* works, * word * does not, and an asterisk inside a word is left alone. If your text uses asterisks as literal characters, wrap them in backticks so they are treated as code.
Can I convert a whole file?
Paste its contents — that is the fastest route and there is no size limit beyond your browser’s. There is no file upload on purpose: the document never has to leave your machine to be converted.
How are tables with a missing cell handled?
The header row fixes the column count, and short rows get empty cells at the end. That keeps columns aligned instead of shifting the remaining values one place left, which is what happens when a converter simply splits on pipes.
Does the output need a CSS framework?
No. The HTML is plain and semantic — h2, ul, pre, table — so it inherits whatever styles your page has. The preview here adds its own local styling only so lists and tables look right on this page.
Is the HTML minified?
No, blocks are separated by newlines so the output stays readable and diffable. If you need it compact, run the result through the HTML minifier.
Does anything I paste get uploaded?
No. The conversion is a pure function running in the page: no server, no storage, no analytics on content. Reload the page and the document is gone.
Related tools
HTML Entity Encoder and Decoder
Encode text to HTML entities or decode named, decimal and hex entities back to characters. In your browser.
Developer tools
HTML Minifier
Minify HTML in your browser — remove comments and collapse whitespace while protecting pre, script and style. Nothing is uploaded.
Developer tools
Text Case Converter
Convert text between UPPERCASE, lowercase, Title Case and Sentence case — with correct handling of č, ć, š, đ, ž.
Text tools
JSON to XML Converter
Convert JSON to indented XML in your browser — objects become nested elements, arrays repeat, a custom root name is supported. Nothing is uploaded.
Developer tools
RSD to EUR Converter
Convert Serbian dinars to euros (and back) at the official NBS middle rate, with the rate date shown.
Finance & salary
Steps to Distance Calculator
Convert steps to kilometres and back, with stride length worked out from your height and whether you walk or run. Runs in your browser.
Health & fitness