Markdown is a Perl script that converts plain text into Web-ready HTML; it's also a shorthand syntax for writing HTML tags without needing to write the actual HTML. Markdown has been around for a decade now, but it hasn't seen an update in all that time—nearly unheard of for a piece of software. In that light, the fact that Markdown continues to work at all is somewhat amazing.

Regrettably, "works" and "works well" are not the same thing. Markdown, despite its longevity, has bugs. But here, the software has an advantage. As free and open source (FOSS) software, licensed under a BSD-style license, anyone can fork Markdown and fix those bugs.

Recently, a group of developers set out to fix some of those bugs, creating what they call a "standard" version of Markdown. From a pure code standpoint, the results are great. Yet there was no surplus of gratitude. Instead, the "standard" group found itself at the center of a much larger and very contentious debate, one that's ultimately about who we want in control of the tools we use.

HTML is for browsers

The Web turned the whole world into writers. Never in the history of the human race have so many people produced so much text. The Web has not, however, turned the whole world into writers of HTML. If writing HTML were a requirement to writing on the Web, very few people would be writing on the Web.

Not that it's particularly hard to write HTML. Only a small subset of the hundreds of HTML tags actually end up in the average bit of text. Most of the time you can get by with paragraph tags, em, strong, and anchor tags for links. (And of course list tags—where would the modern Web be without list tags?)

In other words, it's not that hard to write HTML. But it is a pain.

Typing out all those tags creates an extra wall between you and your thoughts. No one wants to put <p> at the start of every paragraph and then </p> at the end, we just want to hit return and keep typing, which is what I did at the end of the previous paragraph. In fact, despite the fact that you're reading this article as a rendered bit of HTML in a webpage, I have not typed a single HTML tag while writing it.

Chances are you posted something on Twitter today, chatted with your friends on Facebook, wrote something on your WordPress blog, posted something to Tumblr, committed a bit of code to GitHub, answered a question on Stack Overflow, or did a hundred other things that ended up rendered in HTML. You most likely did all that without ever actually typing any HTML tags.

Most of the time HTML is hidden by a "rich" text editor, which takes care of creating all the necessary HTML tags for you. WordPress, Tumblr, and other sites not aimed at developers tend to use rich text editors.

But developers and the sites they interact with, on the other hand, often use Markdown.

Markdown is for Web writers

Markdown began life as a little Perl script written by John Gruber and Aaron Swartz back in 2004. Gruber had just started writing daringfireball.net and quickly realized that the article-as-a-fragment-of-HTML model that most publishing systems used at the time was lacking. Like most of us, Gruber wanted to edit and preview his writing in the text editor of his choice before pasting that text into the publishing system.

HTML is great at many things, but reading raw HTML is terrible. HTML is a markup language, a second stage presentation format. That is, you want to get words on the Web and so the first stage is to type those words; the second is to add HTML so they look the way you intended in a browser. No one wants to read, let alone try to edit, text when it's littered with HTML tags.

Gruber and Swartz wanted to write first and convert to HTML later, which is what Markdown allows you to do. Gruber and Swartz came up with a shorthand syntax for common HTML elements. Markdown then parses your text, finds those shorthand markers, and replaces them with HTML tags. It also automatically wraps your paragraphs in <p> tags (you just need to leave a blank line between them).

Markdown is not an all-or-nothing syntax. You can pick and choose what you want to use. For example, in 10 years of writing in Markdown, I have never used its image syntax. For me, Markdown's image syntax is no easier to read or simpler to type than an HTML <img> tag, so I just use the tag.

Markdown is something you can make your own, which is one of its great strengths. Don't like the inline link syntax? Use the reference syntax, or just write your links in HTML. Markdown is very flexible—perhaps too flexible.

Markdown was not the first text-to-HTML converter, but it was simple and took most of its shorthand syntax from the real world. It mimicked informal styles that emerged when people tried to overcome the limitations of plain text—writing styles that grew into conventions in e-mail, IRC, and Usenet.

For example, if you surround a word with asterisks Markdown renders it in HTML as <em> tags, which means it's (usually) italicized. Surround a word with double asterisks and it gets wrapped in <strong> tags and displayed in a bold font.

Dig through old mailing lists, IRC logs, or Usenet postings and you'll find this style of writing everywhere. Markdown might have been formalized and the parser written by Gruber and Swartz, but much of its language evolved collectively and informally over years of countless people figuring out how to convey meaning effectively in plain text.

Markdown turned out to be wildly successful, particularly among writers who used text editors rather than word processors and who were devoted to the idea that your documents, no matter where they end up, should begin life as a text file. In other words, programmers.

In the last 10 years, Markdown has been forked many times, ported to more than a dozen programming languages, and rolled out on some big, often developer-oriented websites (for example, Github and Stack Overflow). Markdown isn't just popular with developers, though; there are also plugins for every major blogging platform, including WordPress.com.

All that is nice for those of us who grew to depend on Markdown, since it means that we can use the familiar syntax all over the Web.