Markdown 1.0

As of last Friday, Markdown 1.0 is finally out of beta. A fair amount has changed since the first public release back in February, so here’s a run-down of what’s new:

  • I experimented with a licensing scheme that basically said Markdown was legally licensed under the GPL, but that commercial users ought to pay for a $50 commercial license to support Markdown’s development. This experiment was both (a) confusing and (b) unsuccessful, so Markdown is now simply licensed under the GPL, no strings attached. Donations to support Markdown’s development are happily accepted, but are not required.

  • Greatly simplified the syntax rules for code blocks. Colons are no longer necessary; any block of text indented by 4 spaces or 1 tab is considered a code block.

    Note: This means existing Markdown-formatted text that uses extra colons to trigger code blocks will now contain superfluous colons in the XHTML output. Sorry about that, but the good news is that this is the only significant syntax change that breaks compatibility with the initial public beta.

  • Unordered list items can now be denoted by any of the following bullet markers: [*+-].

There were a bunch of other small changes; the full list is available in the “Version History” section in the source code.


As mentioned in the documentation, “Markdown” is really two different things: (1) a structured plain text formatting syntax for writers; and (2) software I wrote in Perl that translates Markdown-formatted text into HTML.

I had hoped that others would port/re-implement Markdown in other scripting languages and weblogging/content management systems, and it didn’t take long:

  • Michel Fortin’s PHP Markdown is a line-for-line, feature-for-feature translation of my Perl version, written in PHP. Michel’s port is terrific, and is included as a plug-in with recent versions of WordPress. It also works with a bunch of other PHP-based weblog systems, including Textpattern, bBlog, and Pivot.

  • BlueCloth is Michael Granger’s port to Ruby.

  • Tom Watson uses my Perl version in his Manuscript project.

  • xMarkdown is European Bob’s complete re-implementation of Markdown in Perl, which differs from my version by refusing to output anything that isn’t strict XHTML. (In normal use, my Markdown generates valid XHTML, but if you pass in a block of invalid HTML tag soup, it will pass through unchanged.)

  • Grayson Hansard wrote a bit of AppleScript glue to let Markdown work within TextWrangler.


(If there are other complete working ports of Markdown, or other publishing systems that work with any of the above implementations, let me know.)