· 4 min read
How to Convert reStructuredText Documents to Markdown
Heshan Fernando
Co-founder & COO
Documentation written in reStructuredText — common in Python projects using Sphinx — sometimes needs to move to Markdown, whether that’s migrating a project’s docs to a Markdown-based static site generator or just making content easier to read and edit for a team more familiar with Markdown syntax. The two formats express similar structural elements — headings, emphasis, links, lists — but with genuinely different syntax, and manually rewriting every heading underline, every inline markup character, and every link reference by hand across a real document is slow and easy to get inconsistent.
Getting the conversion right means each RST construct needs to map correctly to its actual Markdown equivalent, not just a rough approximation that needs cleanup afterward.
What converting RST to Markdown actually involves
reStructuredText and Markdown both support the same basic structural elements, but express them differently: RST headings use underline characters below the heading text, while Markdown uses leading hash symbols; RST emphasis uses asterisks and backticks in specific patterns, while Markdown has its own conventions for bold and italic; RST links and lists follow their own distinct syntax rules that don’t directly resemble Markdown’s. Converting between them means correctly recognizing each of these RST constructs and translating it to the equivalent Markdown syntax, preserving the document’s actual structure and meaning through the format change rather than just approximating it. Getting this right across a full document, not just a short example, is what actually saves the manual rewriting effort — a partial or inconsistent conversion still leaves cleanup work that can end up taking nearly as long as doing it by hand.
This comes up most for teams migrating documentation off Sphinx-based RST toward a Markdown-based tooling ecosystem, where the volume of existing documentation makes manual conversion a genuinely significant undertaking.
Why people get stuck here
- RST and Markdown syntax for the same structural elements looks genuinely different. Heading underlines, emphasis markup, and link syntax don’t share an obvious visual correspondence, making manual translation error-prone.
- Manually converting a full document by hand doesn’t scale. For documentation of any real length, rewriting every heading, emphasis marker, link, and list item individually takes significant time.
- An inconsistent or partial conversion still requires cleanup. If some RST constructs convert correctly and others don’t, the resulting document needs manual review and fixing, undermining the time saved by automating the rest.
- Sphinx-specific RST extensions add complexity beyond basic syntax. Documentation built with Sphinx sometimes uses RST features beyond the core syntax, adding another layer to account for during conversion.
What a good RST to Markdown converter looks like
Correctly maps each RST construct to its Markdown equivalent
Accurately translating headings, emphasis, links, and lists is the core requirement for a conversion that doesn’t need significant manual cleanup afterward.
Handles a full document consistently
Applying the same correct conversion logic throughout an entire document, not just isolated examples, is what actually saves the manual rewriting effort.
Preserves the document’s actual structure and meaning
The converted Markdown needs to represent the same document structure as the original RST, not just superficially similar-looking text.
Common mistakes to avoid
- Manually rewriting a full RST document into Markdown by hand instead of converting it directly.
- Ending up with an inconsistent conversion that still requires significant manual cleanup.
- Not accounting for Sphinx-specific RST extensions when converting documentation built with Sphinx.
- Assuming a rough, approximate conversion is good enough without checking it against the original document’s structure.
How to do it with reStructuredText to Markdown
Online Tool Store’s reStructuredText to Markdown takes pasted reStructuredText and converts headings, emphasis, links, and lists to Markdown syntax, entirely in your browser.
- Paste your reStructuredText document.
- Let it convert headings, emphasis, links, and lists to Markdown.
- Review the converted output against the original structure.
- Copy the Markdown for your new documentation setup.
Because it correctly maps each RST construct to its actual Markdown equivalent, the converted document preserves the original’s structure and meaning without needing significant manual cleanup.
Frequently asked questions
Does this handle Sphinx-specific RST features?
The conversion covers core RST syntax — headings, emphasis, links, and lists — which is the foundation most documentation relies on; more specialized Sphinx extensions may need additional review depending on how extensively they’re used.
Why not just rewrite the document manually?
For documentation of any real length, manually translating every heading underline, emphasis marker, and link reference individually takes significant time and is prone to inconsistency across a longer document.
Will the converted Markdown preserve my document’s structure exactly?
The conversion is built to correctly map each RST construct to its Markdown equivalent, preserving the document’s actual structure rather than producing a rough approximation that needs further cleanup.
Final thought
Moving documentation from RST to Markdown means correctly translating genuinely different syntax for the same structural elements, not just a rough manual guess. Convert it accurately, and get documentation ready for your new tooling without the cleanup work.