Markdown Checkbox Generator

Set the item text, state, count and indent level, then copy a task list that renders correctly on GitHub. Everything runs locally in your browser.

Free · No sign-up · Runs in your browserLast updated

How do you make a checkbox in Markdown?

Start a list item with a hyphen, then add square brackets: `- [ ] task` renders an unchecked checkbox and `- [x] task` a checked one. The space inside the empty brackets is required. This task list syntax comes from GitHub Flavored Markdown, so it works on GitHub, GitLab, Obsidian and Notion, but not in original Markdown.

markdown
- [ ] Unchecked task
- [x] Completed task

Renders as a bulleted list where each item carries a checkbox — the first empty, the second ticked. On GitHub and GitLab the boxes are clickable and toggling one rewrites the underlying Markdown.

Try the Markdown Checkbox Generator

Checkbox settings

First item state
Indent level

Output

Markdown checkbox syntax explained

A checkbox is not a standalone element — it is a list item with a state marker. Get the list marker, the brackets and the spacing right and the checkbox appears; miss any of the three and you get literal square brackets on the page.

Basic checked and unchecked items

Any unordered list marker works: hyphen, asterisk or plus. Inside the brackets, a single space means unchecked and a lowercase x means checked. A capital X is also accepted by GitHub Flavored Markdown.

markdown
- [ ] Write the migration script
- [x] Review the schema change
* [ ] Asterisk markers work too
+ [x] So do plus signs

Four checkbox items in one list: items one and three unchecked, items two and four ticked.

Nested subtasks

Indent a child item by two spaces to nest it under its parent. GitHub counts nesting from the parent's content column, so keep indentation consistent — mixing tabs and spaces is the most common reason nesting silently flattens.

markdown
- [ ] Ship v2 release
  - [x] Freeze the API surface
  - [ ] Update the changelog
    - [ ] Add migration notes
- [x] Cut the release branch

A two-level hierarchy. The parent tasks sit flush left, subtasks are indented one level, and the migration note is indented two levels.

Formatting inside a task item

Task item text is ordinary Markdown, so bold, links, inline code and strikethrough all work. Strikethrough on a completed item is a common convention for making done work visually recede.

