Markdown

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Markdown
Markdown-mark.svg
Filename extensions.md, .markdown[1][2]
Internet media typetext/markdown[2]
Uniform Type Identifier (UTI)net.daringfireball.markdown
Developed byJohn Gruber and Aaron Swartz
Initial releaseMarch 9, 2004 (18 years ago) (2004-03-09)[3][4]
Latest release
1.0.1
December 17, 2004 (17 years ago) (2004-12-17)[5]
Type of formatOpen file format[6]
Extended topandoc, MultiMarkdown, Markdown Extra, CommonMark,[7] RMarkdown[8]
Websitedaringfireball.net/projects/markdown/

Markdown[9] is a lightweight markup language for creating formatted text using a plain-text editor. John Gruber and Aaron Swartz created Markdown in 2004 as a markup language that is appealing to human readers in its source code form.[9] Markdown is widely used in blogging, instant messaging, online forums, collaborative software, documentation pages, and readme files.

The initial description of Markdown[10] 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 released CommonMark, an unambiguous specification and test suite for Markdown.[11]

History[edit]

Markdown was inspired by pre-existing conventions for marking up plain text in email and usenet posts, such as the earlier markup languages setext (c. 1992), Textile (c. 2002), and reStructuredText (c. 2002).[9]

In 2002 Aaron Swartz created atx and referred to it as “the true structured text format”. Swartz and Gruber then worked together to create the Markdown language in 2004,[3][4] with the goal of enabling people "to write using an easy-to-read and easy-to-write plain text format, optionally convert it to structurally valid XHTML (or HTML)."[5]

Its key design goal was readability, 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 as Rich Text Format (RTF), HTML, or even wikitext (each of which have obvious in-line tags and formatting instructions which can make the text more difficult for humans to read).

Gruber wrote a Perl script, Markdown.pl, which converts marked-up text input to valid, well-formed XHTML or HTML and replaces angle brackets (<, >) and ampersands (&) with their corresponding character entity references. It can take the role of a standalone script, a plugin for Blosxom or a Movable Type, or of a text filter for BBEdit.[5]

Rise and divergence[edit]

As Markdown's popularity grew rapidly, many Markdown implementations appeared, driven mostly by the need for additional features such as tables, footnotes, definition lists,[note 1] and Markdown inside HTML blocks.

The behavior of some of these diverged from the reference implementation, as Markdown was only characterised by an informal specification[14] and a Perl implementation for conversion to HTML.

At the same time, a number of ambiguities in the informal specification had attracted attention.[15] These issues spurred the creation of tools such as Babelmark[16][17] to compare the output of various implementations,[18] and an effort by some developers of Markdown parsers for standardisation. 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."[19]

Gruber avoided using curly braces in Markdown to unofficially reserve them for implementation-specific extensions.[20]

Standardization[edit]

CommonMark
Markdown-mark.svg
Filename extensions.md, .markdown[2]
Internet media typetext/markdown; variant=CommonMark[7]
Uniform Type Identifier (UTI)uncertain[21]
UTI conformationpublic.plain-text
Developed byJohn MacFarlane, open source
Initial releaseOctober 25, 2014 (8 years ago) (2014-10-25)
Latest release
0.30
June 19, 2021 (17 months ago) (2021-06-19)[22]
Type of formatOpen file format
Extended fromMarkdown
Extended toGitHub Flavored Markdown
Websitespec.commonmark.org

From 2012, a group of people, including Jeff Atwood and John MacFarlane, launched what Atwood characterised as a standardisation effort.[11] 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".[23] In September 2014, Gruber objected to the usage of "Markdown" in the name of this effort and it was rebranded as CommonMark.[24][25] 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."[26] No 1.0 spec has since been released as major issues still remain unsolved.[27] Nonetheless, the following websites and projects have adopted CommonMark: Discourse, GitHub, GitLab, Reddit, Qt, Stack Exchange (Stack Overflow), and Swift.

In March 2016 two relevant informational Internet RFCs were published:

  • RFC 7763 introduced MIME type text/markdown.
  • RFC 7764 discussed and registered the variants MultiMarkdown, GitHub Flavored Markdown (GFM), Pandoc, and Markdown Extra among others.[28]

Variants[edit]

Websites like GitHub,[29] Bitbucket, Reddit,[30] Diaspora, Stack Exchange,[31] OpenStreetMap and SourceForge[32] use variants of Markdown to facilitate discussion between users.

Depending on implementation, basic inline HTML tags may be supported.[33] Italic text may be implemented by _underscores_ and/or *single-asterisks*.[34]

GitHub Flavored Markdown[edit]

GitHub had been using its own variant of Markdown since as early as 2009,[35] adding support for additional formatting such as tables and nesting block 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 its GitHub Flavored Markdown (GFM) that is based on CommonMark.[29] It is a strict superset of CommonMark, following its specification exactly except for tables, strikethrough, autolinks and task lists, which GFM adds as extensions.[36] GitHub also changed the parser used on their sites accordingly, which required that some documents be changed. For instance, GFM now requires that the hash symbol that creates a heading be separated from the heading text by a space character.

