Origins (2004)
Markdown was created by John Gruber, author of the Daring Fireball blog, in collaboration with Aaron Swartz. Gruber — born in 1973 in Philadelphia, a Drexel University CS graduate, and former developer at Bare Bones Software (makers of BBEdit) — announced Markdown on March 15, 2004, in a post titled “Introducing Markdown” on Daring Fireball.
Gruber’s motivation was simple: he was tired of writing raw HTML for his blog. As he put it, “It grew tiresome, and it just felt like I was making work for myself, and I really thought that HTML made it hard to proofread my work.” He wanted to allow authors to “write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML).”
Aaron Swartz served as Markdown’s “sole beta-tester,” providing substantial feedback on syntax design. Swartz — who at just 14 had co-authored the RSS 1.0 specification and later co-founded Reddit — had created atx in 2002, a structured text format whose #-prefixed headings were adopted directly into Markdown. This is why hash-style headings are still called “atx-style headers” in specs today. Swartz also wrote html2text, a tool for converting HTML back into Markdown.
Design Philosophy
Markdown’s primary design goal was readability. A Markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been tagged or formatted with special instructions.
The single biggest source of inspiration was the format of plain text email. Markdown’s syntax borrowed from conventions people already used in email and Usenet posts: asterisks for emphasis, dashes for lists, and so on.
Other influences included:
setext (c. 1992) — underline-style headers using
===and---Textile (c. 2002)
reStructuredText (c. 2002)
atx (Aaron Swartz, 2002) —
#-prefixed headers
Markdown was conceived as two things at once: a plain text formatting syntax and a software tool (Markdown.pl) that converts that syntax to HTML.
The Original Implementation
The reference implementation was a Perl script of approximately 1,400 lines that processed text through a series of regular expression substitutions, requiring Perl 5.6.0 or later and the Digest::MD5 module.
Gruber initially released it as a GPL-licensed plug-in for Movable Type and Blosxom, as well as a standalone filter for BBEdit.
Markdown 1.0 was released on August 28, 2004. It placed third in Six Apart’s plugin contest for Movable Type 3.0.
Markdown 1.0.1 followed on December 14, 2004, fixing a bug and changing the license from GPL to a BSD-style open source license.
The last-ever update to Markdown.pl was on December 17, 2004. It was never updated again.
The BSD license included a clause that the name “Markdown” could not be used to endorse or promote derived products without specific prior written permission — a clause that would become significant a decade later.
The Fragmentation Problem
Because Gruber’s specification was informal prose rather than a rigorous spec, and because Markdown.pl was abandoned after December 2004 despite known bugs, implementations quickly diverged. A document that rendered one way on GitHub might render differently on Pandoc or another system. One analysis found that a simple list starting mid-sentence could render in up to 15 different ways depending on the parser.
Major implementations that emerged:
PHP Markdown (Michel Fortin, 2004) — PHP port of Markdown.pl, created just days after Gruber’s announcement
PHP Markdown Extra (Michel Fortin, 2005) — Added footnotes, fenced code blocks, tables, definition lists, abbreviations
MultiMarkdown (Fletcher T. Penney, 2005) — Added metadata, LaTeX output, citations, cross-references, math
Pandoc (John MacFarlane, 2006) — Universal document converter with massively extended syntax
Python-Markdown (Community, 2007) — Python implementation with extension system
GitHub Flavored Markdown (GitHub, ~2009) — Added tables, task lists, fenced code with language IDs, strikethrough
Each implementation added features Gruber’s original lacked, but no two agreed on how to handle the ambiguities in the original specification.
The CommonMark Standardization Effort
The Call for Standards (2012)
On October 25, 2012, Jeff Atwood (co-founder of Stack Overflow) published “The Future of Markdown” on his Coding Horror blog, calling on the community to create an official specification and standard test suites.
The next day, a Markdown Community Group was formed at the W3C. Atwood, John MacFarlane (creator of Pandoc, philosophy professor at UC Berkeley), and others emailed Gruber in November 2012 inviting him to participate. They never heard back.
The “Standard Markdown” Naming Dispute (2014)
John MacFarlane led the writing of the specification, drawing on his experience building Markdown parsers in multiple languages — including the first Markdown parser not based on regex substitutions (Pandoc).
On September 3, 2014, Atwood announced the project as “Standard Markdown.” Gruber’s reaction was swift — he called it “infuriating,” demanded the group rename the project, shut down the domain, and apologize. He initially suggested names like “Strict Markdown” or “Pedantic Markdown,” but then indicated that no form of the word “Markdown” was acceptable in the project name.
Gruber had argued that complete standardization would be a mistake: “Different sites (and people) have different needs. No one syntax would make all happy.” The BSD license’s clause about the “Markdown” name gave him legal standing.
On September 5, 2014, the project was renamed first to “Common Markdown,” then to “CommonMark” (one word). Atwood published an apology. Gruber eventually accepted the name.
The Specification
CommonMark provided what had been missing for a decade:
A rigorous, unambiguous specification with formal grammar
Over 600 conformance tests
Reference implementations in C (cmark) and JavaScript (commonmark.js)
The latest spec version is 0.31.2 (January 28, 2024)
Performance was a major advance: cmark is approximately 10,000 times faster than the original Markdown.pl.
The W3C Markdown Community Group was closed on August 13, 2019, but CommonMark development continues independently. As of late 2025, six critical issues remain before a 1.0 release can be declared.
IETF Recognition
In March 2016, the IETF registered the text/markdown media type via RFC 7763, defining it as an informational standard for identifying Markdown documents in MIME-compliant systems, with required UTF-8 charset and optional variant parameters.
Key Variants and Their Contributions
GitHub Flavored Markdown (GFM)
GitHub began using its own Markdown variant around 2009 to render README files in repositories. It formalized GFM in 2011, and in March 2017 released a formal GFM specification built as a strict superset of CommonMark. GFM introduced tables, task lists (- [x]), fenced code blocks with language identifiers, strikethrough (~~text~~), auto-linking, and emoji shortcodes (:smile:). Footnote support was added in 2021. GFM also includes post-processing sanitization to prevent XSS attacks, blocking potentially malicious HTML tags like <script>.
MultiMarkdown
Created by Fletcher T. Penney in 2005, MultiMarkdown aimed to make Markdown suitable for academic and professional writing. It added metadata headers, LaTeX/PDF output, footnotes, tables, citations, cross-references, glossary/index features, and math support. Version 6 improved parsing for cross-references and transclusion in ebooks, with version 7 in pre-release as of 2025.
Pandoc Markdown
John MacFarlane began developing Pandoc around 2004 as a personal experiment while learning Haskell, motivated by the need for a reliable Markdown parser to manage his lecture notes. The first public release came in 2006. More than a Markdown tool, Pandoc is a universal document converter supporting over 50 input and output formats (LaTeX, DOCX, PDF, EPUB, and more).
Key milestones:
Version 1.0 (September 2008) — extended Markdown support
Version 2.0 (October 2017) — built-in Lua filter support
Version 2.8 (November 2019) — native CiteProc for citations and bibliographies
Version 3.0 (January 2023) — JATS XML, Typst output, rewritten CommonMark parser
Pandoc’s architecture processes documents through an abstract syntax tree (AST), enabling format-agnostic transformations. It underpins tools like R Markdown (launched 2012 by RStudio) and Quarto for reproducible research documents.
PHP Markdown Extra
Created by Michel Fortin, who had ported Markdown to PHP within days of Gruber’s original announcement. PHP Markdown Extra (2005) added footnotes, abbreviations, fenced code blocks, tables, definition lists, and attribute lists for attaching classes and IDs to elements. It found particular popularity in PHP-based CMS platforms like Grav.
MDX (Markdown + JSX)
Emerging around 2018-2019, MDX combines Markdown with JSX, allowing React components to be embedded directly in Markdown documents. Key contributor John Otander wrote most of the code. MDX is now integrated with Docusaurus, Next.js, Gatsby, and major bundlers, with 2.5 million weekly npm downloads.
Adoption Timeline
March 15, 2004 — Gruber announces Markdown on Daring Fireball
Late March 2004 — Michel Fortin creates PHP Markdown
August 28, 2004 — Markdown 1.0 released; places third in Six Apart’s Movable Type plugin contest
December 17, 2004 — Last-ever update to Markdown.pl
July 2005 — PHP Markdown Extra and MultiMarkdown announced (one day apart)
2006 — Pandoc published; Michel Fortin rewrites PHP Markdown as object-oriented
September 2006 — TextMate editor incorporates Markdown syntax highlighting
September 2008 — Stack Overflow launches with Markdown support, exposing it to a massive developer audience
December 2008 — Jekyll released; GitHub Pages launches with Markdown as primary content format
~2009 — GitHub and Reddit adopt Markdown variants
2011 — GitHub ships GFM; README.md becomes the standard for project documentation
2012 — Jeff Atwood calls for Markdown standardization; R Markdown launched by RStudio
2014 — CommonMark launched after naming controversy; cmark and commonmark.js reference implementations released; markdown-it parser released
March 2016 — IETF registers
text/markdownmedia type (RFC 7763)March 2017 — GitHub releases formal GFM spec based on CommonMark
~2018 — MDX first stable release
2020+ — Obsidian, Notion, and dozens of modern tools adopt Markdown as core format
2021 — GitHub adds footnote support to GFM
2022-2024 — AI language models (ChatGPT, Claude, Gemini) adopt Markdown as their default output format
2025 — Windows Notepad adds basic Markdown support; Markdown/YAML frontmatter becomes standard for LLM agent configuration files
February 2026 — Cloudflare launches Markdown for Agents, converting HTML to Markdown in real time for AI crawlers
Markdown Today
Markdown has become the dominant format for an extraordinary range of use cases:
Technical writing and documentation — MkDocs (2014), Docusaurus, VuePress, GitBook, Read the Docs
Developer platforms — GitHub, GitLab, Bitbucket, Stack Overflow, Discord
Note-taking and knowledge management — Obsidian (2,600+ community plugins as of 2025), Notion, Bear, Typora, iA Writer, Logseq, Joplin
Static site generators — Hugo, Jekyll, Gatsby, Next.js, Astro
AI output — ChatGPT, Claude, Gemini, Grok, and other LLMs use Markdown as their default output format, massively expanding its reach beyond the developer community
AI agent configuration — Tools like Cursor, Claude Code, GitHub Copilot, and VS Code extensions use Markdown with YAML frontmatter for agent rules and custom instructions, with analyses showing up to 30% fewer tokens than equivalent JSON
AI content delivery — Cloudflare’s Markdown for Agents (2026) converts HTML to Markdown at the edge for AI crawlers, reducing token consumption by up to 80%
The most significant platforms have converged on CommonMark as their baseline, finally delivering the consistency that eluded the format for its first decade.
Markdown’s enduring appeal comes down to what Gruber got right from the start: plain text files are portable, version-controllable, readable without special software, and not locked to any vendor. Twenty-two years later, that bet on simplicity continues to pay off.
Research and Authoring
This document was researched and compiled by Claude Opus 4.6 at the request of Mauricio Longo for The Creative Cyborg Newsletter. All sources used in the creation of the document are listed below in the Sources section.
Sources
Grokipedia
Primary Sources
Commentary and Analysis
Jeff Atwood: Standard Markdown is now Common Markdown (2014)
Standard Markdown Becomes Common Markdown then CommonMark — InfoQ
Aaron Swartz was a key contributor to Markdown — Hacker News
How Apple obsessive John Gruber built Daring Fireball — The Verge
Issues we MUST resolve before 1.0 release — CommonMark Forum


