Markdown Preview
Write Markdown on the left, see it rendered on the right. Everything stays in your browser.
Markdown Preview
A live preview rendered by a parser this site wrote itself — no third-party Markdown library, and no raw HTML is ever passed through.
What it handles
| Feature | Syntax | Supported |
|---|---|---|
| Headings | # Heading |
✓ |
| Emphasis | *em* **bold** |
✓ |
| Tables | | a | b | |
✓ |
| Task lists | - [x] done |
✓ |
Lists
- Ordered items
- Nested content works:
- bullets inside
inline code
- And task lists:
- Parse CommonMark
- Add the GitHub extensions
- Read your mind
Code
function greet(name) {
return `Hello, ${name}!`;
}
Block quotes work too, and can contain anything.
— including more than one paragraph
Links go to the CommonMark spec, bare URLs like
https://github.com autolink, and struck-through text is supported.
Anything typed here stays in your browser.
- Words
- 169
- Characters
- 1,028
- Without spaces
- 770
- Lines
- 45
- Blocks
- 13
- Reading time
- 1 min
This preview is rendered by a Markdown parser written for this site rather than by a
third-party library, which is what lets it make a promise most online Markdown previews
cannot: it never passes raw HTML through. A parser that hands <script> or <img onerror=…> straight to the page has to
be paired with a separate sanitizer to be safe. This one has no way to emit a tag it did not
construct itself, so an <iframe> pasted into the editor appears as visible
text rather than becoming part of the page.
Link and image destinations go through a scheme allowlist — http, https, mailto, tel, ftp, plus any relative path. A javascript: or data: destination is refused, and the link's text is
kept while the link itself is dropped, so nothing you wrote disappears silently.
Supported syntax. Headings (both # and underlined), paragraphs,
emphasis and strong emphasis, inline code, fenced and indented code blocks with a language
label, block quotes, ordered and unordered lists with nesting, thematic breaks, links and
images including reference-style definitions, hard line breaks, backslash escapes, and
numeric character references. From GitHub-flavored Markdown: tables with column alignment,
task lists, strikethrough, and bare URLs and email addresses linked automatically.
Not supported, deliberately. Raw HTML is escaped rather than rendered, for the
reason above. Footnotes are not implemented. Named character references are limited to a common
set, so an unusual one such as ∴ stays as written. Conformance is measured
against the published CommonMark and GitHub specs on every build rather than claimed.
Your document is saved in this browser's local storage so it survives a reload, and it is never uploaded — the whole tool runs offline once the page has loaded.
Is my document uploaded anywhere?
No. The parser, the preview and the export all run in your browser, and the page makes no network request with your text. The document is kept in this browser’s local storage so it is still there after a reload, and clearing the editor clears the copy.
Why is my HTML showing up as text instead of rendering?
That is deliberate. Raw HTML embedded in Markdown is the main way a Markdown renderer becomes an attack on the page showing it, so this tool escapes every tag rather than passing it through. GitHub does much the same thing when it renders a README, stripping scripts and event handlers before display.
Which flavour of Markdown is this?
CommonMark, plus the GitHub extensions people actually use: tables, task lists, strikethrough, and automatic linking of bare URLs. Coverage is checked against the specs’ own published test suites, so the supported set is measured rather than asserted.
Can I get the HTML out?
Yes, two ways. "Copy HTML" puts the rendered fragment on your clipboard, ready to paste into a template or a CMS. "Download HTML" saves a complete standalone page with its styling inlined, so it looks right opened straight from your downloads folder with no network connection.
Why does the word count differ from the preview?
The counts are taken from the Markdown source, not the rendered text, because the source is what the editor shows you. A heading’s "#" and a link’s URL are characters you typed, so they are counted — which is what makes the number agree with a selection you make in the editor.
Related Tools
Updated August 19, 2026