Skip to tool
ecech.
💻 Developer & Code

Free Markdown to HTML Converter with Live Preview and Clean Export

Type Markdown, watch the HTML appear, copy either side. Escapes HTML by default, and tells you plainly which syntax it supports rather than dropping it silently.

Words

0

Reading time

Headings

0

Links

0

HTML output


Advertisement

How the calculation works

Markdown is parsed in two passes, not one Source ## Heading - item **bold** > a quote plain text, line based Pass 1 — blocks heading / list / quote code fence / table decided by how a line starts Pass 2 — inline bold, italic, code, links inside each block's text code spans are protected first This is why `**not bold**` stays literal inside backticks: the inline pass never sees it.

How to Use This Tool

Markdown is the plain-text format behind READMEs, static site posts, chat messages and most documentation written in the last decade. This page converts it to HTML as you type, shows the rendered result beside the source, and lets you copy either.

How the conversion works

Markdown is parsed in two passes. The first looks at each line and decides what kind of block it starts: a heading if it begins with hashes, a list item if it begins with a dash or a number, a quote for a chevron, a fenced code block for three backticks, a table for a row of pipes. The second pass runs inside each block's text and handles the inline syntax — bold, italic, links, inline code.

The order explains a behaviour that confuses people: text inside backticks is protected before the inline pass runs, which is why `**not bold**` stays literal. It also explains why a heading needs a blank line before it in strict parsers — without one, the line is still part of the preceding paragraph block.

Three things that behave differently from how they look. No blank line Some text ## Heading In strict CommonMark the heading still works, but many renderers swallow it into the paragraph. Always leave one. Single line break line one line two Renders as one paragraph: “line one line two”. End with two spaces, or use a blank line, to break it. Nested lists - outer   - inner Indentation must be consistent. Two spaces and four spaces both work; mixing them in one list does not.
The single line break is the one that catches everyone. Markdown treats consecutive lines as one paragraph, exactly as HTML does.

Raw HTML is escaped by default

Markdown permits raw HTML, and most converters pass it straight through. That is fine for your own documents and dangerous for anything else — a <script> tag in Markdown pasted from elsewhere becomes a script tag in your page.

This tool escapes HTML unless you explicitly tick the box, and warns you when the input contains tags that were escaped. If you are building anything that renders Markdown submitted by other people, sanitise the output; converting Markdown is not itself a security boundary.

What is supported

Headings, paragraphs, bold, italic, strikethrough, inline code, fenced code blocks, links, images, unordered and ordered lists, nested lists, task lists, blockquotes, horizontal rules and pipe tables.

What is not: footnotes, definition lists, reference-style links, HTML entities inside code, and the more obscure corners of CommonMark such as lazy continuation lines. The parser is written into this page rather than loaded from a CDN, which keeps it fast and dependency-free at the cost of that coverage. If something you write does not render, that list is the first place to look.

Everything stays local

The conversion runs in your browser. Nothing is uploaded, which matters if what you are pasting is an unreleased changelog, an internal runbook or a draft under embargo.

Advertisement

Frequently Asked Questions

Why does my single line break disappear?
Because Markdown treats consecutive lines as one paragraph, the same way HTML does. To force a line break, end the line with two spaces, or leave a blank line to start a new paragraph. This is the single most common surprise for people coming from a word processor.
Is raw HTML in my Markdown converted or escaped?
Escaped, unless you tick the 'allow raw HTML' box. Markdown officially permits inline HTML and most converters pass it through untouched, which is a real risk if the Markdown came from anywhere but you. If you allow it, the tool warns you which tags it let through.
Which Markdown syntax does this support?
Headings, bold, italic, strikethrough, inline code, fenced code blocks, links, images, ordered and unordered lists, nested lists, task lists, blockquotes, horizontal rules and pipe tables. It does not support footnotes, definition lists or reference-style links, because the parser is written into the page rather than loaded as a library.
Why doesn't my table render?
Pipe tables need a separator row of dashes directly beneath the header row — for example |---|---|---| — with no blank line between them. A table also needs a blank line before it, otherwise it is absorbed into the preceding paragraph. Both are easy to lose when copying from somewhere else.
Is the HTML safe to paste into my site?
The output of this tool is safe when raw HTML is escaped, which is the default. If you enable raw HTML, or if you are building a system that renders Markdown written by other people, run the result through a sanitiser before displaying it. Markdown conversion is not a security boundary on its own.
Can I convert HTML back to Markdown?
Not with this tool — it goes one way. Reversing the conversion is a genuinely harder problem, because HTML can express structures that have no Markdown equivalent, so any converter has to decide what to discard. It is better done with a dedicated tool that lets you see what it dropped.
Does the reading time count code blocks?
No. Code blocks are excluded from the word count and the reading estimate, because nobody reads code at 238 words per minute. The estimate uses the prose only, which makes it a more useful number for a README or a blog post.

Related tools in Developer & Code

Browse all Developer & Code tools
A handwritten note reading ecech.com resting on the keyboard used to build the site.

Made by one person

ecech. is not a content farm. Every tool here is written and checked by hand, one at a time, by someone who wanted the tool to exist and could not find a version that showed its working.

No accounts and no sign-in, and nothing you type reaches a server — every calculation on this page runs inside your browser. The ads are served by Google and do set their own cookies, which is set out in full on the privacy page. More about the site.