Markdown Extra[edit]

Markdown Extra is a lightweight markup language based on Markdown implemented in PHP (originally), Python and Ruby.[37] It adds features not available with plain Markdown syntax. Markdown Extra is supported in some content management systems such as Drupal[38] and TYPO3.[39]

Markdown Extra adds the following features to Markdown:

  • Markdown markup inside HTML blocks
  • Elements with id/class attribute
  • "Fenced code blocks" that span multiple lines of code
  • Tables[40]
  • Definition lists
  • Footnotes
  • Abbreviations

LiaScript[edit]

LiaScript[41] is a Markdown dialect that was designed to create interactive educational content. It is implemented in Elm and TypeScript and adds additional syntax elements to define features like:

  • Animations
  • Automatic speech output
  • Mathematical formulas (using KaTeX)
  • ASCII art diagrams
  • Various types of quizzes and surveys
  • JavaScript is natively supported and can be attached to various elements, this way code fragments can be made executable and editable

Examples[edit]

Text using Markdown syntax Corresponding HTML produced by a Markdown processor Text viewed in a browser
Heading
=======

Sub-heading
-----------

# Alternative heading #

Paragraphs 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>

<p>Paragraphs are separated
by a blank line.</p>

<p>Two spaces at the end of a line<br />
produce a line break.</p>
Heading
Sub-heading
Alternative heading

Paragraphs are separated by a blank line.

Two spaces at the end of a line
produce a line break.

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 attributes italic, bold, monospace.

Horizontal rule:


Bullet lists nested within numbered list:

  1. fruits
     * apple
     * banana
  2. 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:
  1. fruits
    • apple
    • banana
  2. vegetables
    • carrot
    • broccoli
