plato·md
Open DevTools → Network and type Markdown. You will see zero outbound requests from the tool. All conversion runs locally in JavaScript. View source on GitHub.

Markdown Preview & Converter

Paste Markdown on the left — rendered HTML appears on the right, live. Copy the HTML output for use in any CMS, email, or webpage. Nothing leaves your browser.

Markdown input
HTML preview

How to use

  1. Type or paste Markdown in the left editor — the HTML preview updates as you type.
  2. Click Copy HTML to copy the rendered HTML for use in a CMS, email, or web page.
  3. Click Copy Markdown to copy the raw Markdown source.
  4. Click Clear to reset the editor and start fresh.

Frequently asked questions

What is Markdown and what is it used for?

Markdown is a lightweight markup language created by John Gruber in 2004. You write # for headings, **text** for bold, and *text* for italic. It is widely used for README files on GitHub, documentation sites, blog posts in static-site generators (Jekyll, Hugo, Next.js), Slack and Discord messages, and Jupyter notebooks. The goal is readable source text that converts cleanly to HTML.

What is the difference between Markdown and HTML?

HTML is the language browsers render. Markdown is a shorthand that compiles to HTML. Writing # Hello produces <h1>Hello</h1>. Markdown is faster to write and easier to read in raw form, but has a smaller feature set. Most parsers also allow raw HTML inside Markdown when you need full control.

How do I convert Markdown to HTML?

Paste your Markdown into the left editor. Click Copy HTML to grab the rendered HTML. Paste it wherever you need it — a CMS, email template, or web page. The conversion runs entirely in your browser with no server round-trip.

Is my Markdown content uploaded to a server?

No. Everything runs in your browser using JavaScript. Open DevTools (F12) → Network tab, type some Markdown, and you will see zero outbound requests. Your content never leaves your tab — important for internal API docs, private notes, or sensitive data.

What Markdown syntax does this tool support?

Headings (# through ######), bold (**text** or __text__), italic (*text* or _text_), bold italic (***text***), strikethrough (~~text~~), inline code (`code`), fenced code blocks (```lang), blockquotes (> text), unordered lists (- * +), ordered lists (1.), horizontal rules (---), links ([text](url)), and images (![alt](src)).

How do I add a fenced code block?

Open with triple backticks and optionally a language name (```javascript), write your code, then close with triple backticks on their own line. The output is <pre><code class="language-javascript">...</code></pre>. For inline code within a sentence, use single backticks: `variableName`.

What is GitHub Flavored Markdown vs standard Markdown?

Standard Markdown covers core syntax. GitHub Flavored Markdown (GFM) adds: pipe tables, task lists (- [ ] / - [x]), strikethrough, autolinks, and footnotes. This tool supports standard Markdown plus strikethrough. For pipe tables, paste raw <table> HTML markup.

Can I use the HTML output in email or Word?

Email clients render HTML, not raw Markdown. The workflow: write here → Copy HTML → paste into your email tool's HTML editor. Many platforms (Substack, Mailchimp, ConvertKit) also accept Markdown directly in their composer. For Word: copy-paste from the right preview pane to import formatting via the clipboard's HTML representation.

Why does my bold or italic not render correctly?

Common causes: (1) no space after # — write # Heading not #Heading; (2) spaces inside asterisks — ** bold ** fails, use **bold**; (3) underscore italic inside a word like some_variable_name — switch to asterisks; (4) unclosed delimiter — every ** needs a matching **; (5) no blank line before a list.

How do I escape Markdown special characters?

Prefix with a backslash: \* renders as *, \# as #, \[ as [. Use escapes when you want to display a literal asterisk or hash without triggering formatting. Works for: \ ` * _ { } [ ] ( ) # + - . !

Examples

Project README

Bold and inline code inside a list for a clean install guide.

## Installation

**Requirements:** Node.js 18+

- Run `npm install`
- Copy `.env.example` to `.env`
- Start with `npm run dev`

API reference

Fenced code blocks with language tags for endpoint documentation.

## Create user

**POST** `/api/users`

```json
{
  "name": "Alice",
  "email": "alice@example.com"
}
```

Returns `201 Created` on success.

Blog post intro

Heading, blockquote, and bold for a typical dev blog entry.

# Why I switched to TypeScript

> The compiler catches bugs I would
> have shipped to production.

After two years of vanilla JS, the
**type errors caught at build time**
more than offset the setup cost.

About Markdown to HTML conversion

Markdown was designed with two goals: easy to write as a human, and easy to read as raw text even before it is rendered. John Gruber published the original specification in 2004, and since then Markdown has become the dominant format for developer documentation, open-source README files, and lightweight content management.

The conversion from Markdown to HTML follows a set of straightforward rules. Block-level elements — headings, paragraphs, lists, code blocks, blockquotes, and horizontal rules — are identified by patterns at the start of a line or spanning multiple lines. Inline formatting — bold, italic, strikethrough, inline code, links, and images — is processed within those block elements. The output is an HTML fragment you can embed directly in a page or template.

This tool uses a minimal parser written in approximately 6 KB of vanilla JavaScript with no external dependencies, covering the 90% of Markdown that appears in real-world documents. Fenced code blocks are extracted and escaped before any other processing, so code that looks like Markdown syntax is never accidentally interpreted as formatting. Inline code is similarly protected before HTML escaping. The remaining text is HTML-escaped before bold, italic, and link patterns are applied, which prevents cross-site scripting when pasting Markdown from untrusted sources into the editor.

One important caveat: this tool renders output using innerHTML. If your Markdown source contains raw HTML from other users, sanitize the output with a dedicated sanitizer such as DOMPurify before displaying it to a wider audience. For documents you author yourself, this is not a concern.

The live preview updates as you type with a 120 ms debounce so the parser does not run on every keystroke. The word and character count in the toolbar gives a quick measure of document length. The rendered HTML is a compact fragment, not pretty-printed, which is correct for embedding in a CMS or email — paste it as-is.

All functionality works offline after the initial page load because there are no external scripts or API calls beyond the AdSense tag. You can bookmark this page and use it without an internet connection, making it useful for writing in text editors, airplane mode, or environments with restricted outbound access.