markdown
- [x] ~~Migrate the legacy `users` table~~
- [ ] **Blocked:** waiting on [ticket #482](https://example.com/482)
- [ ] Rename `getUserByID` to `getUserById`

The first item is ticked with struck-through text; the second shows a bold label plus a live link; the third shows two inline code spans.

Mistakes that break the checkbox

Three formatting errors account for almost every broken task list. All three render as plain text with the brackets visible instead of a checkbox.

markdown
- [] Missing the space inside the brackets
- [x]No space after the closing bracket
[ ] No list marker at the start of the line

None of these three lines produce a checkbox. Each is displayed literally, brackets and all.

HTML fallback for parsers without task lists

When a renderer does not support GitHub Flavored Markdown task lists but does allow raw HTML, use an input element. Add disabled so readers cannot toggle a state that is never saved anywhere.

markdown
<ul>
  <li><input type="checkbox" disabled> Unchecked task</li>
  <li><input type="checkbox" checked disabled> Completed task</li>
</ul>

Produces the same visual list of checkboxes, rendered by the browser rather than the Markdown parser, with the boxes greyed out and non-interactive.

Checkboxes in an ordered list

The bracket marker also attaches to numbered list items, which is useful when steps must be followed in order rather than picked off in any sequence.

markdown
1. [x] Install the CLI
2. [x] Authenticate
3. [ ] Run the first deploy

A numbered list where each step carries a checkbox; the first two are ticked. GitHub and GitLab both support this form.

Where Markdown checkboxes work

Task lists are a GitHub Flavored Markdown extension, not part of the original Markdown spec, so support is far less universal than for bold or headings. Interactivity varies even among platforms that render the boxes.

PlatformSupportNotes
GitHubFullClickable in issues, PRs, comments and wikis; toggling edits the source. Read-only in README files.
GitLabFullClickable in issues, merge requests and wikis, with a progress counter on the list.
ObsidianFullClickable in reading and live preview modes; custom states such as [/] are supported by themes.
NotionPartialPasting - [ ] converts it into a native to-do block rather than keeping Markdown syntax.
VS Code previewPartialBoxes render but are not clickable; extensions add toggling in the editor.
Discord / SlackNoneNeither supports task lists. Use a bullet list with ☐ and ☑ characters instead.
RedditNoneThe Markdown editor renders - [ ] as literal text with the brackets visible.

How to generate a Markdown checkbox list

  1. Enter the task text

    Type the label for your tasks. The generator numbers each item so you get a ready-to-edit skeleton rather than repeated identical lines.

  2. Set the first item state

    Choose unchecked or checked to see exactly how the [ ] and [x] markers differ in the output.

  3. Pick the item count and indent level

    Choose how many items to generate, and set an indent level if the list is meant to nest under an existing parent task.

  4. Copy the output

    Copy the Markdown, or switch to the HTML tab if your platform does not support GitHub Flavored Markdown task lists.

  5. Check the preview

    Open the preview tab to confirm the boxes render and the nesting lands where you expect before pasting into your issue or README.

Frequently Asked Questions

How do I create a checkbox in Markdown?

Write a list item whose text begins with square brackets: - [ ] for an unchecked box and - [x] for a checked one. The hyphen, the space after it, the bracket pair and the space after the closing bracket are all required. Asterisks and plus signs work as list markers too.

Why is my Markdown checkbox not rendering?

There are four common causes. You wrote - [] with no space inside the brackets. You omitted the space after the closing bracket. You forgot the list marker at the start of the line. Or the platform does not support GitHub Flavored Markdown task lists at all, in which case the brackets always show literally.

How do I create nested or indented checkboxes?

Indent the child item by two spaces relative to its parent, then write the checkbox as normal. Each additional level adds another two spaces. Keep the indentation consistent and avoid mixing tabs with spaces, because a mismatch makes the child item render as a sibling instead of a subtask.

Which platforms support Markdown checkboxes?

GitHub, GitLab, Obsidian, Typora, Notion, Joplin, Bitbucket and most static site generators that use a GitHub Flavored Markdown parser. Discord, Slack, Reddit and strict CommonMark parsers do not support them and will show the brackets as plain text.

Does a capital X work in a Markdown checkbox?

Yes. GitHub Flavored Markdown treats - [X] and - [x] identically, both producing a checked box. Lowercase is the more common convention and is what most editors and formatters normalise to, so prefer it for consistency across a repository.

How do I make Markdown checkboxes clickable?

Clickability is a platform feature, not a syntax feature. On GitHub and GitLab, task lists inside issues, pull requests, merge requests and wiki pages are clickable, and toggling a box rewrites the stored Markdown. In README files and static sites the same syntax renders read-only.

What can I use if my platform does not support checkboxes?

Two workarounds cover most cases. Use the Unicode ballot characters in a normal bullet list, such as ☐ for open and ☑ for done. Or, if raw HTML is allowed, write an input element with type checkbox and the disabled attribute so the box renders without being interactive.

Can I use bold text, links or code inside a task list item?

Yes. Everything after the closing bracket is parsed as normal inline Markdown, so bold, italics, inline code, links, images and strikethrough all work. Marking a finished item with strikethrough is a common convention for visually retiring completed work.

What is the difference between a Markdown checkbox and a task list?

They describe the same feature at different scopes. A checkbox is one list item written as - [ ] or - [x]; a task list is the list containing them. The specification name is task list, while checkbox is what most people search for.

Do Markdown checkboxes work in Discord or Slack?

No. Neither platform implements GitHub Flavored Markdown task lists, so - [ ] appears as literal text with the brackets visible. Use a bullet list with the ☐ and ☑ characters, or with emoji, to convey the same open and done states in chat.