A [link](http://example.com).

![Image](Icon-pictures.png "icon")

> Markdown uses email-style
characters for blockquoting.
>
> Multiple paragraphs need to be prepended individually.

Most inline <abbr title="Hypertext Markup Language">HTML</abbr> tags are supported.
<p>A <a href="http://example.com">link</a>.</p>

<p><img alt="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 <abbr title="Hypertext Markup Language">HTML</abbr> tags are supported.</p>
A link.

Image

Markdown uses email-style characters for blockquoting.

Multiple paragraphs need to be prepended individually.

Most inline HTML tags are supported.

Implementations[edit]

Implementations of Markdown are available for over a dozen programming languages; in addition, many applications, platforms and frameworks support Markdown.[42] For example, Markdown plugins exist for every major blogging platform.[43]

While Markdown is a minimal markup language and is read and edited with a normal text editor, there are specially designed editors that preview the files with styles, which are available for all major platforms. Many general-purpose text and code editors have syntax 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 a WYSIWYG fashion.

Here are some apps, services and editors that support Markdown as an editing format:

See also[edit]

Explanatory notes[edit]

  1. ^ Technically HTML description lists.

References[edit]

  1. ^ Gruber, John (8 January 2014). "The Markdown File Extension". The Daring Fireball Company, LLC. Retrieved 27 March 2022. 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.
  2. ^ a b c Leonard, Sean (March 2016). "The text/markdown Media Type". Request for Comments: 7763. Internet Engineering Task Force. Retrieved 27 March 2022. This document registers the text/markdown media type for use with Markdown, a family of plain-text formatting syntaxes that optionally can be converted to formal markup languages such as HTML.
  3. ^ a b Swartz, Aaron (2004-03-19). "Markdown". Aaron Swartz: The Weblog.
  4. ^ a b Gruber, John. "Markdown". Daring Fireball. Archived from the original on 2004-03-11. Retrieved 2022-08-20.
  5. ^ a b c Markdown 1.0.1 readme source code "Daring Fireball – Markdown". 2004-12-17. Archived from the original on 2004-04-02.
  6. ^ "Markdown: License". Daring Fireball. Retrieved 2014-04-25.
  7. ^ a b Leonard, Sean (March 2016). "Guidance on Markdown: Design Philosophies, Stability Strategies, and Select Registrations". Request for Comments: 7764. Internet Engineering Task Force. Retrieved 27 March 2022. This document elaborates upon the text/markdown media type for use with Markdown, a family of plain-text formatting syntaxes that optionally can be converted to formal markup languages such as HTML. Background information, local storage strategies, and additional syntax registrations are supplied.
  8. ^ "RMarkdown Reference site".
  9. ^ a b c d Markdown Syntax "Daring Fireball – Markdown – Syntax". 2013-06-13. “Readability, however, is emphasized above all else. A Markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been marked up with tags or formatting instructions. While Markdown’s syntax has been influenced by several existing text-to-HTML filters — including Setext, atx, Textile, reStructuredText, Grutatext[12], and EtText[13] — the single biggest source of inspiration for Markdown’s syntax is the format of plain text email.”
  10. ^ "Daring Fireball: Introducing Markdown". daringfireball.net. Retrieved 2020-09-23.
  11. ^ a b Atwood, Jeff (2012-10-25). "The Future of Markdown". CodingHorror.com. Retrieved 2014-04-25.
  12. ^ "Un naufragio personal: The Grutatxt markup". triptico.com. Retrieved 2022-06-30.
  13. ^ "EtText: Documentation: Using EtText". ettext.taint.org. Retrieved 2022-06-30.
  14. ^ "Markdown Syntax Documentation". Daring Fireball.
  15. ^ "GitHub Flavored Markdown Spec – Why is a spec needed?". github.github.com.
  16. ^ "Babelmark 2 – Compare markdown implementations". Johnmacfarlane.net. Retrieved 2014-04-25.
  17. ^ "Babelmark 3 – Compare Markdown Implementations". github.io. Retrieved 2017-12-10.
  18. ^ "Babelmark 2 – FAQ". Johnmacfarlane.net. Retrieved 2014-04-25.
  19. ^ Gruber, John [@gruber] (4 September 2014). "@tobie @espadrine @comex @wycats Because different sites (and people) have different needs. No one syntax would make all happy" (Tweet) – via Twitter.
  20. ^ Gruber, John (19 May 2022). "Markdoc". Daring Fireball. Retrieved May 19, 2022. 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.
  21. ^ "UTI of a CommonMark document". 12 April 2017.
  22. ^ "CommonMark specification".
  23. ^ "Markdown Community Page". GitHub. Retrieved 2014-04-25.
  24. ^ "Standard Markdown is now Common Markdown". Jeff Atwood. 4 September 2014. Retrieved 2014-10-07.
  25. ^ "Standard Markdown Becomes Common Markdown then CommonMark". InfoQ. Retrieved 2014-10-07.
  26. ^ "CommonMark". Retrieved 20 Jun 2018. 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.
  27. ^ "Issues we MUST resolve before 1.0 release [6 remaining]". CommonMark Discussion. 2015-07-26. Retrieved 2020-10-02.
  28. ^ "Markdown Variants". IANA. 2016-03-28. Retrieved 2016-07-06.
  29. ^ a b c "GitHub Flavored Markdown Spec". GitHub. Retrieved 2020-06-11.
  30. ^ "Reddit markdown primer. Or, how do you do all that fancy formatting in your comments, anyway?". Reddit.com. Retrieved 2013-03-29.
  31. ^ "Markdown Editing Help". StackOverflow.com. Retrieved 2014-04-11.
  32. ^ "SourceForge: Markdown Syntax Guide". SourceForge.net. Retrieved 2013-05-10.
  33. ^ "Markdown Syntax Documentation". daringfireball.net.
  34. ^ "Basic Syntax: Italic". The Markdown Guide. Matt Cone. Retrieved 27 March 2022. 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.
  35. ^ Tom Preston-Werner. "GitHub Flavored Markdown Examples". GitHub. Retrieved 2021-04-02.
  36. ^ "A formal spec for GitHub Flavored Markdown". GitHub Engineering. 14 March 2017. Retrieved 16 Mar 2017.
  37. ^ Fortin, Michel (2018). "PHP Markdown Extra". Michel Fortin website. Retrieved 2018-12-26.
  38. ^ "Markdown editor for BUEditor". 4 December 2008.
  39. ^ "Markdown for TYPO3 (markdown_content)". extensions.typo3.org.
  40. ^ "PHP Markdown Extra". Michel Fortin.
  41. ^ Dietrich, André. "LiaScript". liascript.github.io. Retrieved 2022-01-17.
  42. ^ "W3C Community Page of Markdown Implementations". W3C Markdown Wiki. Retrieved 24 March 2016.
  43. ^ "Markdown THrowdown – What happens when FOSS software gets corporate backing". Ars Technica. 2014-10-05.
  44. ^ "Use Markdown formatting in Teams". Microsoft. Retrieved 2022-01-13.
  45. ^ "Markdown Text 101 (Chat Formatting: Bold, Italic, Underline)". discord.com. Archived from the original on June 26, 2020.
  46. ^ "Why You Need a WYSIWYG Editor When Writing in Markdown and Fountain". JotterPad Blog. 2020-11-17. Retrieved 2020-12-06.
  47. ^ "Doxygen Manual: Markdown support".
  48. ^ Allaire, J.J.; e.a. (2015-06-30). "Markdown.cpp". GitHub project RStudio. Retrieved 2016-07-07.
  49. ^ "Writing on GitHub". help.github.com. GitHub, Inc. Retrieved 9 July 2014.
  50. ^ R Markdown: The Definitive Guide.
  51. ^ "Nextcloud Notes * App". Nextcloud Apps. Retrieved 2022-02-18.
  52. ^ "Markdown Guide". joplinapp.org. Retrieved 2022-07-14.
  53. ^ "Help". Simplenote. 2015-07-30. Retrieved 2022-07-14.
  54. ^ "Obsidian". obsidian.md. Retrieved 2022-07-14.

External links[edit]