This articlerelies excessively onreferences toprimary sources. Please improve this article by addingsecondary or tertiary sources. Find sources: "Markdown" – news ·newspapers ·books ·scholar ·JSTOR(September 2025) (Learn how and when to remove this message) |
| Markdown | |
|---|---|
| Filename extensions | .md,.markdown[1][2] |
| Internet media type | text/markdown[2] |
| Uniform Type Identifier (UTI) | net.daringfireball.markdown |
| UTI conformation | public.plain-text |
| Magic number | None |
| Developed by | |
| Initial release | March 9, 2004 (21 years ago) (2004-03-09)[3][4] |
| Latest release | |
| Type of format | Open file format[6] |
| Extended to | pandoc,MultiMarkdown,Markdown Extra,CommonMark,[7]RMarkdown[8] |
| Website | daringfireball |
Markdown[9] is alightweight markup language for creatingformatted text using aplain-text editor.John Gruber created Markdown in 2004 as an easy-to-readmarkup language.[9] Markdown is widely used forblogging,instant messaging, andlarge language models,[10] and also used elsewhere inonline forums,collaborative software,documentation pages, andreadme files.
The initial description of Markdown[11] contained ambiguities and raised unanswered questions, causing implementations to both intentionally and accidentally diverge from the original version. This was addressed in 2014 when long-standing Markdown contributors releasedCommonMark, an unambiguous specification and test suite for Markdown.[12][better source needed]
Markdown was inspired by pre-existingconventions for marking upplain text inemail andusenet posts,[13] such as the earlier markup languagessetext (c. 1992),Textile (c. 2002), andreStructuredText (c. 2002).[9]
In 2002Aaron Swartz createdatx and referred to it as "the true structured text format". Gruber created the Markdown language in 2004 with Swartz as his "sounding board".[14] The goal of the language was to enable people "to write using an easy-to-read and easy-to-write plain text format, optionally convert it to structurally validXHTML (orHTML)".[5]
Another key design goal wasreadability, that the language be readable as-is, without looking like it has been marked up with tags or formatting instructions,[9] unlike text formatted with "heavier"markup languages, such asRich Text Format (RTF), HTML, or evenwikitext (each of which have obvious in-line tags and formatting instructions which can make the text more difficult for humans to read).[citation needed]
Gruber wrote aPerl script,Markdown.pl, which converts marked-up text input to valid,well-formed XHTML or HTML, encoding angle brackets (<,>) andampersands (&), which would be misinterpreted as special characters in those languages. It can take the role of a standalone script, a plugin forBlosxom or aMovable Type, or of a text filter forBBEdit.[5]
As Markdown's popularity grew rapidly, many Markdownimplementations appeared, driven mostly by the need for additional features such astables,footnotes, definition lists,[note 1] and Markdown inside HTML blocks.[citation needed]
The behavior of some of these diverged from the reference implementation, as Markdown was only characterised by an informalspecification[17] and aPerl implementation for conversion to HTML.[citation needed]
At the same time, a number of ambiguities in the informal specification had attracted attention.[18] These issues spurred the creation of tools such as Babelmark[19][20] to compare the output of various implementations,[21] and an effort by some developers of Markdownparsers for standardization. However, Gruber has argued that complete standardization would be a mistake: "Different sites (and people) have different needs. No one syntax would make all happy."[22]
Gruber avoided using curly braces in Markdown to unofficially reserve them for implementation-specific extensions.[23]
| CommonMark | |
|---|---|
| Filename extensions | .md,.markdown[2] |
| Internet media type | text/markdown; variant=CommonMark[7] |
| Uniform Type Identifier (UTI) | uncertain[24] |
| UTI conformation | public.plain-text |
| Developed by | John MacFarlane, open source |
| Initial release | October 25, 2014 (11 years ago) (2014-10-25) |
| Latest release | |
| Type of format | Open file format |
| Extended from | Markdown |
| Extended to | GitHub Flavored Markdown |
| Website | commonmark |
In 2012, a group of people, includingJeff Atwood andJohn MacFarlane, launched what Atwood characterised as a standardization effort.[12]
A community website now aims to "document various tools and resources available to document authors and developers, as well as implementors of the various Markdown implementations".[26]
In September 2014, Gruber objected to the usage of "Markdown" in the name of this effort and it was rebranded as "CommonMark".[13][27][28] CommonMark.org published several versions of a specification, reference implementation, test suite, and "[plans] to announce a finalized 1.0 spec and test suite in 2019".[29]
The finalized 1.0 spec has not been released, as major issues still remain unsolved.[30]
Nonetheless, the following websites and projects have adopted CommonMark:Codeberg,Discourse,GitHub,GitLab,Reddit,Qt,Stack Exchange (Stack Overflow), andSwift.
In March 2016, two relevant informational InternetRFCs were published:
text/markdown.Websites likeBitbucket,Diaspora,Discord,[32]GitHub,[33]OpenStreetMap,Reddit,[34]SourceForge[35] andStack Exchange[36] use variants of Markdown to make discussions between users easier.
Depending on implementation, basic inlineHTML tags may be supported.[37]
Italic text may be implemented by_underscores_ or*single-asterisks*.[38]
GitHub had been using its own variant of Markdown since as early as 2009,[39] which added support for additional formatting such as tables and nestingblock content inside list elements, as well as GitHub-specific features such as auto-linking references to commits, issues, usernames, etc.
In 2017, GitHub released a formal specification of itsGitHub Flavored Markdown (GFM) that is based onCommonMark.[33] It is astrict superset of CommonMark, following its specification exactly except for tables,strikethrough,autolinks and task lists, which GFM adds as extensions.[40]
Accordingly, GitHub also changed the parser used on their sites, which required that some documents be changed. For instance, GFM now requires that thehash symbol that creates a heading be separated from the heading text by a space character.
Markdown Extra is alightweight markup language based on Markdown implemented inPHP (originally),Python andRuby.[41] It adds the following features that are not available with regular Markdown:
Markdown Extra is supported in somecontent management systems such asDrupal,[43]Grav (CMS),Textpattern CMS[44] andTYPO3.[45]
| Text using Markdown syntax | Corresponding HTML produced by a Markdown processor | Text viewed in a browser |
|---|---|---|
Heading=======Sub-heading-----------# Alternative heading## Alternative sub-headingParagraphs are separated by a blank line.Two spaces at the end of a line produce a line break. | <h1>Heading</h1><h2>Sub-heading</h2><h1>Alternative heading</h1><h2>Alternative sub-heading</h2><p>Paragraphs are separatedby a blank line.</p><p>Two spaces at the end of a line<br/>produce a line break.</p> | Heading Sub-heading Alternative heading Alternative sub-heading Paragraphs are separatedby a blank line. Two spaces at the end of a line |
Text attributes_italic_,**bold**,`monospace`.Horizontal rule:--- | <p>Text attributes<em>italic</em>,<strong>bold</strong>,<code>monospace</code>.</p><p>Horizontal rule:</p><hr/> | Text attributesitalic,bold,monospace.Horizontal rule: |
Bullet lists nested within numbered list:1. fruits*apple*banana2. vegetables-carrot-broccoli | <p>Bullet lists nested within numbered list:</p><ol><li>fruits<ul><li>apple</li><li>banana</li></ul></li><li>vegetables<ul><li>carrot</li><li>broccoli</li></ul></li></ol> | Bullet lists nested within numbered list:
|
A [link](http://example.com).>Markdown uses email-stylecharacters for blockquoting.>> Multiple paragraphs need to be prepended individually.Most inline <abbr title="Hypertext Markup Language">HTML</abbr> tags are supported. | <p>A<ahref="http://example.com">link</a>.</p><p><imgalt="Image"title="icon"src="Icon-pictures.png"/></p><blockquote><p>Markdown uses email-style characters for blockquoting.</p><p>Multiple paragraphs need to be prepended individually.</p></blockquote><p>Most inline<abbrtitle="Hypertext Markup Language">HTML</abbr> tags are supported.</p> | Alink.
Most inlineHTML tags are supported. |
Implementations of Markdown are available for over a dozenprogramming languages; in addition, manyapplications, platforms andframeworks support Markdown.[46] For example, Markdownplugins exist for every majorblogging platform.[13]
While Markdown is a minimal markup language and is read and edited with a normaltext editor, there are specially designed editors that preview the files with styles, which are available for all major platforms. Many general-purpose text andcode editors havesyntax highlighting plugins for Markdown built into them or available as optional download. Editors may feature a side-by-side preview window or render the code directly in aWYSIWYG fashion.
Too late now, I suppose, but the only file extension I would endorse is ".markdown", for the same reason offered by Hilton Lipschitz:We no longer live in a 8.3 world, so we should be using the most descriptive file extensions. It's sad that all our operating systems rely on this stupid convention instead of the better creator code or a metadata model, but great that they now support longer file extensions.
CommonMark fork could end up better for users... but original creators seem to disagree.
I love their syntax extensions — very true to the spirit of Markdown. They use curly braces for their extensions; I'm not sure I ever made this clear, publicly, but I avoided using curly braces in Markdown itself — even though they are very tempting characters — to unofficially reserve them for implementation-specific extensions. Markdoc's extensive use of curly braces for its syntax is exactly the sort of thing I was thinking about.
The current version of the CommonMark spec is complete, and quite robust after a year of public feedback … but not quite final. With your help, we plan to announce a finalized 1.0 spec and test suite in 2019.
To italicize text, add one asterisk or underscore before and after a word or phrase. To italicize the middle of a word for emphasis, add one asterisk without spaces around the letters.