Skip to main content

Markdown Checkbox

How to create Markdown checkboxes and task lists. Covers checked - [x], unchecked - [ ], nested tasks, GitHub clickables, and where they render.

Basic Syntax

A Markdown checkbox is an unordered list item with a bracket pair after the marker. Use a space for unchecked and an x for checked.

Simple task list
- [ ] Buy groceries
- [x] Walk the dog
- [ ] Write the changelog
Preview
  • Buy groceries
  • Walk the dog
  • Write the changelog

The bracket must contain exactly one character: a space or an x. The marker, bracket, and text each need a single space between them.

Checked vs Unchecked

Swap the space for an x to mark a task done. Some renderers accept an uppercase X, but lowercase is the safe default.

Checked and unchecked tasks
- [x] Merge pull request #42
- [x] Deploy to staging
- [ ] Run smoke tests
Preview
  • Merge pull request #42
  • Deploy to staging
  • Run smoke tests

Nested Tasks

Indent child checkboxes by two spaces. Keep siblings at the same indent so the parser nests them correctly. This is the standard way to build a Markdown checklist with sub-tasks.

Nested checklist
- [ ] Ship v2.0
  - [x] Finalize API
  - [x] Write docs
  - [ ] Update screenshots
- [ ] Announce release
Preview
  • Ship v2.0
    • Finalize API
    • Write docs
    • Update screenshots
  • Announce release

Do not mix indentation within the same nesting level. A one-space difference can flatten nested tasks or attach a child to the wrong parent.

GitHub Clickables

On GitHub, a task list in an issue, pull request, or comment renders as live checkboxes. Clicking a checkbox edits the source Markdown in place and updates the task progress shown next to the list heading.

Pull-request checklist
- [ ] Must be done before merge
- [ ] Change is backwards compatible
- [ ] Tests pass locally
How it looks on GitHub
  • Must be done before merge
  • Change is backwards compatible
  • Tests pass locally

On GitHub these checkboxes are clickable and count toward the task-progress meter.

Read-only elsewhere: The checkboxes on this page and in most static-site previews are disabled. Only GitHub (and GitLab's issue/MR view) makes them interactive out of the box.

Multiple Checklists in One Doc

A blank line starts a new list. If you want separate task lists under different headings, end the first list with a blank line before the next heading.

Two separate task lists
Today:
- [x] Check metrics
- [ ] Reply to blocked PRs

This week:
- [ ] Interview candidates
Preview

Today:

  • Check metrics
  • Reply to blocked PRs

This week:

  • Interview candidates

Common Mistakes

Checkboxes fail because of bracket spacing, list-marker choice, or indentation. Each row shows the broken version and the corrected one side by side.

Broken

- [] Empty task

Fixed

- [ ] Empty task
A space is required inside the brackets. Empty brackets render as literal text.

Broken

- [ x ] Task

Fixed

- [x] Task
Only one character is allowed inside the brackets. Extra spaces break the checkbox parser.

Broken

1. [ ] Numbered task

Fixed

- [ ] Numbered task
Task list syntax is defined on unordered list items. Using ordered-list numbering makes rendering inconsistent across platforms.

Broken

- [x]Task

Fixed

- [x] Task
A space is required after the closing bracket. Without it, the line becomes plain text.

Broken

- [x] Item 1
  - [x] Subtask A
 - [ ] Subtask B

Fixed

- [x] Item 1
  - [x] Subtask A
  - [ ] Subtask B
Siblings at the same nesting level must use identical indentation. Mixed indents can flatten or break the nested list.

Quick Reference

SyntaxResultNotes
- [ ] taskUncheckedSpace inside brackets
- [x] taskCheckedLowercase x is safest
- [X] taskCheckedUppercase works on some parsers
- [ ] taskNested taskIndent 2 spaces under parent
* [ ] taskUncheckedAsterisk works too, but hyphen is conventional

Platform Support

Task lists depend on GFM support. This table tells you where checkboxes render and where they stay as plain text.

PlatformSupported?Notes
GitHubYesClickable checkboxes in issues and PRs; nested tasks render correctly.
GitLabYesRenders interactive task lists in issues and merge requests.
ObsidianYesLive Preview shows clickable checkbox tasks.
NotionYesPasting a task list converts it into native to-do blocks.
VS Code previewYesBuilt-in preview renders GFM task lists (read-only).
Docusaurus / VitePress / AstroYesRemark plugins render task lists with checkboxes.
DiscordPartialRenders the list marker but not the checkbox character.
SlackNomrkdwn does not support task list syntax.
Reddit (new)PartialShows list items and brackets, not native checkboxes.
Reddit (old)NoTask list syntax is not supported.
CommonMarkPartialTask lists are a GFM extension, not part of the core spec.

Frequently Asked Questions

How do you make a checkbox in Markdown?

Use an unordered list item followed by a pair of brackets: `- [ ] Unchecked task` or `- [x] Checked task`. The space or `x` must be the only character inside the brackets.

What Markdown syntax creates a checked box?

Place a lowercase `x` inside the brackets: `- [x] Completed task`. Some parsers also accept an uppercase `X`, but lowercase `x` is the most portable.

Are Markdown checkboxes part of standard Markdown?

No. Task lists are a GitHub Flavored Markdown (GFM) extension. They work on GitHub, GitLab, Obsidian, Notion, and most static-site generators, but not in CommonMark by itself.

Can you nest checkboxes in Markdown?

Yes. Indent the child task by two spaces under its parent item: ``` - [ ] Parent - [ ] Child ``` GFM renderers indent the child checkbox visually.

Can you click Markdown checkboxes on GitHub?

Yes. In GitHub issues, pull requests, and comments, GFM checkboxes are interactive. Clicking a checkbox updates the source Markdown in place and triggers a progress check next to the task list heading.

Why does my Markdown checkbox not render?

Common causes are missing spaces inside the brackets (`-[ ]` or `-[x]`), extra spaces around the `x`, missing space after the closing bracket, or using an ordered list number instead of a hyphen.

Does Notion support Markdown checkboxes?

Yes, when you paste Markdown into Notion. A `- [ ] task` list converts into a native Notion to-do block. You can also type `/to` in Notion directly.

How do you write a Markdown to-do list?

A Markdown to-do list is just a task list: write each item as `- [ ] Task name`. Mark completed items with `- [x]`. Combine them with nested indentation for sub-tasks and headings to group related work.

Related Markdown Guides

Checkboxes are an extension of Markdown lists. For related syntax and platform guides: