HomeText & Developer Tools › Markdown Preview & HTML Converter

Markdown Preview & HTML Converter

Write or paste Markdown and see the rendered result instantly, along with the clean HTML it produces - headings, lists, bold, links, code blocks, quotes and tables, all converted in your browser.

What Markdown is

Markdown is a plain-text formatting syntax created by John Gruber in 2004 with the goal that the source stays readable even before it is rendered. You mark a heading with #, bold with **double asterisks**, italics with *single asterisks*, a bullet with -, a numbered item with 1., a quote with >, inline code with backticks, and a link with [text](url). It is the format behind README files on GitHub, notes in Obsidian and Notion, issue comments in Jira and Linear, static-site posts in Hugo and Jekyll, and most chat apps in a reduced form.

This page converts the left box to HTML as you type and shows you both the rendered result and the generated markup, so you can paste the HTML into a CMS, an email template or a web page. Nothing is sent anywhere: the parser is a few dozen lines of JavaScript running in your own browser.

What this converter supports

Block elements: ATX headings # through ######, unordered lists with -, * or +, ordered lists with 1., blockquotes with > (which are parsed recursively, so a list inside a quote works), fenced code blocks between triple backticks, horizontal rules from three or more dashes, asterisks or underscores, GitHub-style pipe tables with a | --- | separator row, and ordinary paragraphs, where consecutive lines are joined and a blank line starts a new one.

Inline elements: **bold**, *italic*, ***bold italic***, __bold__, ~~strikethrough~~, `code` and links. Images are shown as a placeholder rather than loaded, so nothing on this page ever fetches a remote file. Every character is HTML-escaped before any Markdown is applied, which means a literal <script> in your text comes out as harmless visible text instead of running - the same protection a well-behaved CMS applies.

Differences from other renderers and tips

This is a compact parser, not a full CommonMark implementation. It does not handle nested lists by indentation, reference-style links, footnotes, HTML mixed into the Markdown, or setext headings written with underlines of equals signs. GitHub, Discord and Slack each add their own extensions (task lists, mentions, spoilers), so a document may look slightly different there. If you need byte-exact CommonMark, run your file through a full library such as markdown-it or pandoc.

Two practical habits: leave a blank line before and after every list, table and code block, since many renderers require it; and end a line with two spaces only if you really want a hard line break, because most parsers otherwise join wrapped lines into one paragraph. For tables, the separator row decides how many columns exist - extra cells in a body row are still shown, missing ones simply leave the row short.

Frequently asked questions

Can I paste the generated HTML into WordPress or an email?

Yes. The output uses only basic tags - h1 to h6, p, ul, ol, li, blockquote, pre, code, table, a, b, i - so it pastes cleanly into a CMS custom HTML block. Email clients handle these tags too, though you will want inline styles for a polished newsletter.

Is my document uploaded?

No. Parsing happens entirely in your browser. There is no server call, so drafts, internal release notes and private documents stay on your machine.

Why does my nested list come out flat?

This parser handles one level of list nesting only. Indented sub-items are treated as part of the same list. Use a full CommonMark renderer if you need deep nesting.

How do I show a literal asterisk or backtick?

Wrap it in backticks for code, or write the character in a fenced code block. This parser does not support backslash escapes, so `*` is the reliable way to display a literal asterisk.