Markdown Preview & Editor

Live markdown editor with instant preview. Supports GitHub Flavored Markdown, tables, code blocks, and task lists. Export to HTML. Free, no signup.

Advertisement

Markdown preview: paste your markdown and see exactly how it renders

You have a README, a changelog, a pull request description or a documentation page written in markdown, and you want to see the rendered result before you commit it. This is a split-pane editor: raw markdown on the left, live rendered output on the right, updating as you type. No account, no upload, no round trip — the parser runs in your browser and your text stays in the tab.

Paste into the left pane, or use the Upload button to load a local .md or .markdown file. The upload is read with the browser’s own file reader and never leaves your machine; that is the honest answer to the usual first question. Your content is auto-saved to the browser’s local storage two seconds after you stop typing, so a reload does not lose your work — and equally, it means the text persists on that device until you clear it, which is worth knowing on a shared machine. The Clear button removes both the editor content and the saved copy.

Which flavour of markdown this renders

This matters more than people expect, because “markdown” is not one language. The preview parses CommonMark plus GitHub Flavored Markdown, using the same parser family that renders markdown across a great deal of the JavaScript ecosystem. Concretely, that means the GFM extensions on top of CommonMark are all live:

FeatureSyntaxSupported
Tables| a | b | with a |---|---| dividerYes, including :--- / :---: / ---: alignment
Task lists- [ ] todo and - [x] doneYes — rendered as real checkboxes, deliberately read-only
Strikethrough~~text~~Yes
AutolinksA bare URL with no angle brackets or link syntaxYes — linkified automatically
Footnotestext[^1] with a [^1]: note definitionYes — part of the same GFM extension set
Fenced code blocksTriple backticks, optionally with a languageYes, with syntax highlighting
Inline HTML<div>, <kbd>, <details> and so onYes — raw HTML is passed through and rendered

What is not here, stated plainly so you do not chase a bug that is really a missing extension: there is no LaTeX or KaTeX math rendering, so $x^2$ stays literal text. There is no emoji shortcode expansion, so :smile: renders as those exact characters — but pasted Unicode emoji work fine, because they are just characters. There is no diagram rendering, so a ```mermaid block is treated as a code block and highlighted rather than drawn. And YAML front matter is not stripped: a --- fence at the top of the file is read as ordinary markdown, which typically renders as a horizontal rule followed by a heading rather than disappearing the way a static site generator would hide it. Delete the front matter before pasting if it gets in the way.

Where markdown flavours genuinely differ

Most “it looked different on GitHub” reports come down to three specific behaviours.

Line breaks. This is the big one. In CommonMark and in GFM as specified, a single newline inside a paragraph is not a line break — consecutive lines are joined into one flowing paragraph. To force a break you end the line with two trailing spaces, or use a <br> tag. GitHub’s comment boxes, issues and pull request descriptions turn on a non-standard “hard break” mode where every newline becomes a break, and so do Slack-adjacent editors and many note apps. This preview follows the specification, not the comment-box convention. So if your text renders as one long paragraph here but as separate lines in a GitHub issue, neither is broken — you are comparing a spec-compliant renderer against a hard-break one. README files on GitHub are rendered without hard breaks, which is why this preview matches a README more closely than it matches a comment.

Nested lists. Indentation rules are the second most common surprise. CommonMark ties a nested item’s indentation to the width of its parent’s marker, so a child under - item needs two spaces while a child under 1. item needs three. Editors that insert a hard tab, or four spaces regardless, can push a list item far enough that it becomes an indented code block instead of a sub-item. If a nested bullet renders in a grey monospace box, that is what happened: reduce the indentation. Similarly, a blank line between list items switches the list from “tight” to “loose”, which wraps every item in a paragraph and visibly increases the spacing — correct behaviour, not a styling bug.

HTML passthrough. Raw HTML is rendered here rather than escaped, which is what GitHub does for a controlled subset. That makes <details><summary> collapsibles, <kbd> keys and inline <img> tags work as written. Two things follow from it. First, markdown syntax inside an HTML block is generally not reprocessed, so **bold** on the line directly after an opening <div> may come out literal — leave a blank line to get markdown parsing back. Second, this preview does not run raw HTML through a sanitiser, so it will render whatever markup you give it. For your own drafts that is exactly what you want; do not use it as a safety check on markdown from an untrusted source, and be aware that GitHub and most content platforms strip far more than this does, so “it worked in the preview” is not a guarantee it survives publishing.

Working in the editor

The formatting toolbar inserts syntax around your selection or at the cursor: bold, italic, heading, link, image, fenced code block, inline code, unordered list, ordered list, task list, blockquote, horizontal rule and a table skeleton. Four keyboard shortcuts cover the ones you reach for constantly:

ShortcutActionInserts
Ctrl/Cmd + BBold**selection**
Ctrl/Cmd + IItalic*selection*
Ctrl/Cmd + KLink[selection](url), or [link text](url) with nothing selected
Ctrl/Cmd + HHeading## at the start of the current line

A view toggle switches between split, editor-only and preview-only. Split is the default on a desktop-width screen; on a narrow screen the two panes become tabs, because a split pane at phone width is unusable. A cheat sheet button (shown on wider screens) lists the syntax for headings, emphasis, strikethrough, inline code, both list types, task lists, links, fenced code blocks, blockquotes, rules and tables, so you do not have to leave the page to look up a table divider.

Code blocks are syntax-highlighted with a dark theme. Tag the fence with a language — ```javascript, ```python, ```bash — and the keywords colour correctly; leave it untagged and you get a plain monospace block, which is often the right choice for log output or plain text. Tables render inside their own horizontally scrolling container, so a wide table scrolls rather than breaking the page layout. Task list checkboxes are rendered as genuine, disabled checkboxes: they show state accurately and cannot be clicked, since the markdown source is the record and toggling a box in the preview would put the two out of sync.

The status bar

Along the bottom you get a live count of words, characters, characters excluding whitespace, and lines, plus an estimated reading time. The reading-time figure divides the word count by 200 words per minute and rounds up, with a floor of one minute — a conventional assumption, not a measurement of you. The counts are taken from the markdown source, so syntax characters such as ** and # are included in the character total; expect the number to run slightly above what the rendered prose would count.

Getting your work back out

  • Copy puts the raw markdown source on your clipboard.
  • Download saves it as document.md.
  • To keep the rendered output, select inside the preview pane and copy — pasting into a rich-text editor generally preserves the formatting, since you are copying real rendered HTML.
  • To print or make a PDF, switch to preview-only first so you export the rendered document rather than a half-page of source.

Things that commonly go wrong

  • Everything after a certain point is bold or italic. An unclosed ** or *. The live preview makes this obvious the moment it happens, which is most of the reason to preview at all.
  • A code fence swallowed the rest of the document. An opening ``` with no closing fence. Count your fences — they must pair.
  • A table renders as plain text. The divider row is missing or malformed. Every table needs a second row of dashes with a cell for each column, and the pipe count must match the header. If you are building a table from scratch rather than fixing one, the site’s markdown-table-generator produces the aligned source for you.
  • Underscores inside a filename or variable turned into italics. Wrap identifiers in backticks, or escape the underscore as \_.
  • A heading did not render. A # needs a space after it, and the line must start at the left margin — leading spaces can turn it into something else entirely.
  • A numbered list restarted or renumbered itself. Markdown takes the first number as the start and renumbers the rest sequentially; writing 1. on every line is legal and produces 1, 2, 3.

Because the preview and the platform you publish to may not run identical renderers, treat this as an accurate check of your markdown — is the syntax well-formed, do the tables and lists and fences parse the way you intended — rather than a pixel-exact simulation of any one destination. For structural correctness, which is what actually breaks, it is exactly the right check.

What Is Markdown Preview

A Markdown preview tool renders Markdown syntax into formatted HTML in real time, allowing writers to see how their content will appear when published. Markdown—created by John Gruber in 2004—is a lightweight markup language used across GitHub, technical documentation, blogging platforms, note-taking apps, and content management systems. Its plain-text syntax is designed to be readable in raw form and convertible to HTML for web display.

Markdown has become the standard for developer documentation, README files, pull request descriptions, and technical blogging. The ability to preview rendered output while writing eliminates the guess-and-check cycle of writing raw Markdown, committing, and refreshing to see the result. Real-time preview is especially valuable for complex content with tables, code blocks, nested lists, and embedded images.

How Markdown Rendering Works

A Markdown renderer parses plain text according to the Markdown specification and converts it to HTML:

Markdown SyntaxHTML OutputPurpose
# Heading<h1>Heading</h1>Section headings (# through ######)
**bold**<strong>bold</strong>Bold emphasis
*italic*<em>italic</em>Italic emphasis
[text](url)<a href="url">text</a>Hyperlinks
![alt](url)<img src="url" alt="alt">Images
`code`<code>code</code>Inline code
```lang<pre><code>...</code></pre>Code blocks with syntax highlighting
- item<ul><li>item</li></ul>Unordered lists
> quote<blockquote>quote</blockquote>Block quotes

Markdown flavors: Different platforms extend standard Markdown with additional features:

  • CommonMark: Standardized specification for consistent rendering
  • GitHub Flavored Markdown (GFM): Adds tables, task lists, strikethrough, and autolinks
  • MDX: Allows JSX components inside Markdown for interactive documentation

Common Use Cases

  • Documentation writing: Preview README files, API docs, and technical guides before publishing
  • Blog post authoring: Write and preview blog content in Markdown-native CMS platforms
  • GitHub collaboration: Preview issue descriptions, PR bodies, and wiki pages before submitting
  • Note taking: Use Markdown in personal knowledge bases (Obsidian, Notion, Bear)
  • Presentation creation: Preview Markdown-based slide decks (Marp, Slidev, reveal.js)

