Pre-launch version

Format Markdown

Paste Markdown or drop a .md file and get it back tidied — consistent headings, list markers, spacing, and aligned tables.
Your file never leaves your device.

How do you want to add your Markdown?

0 / 2,000,000 characters

About Format Markdown

What it normalizes

Line endings become LF. Tabs in indentation become spaces. Trailing whitespace is stripped — except a deliberate two-space line break, which is kept. Underlined (setext) headings become # headings, closing hashes are dropped, and every heading gets exactly one blank line above and below. Bullets all become -; ordered lists are renumbered in sequence. Thematic breaks become ---. Runs of blank lines collapse to one. Table pipes are padded so the columns line up, keeping any alignment colons. The file ends with exactly one newline.

What it deliberately leaves alone

Code blocks — fenced and indented — are copied through byte for byte, so a bullet or heading inside an example is never rewritten. YAML front matter is preserved exactly, since it is YAML rather than Markdown. Emphasis markers are not touched: swapping _italic_ for *italic* would corrupt snake_case names and URLs. Lines are never re-wrapped, because reflowing text makes every later diff unreadable. And a table containing a row with more cells than its header is left untouched rather than truncated — nothing is ever dropped.

How it works

Formatting runs as a documented pass over your document's lines rather than a parse-and-reprint round trip, because reprinting loses front matter, footnotes, and reference-style links. Everything happens locally in your browser: the file is read on your own device and the tidied Markdown is offered for download. Nothing is uploaded, stored, or sent to a server.

Format without uploading — your file never leaves your device

This tool runs entirely in your browser using JavaScript. Your Markdown is never uploaded to a server, never stored, and never leaves your device — so drafts, notes, and documents stay private.

Frequently asked questions

Does this change my content?
No — only formatting. Words, links, code, and structure stay exactly as you wrote them; what changes is whitespace, heading and bullet syntax, list numbering, and table padding. Running it twice gives the same result as running it once.
Will it touch my code blocks?
No. Fenced blocks (``` and ~~~) and indented code blocks are copied through unchanged, including their tabs and bullets. A `* item` line inside an example stays a `* item`.
Is my YAML front matter safe?
Yes. A leading --- block is preserved exactly as written. It is YAML, not Markdown, so reformatting it could change its meaning.
Why doesn't it normalize _italic_ to *italic*?
Because underscores are load-bearing elsewhere — inside snake_case identifiers and in URLs. A blanket swap corrupts prose about code, so emphasis markers are left as you wrote them.
Why doesn't it re-wrap long lines?
Line wrapping is a personal choice, and reflowing paragraphs makes every subsequent git diff unreadable. The tool preserves your line structure.
What's the difference between this and Lint Markdown?
Format Markdown fixes style automatically and hands you the cleaned file. Lint Markdown reports problems by line number — including ones no tool can safely fix, like a broken link with no URL. Lint to understand, format to apply.
Does this upload my file?
No. Formatting runs entirely in your browser with JavaScript — your Markdown is never sent to a server and never leaves your device. You can verify it: open your browser's Network tab and format a file — you'll see no upload request.

More Markdown tools, coming soon

Markdown to PDF, table of contents, front matter editing, and more — all free and all in your browser.

Back to all tools →