Markdown is a markup language written in plain text using standard plain text formatting syntax. It was originally designed so that it could be easily converted into many rich formats (such as HTML) using a self-named tool "Markdown", and is often used to format README files (including those initialized by popular source version control system Github). It is also used for writing messages in some online forums and even to create rich text via plain text editing. There have been many implementations and ambiguities in the original specification and therefore Markdown has fragmented into a number of different formats over the years.
Markdown language was originally created way back in 2004 in collaboration with visionary Aaron Swartz (who helped with syntax design). Markdown has the goal of helping people "to write using an easy-to-read and easy-to-write plain text format, optionally convert it to structurally valid XHTML (or HTML)".
In essence, the goal of Markdown was simple - readability. THe language is designed to be readable as-is without visually seeming to have been "marked up" with tags or formatting instructions - which is in stark contrast to text formatted with a mark(up) language, like Rich Text Format or HTML. In contrast to Markdown, both of these languages have clear tags and formatting instructions which make the end file much harder to read in plain text. Markdown's main inspiration has been existing conventions for marking plain text in email although it also drew a great amount of inspiration from other markup languages which were around in the earlier stages of the Internet such as setext and reStructuredText
Originally, Gruber wrote a Perl script called Markdown.pl which helped to convert marked-up text from Markup into valid and formatted XML/HTML alongside approproiate character encoding to avoid tag misplacement. It could be used as a standalone script or was contained in wrappers for various plugin usage. Since then, Markdown has been re-implemented by many as a Perl module available on CPAN (Text::Markdown) alongside a variety of other implementions in hundreds of other programming languages. Since Markdown is distributed under a BSD-style license it is also included with / distributed in a bunch of content-management system scripts
If you aren't familiar with Aaron Swartz, we'd suggest watching the documentary attached above. A true visionary, may he rest in peace.
Markdown has been historically used by a whole host of popular sites and packages during the past and will be used by many far further into the future. Here are a few examples of sites or projects which use Markdown to power their interactions:
Alongside many more, such as:
- Stack Exchange
One characterisitc of Markdown is a lack of formal specification with a reference implementation conversion for HTML. As a result of this since Markdown's inception many Markdown implementations have appears. These have been developed mostly by a drive for additional features which sit atop the base syntax for the langauge such as tables / footnotes or further complexity. As with all standards changes, the behaviour of some of these Markdown flavors diverges from the original reference implementation for Markdown. There have also been a number of ambiguities in the information original specification which attracted attention from developers.