Best Practices

  1. Use CommonMark or GFM for compatibility — These are the most widely supported specifications across platforms
  2. Preview before publishing — Tables, nested lists, and code blocks are common sources of rendering issues
  3. Use reference-style links for readability[text][id] with definitions at the bottom keeps paragraphs clean
  4. Add alt text to all images![descriptive alt text](url) improves accessibility and serves as fallback when images fail to load
  5. Use heading hierarchy correctly — Start with # (h1) and nest incrementally; don't skip heading levels (h1 → h3)

Frequently Asked Questions

What is Markdown and why is it used for documentation?+

Markdown is a lightweight markup language using plain text formatting syntax that converts to HTML. Created by John Gruber in 2004, it uses simple symbols like # for headings, ** for bold, * for lists. Popular because: readable in plain text, easy to learn (5 minutes basics), widely supported (GitHub, Reddit, Stack Overflow, documentation platforms), separates content from formatting, version control friendly (git diff works well). Used for README files, documentation, blog posts, comments, notes. This tool provides live preview with GitHub Flavored Markdown support, showing exactly how your markdown will render.

What is GitHub Flavored Markdown (GFM) and how does it differ from standard Markdown?+

GitHub Flavored Markdown (GFM) extends standard Markdown with additional features used on GitHub. Additions include: tables (| Syntax | Description |), task lists (- [ ] Todo item), strikethrough (text), auto-linking URLs without brackets, syntax highlighting in code blocks (```javascript), username mentions (@user), issue references (#123). GFM also has different line break handling - single line breaks create
tags. Standard Markdown requires two spaces or double line break. This tool supports full GFM syntax including tables, task lists, and fenced code blocks with syntax highlighting.

How do I create tables in Markdown?+

Tables use pipes | and hyphens - to separate columns and create headers. Basic syntax: | Header 1 | Header 2 | then | --------- | --------- | for separator, then data rows | Cell 1 | Cell 2 |. Alignment: left (default), center (:---:), right (---:). Cells can contain inline formatting like bold, italic, code. Tables must have header row and separator. Minimum 3 hyphens per column. This tool renders tables with proper HTML formatting. Note: tables are GFM extension, not in original Markdown.

What are the best practices for writing technical documentation in Markdown?+

Use clear heading hierarchy (# for title, ## for sections, ### for subsections). Start with brief overview and table of contents. Use code blocks with language specification (```python) for syntax highlighting. Include examples for each concept. Use lists (- or 1.) for steps and bullet points. Add links to related documentation. Use tables for comparing options or specifications. Include badges for build status, version, license. Keep paragraphs short (3-4 sentences). Use bold for important terms first use, inline code for commands/variables. Test all code examples before publishing. This tool helps preview documentation exactly as it will appear.

How do I add code blocks and syntax highlighting in Markdown?+

Use triple backticks with language name for fenced code blocks. Example:javascript for JavaScript, python for Python, bash for shell commands. Alternatively, indent 4 spaces for code block without syntax highlighting. Inline code uses single backticks: variable or function(). Common languages: javascript, python, java, go, rust, sql, html, css, json, yaml, bash, typescript. GFM supports 100+ languages. Syntax highlighting makes code more readable and helps identify errors. This tool provides real-time syntax highlighting preview for all major programming languages.

How do I create links and images in Markdown?+

Links: [link text](https://url.com) or [link text](https://url.com "Title"). Reference-style: [link text][ref] then [ref]: url at bottom. Images: ![alt text](https://example.com/image.png) - same as link but with ! prefix. Image with link: [![alt](https://example.com/img.png)](https://example.com). Relative paths work: [docs](./docs/file.md) or ![logo](./images/logo.png). Auto-linking (GFM): bare URLs become clickable automatically. Best practices: always include alt text for accessibility, use descriptive link text (not "click here"), use HTTPS for external links. This tool renders all link and image types with proper HTML output.

What are task lists and how do I use them in Markdown?+

Task lists (GFM feature) create interactive checkboxes using - [ ] for unchecked, - [x] for checked. Example: - [ ] Write documentation, - [x] Review code, - [ ] Deploy to production. Tasks must start with hyphen and space, then brackets, then space, then text. Nesting works with indentation. On GitHub, clicking checkboxes updates the markdown source. Useful for: project TODOs, issue tracking, meeting notes, feature checklists. This tool renders task lists with proper checkbox styling. Note: checkboxes display-only in preview, editing requires changing [ ] to [x] in markdown source.

How do I export Markdown to HTML or PDF?+

Most markdown tools export to HTML - click "Export" or "Download HTML". Markdown converts to semantic HTML5 (# becomes

, ** becomes , etc.). For PDF: export HTML first, then print to PDF (Ctrl/Cmd+P, save as PDF). Alternative: use Pandoc command-line tool (pandoc input.md -o output.pdf) with LaTeX. For styled PDFs, add CSS to HTML then convert. GitHub renders markdown as HTML automatically. Static site generators (Jekyll, Hugo) convert markdown to HTML websites. This tool allows HTML export with included CSS styling. Raw markdown also works for version control and plain text editors.

This tool is provided for informational and educational purposes only. All processing happens in your browser — no data is sent to or stored on our servers. While we strive for accuracy, we make no warranties about the completeness or reliability of results.