Revision 1 - 2009-08-05 at 05:22:24

Markup language comparison - Textile vs. Markdown

In MojoMojo, you can write wiki pages using HTML and one of two popular lightweight markup languages: Textile and Markdown. HTML is also available, for a few good reasons.

Textile2 vs. MultiMarkdown

Textile2 is an extension to Textile, adding extended blocks (blocks that can contain a newline). MultiMarkdown is an extension to Markdown, adding support for tables, footnotes, bibliography, automatic cross-references, glossaries, appendices, definition lists, math syntax, anchor and image attributes, and document metadata.

Syntax Comparison

Generally, Markdown is bit more cryptic but more powerful, while Textile is easier to read and use because it distinguishes markup more clearly. Textile is meant to be combined with HTML for more complex documents, or it can be turned off alltogether at any point by wrapping the content in == ==. The basic differences between the two syntaxes are:

Heading levels

  • Textile: h1. h2. h3. h4. h5. h6.
  • Markdown: # ## ### #### ##### ######

Markdown makes it difficult to read what section level your at as you go deeper then the 5th heading. On the other hand, Markdown offers a more visual syntax for level 1 headings,

Main Header

and for level 2 headings:

Sub Header

Link Syntax

  • Textile: "Link text":
  • Markdown: [Link text](

Some complaints against the Markdown link syntax include forgetting which goes first (the link title or the URL) and what types of brackets are around each. Textile is simpler.

Complaints against Textile include the need to escape a double quote in the link title ("How free markets "address" health care":, and unclear end of links: some parsers may include the final period in "Foo Bar":, while others may not. Markdown is more powerful and clearer.


  • Textile: *bold*, _italic_
  • Markdown: *italic* ('em'), **bold** ('strong')

The Textile markup has longer historical backing with _ and * being used way before HTML to convey "underline" and "bold".

Markdown justifies its choice in the light of semantic markup: thinking in terms of "bold" and "italic" is not semantic; other media (e.g. speech synthesizers for the visually impaired) cannot render "bold" or "italic". The semantic meaning is "emphasis" and "strong emphasis". Markdown is semantic.

Textile doesn't interpret emphasis right inside parentheses: neither (*bold*), nor (_italics_) will be rendered with formatting; instead, the two strings will be output verbatim.

Turning off markup interpretation

  • Textile can be turned off by placing == around whatever content you don't want to Textile
  • Markdown can be turned off by surrounding the content in a <div>. This comes in handy when pasting chunks of HTML like counters or comment widgets. To force Markdown to interpret markup in <div>s, add a markdown="1" attribute to the div. (Note: this doesn't currently work in Markdown, but is being worked on).

Escaping characters

  • Textile: generally impossible, although particular characters can be escaped (HTML named entities), numeric entities cannot (&#x5f; will be rendered literally, not as an underscore)
  • Markdown: simply backslash-escape the character: \_internal_function_with_trailing_underscore_

Auto hyperlinking

  • Markdown provides a shorthand way to create a link with the URL as the text by enclosing the URL in angle brackets: <>
  • Textile does not have a shortcut. One would have to do "": (note that some implementations, but not the one MojoMojo uses, automatically hyperlink URLs, which makes it impossible to disable automatic hyperlinking via the markup)

Definition Lists

  • Both Textile and MultiMarkdown have a syntax for definition lists but MojoMojo currently doesn't support the MultiMarkdown syntax.


  • Textile's footnoting is simpler: [1] as the footnote anchor and fn1. My foonote where the footnote text should appear. On the other hand, it is impossible to define named footnotes, which are extensively used on Wikipedia in large documents, or when one reference substantiates multiple facts.
  • Markdown's is more semantic and adds a link back [^my_footnote] ... [^my_footnote]: A note about my foot. A multiple references to the same footnote bug in MultiMarkdown causes the footnote to be repeated for each reference, and the anchor counter to increase.


  • Textile: simple tables, no headings, no linebreaks between rows
  • Markdown: simple and extended syntax with captions, headings, alignment, column spanning, and line breaks allowed between rows for improved readability. Pipe characters in text within table cells must be escaped as &#124; (backslash-escaping doesn't work in this case with MultiMarkdown).

Demo: captions, table headers, cell alignment and column spans

Example copied from the MultiMarkdown syntax guide:

Prototype table
First Header Second Header Third Header
Content Long Cell
Content Cell Cell
New section More Data
And more And more


Newlines in lists

  • Textile2: newlines break lists. It thus becomes impossible to render blockquotes or blocks of code in lists because the "bq." or "bc." block signature requires being surrounded by blank lines, and blank lines break lists:

    # First,
    bq. Avoid problems, and you'll never be the one who overcame them.
    -- Richard Bach
    # Second item, but will be numbered "1"
    bq. There is no elevator to success. You have to take the stairs.

    To achieve this, one must fall back to HTML.

  • Markdown's documentation explicitly tells how to "put a blockquote within a list item" (or a code section). This very list including the code section above has been written using Markdown.


Author: Dan Dascalescu
Thanks to Mateu X. Hunter for the initial draft.

My tags:
Popular tags:
Powered by Catalyst