Skip to main content

Markdown Editor, Viewer and Converter

Write and preview GitHub Flavored Markdown side by side, with a formatting toolbar, keyboard shortcuts, an automatic table of contents, and frontmatter detection. Convert in both directions: Markdown to HTML or plain text, and pasted HTML back to clean Markdown. Print or save as PDF straight from the preview.

Runs 100% in your browser

Shortcuts
Copy the output
Alt + Shift + C

Your input is saved in this browser only. Reset clears it.

111 words869 characters34 lines1 min read

Frontmatter

title
Release notes
date
2026-09-16
tags
changelog, release

Rendering preview…

How to use the Markdown Editor

  1. Type or paste Markdown on the left and watch the preview update as you write.

  2. Use the toolbar or the keyboard shortcuts for headings, bold, links, lists, tables, and code.

  3. Switch the output tab to HTML, plain text, or Print, then copy, download, or save as PDF.

Example: A README section, rendered to HTML

Markdown
## Install

Run the commands below, then open <http://localhost:4321>.

| Step | Command       |
| ---- | ------------- |
| 1    | `npm install` |
| 2    | `npm run dev` |

- [x] Clone the repository
- [ ] Start the dev server
HTML
<h2 id="install">Install</h2>
<p>Run the commands below, then open <a href="http://localhost:4321" target="_blank" rel="noopener noreferrer nofollow">http://localhost:4321</a>.</p>
<table>
<thead>
<tr>
<th>Step</th>
<th>Command</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td><code>npm install</code></td>
</tr>
<tr>
<td>2</td>
<td><code>npm run dev</code></td>
</tr>
</tbody></table>
<ul>
<li><input type="checkbox" disabled checked aria-label="Completed"> Clone the repository</li>
<li><input type="checkbox" disabled aria-label="Not completed"> Start the dev server</li>
</ul>

Headings get anchor ids so the generated table of contents links actually resolve, the bare URL is autolinked, and task-list checkboxes are labelled for screen readers. Switch the tab to plain text or Print to export the same document another way.

Frequently Asked Questions

Is my document uploaded anywhere?

No. The Markdown is parsed, sanitized, and rendered by JavaScript running in your browser, and nothing is sent to a server. That matters for drafts, internal documentation, and anything under NDA, because most online Markdown previewers post your text to a backend to render it.

Which Markdown flavor does this support?

GitHub Flavored Markdown: tables, task lists, strikethrough, autolinks, and fenced code blocks, on top of standard CommonMark. YAML frontmatter at the top of the document is detected and shown as a metadata panel instead of being rendered as body text.

Can I convert HTML back to Markdown?

Yes. Switch the input to HTML and paste a fragment or a whole page, and it is converted to clean Markdown, including tables, strikethrough, and task lists. It is the fastest way to turn content pasted out of a CMS, a Google Doc, or a web page into something you can commit to a repository.

How do I export a Markdown file to PDF?

Open the Print view and use your browser's print dialog, then choose Save as PDF. The print stylesheet drops the editor chrome and prints the rendered document on its own, with readable margins and page breaks, so no extra software or upload is needed.

About Markdown

Markdown is plain text with a few punctuation conventions that stand in for formatting. Because the source stays readable, a Markdown file diffs cleanly in version control, survives being pasted into a chat window, and outlives the editor that produced it. That is why it ended up as the default for README files, documentation sites, static-site content, changelogs, and issue trackers.

The syntax worth memorising

You write You get Notes
# Title Heading level 1 One # per level, up to six. Leave a space after the hash.
**bold** _italic_ Emphasis Underscores and asterisks both work; asterisks are safer inside words.
[text](url) Link Wrap the URL in angle brackets if it contains spaces or parentheses.
```js Fenced code block The word after the fence is the language, used for syntax highlighting.
- [ ] task Task list item A GitHub extension, not part of the original Markdown.

Why two documents can render differently

There is no single Markdown. The 2004 original left enough undefined that every implementation filled the gaps differently, which is why the same file can look one way on GitHub and another in a static-site build. CommonMark is the strict specification that settled the ambiguities, and GitHub Flavored Markdown is CommonMark plus the extensions most people now assume are standard: tables, task lists, strikethrough, and automatic linking of bare URLs. This editor renders GitHub Flavored Markdown, so what you see here matches what a repository README will show.

Frontmatter

Static site generators put a block of YAML at the top of a Markdown file, fenced by three hyphens, to carry the title, date, tags and anything else the template needs. It is metadata, not content, so it should never appear in the rendered output:

---

title: "Release notes"

date: 2026-09-16

tags: [changelog, release]

---

# Release notes  # the document starts here

This tool detects that block, lists the keys in a metadata panel, and renders only the body below it. Paste a post from a blog repository and the preview shows the article rather than a stray paragraph of YAML.

Going the other way: HTML to Markdown

Converting HTML back to Markdown is the job nobody plans for and everybody eventually needs: migrating a CMS, pulling a page into a documentation repository, or turning something drafted in a word processor into a file you can commit. Switch the input to HTML and the conversion handles headings, lists, links, tables, strikethrough, and task lists, discarding the wrapper markup that carries no meaning. If what you have is messy exported HTML rather than clean markup, run it through the Markup Cleaner first.

Rendering untrusted Markdown safely

Markdown allows raw HTML, which means a Markdown document can carry a script tag, an inline event handler, or a javascript: URL. Any application that renders Markdown written by someone else has to sanitize the generated HTML before putting it in the page, or it has handed that author script execution. This preview sanitizes every render for exactly that reason, and it is worth copying the habit in your own projects: parse the Markdown, sanitize the HTML, then insert it.

Everything stays on your machine

Parsing, sanitizing, preview, conversion and export all run in your browser. Nothing is uploaded, which is the difference that matters when the document is an unreleased changelog, internal documentation, or a draft under NDA. Your work is also kept in this browser's local storage, so a reload picks up where you left off.