Skip to content

Modern Markup Languages Comparison

A comparison of lightweight markup languages available today.

Overview

The overview below is chronological. Later comparison tables group related syntaxes together instead.

LanguageAuthorYearFocus
AsciiDocStuart Rackham2002Technical documentation
reStructuredText (reST)David Goodger2002Python documentation
TextileDean Allen2002Web publishing
MediaWikiMagnus Manske2002Wikipedia
Org ModeCarsten Dominik2003Emacs, outlining
MarkdownJohn Gruber2004Simplicity, email-style
CreoleWikiCreole2007Wiki standardization
CommonMarkJohn MacFarlane et al.2014Standardized Markdown
GitHub Flavored Markdown (GFM)GitHub2017 (formal spec; the flavor dates to ~2009)Extended CommonMark
GemtextSolderpunk2019Minimalism (Gemini protocol)
DjotJohn MacFarlane2022Predictable parsing
CarveMark Scherer2026Simple & predictable parsing

Feature Comparison

FeatureMarkdownCommonMarkGFMDjotAsciiDocreSTCarve
Strong**text****text****text***text**text***text***text*
Emphasis*text**text**text*_text__text_*text*/text/
Code inline`code``code``code``code``code```code```code`
Strikethrough--~~text~~-[.line-through]#text#-~text~
Highlight---{=text=}#text#-=text=
Subscript---{~text~}~text~-,text,
Superscript---{^text^}^text^-^text^
Tablesvaries-| col || col ||===directives| col | + spans
Task lists--- [x]- [x]* [x]-- [x]
Footnotesvaries-[^1] (deployed; not in the formal spec)[^1]footnote:[][1]_[^1], ^[inline]
Attributes---{.class #id}[.class]:class:{.class #id}
Divs/Admonitions---:::====.. note::::: note
Smart quotesvaries--autoexplicit ("`text`")-auto

Notes on the Djot column:

  • Strikethrough: Djot has no strikethrough. Its nearest elements are delete {-text-} (<del>) and insert {+text+} (<ins>); plain ~text~ is subscript, not a line-through.
  • Subscript / Superscript: the braces are optional in Djot — ~text~/^text^ work as shorthand, and the {~ ~}/{^ ^} forms are only needed when the span contains spaces or ambiguous boundaries.

Syntax Examples

Headings

# Markdown/CommonMark/GFM/Djot/Carve

= AsciiDoc Level 1
== AsciiDoc Level 2

Title
=====    (reST)

* Org Mode Level 1
** Org Mode Level 2
[text](url)                    # Markdown/CommonMark/GFM/Djot/Carve
https://url[text]              # AsciiDoc
`text <url>`_                  # reST
[[url][text]]                  # Org Mode
"text":url                     # Textile
[[Page|text]] / [url text]     # MediaWiki (internal page / external URL)
[[url|text]]                   # Creole
=> url text                    # Gemtext

Images

![alt](src)                    # Markdown/CommonMark/GFM/Djot/Carve
image::src[alt]                # AsciiDoc
.. image:: src                 # reST
   :alt: alt text
[[file:src]]                   # Org Mode
!src(alt)!                     # Textile
[[File:src|alt]]               # MediaWiki
{{src|alt}}                    # Creole

Code Blocks

```language                    # Markdown/GFM/Djot/Carve
code
```

[source,language]              # AsciiDoc
----
code
----

.. code-block:: language       # reST
   code

#+BEGIN_SRC language           # Org Mode
code
#+END_SRC

Lists

- item                         # Markdown/CommonMark/GFM/Djot/Carve
* item                         # AsciiDoc/Org Mode
- item                         # reST (with blank lines)
* item                         # Textile/MediaWiki/Creole

Philosophy Comparison

LanguagePhilosophy
Markdown"Easy to read, easy to write" - minimal syntax for common cases
CommonMarkStandardize Markdown with unambiguous spec
GFMExtend CommonMark for developer workflows (tables, task lists, code)
DjotPredictable parsing, consistent rules, no edge cases
AsciiDocComprehensive technical documentation with semantic markup
reSTExtensible, explicit, Python ecosystem standard
Org ModeEverything-in-one: notes, todos, literate programming
GemtextRadical simplicity, one link per line, no inline formatting

Strengths & Weaknesses

Markdown

  • Pros: Ubiquitous, simple, familiar
  • Cons: Ambiguous spec, many incompatible flavors

CommonMark

  • Pros: Standardized, well-specified
  • Cons: Missing features (tables, footnotes), complex spec

GFM

  • Pros: Tables, task lists, autolinks, widely supported
  • Cons: GitHub-specific extensions, still has edge cases

Djot

  • Pros: Predictable, rich features, clean spec
  • Cons: New, less tooling/adoption

AsciiDoc

  • Pros: Feature-rich, great for books/docs
  • Cons: Complex syntax, steep learning curve

reST

  • Pros: Extensible, semantic, Python standard
  • Cons: Verbose, whitespace-sensitive

Org Mode

  • Pros: Incredibly powerful, literate programming
  • Cons: Emacs-centric, complex

Gemtext

  • Pros: Dead simple, fast to parse
  • Cons: Very limited formatting

Adoption & Ecosystem

LanguagePrimary UseNotable Users
MarkdownGeneral writingGitHub, Stack Overflow, Reddit, Discord
CommonMarkStandardized docsDiscourse, Swift, many parsers
GFMDeveloper docsGitHub, GitLab
DjotModern alternativeGrowing adoption
AsciiDocTechnical booksO'Reilly, Spring, Asciidoctor
reSTPython docsSphinx, Read the Docs, Python
Org ModePersonal knowledgeEmacs users, researchers
MediaWikiWikisWikipedia, Fandom

Parsing Complexity

LanguageParser ComplexitySpec Size
GemtextTrivial~1 page
CreoleSimple~10 pages
MarkdownAmbiguousinformal syntax essay, no formal spec
CommonMarkComplexlarge prose spec, ~650 conformance examples
DjotModeratecompact prose spec + reference implementation
GFMComplexCommonMark + extensions
AsciiDocComplexLarge spec
reSTComplexLarge spec
CarveModerateEBNF grammar + semantic constraints + executable corpus

Recommendations

Use CaseRecommended
Quick notesMarkdown
GitHub READMEsGFM
Technical booksAsciiDoc
Python documentationreST
Personal knowledge baseOrg Mode
New projects wanting consistencyDjot
Extreme minimalismGemtext
Wiki contentMediaWiki or Creole

Conclusion

The markup landscape has evolved significantly since Markdown's introduction in 2004. While Markdown remains dominant due to familiarity, alternatives like Djot offer cleaner semantics and predictable parsing. AsciiDoc and reST serve well for comprehensive documentation needs. The choice depends on your ecosystem, complexity requirements, and how much you value specification clarity over ubiquity.

Released under the MIT License.