# Standards

CommonMark vs GitHub Flavored Markdown

Last updated July 2026

CommonMark is the precise, unambiguous specification of core Markdown. GitHub Flavored Markdown (GFM) is CommonMark plus four extensions: tables, task lists, strikethrough, and autolinks. So anything valid in CommonMark is already valid GFM; the extensions are the only difference.

Markdown began as a single script with loose rules, so the same text could render differently depending on which tool you opened it in. CommonMark fixed that by writing the rules down exactly. GFM builds on those rules rather than replacing them.

Why a standard matters

Markdown is plain text, but plain text only stays portable if every tool agrees on what it means. Before CommonMark, two asterisks might be bold in one app and left alone in another. A nested list might break. The standard removes the guessing.

CommonMark defines how each piece of syntax behaves, down to the edge cases. So text you write in one editor renders the same way in the next.

Plain CommonMark looks like this:

# Project notes

A short paragraph with **bold** and *italic* text.

- First item
- Second item
  - A nested item

> A blockquote, for an aside.

Then a line with some `inline code` in it.

That gives you a heading, a paragraph with bold and italic, a bulleted list with one nested item, a blockquote, and a line of inline code. Any CommonMark-compliant tool renders it identically, which is the entire point of the spec.

What GitHub Flavored Markdown adds

GFM is a superset. It keeps all of CommonMark and adds four extensions people reach for constantly in READMEs, docs, and issues.

Tables

CommonMark has no table syntax. GFM adds one using pipes and a divider row.

| File      | Size  | Done |
| --------- | ----- | ---- |
| notes.md  | 4 KB  | yes  |
| draft.md  | 12 KB | no   |

You get a three-column table: a header row, then two rows of data. The dashes under the header mark where the body begins.

Task lists

A task list is a bulleted list where each item is a checkbox, written with square brackets.

- [x] Write the draft
- [ ] Edit the draft
- [ ] Publish

The first box is ticked, the other two empty. In a tool that supports them, the boxes are interactive.

Strikethrough

Wrap text in double tildes to strike it through.

The deadline is ~~Friday~~ Monday.

"Friday" gets a line through it, followed by "Monday." Handy for showing a change without deleting the original.

In plain CommonMark, a bare URL stays as text unless you wrap it in link syntax. GFM turns a bare URL into a clickable link on its own.

Read more at https://commonmark.org for the full spec.

The address becomes a clickable link, no angle brackets or [text](url) wrapper required.

Which one should you write in

Write GFM. It is the most widely supported flavor, and since it is a superset of CommonMark, anything written in plain CommonMark is already valid GFM. Stick to tables, task lists, strikethrough, and autolinks for your extras and your files render correctly almost everywhere: GitHub, most static-site generators, and Unmarked.

In Unmarked

Unmarked renders CommonMark and the GFM extensions for tables, task lists, and strikethrough. The parser is Apple's swift-markdown. Task list checkboxes are clickable in Read mode, so ticking one writes the change straight to your file.

Autolinks are the one extension to watch. Write your links with explicit [text](url) syntax to be sure they render as links in every tool.

Unmarked is a free, private Markdown reader and editor for Mac. Read the story , or get in touch.