Markdown to Plain Text

Paste a model's answer into Slack, an email, or an issue description and the asterisks and backticks come along with it. This removes the formatting marks and nothing else. Tables are split on tabs so they drop straight into a spreadsheet.

BulletsLinks

What you enter never leaves your device. Everything runs in your browser; nothing is sent or stored anywhere.

What gets stripped

The # of headings, the > of quotes, the asterisks, underscores and tildes of bold, italic and strikethrough, the backticks of inline code, and horizontal rules are removed. Images keep only their alt text; links keep the text alone or are expanded to text with the URL in brackets. List markers are unified to a single - or removed along with numbering. Tables lose their separator row and cells are joined with tabs. Three or more blank lines in a row are reduced to two.

Code blocks are set aside first

Blocks fenced with three backticks are lifted out before anything else is stripped, then put back in place. That is why a * or # inside code is untouched. The first line carrying the language name is dropped. Old-style blocks indented by four spaces and ~~~ fences are not recognised, so symbols inside them get stripped along with the rest.

Where regular expressions get it wrong

Without a parser, everything is matched by shape: 2*3*4 in a multiplication can be read as italics, and a name wrapped in double underscores like __init__ loses its underscores. HTML tags and [ ] task markers are left alone. If you are pasting into Slack, it has its own single-asterisk syntax, so ** shows up as literal characters — which is exactly why you strip first and paste after.

Lists are handled two ways

With markers kept, * and + are unified to - and the numbers of ordered lists are left as they are — a mix of markers looks ragged wherever it is pasted. With markers dropped, both - and the numbers are removed and only the sentences remain. Either way the leading indentation survives, so nested lists still read as nested.

Only one shape of link is understood

Only the [text](url) form is unwrapped — you choose between the text alone or the text followed by the address in parentheses. Reference links like [text][1] with a [1]: url line below, <https://…> autolinks and [^1] footnotes are not recognised and stay as written, as do bare addresses. For mail or a document, keep the address; for a place like Slack that unfurls addresses into previews, text alone is tidier.

What headings, quotes and escapes leave behind

A heading loses only its #, so it no longer stands apart from a paragraph. The > of a quote is removed once at the start of a line, so a nested > > keeps one level. A \* protected by a backslash is not read as an escape: the asterisk goes and the backslash stays. The === under a setext heading stays, while --- is taken for a horizontal rule and deleted.

Frequently asked questions

Are code blocks stripped too?

They are left alone. What is inside a code block is content, not formatting, and deleting the asterisks or hashes in there would break the code. Only the three enclosing backticks are removed.

Does it convert to HTML?

No. This strips formatting down to plain text, which is why it needs no Markdown parser and adds no library.

Are code blocks stripped too?

The backticks go, the code stays. Removing the code would leave nothing to paste. If you are pasting somewhere that understands backticks, such as Slack, leaving them in is better.

The table columns do not line up.

Tables come out tab-separated. Pasted into a spreadsheet the columns split correctly; pasted into a plain editor the tab width makes it look crooked — it lines up in a monospaced font.

Pasting it loses my line breaks.

Markdown treats a single line break as the same paragraph. Stripping the formatting keeps the original breaks, so if they vanish it is the place you pasted into reading Markdown again — Slack's message box does this.

What happens to the `[ ]` of a task list?

It is left alone. With bullets kept, - [ ] task stays as it is; with bullets dropped, only the - goes and you get [ ] task. The checkbox is content, not decoration.

Does anything I paste get sent to a server?

No. Everything runs inside your browser and nothing is uploaded or stored. That is why you can use it on things you would not normally paste into a web page, like an internal config file or a production query. It also works with your network disconnected.