Markdown Preview

Type markdown on the left, read it on the right, and take the HTML away.

Runs entirely in your browser

Loading the tool…

Paste or write markdown on the left and it appears rendered on the right as you type. The HTML it produces is underneath, ready to copy into whatever needed it. Nothing is uploaded: the parsing happens in this page, so a README you have not published yet stays where it is.

CommonMark, plus the GitHub extensions people actually write: tables, task lists, strikethrough and footnotes. Fenced code keeps its language label, so ```rust comes out as a block a syntax highlighter will recognise later.

Raw HTML in your markdown is shown as text rather than rendered, and a link pointing at a script instead of a page is defused before it reaches the preview. That is a deliberate limit: a preview that runs what it is given runs whatever is in somebody else's README, and being able to write an inline <kbd> is not worth that.

The counts across the top are the ones worth knowing before you publish: words and reading time, how many headings, links, images and tables, and how many of your task list boxes are ticked. Code blocks are left out of the word count, because nobody means "and the contents of that YAML" when they ask how long a document is.

How to use it

  1. Write or paste markdown in the left pane.
  2. Read the rendered version on the right as you type.
  3. Copy the HTML from underneath if you need it.

Questions

Which flavour of markdown is this?

CommonMark with four GitHub extensions turned on: tables, task lists, strikethrough and footnotes. That covers what a README, an issue or a documentation page usually contains. Things specific to one site, such as GitHub's callout blocks or mentions, are not part of markdown and are left as written.

Why is my HTML shown as text instead of rendered?

On purpose. Markdown allows raw HTML, and a preview that runs it would run whatever is in a document you were handed, in this page. Everything from a script tag down to an image with an onerror attribute is shown as the text it was written as, so you can see it is there without it doing anything.

Is my document uploaded?

No. The parsing runs as WebAssembly compiled from Rust, in this tab, on your own machine. Nothing in the page sends what you write anywhere, so it works with the connection off, which is the easiest way to be sure.

Can I use it for a README before publishing?

That is the main use. What you see is what a CommonMark renderer will produce, so tables that do not line up and lists that did not nest will show themselves here rather than on a public repository page.

Does it support Mermaid diagrams?

Not yet. A ```mermaid block is shown as a code block, with its contents intact. Rendering the diagrams means shipping a drawing library several megabytes in size, which would make this page slow for everyone who only wanted to check a table, so it belongs in a tool of its own.

What does the reading time mean?

Words divided by 200, which is the usual figure for reading on a screen, rounded up. Code blocks are excluded from the count. It is a rough guide for a blog post, not a measurement.

Why did a link stop working?

Because it pointed at a script rather than a page. A markdown link may contain any URL, including javascript:, and following one runs code. Those are turned into dead anchors and the page says how many it found; ordinary links, relative paths and anchors are untouched.

Your data stays on your device

Everything above runs inside your browser as WebAssembly compiled from Rust. Nothing you type is uploaded, logged or stored on a server. You can load this page once, go offline, and it still works.

The page does load ads, which is how it is paid for, and that script is the only thing here that fetches anything. It sees that the page was opened. It does not see what you type or the file you chose, because neither ever leaves this tab.