Markdown Checkboxes (Task Lists)

Updated

Create a checkbox in Markdown with a list item followed by square brackets: "- [ ]" for an unchecked box and "- [x]" for a checked one. This is GitHub Flavored Markdown task list syntax.

Task list syntax

The space inside the empty brackets is required: "- []" without it will not render as a checkbox on GitHub.

- [ ] Write the report
- [x] Convert it to PDF
- [ ] Send for review

Where checkboxes work

Task lists are a GFM extension, not core Markdown. They render on GitHub (issues, PRs, READMEs), GitLab, Obsidian, Notion, and in MDTool converters, but not in strict CommonMark parsers.

On GitHub issues and PRs, checkboxes are interactive: clicking them updates the source. In READMEs they render as static checked/unchecked boxes.

Why isn’t my checkbox rendering?

Work through four checks. First, the brackets need a space inside them: "[ ]", not "[]". Second, the brackets must follow a list marker and a space: "- [ ]", "* [ ]" and "1. [ ]" all work, but a bare "[ ]" at the start of a line is just text. Third, some parsers need a blank line between a paragraph and the list that follows it, so add one. Fourth, check that your platform supports task lists at all: VS Code’s built-in preview, Reddit, Discord and strict CommonMark parsers show the brackets literally.

- [] Broken: no space inside the brackets
-[ ] Broken: no space after the hyphen
[ ] Broken: no list marker

Some intro text.

- [ ] Works: list marker, space, [ ], space
* [ ] Works with asterisks too
1. [ ] And in numbered lists

Checkbox support by platform

Task lists are a GitHub Flavored Markdown extension, so support varies more than for core syntax.

PlatformTask listsNote
GitHubYesClickable in issues, PRs and comments; static in files
GitLabYesAdds [~] for inapplicable items and checkboxes in table cells
ObsidianYesClickable; any character inside the brackets counts as done
VS Code previewNot built inAdd the Markdown Checkboxes extension
NotionShortcut onlyTyping [] then space creates a to-do block
Jira, Confluence CloudShortcut onlyTyping [] in the editor creates an action item
Reddit, DiscordNoBrackets display as text

Checkboxes on one line or inside a table

GFM checkboxes only exist as list items, so you cannot put several on one line or inside a table cell on GitHub. Three workarounds: Unicode ballot boxes (☐ and ☑) or emoji, which display everywhere; HTML input elements, which work where raw HTML is allowed but are stripped by GitHub; and GitLab, which accepts [ ] or [x] as the only content of a table cell.

| Task   | Done |
|--------|:----:|
| Draft  |  ☑   |
| Review |  ☐   |

<!-- Raw HTML renderers only (GitHub strips <input>) -->
<input type="checkbox" checked disabled> Draft
<input type="checkbox" disabled> Review

Frequently Asked Questions

Why is my Markdown checkbox not rendering?

Three usual causes: no space inside the empty brackets ("- []" instead of "- [ ]"), no space after the hyphen, or a parser that only supports core Markdown without the GFM task-list extension.

Do Markdown checkboxes convert to PDF and Word?

Yes. MDTool renders task list items as checked/unchecked boxes in both its PDF and Word converters.

Should I write [x] or [X] for a checked box?

Both work. The GFM spec accepts a lowercase or uppercase x, and GitHub writes a lowercase x when you tick a box in an issue, so [x] is the usual convention. Obsidian is looser and treats any character inside the brackets as checked.

How do I mark a task as N/A or partially done?

Standard Markdown has only checked and unchecked. GitLab adds [~] for inapplicable tasks, shown struck through and excluded from the count. Elsewhere, cross the item out with ~~strikethrough~~ or add a note such as "(N/A)" or "(in progress)" after the text.

Try it live

Paste this syntax into the free markdown to pdf converter and see the rendered output instantly. No signup, and everything runs in your browser.

Open Markdown to PDF Converter →

More Markdown syntax: