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 reviewWhere 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 listsCheckbox support by platform
Task lists are a GitHub Flavored Markdown extension, so support varies more than for core syntax.
| Platform | Task lists | Note |
|---|---|---|
| GitHub | Yes | Clickable in issues, PRs and comments; static in files |
| GitLab | Yes | Adds [~] for inapplicable items and checkboxes in table cells |
| Obsidian | Yes | Clickable; any character inside the brackets counts as done |
| VS Code preview | Not built in | Add the Markdown Checkboxes extension |
| Notion | Shortcut only | Typing [] then space creates a to-do block |
| Jira, Confluence Cloud | Shortcut only | Typing [] in the editor creates an action item |
| Reddit, Discord | No | Brackets 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> ReviewFrequently 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 →