Turn a list of terms into definition list syntax, an HTML dl, a table, or a bold-term list — and see where each one actually renders
Write Term: definition on one line, or put the term on its own line with each definition under it starting with :, -, or an indent. A blank line starts the next entry. 3 terms read.
PHP Markdown Extra, kramdown, Pandoc, MultiMarkdown and Python-Markdown. Plain text elsewhere.
Markdown
: a plain text formatting syntax that converts to HTML.
CommonMark
: a strict specification of Markdown.
: the base almost every renderer implements today.
GFM
: GitHub Flavored Markdown — CommonMark plus tables, task lists and autolinks.
Preview
The colon syntax is not CommonMark, so this previewer renders it as plain text with a visible colon — and GitHub, GitLab and Obsidian do the same. It renders as a real definition list in Markdown Extra, kramdown, Pandoc, MultiMarkdown and Python-Markdown. Switch to the HTML, table or list output to see it rendered here.
A definition list pairs a term with one or more definitions — a glossary, an options reference, an API parameter list. The syntax is not part of CommonMark; it comes from PHP Markdown Extra, and the processors that copied it read it the same way:
The term goes on a line of its own, with no marker.
Each definition goes on the next line, starting with a colon and a space: : the definition.
A term may have several definitions — one colon line each.
A definition that runs to more than one paragraph needs its continuation indented by four spaces.
A blank line separates one entry from the next.
The result is an HTML <dl> with a <dt> per term and a <dd> per definition — which is exactly what the HTML output above writes by hand, for the renderers that will not do it for you.
Where definition lists work
Platform
Colon syntax
Notes
PHP Markdown Extra
✓ renders
Where the syntax originates.
kramdown (Jekyll)
✓ renders
Supported, including multiple definitions.
Pandoc
✓ renders
Supported, with multi-paragraph definitions.
MultiMarkdown
✓ renders
Supported.
Python-Markdown
✓ renders
With the def_list extension enabled.
CommonMark
✗ plain text
Not part of the specification.
GitHub
✗ plain text
Use the table, or the HTML <dl>, which GitHub does render.
GitLab
✗ plain text
Use the table or the bold-term list.
Obsidian
✗ plain text
Not in the editor; an HTML <dl> renders in reading view.
Discord, Reddit, Slack
✗ plain text
No HTML either — use the bold-term list.
Support is a property of the renderer, not of the file, so the same document can show a definition list in one place and a stray colon in another. When the destination is unknown, the two-column table is the only output that renders everywhere Markdown does.
Frequently Asked Questions
Does GitHub support Markdown definition lists?
No. GitHub renders CommonMark plus GitHub Flavored Markdown extensions, and definition lists are in neither, so a term line followed by ": definition" shows up as ordinary text with a colon in front of it. GitHub does render inline HTML, though, so the <dl> output above works in a README, an issue or a pull request. If you would rather stay in pure Markdown, use the two-column table.
What is the definition list syntax?
Write the term on its own line, then each definition on the next line starting with a colon and a space. One term may carry several definitions — one colon line each — and a blank line separates entries. A definition that runs to several paragraphs needs its continuation lines indented by four spaces. That is the PHP Markdown Extra rule, and kramdown, Pandoc, MultiMarkdown and Python-Markdown all follow it.
Which format should I use?
It depends on where the text is going, and nothing else. Publishing with Jekyll, Pandoc or another Markdown Extra descendant: use the colon syntax, it is the real thing. Publishing on GitHub or GitLab: use the HTML <dl> if you want proper semantics, or the two-column table if you want it to look tidy in the raw file too. Chat, Reddit or notes apps that strip HTML: use the bold-term list.
Can a term have more than one definition?
Yes. Put each definition on its own line under the term — the generator keeps them all. The colon syntax and the HTML <dl> express that directly, with one dd per definition; the table joins them into one cell with a <br> between them, because a table cell cannot hold a line break any other way; and the bold-term list nests them as sub-bullets.
Is anything I paste uploaded?
No. The parsing and every one of the five outputs are generated by JavaScript in this browser tab. Nothing is sent to a server, and your input is kept in this browser’s local storage only so a reload does not lose it.