Markdown editor

A toolbar, a live preview, and five ready-made templates. Everything renders in this page — there is no fetch, no upload, and your draft is kept only in this browser's local storage.

Markdown
Preview
0 words · 0 characters · 0 headings

Your draft is kept only in this browser's local storage — it is not sent anywhere, and clearing it or your site data removes it for good.

Raw HTML in the source is not rendered. Anything that looks like an HTML tag is shown as plain text rather than executed, so Markdown pasted from somewhere you do not fully trust cannot run anything on this page.

About this tool

Type in the left pane and the right pane renders it as you go. The toolbar wraps a selection — or inserts placeholder text if nothing is selected — and headings, quotes and list markers apply to whichever lines the cursor or selection touches. Pressing Enter inside a list continues it; pressing Enter on an empty list item ends it; Tab indents a list item one level while the cursor is on one.

Five templates are built in — README, changelog, bug report, meeting notes and pull request description — plus five smaller snippets that insert at the cursor rather than replacing the draft.

How it works

The renderer is hand-written — headings, bold, italic, strikethrough, inline and fenced code, blockquotes (including nested ones), ordered, unordered and task lists with nesting, GitHub-style pipe tables with column alignment, links, images and horizontal rules. It is a practical subset rather than a full CommonMark implementation, and it deliberately does not pass through raw HTML — anything that looks like a tag is escaped and shown as text. That keeps the same promise as every other tool here: nothing you paste can execute.

The draft is written to localStorage on every change and read back when the page loads, so a refresh or an accidental tab close does not lose it. Nothing about that touches a network — it never leaves this browser.

Common questions

Is my Markdown uploaded anywhere?

No. It is rendered in your browser and the only place it is stored is your own browser's local storage. This page makes no network requests after it loads.

Does it support GitHub-flavoured tables and task lists?

Yes — pipe tables with left, right or centre alignment from the delimiter row, and - [ ] / - [x] task list items with a disabled checkbox in the preview.

Can I save my own templates?

Not yet. The five above are fixed. Copy the Markdown out, keep your own version somewhere, and paste it back in when you need it.

Why doesn't a pasted <div> or embed show up?

By design. Raw HTML in the source is escaped rather than rendered, so nothing pasted here — including from a document you don't fully trust — can run on the page.

Will my draft survive a refresh?

Yes, until you press Clear or clear your browser's site data for pantechnicon.dev. It is not backed up anywhere else, so copy it out if it matters.

When the preview doesn't look right

A table shows as a plain paragraph

The header row needs a delimiter row directly under it with the same number of columns, made of dashes — | --- | --- |. Without that second row it is not recognised as a table at all.

A table's columns don't line up with the header

Each data row is matched to the header by position, not by width — extra or missing cells shift everything after them. Count the pipes rather than trusting how it looks in the source.

A nested list doesn't nest

Indent a sub-item by at least as many spaces as the parent marker plus one — two spaces is safe for a single level, four for two levels. A single space is not enough and the item stays at the same level.

**bold** or *italic* doesn't apply

There cannot be a space immediately inside the markers — ** bold ** is read literally rather than as emphasis. Move the marker to sit directly against the first and last letter.

A code block loses its fence

A fenced block needs a blank line before the opening ``` and after the closing one, or the fence can merge into the paragraph above or below it.

Something pasted from elsewhere shows as literal tags

That is the raw-HTML rule above working as intended, not a bug — see "Why doesn't a pasted <div>… show up?" in the questions above.

The same job at the command line

This page is for a quick look and a quick edit. For a build pipeline or a full CommonMark implementation, these are the right tools.

More tools

See the whole toolbox — twenty-six free tools planned, all running in your browser.