Markdown vs reStructuredText: Pick Markdown unless you're shipping a Python doc tree
A decisive verdict on the two dominant plain-text markup formats. Markdown wins on reach, tooling, and muscle memory; reStructuredText wins on rigor and cross-referencing inside Sphinx-powered documentation. Most people should write Markdown.
The short answer
Markdown over Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree for most cases. Markdown is where the readers, the editors, the renderers, and the LLMs already live — GitHub, every CMS, every chat tool, every static site generator.
- Pick Markdown if writing READMEs, blog posts, wikis, issues, notes, or any docs that live on GitHub/GitLab, a CMS, or a static site generator — i.e. 95% of writing
- Pick Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree if documenting a Python library with Sphinx and genuinely need autodoc, directives, and rich cross-references across a large versioned doc tree
- Also consider: MyST Markdown — it bolts reST's directive/cross-reference power onto Markdown syntax inside Sphinx, letting you stop choosing. If you're tempted by reST only for Sphinx, use MyST instead.
— Nice Pick, opinionated tool recommendations
The verdict in one breath
Write Markdown. reStructuredText is a more rigorous, better-specified format with a real standard library of directives, roles, and cross-references — and almost none of that matters because the entire world standardized on Markdown anyway. GitHub renders it, every CMS speaks it, every static site generator defaults to it, and every LLM emits it natively. reST's reach is essentially one ecosystem: Python documentation via Sphinx. That's a fine ecosystem, but it's a walled garden. The honest framing: reST is the language a documentation engineer would design; Markdown is the language everyone actually adopted. Adoption beats elegance for a format whose entire job is to be read and maintained by other people. Unless your output is a Sphinx doc tree, the rich features you're paying for in reST friction will sit unused while you fight syntax nobody on your team remembers.
Where reStructuredText genuinely wins
Give reST its due: it was built for serious documentation and it shows. Directives (.. note::, .. code-block:: python, .. toctree::) and roles (:ref:, :class:, :func:) give you structured, semantic, extensible markup that plain Markdown simply lacks. Cross-references resolve by name across an entire multi-file, multi-version project and break the build if a target disappears — Markdown links rot silently. Sphinx autodoc pulls docstrings straight from Python source into rendered docs, which is unbeatable for API references. The grammar is actually specified, so two conformant parsers agree on output. If you maintain a large versioned library doc set — think the Python stdlib, NumPy, Django — reST plus Sphinx is the correct, battle-tested answer, and Markdown would force you to reinvent half of it badly.
Where Markdown crushes it
Markdown's superpower is gravity. It renders on GitHub, GitLab, Bitbucket, Notion, Slack, Discord, Reddit, every wiki, every CMS, and every static site generator from Hugo to Astro to Docusaurus. Pandoc converts it to anything. Editors give you live preview for free. New contributors already know it — there is no syntax to teach. And in 2026, every LLM writes Markdown as its default output, so AI-assisted docs are zero-friction. CommonMark pinned down the spec, and GitHub Flavored Markdown added tables, task lists, and fenced code that cover real-world needs. Yes, it fragments into dialects, but the 90% you use daily is identical everywhere. reST has none of this network effect — write a .rst file outside Sphinx and most tools render it as raw text or mangle it.
The syntax tax nobody mentions
reST punishes you in daily friction. Indentation is significant and unforgiving — misalign a directive body by a space and the build fails or, worse, silently swallows content. Inline markup has finicky whitespace rules: `**bold** needs surrounding space or escapes, nested inline markup is flat-out illegal, and you'll hit "Inline strong start-string without end-string" warnings that send you spelunking. Links use a backwards text <url>_ form with trailing underscores that everyone gets wrong. Markdown's [text](url) and bold` are forgettable in the good way — you stop thinking about them. The cost compounds: every non-expert contributor to a reST repo files a malformed PR, and you become the syntax-support desk. Markdown's looseness is occasionally ambiguous, but ambiguity that renders is cheaper than rigor that refuses to build.
Quick Comparison
| Factor | Markdown | Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree |
|---|---|---|
| Ecosystem reach / tool support | Universal — GitHub, every CMS, SSG, chat tool, and LLM | Effectively Sphinx + Python docs only |
| Cross-references & structured directives | None native; links rot silently | Named refs, roles, build-breaking on broken links |
| Learning curve / contributor friction | Near zero; everyone already knows it | Significant whitespace and inline-markup rules |
| API reference from source (autodoc) | Not built in; needs external tooling | Sphinx autodoc pulls docstrings directly |
| Spec consistency across renderers | CommonMark + GFM, but dialect fragmentation | Single well-defined grammar |
The Verdict
Use Markdown if: You're writing READMEs, blog posts, wikis, issues, notes, or any docs that live on GitHub/GitLab, a CMS, or a static site generator — i.e. 95% of writing.
Use Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree if: You're documenting a Python library with Sphinx and genuinely need autodoc, directives, and rich cross-references across a large versioned doc tree.
Consider: MyST Markdown — it bolts reST's directive/cross-reference power onto Markdown syntax inside Sphinx, letting you stop choosing. If you're tempted by reST only for Sphinx, use MyST instead.
Markdown vs Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree: FAQ
Is Markdown or Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree better?
Markdown is the Nice Pick. Markdown is where the readers, the editors, the renderers, and the LLMs already live — GitHub, every CMS, every chat tool, every static site generator. reStructuredText is technically the better-specified language, but a better spec nobody else implements is a liability, not a feature. You write docs to be read and maintained, and Markdown wins both by a mile outside the narrow Sphinx/Python niche.
When should you use Markdown?
You're writing READMEs, blog posts, wikis, issues, notes, or any docs that live on GitHub/GitLab, a CMS, or a static site generator — i.e. 95% of writing.
When should you use Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree?
You're documenting a Python library with Sphinx and genuinely need autodoc, directives, and rich cross-references across a large versioned doc tree.
What's the main difference between Markdown and Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree?
A decisive verdict on the two dominant plain-text markup formats. Markdown wins on reach, tooling, and muscle memory; reStructuredText wins on rigor and cross-referencing inside Sphinx-powered documentation. Most people should write Markdown.
How do Markdown and Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree compare on ecosystem reach / tool support?
Markdown: Universal — GitHub, every CMS, SSG, chat tool, and LLM. Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree: Effectively Sphinx + Python docs only. Markdown wins here.
Are there alternatives to consider beyond Markdown and Restructuredtext Pick Markdown Unless You Re Shipping A Python Doc Tree?
MyST Markdown — it bolts reST's directive/cross-reference power onto Markdown syntax inside Sphinx, letting you stop choosing. If you're tempted by reST only for Sphinx, use MyST instead.
Markdown is where the readers, the editors, the renderers, and the LLMs already live — GitHub, every CMS, every chat tool, every static site generator. reStructuredText is technically the better-specified language, but a better spec nobody else implements is a liability, not a feature. You write docs to be read and maintained, and Markdown wins both by a mile outside the narrow Sphinx/Python niche.
Related Comparisons
Disagree? nice@nicepick.dev