Free online Markdown editor
Markdown editor that keeps your draft
This Markdown editor is free and needs no account: write in the left pane with a toolbar and ⌘B/⌘I/⌘K shortcuts, and watch the README take shape on the right as you type. It carries list markers down when you press Enter, counts words with the code fences left out, and hands you the result as a .md file or one self-contained .html page. Drafts up to 1 MB are picked up again the next time you open the page.
- 100% free
- No signup
- Drafts up to 1 MB
- Toolbar and shortcuts
- Exports .md and .html
Whatever you type on the left appears here, re-rendered on every keystroke.
How to write a README in this editor
Three steps from an empty pane to a file on your disk.
Start from a skeleton or open your file
Press “README skeleton” for a starting document with badges, an install block, an options table and a roadmap already in place, or open an existing .md from your disk — the Open button, a drag onto the writing pane, or Ctrl+V (⌘V) anywhere outside the box all load one.
Write with the toolbar and the shortcuts
Select a phrase and press ⌘B, ⌘I, ⌘E or ⌘K (Ctrl on Windows and Linux) for bold, italic, inline code and a link. H steps a line down through heading levels, the list buttons convert every selected line at once, and Enter inside a list carries the marker to the next line — on an empty item it removes the marker instead so the list ends.
Take the file with you
Copy Markdown puts the source on the clipboard, .md saves it under a filename taken from your first heading, and .html writes a single self-contained page with the stylesheet inlined, which opens correctly with no network. Your work is also written to this browser after every pause in typing, so a reload does not lose it.
Technical specifications
| Markdown supported | CommonMark plus the GitHub set: tables with per-column alignment, task list checkboxes, strikethrough, footnotes, autolinked bare URLs, reference links and setext headings |
|---|---|
| Toolbar actions | 12 — bold, italic, strikethrough, inline code, link, heading cycle, bulleted list, numbered list, task item, blockquote, fenced code block, table skeleton |
| Keyboard shortcuts | ⌘/Ctrl + B, I, E, K, S; Tab and Shift+Tab indent by two spaces; Enter continues a list; Esc releases the box |
| Draft storage | localStorage key formatkit.markdown-editor.draft, written 0.8 s after the last keystroke, removed by Clear or by unticking the option |
| Maximum draft size | 1 MB — about 160,000 words; the preview redraws in about 90 ms at that size |
| Counters | Words, characters, lines, headings, ticked tasks and reading time at 225 words per minute — code fences are excluded from the word count |
| Exports | .md with the filename taken from the first heading, and .html as one self-contained file with the stylesheet inlined |
| Cost and processing | Free, no signup and no cap on how many documents you write; the editor runs in your browser, so nothing you type is uploaded |
Frequently asked questions
Where is my draft kept, and does it survive a refresh?
It survives: 0.8 seconds after you stop typing the draft is written to this browser's local storage under one key, formatkit.markdown-editor.draft, and it is read back when you return to the page. It stays on this device and in this browser profile — a different browser, a private window or another machine will not see it. Untick “Keep a draft in this browser” to switch that off and delete the stored copy, or press Clear to wipe both the editor and the key.
Which keyboard shortcuts does the editor understand?
Nine: ⌘B bold, ⌘I italic, ⌘E inline code, ⌘K link, ⌘S download as .md, Tab and Shift+Tab to indent or outdent the selected lines by two spaces, Enter to continue a list, and Esc to leave the writing box. Ctrl replaces ⌘ outside macOS. Esc matters more than it looks: it is how you get Tab back for moving between controls, since inside the box Tab types indentation.
Do nested lists need four spaces?
No — two spaces are enough under a hyphen bullet, and three under a “1. ” marker. The rule is that a child marker must start at or past the column where the parent's text starts, so “- ” claims two columns and “1. ” claims three. Four spaces is the old Markdown.pl rule that GitHub also enforced until it moved onto CommonMark, which is why so much advice still says four. One place four spaces still bites: at the start of a fresh block, four leading spaces mean an indented code block, not a list.
Why did pressing Enter add a bullet I did not ask for?
Because the caret was on a list line, and the editor carries the marker down for you — the same behaviour as the GitHub comment box. Press Enter a second time on the now-empty item and the marker is removed, which is how you end a list. Shift+Enter inserts a plain newline without any marker if you want one mid-item.
Can I put raw HTML inside my Markdown?
You can type it, but this editor prints it as text instead of executing it, so a details/summary pair shows as the characters you wrote rather than a folding section. That is a deliberate limit on a tool that renders whatever lands on the clipboard. GitHub does allow a filtered subset of HTML in a README, so if your document depends on it, write the tags anyway — the file is yours, and only this preview pane declines to run them.
Do the pipes in a table need to line up?
No. Column padding is cosmetic and the parser ignores it, so “|a|b|” and a neatly aligned block produce identical output. The only row with rules is the delimiter row under the header: it needs one cell per header cell, with a colon marking alignment. If you want the source padded anyway — it does read better in a diff — the Table button drops in a skeleton, and the markdown table generator pads a finished table for you.
How large a document can I write here?
One megabyte, which is roughly 160,000 words or a 20,000-line changelog. Re-rendering runs on every keystroke and costs about 1 ms for a 6 KB README and about 90 ms at the full 1 MB, so typing stays smooth well past the size of anything a repository normally holds. Above 1 MB the preview pauses and the editor keeps working, because a browser's local-storage quota is around 5 MB per site and a draft that size would fill it.
About writing Markdown
A Markdown editor has one job that a rich-text editor does not: the file, not the rendered view, is the artefact. Everything you write here stays plain text in the left pane, and the right pane is a read-out of it — never a second copy you could edit into disagreement with the source. WYSIWYG Markdown tools blur that line and the cost shows up on commit, when the tool rewrites untouched paragraphs, converts your * bullets to -, re-wraps lines and turns a two-line diff into a forty-line one. Plain text also means the shortcuts can be honest: ⌘B inserts two asterisks, and you can see it happen.
The other thing worth knowing while writing is that your reader may not be GitHub. npmjs.com, Docusaurus, MkDocs, Bitbucket and a static-site generator all run different parsers, and the divergences cluster in a few places: tables and task lists exist only where the GitHub extensions do, a single newline becomes a line break in a GitHub comment box but not in a README file, footnotes are a GitHub feature from 2021 rather than part of the published spec, and raw HTML is filtered differently everywhere. If a document has to survive more than one renderer, keep to headings, lists, links, emphasis and fenced code — and check the risky parts by pasting them into the Markdown preview, where you can switch between GitHub flavour and strict CommonMark and watch what disappears.
Two habits make a README easier to maintain. Use reference links — [docs][1] with the destinations collected at the bottom — so a wall of badge URLs stops interrupting the prose; this editor resolves them in the preview exactly as a repository host would. And do not hand-align table pipes while you are still adding columns: get the content right first, then pad the finished thing with the Markdown table generator. Headings get GitHub-compatible anchors as you type, so ## Getting started can be linked as #getting-started, with a numeric suffix added when the same title appears twice.
Where your draft lives
The editor is JavaScript running in this tab, so the text you type is never uploaded and no server sees your unreleased README. The one copy that outlives the page sits in this browser’s own local storage on your machine; Clear removes it, and so does unticking the draft option. Nothing is written anywhere else.