Markdown Editor Converter🔒 100% local
Live Markdown to HTML. Privacy-first, no server uploads, no tracking.
Reads Markdown from the text area and prints the HTML a compact line-by-line renderer produces from it, followed by a short statistics block. Parsing happens with regular expressions inside the page, so a confidential document pasted here is not sent to a rendering service. The supported set is headings 1 to 6, bold as ** or __, italics as * or _, inline code, links, ordered and unordered lists, blockquotes, horizontal rules and fenced code with an optional language class.
How to use it
- Replace the sample "# Hello" and "World" with your own Markdown.
- Press Process to render it.
- Read the HTML in the output box, or press Copy Output. The stats lines at the bottom describe the source you typed, not the HTML.
Worked example
# Hello
Worldbecomes=== Rendered HTML ===
<h1>Hello</h1>
<p>World</p>
=== Stats ===
Words: 3
Headings: 1
Lists: 0 items
Code blocks: 0The blank source line survives into the output as a blank line, which is why the heading and the paragraph are separated by an empty row.
```js
const x = 1;
```becomes=== Rendered HTML ===
<pre><code class="lang-js">const x = 1;</code></pre>
=== Stats ===
Words: 6
Headings: 0
Lists: 0 items
Code blocks: 1The word count of 6 includes the fence line and its language tag, and the code block counter is the number of fence markers divided by two, so an odd number of fences reports a half block.
When to use it
- Checking what a home-grown renderer will do with a chunk of Markdown before you ship it.
- Extracting an HTML snippet to paste into a CMS field that accepts raw markup.
- Confirming that angle brackets in your text are escaped rather than passed through.
What it does not do
- This is a line-based regex converter, not CommonMark: tables, images, footnotes, reference-style links and task lists are not converted and appear as plain text.
- There is no live preview behind the page title. The output only changes when you press Process again.
- Raw HTML is escaped, so an inline <span> or <br> shows up as literal text.
- Each line becomes its own paragraph, so two consecutive lines of prose are rendered as two paragraphs here, unlike the separate markdown-preview tool which merges them.
- Nested lists are flattened and ordered-list numbering restarts whenever a non-list line interrupts the run.