Markdown to Plain Text – Strip Syntax, Keep the Words
Markdown is a writing format, not a reading format. The moment you move a README, a Notion export, an Obsidian note or an assistant's reply somewhere that has no renderer — an email body, a CMS field, a Google Doc, a commit message, a text-to-speech engine — every #, **, ` and [text](url) turns from invisible instruction into visible noise. The Markdown to Plain Text converter removes that syntax and returns the prose underneath, with the reading order, paragraph structure and meaning intact.
Parsing, not pattern matching
The conversion is a parse → transform → render pipeline. The document is first read into a syntax tree that understands CommonMark plus the GitHub extensions, then every node is rendered according to the options you choose. That ordering matters, because a find-and-replace script cannot tell the difference between an asterisk that opens emphasis and one that means multiplication. Strip * blindly and 2 * 3 * 4 becomes 2 3 4; strip _ blindly and snake_case_name loses its underscores. A parser keeps both because it knows that emphasis delimiters cannot sit inside a word and cannot be surrounded by spaces.
What is recognised
ATX headings (## Title) and Setext headings underlined with === or ---; emphasis, strong and strikethrough; inline code and both fenced and four-space indented code blocks; inline, reference, shortcut and autolinked URLs; images; ordered and unordered lists nested to any depth; task lists; GFM pipe tables; block quotes with lazy continuation; footnotes; thematic breaks; raw HTML; and YAML or TOML front matter — the metadata block fenced by --- or +++ at the very top of a static-site content file.
Six conversion modes
Clean Text is the everyday choice: markers disappear, headings sit on their own line, list items keep a • bullet and paragraphs stay separated by a blank line. Preserve Structure keeps the skeleton of a document, uppercasing headings and indenting nested lists, which is what turns a README into a readable INSTALL.txt. Strip Everything flattens the whole file into one continuous prose stream — the right input for a word count, a readability score or a speech engine. Table to Text returns only the pipe tables, as aligned columns, TSV, CSV or Key: value records. Extract Text Only discards code, tables, images, HTML and front matter so the remaining word count reflects genuine prose. Link Report renders the body as plain text and appends a numbered list of every URL, exactly the way a plain-text email alternative renders an HTML newsletter.
Where the URLs go
Links are the one element with no obviously correct plain-text form, so the destination decides. Keeping text only reads best in prose but loses the address. Text (URL) keeps everything at the cost of interrupting the sentence. Numbered references keep the sentence clean and move the addresses to the bottom, which is the convention plain-text email has used for decades. URL only suits link audits, and removing links entirely suits translation memory and readability scoring.
Tables, lists and code
GFM tables are re-rendered rather than merely de-piped: column widths are measured from the longest cell in each column, so aligned output stays legible in a monospaced viewer. Choosing TSV gives you something you can paste straight into a spreadsheet, and Key: value turns each row into a labelled record for data entry. Nested lists keep their depth through configurable indentation, ordered lists can keep their original numbers or be renumbered from one, and code blocks can keep their fences, lose them, collapse to a [code] placeholder, or disappear entirely.
Whitespace, entities and Unicode
After rendering, the text goes through a normalisation pass. HTML entities such as &, ' and are decoded to real characters. Optional Unicode normalisation converts smart quotes, em and en dashes and ellipses to their ASCII equivalents, which matters when the destination is a fixed-width terminal, a legacy database column or a translation tool. Consecutive blank lines are collapsed to a limit you set, trailing spaces are trimmed, hard-wrapped paragraph lines can be joined back together, and the whole output can be re-wrapped at a chosen line width.
Practical workflows
Use Clean Textto move an assistant's answer into an email. Use Preserve Structure to publish release notes to a plain-text channel. Use Extract Text Only before running a readability score, so code samples do not drag the grade level around. Use Table to Text with TSV to lift a comparison table into a spreadsheet. Use Link Report before an SEO or accessibility audit to see every destination in one list. Everything runs in your browser, so drafts and internal documentation never leave the machine you are working on.