[{"data":1,"prerenderedAt":79},["Reactive",2],{"blog-post-markdown-task-lists-checkboxes-across-platforms":3},{"slug":4,"title":5,"description":6,"excerpt":7,"date":8,"category":9,"author":10,"keywords":11,"readingMinutes":12,"html":13,"headings":14,"tools":49,"related":52},"markdown-task-lists-checkboxes-across-platforms","Markdown Task Lists and Checkboxes Across Platforms: What's Actually Interactive","The `- [ ]` checkbox syntax looks the same everywhere, but whether it's actually clickable — and whether clicking it does anything — varies wildly across GitHub, GitLab, Confluence, Jira, Notion, Obsidian, and Linear. Here's what's real.","Type - [ ] Do the thing into a Markdown file and you'll get a checkbox almost everywhere — GitHub, GitLab, Notion, Obsidian, and most static site generators all recognize the syntax. What's…","2026-08-07","workflows","Matt Rathbone","markdown task list, markdown checkbox, interactive checkbox markdown, github task list, gitlab task list, notion checkbox, obsidian checkbox, jira checklist",8,"\u003Cp>Type \u003Ccode>- [ ] Do the thing\u003C/code> into a Markdown file and you&#39;ll get a checkbox almost everywhere — GitHub, GitLab, Notion, Obsidian, and most static site generators all recognize the syntax. What&#39;s inconsistent is what happens next. On some platforms that checkbox is genuinely clickable, and clicking it edits the real content. On others it renders as a checkbox-shaped image that does absolutely nothing when you click it — it&#39;s just a disabled \u003Ccode>&lt;input&gt;\u003C/code> tag with no logic wired up behind it. Confusing the two is an easy mistake to make, especially if your only experience is with the one platform where it happens to work.\u003C/p>\n\u003Cp>This guide covers where checkboxes are real, where they&#39;re decoration, and the couple of places task lists silently break outright — plus a mention of our new \u003Ca href=\"/tools/markdown-checklist\">Markdown Checklist Generator\u003C/a> if you just want clean, correctly-nested checklist syntax without hand-typing brackets and indentation. If you&#39;re looking for basic task list syntax itself rather than platform behavior, our \u003Ca href=\"/blog/markdown-task-lists-and-checkboxes-complete-guide\">complete guide to task lists and checkboxes\u003C/a> covers that ground.\u003C/p>\n\u003Ch2 id=\"github-interactive-in-issues-and-prs-static-in-files\">GitHub: Interactive in Issues and PRs, Static in Files\u003C/h2>\n\u003Cp>GitHub is the platform most people picture when they think of &quot;clickable Markdown checkboxes,&quot; and it&#39;s also the platform with the split behavior that trips people up.\u003C/p>\n\u003Cp>\u003Cstrong>In issue bodies, pull request descriptions, and comments\u003C/strong>, a \u003Ccode>- [ ]\u003C/code> checkbox renders as a real, clickable \u003Ccode>&lt;input type=&quot;checkbox&quot;&gt;\u003C/code> wired directly to the underlying issue/PR text. Click it (if you have write access, or you&#39;re the author) and GitHub edits the stored Markdown body for you, flipping \u003Ccode>[ ]\u003C/code> to \u003Ccode>[x]\u003C/code> in place. This is genuinely interactive — the checkbox state and the raw text are the same source of truth, always in sync.\u003C/p>\n\u003Cp>GitHub also does something useful with this automatically: any issue or PR containing a task list gets an &quot;N of M tasks complete&quot; progress count that shows up in the issue list, the sidebar, and anywhere that issue is referenced or linked from another issue. You don&#39;t have to configure anything for this — it&#39;s computed straight from the checkbox count in the body text.\u003C/p>\n\u003Cp>\u003Cstrong>In regular repository files\u003C/strong> — a README, a docs page, any \u003Ccode>.md\u003C/code> file rendered on github.com&#39;s file browser — the story is different. GitHub still renders the checkbox visually, but it&#39;s a disabled input with no click handler behind it, because there&#39;s no &quot;body&quot; concept to persistently update; it&#39;s just a static file being rendered as HTML. You can look at a checked-off roadmap in a README and it looks exactly like an interactive one, but nothing happens if you click it. This is the single most common source of confusion in this whole topic — people assume README checkboxes work like issue checkboxes because they&#39;re visually identical.\u003C/p>\n\u003Ch2 id=\"gitlab-the-same-split-as-github\">GitLab: The Same Split as GitHub\u003C/h2>\n\u003Cp>GitLab&#39;s behavior mirrors GitHub closely enough that if you understand one, you understand the other. Task lists inside \u003Cstrong>issue descriptions and merge request descriptions\u003C/strong> are interactive — click a checkbox and GitLab persists the change to the description text, and issue lists show a task-completion count the same way GitHub&#39;s does.\u003C/p>\n\u003Cp>Task lists rendered inside \u003Cstrong>wiki pages and regular repository files\u003C/strong> (README, any Markdown file in the file browser) are static, same as GitHub — visually identical checkboxes, no click behavior. If you&#39;re building internal documentation in a GitLab wiki and picturing an interactive checklist your team can tick off together, that&#39;s not what you&#39;ll get; you&#39;d want an actual issue or a dedicated task-tracking feature instead.\u003C/p>\n\u003Ch2 id=\"confluence-a-real-interactive-feature-but-its-not-the-markdown-syntax\">Confluence: A Real Interactive Feature, But It&#39;s Not the Markdown Syntax\u003C/h2>\n\u003Cp>Confluence has genuinely interactive, assignable task items — but they come from a distinct editor feature, not from typing GFM-style \u003Ccode>- [ ]\u003C/code> syntax. In the Confluence editor, typing \u003Ccode>[]\u003C/code> followed by a space (or using the Insert menu) creates an \u003Cstrong>Action Item\u003C/strong>: a real interactive checkbox that can be assigned to a person, given a due date, and tracked in Confluence&#39;s own Tasks report across the whole space. That&#39;s a more capable feature than a plain Markdown checkbox in most other tools.\u003C/p>\n\u003Cp>Where it gets inconsistent is pasting \u003Cem>raw Markdown\u003C/em> task list syntax into Confluence — through the \u003Ccode>/markdown\u003C/code> slash-command panel we&#39;ve \u003Ca href=\"/blog/markdown-in-confluence-what-works\">covered before\u003C/a>. Our own testing there found \u003Ccode>- [x]\u003C/code> syntax converts unreliably: sometimes it becomes a real Action Item, sometimes it just renders as literal bracket text, depending on the Confluence version and editor mode. If checkbox interactivity matters, use Confluence&#39;s native Action Item feature directly rather than relying on a Markdown paste to produce one.\u003C/p>\n\u003Ch2 id=\"jira-depends-entirely-on-which-editor-and-project-type\">Jira: Depends Entirely on Which Editor and Project Type\u003C/h2>\n\u003Cp>Jira wiki markup — the plain-text format used by Server, Data Center, and classic (non-next-gen) Cloud projects — has \u003Cstrong>no checkbox syntax at all\u003C/strong>. Typing \u003Ccode>- [ ] Task\u003C/code> into a wiki-markup field just renders as a literal bullet point followed by the literal characters \u003Ccode>[ ] Task\u003C/code>; there&#39;s nothing for the renderer to interpret, which is exactly what our own \u003Ca href=\"/tools/markdown-to-jira\">Markdown to Jira converter\u003C/a> produces when it hits checkbox syntax, since there&#39;s no Jira wiki-markup equivalent to convert it to.\u003C/p>\n\u003Cp>The modern Jira Cloud rich-text editor (used in team-managed/next-gen projects) does have a real interactive Task list block, but you reach it through the editor&#39;s Insert menu or its own autoformat shortcut, not by pasting GitHub-style Markdown. If your workflow involves generating Jira content programmatically, it&#39;s worth checking which editor your specific project type actually uses before assuming checkbox syntax will do anything.\u003C/p>\n\u003Ch2 id=\"notion-converts-to-a-real-block-not-rendered-markdown-text\">Notion: Converts to a Real Block, Not Rendered Markdown Text\u003C/h2>\n\u003Cp>Notion doesn&#39;t really &quot;render Markdown&quot; the way a static site or a GitHub file does — when you type or paste \u003Ccode>- [ ]\u003C/code> syntax, Notion converts it on the spot into one of its own native To-do blocks, which is a first-class, always-interactive, always-clickable element in Notion&#39;s block-based document model. There&#39;s no static/interactive split here the way there is on GitHub or GitLab, because by the time you see a checkbox in Notion, it&#39;s no longer &quot;Markdown&quot; at all — it&#39;s a Notion block that happens to have originated from Markdown syntax. We cover Notion&#39;s broader import behavior, including where this conversion does and doesn&#39;t kick in cleanly, in our \u003Ca href=\"/blog/markdown-for-notion-what-actually-works\">Markdown for Notion guide\u003C/a>.\u003C/p>\n\u003Ch2 id=\"obsidian-interactive-and-writes-back-to-the-file\">Obsidian: Interactive and Writes Back to the File\u003C/h2>\n\u003Cp>Obsidian is the one place in this list where &quot;interactive&quot; means something slightly different and arguably more useful: clicking a checkbox in Reading view or Live Preview doesn&#39;t just update some in-memory display state, it actually edits the \u003Ccode>.md\u003C/code> file on disk, flipping \u003Ccode>[ ]\u003C/code> to \u003Ccode>[x]\u003C/code> in the raw text. Since Obsidian vaults are just folders of plain Markdown files, that checkbox click is a real file write, not an API call against a hosted document like GitHub&#39;s. This makes Obsidian genuinely good for checklist-style notes you expect to interact with over time, and it&#39;s part of why the \u003Ca href=\"/blog/obsidian-plugins-for-developers\">Tasks community plugin\u003C/a> is popular — it extends this native checkbox behavior with due dates, recurring tasks, and query-based task views across your whole vault.\u003C/p>\n\u003Ch2 id=\"linear-live-markdown-shortcut-conversion\">Linear: Live Markdown-Shortcut Conversion\u003C/h2>\n\u003Cp>Linear&#39;s issue description editor supports Markdown-style shortcuts as you type, and task list syntax is one of them — typing \u003Ccode>- [ ]\u003C/code> converts it live into an interactive checklist item within the issue, similar in spirit to Notion&#39;s live-conversion behavior. As with Notion, once it&#39;s converted it&#39;s a native editor element rather than literal text sitting in a Markdown file, so there isn&#39;t a &quot;static file&quot; version of this to worry about the way there is with GitHub or GitLab.\u003C/p>\n\u003Ch2 id=\"quick-reference\">Quick Reference\u003C/h2>\n\u003Cdiv class=\"table-responsive\">\u003Ctable class=\"table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Platform\u003C/th>\n\u003Cth>Where checkboxes are interactive\u003C/th>\n\u003Cth>Where they&#39;re static or unsupported\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Cstrong>GitHub\u003C/strong>\u003C/td>\n\u003Ctd>Issues, PRs, comments (with auto task-count tracking)\u003C/td>\n\u003Ctd>Repository files (READMEs, docs) rendered on github.com\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>GitLab\u003C/strong>\u003C/td>\n\u003Ctd>Issue descriptions, merge request descriptions\u003C/td>\n\u003Ctd>Wiki pages, repository files\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Confluence\u003C/strong>\u003C/td>\n\u003Ctd>Native Action Items (typed via \u003Ccode>[]\u003C/code> or Insert menu)\u003C/td>\n\u003Ctd>Raw Markdown \u003Ccode>- [ ]\u003C/code> pasted via the \u003Ccode>/markdown\u003C/code> panel — inconsistent\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Jira\u003C/strong>\u003C/td>\n\u003Ctd>Cloud team-managed project rich-text editor&#39;s Task list block\u003C/td>\n\u003Ctd>Jira wiki markup (Server/Data Center/classic Cloud) — no checkbox syntax exists\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Notion\u003C/strong>\u003C/td>\n\u003Ctd>Always — converts to a native To-do block on entry\u003C/td>\n\u003Ctd>N/A — it&#39;s no longer Markdown once converted\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Obsidian\u003C/strong>\u003C/td>\n\u003Ctd>Reading view and Live Preview — writes back to the file\u003C/td>\n\u003Ctd>N/A — same file either way\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Linear\u003C/strong>\u003C/td>\n\u003Ctd>Issue description editor, live Markdown-shortcut conversion\u003C/td>\n\u003Ctd>N/A — converts on entry\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\u003C/div>\n\u003Ch2 id=\"the-automation-angle-githubs-completion-tracking\">The Automation Angle: GitHub&#39;s Completion Tracking\u003C/h2>\n\u003Cp>Worth calling out on its own, since it&#39;s easy to miss: GitHub computes checklist completion automatically, with zero configuration. Any issue or PR body with task list syntax gets a live &quot;3 of 7 tasks complete&quot; count wherever that issue is displayed — the issue list, the sidebar of a linked PR, search results. If you reference another issue as a checklist item (\u003Ccode>- [ ] #123\u003C/code>), GitHub can track that as a linked sub-issue and roll its completion into the parent&#39;s progress. This is genuinely useful for release checklists and multi-step feature tracking, and it&#39;s specific to GitHub — GitLab shows a similar per-issue completion count, but the cross-issue linking behavior isn&#39;t identical, so don&#39;t assume feature parity if you&#39;re moving a workflow between the two.\u003C/p>\n\u003Ch2 id=\"where-task-lists-break-outright\">Where Task Lists Break Outright\u003C/h2>\n\u003Cp>Two failure modes show up regardless of platform, because they&#39;re rooted in how Markdown parsers work rather than in any single renderer&#39;s choices:\u003C/p>\n\u003Cp>\u003Cstrong>Task lists inside table cells don&#39;t render as checkboxes.\u003C/strong> GFM table cells are parsed as inline content, and a task list is a block-level list construct — parsers don&#39;t recognize block elements inside a table cell, so \u003Ccode>- [ ]\u003C/code> typed into a pipe-table cell just shows up as literal text, brackets and all, on every platform we&#39;ve tested. If you need a checklist-style status column in a table, use a plain character (✅/⬜, or a simple &quot;Done&quot;/&quot;Pending&quot; column) instead of task list syntax.\u003C/p>\n\u003Cp>\u003Cstrong>Nested checkbox indentation is stricter than it looks.\u003C/strong> GFM expects consistent indentation — typically two spaces — for a nested task item to be recognized as a child of the item above it. Get the indentation wrong (three spaces, a stray tab, inconsistent indentation between sibling items) and the parser either treats the &quot;nested&quot; item as a new top-level list item or, on some renderers, breaks the list into two separate lists entirely. On GitHub specifically, this also affects whether a nested item&#39;s completion counts toward the parent&#39;s tracked progress, so a subtly wrong indent isn&#39;t just a cosmetic issue there.\u003C/p>\n\u003Cp>Hand-typing nested checklists with correct, consistent indentation is exactly the kind of small-but-annoying formatting task worth offloading — our \u003Ca href=\"/tools/markdown-checklist\">Markdown Checklist Generator\u003C/a> builds the syntax (including nesting) for you, so the raw Markdown is correct before it ever reaches whichever platform you&#39;re pasting it into.\u003C/p>\n\u003Ch2 id=\"related-reading\">Related Reading\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"/blog/markdown-task-lists-and-checkboxes-complete-guide\">Markdown Task Lists and Checkboxes: Complete Guide\u003C/a> — the syntax fundamentals and platform-specific formatting variations this post assumes you already know\u003C/li>\n\u003Cli>\u003Ca href=\"/blog/markdown-platform-compatibility-guide\">Markdown Across Platforms: What Actually Works in GitHub, Notion, Obsidian, and Confluence\u003C/a> — the broader platform-compatibility picture beyond just task lists\u003C/li>\n\u003Cli>\u003Ca href=\"/blog/why-your-markdown-isnt-rendering\">Why Your Markdown Isn&#39;t Rendering: A Troubleshooting Guide\u003C/a> — if a checklist you pasted somewhere isn&#39;t behaving the way you expected\u003C/li>\n\u003Cli>\u003Ca href=\"/blog/markdown-in-confluence-what-works\">Markdown in Confluence: What Actually Works\u003C/a> — more detail on Confluence&#39;s Action Item feature and \u003Ccode>/markdown\u003C/code> panel behavior\u003C/li>\n\u003Cli>\u003Ca href=\"/blog/markdown-to-jira-wiki-markup-guide\">Markdown to Jira Wiki Markup: The Complete Conversion Guide\u003C/a> — for the full Jira wiki-markup syntax picture\u003C/li>\n\u003C/ul>\n\u003Cp>And if you just want correctly-formatted checklist Markdown without hand-typing brackets and indentation, try the \u003Ca href=\"/tools/markdown-checklist\">Markdown Checklist Generator\u003C/a>.\u003C/p>\n",[15,19,22,25,28,31,34,37,40,43,46],{"id":16,"text":17,"level":18},"github-interactive-in-issues-and-prs-static-in-files","GitHub: Interactive in Issues and PRs, Static in Files",2,{"id":20,"text":21,"level":18},"gitlab-the-same-split-as-github","GitLab: The Same Split as GitHub",{"id":23,"text":24,"level":18},"confluence-a-real-interactive-feature-but-its-not-the-markdown-syntax","Confluence: A Real Interactive Feature, But It's Not the Markdown Syntax",{"id":26,"text":27,"level":18},"jira-depends-entirely-on-which-editor-and-project-type","Jira: Depends Entirely on Which Editor and Project Type",{"id":29,"text":30,"level":18},"notion-converts-to-a-real-block-not-rendered-markdown-text","Notion: Converts to a Real Block, Not Rendered Markdown Text",{"id":32,"text":33,"level":18},"obsidian-interactive-and-writes-back-to-the-file","Obsidian: Interactive and Writes Back to the File",{"id":35,"text":36,"level":18},"linear-live-markdown-shortcut-conversion","Linear: Live Markdown-Shortcut Conversion",{"id":38,"text":39,"level":18},"quick-reference","Quick Reference",{"id":41,"text":42,"level":18},"the-automation-angle-githubs-completion-tracking","The Automation Angle: GitHub's Completion Tracking",{"id":44,"text":45,"level":18},"where-task-lists-break-outright","Where Task Lists Break Outright",{"id":47,"text":48,"level":18},"related-reading","Related Reading",[50,51],"markdown-checklist","markdown-to-jira",[53,63,70],{"slug":54,"title":55,"description":56,"excerpt":57,"date":58,"category":59,"author":60,"keywords":61,"readingMinutes":62},"markdown-task-lists-and-checkboxes-complete-guide","Markdown Task Lists and Checkboxes: Complete Guide for Project Management","Master task lists and checkboxes in Markdown for project management, documentation, and productivity. Learn GitHub, GitLab, and platform-specific features with advanced formatting techniques.","Task lists and checkboxes are among Markdown's most practical features for project management, documentation, and collaborative workflows. They transform static text into interactive, trackable…","2025-08-19","Tutorial","Matthew Rathbone","markdown task lists, markdown checkboxes, markdown todo lists, github task lists, markdown project management, checkbox syntax markdown",9,{"slug":64,"title":65,"description":66,"excerpt":67,"date":68,"category":9,"author":10,"keywords":69,"readingMinutes":12},"markdown-callouts-admonitions-across-platforms","Markdown Callouts and Admonitions Across Platforms: What Actually Renders","GitHub's > [!NOTE] alert syntax, Obsidian's callouts, and MkDocs's admonition extension all look like variations on a theme — but they're three genuinely different syntaxes that mostly don't cross-render. Here's what works where.","Type > [!NOTE] into a Markdown file and on GitHub you get a styled, icon-prefixed callout box. Paste that exact same text into a plain CommonMark renderer, a Jekyll site with no plugin, or an…","2026-08-28","markdown callouts, github alerts, obsidian callouts, mkdocs admonitions, docusaurus admonitions, markdown warning box across platforms",{"slug":71,"title":72,"description":73,"excerpt":74,"date":75,"category":76,"author":60,"keywords":77,"readingMinutes":78},"markdown-footnotes-across-platforms","Markdown Footnotes Across Platforms: Where They Actually Render","GitHub, GitLab, Obsidian, and this very blog render [^1] footnotes natively — Notion, Slack, Jira, and Confluence don't support them at all. A platform-by-platform reference for where footnote syntax actually works.","Footnote syntax — a reference marker like [^1] in the body text, paired with a definition [^1]: The actual note. elsewhere in the document — looks the same everywhere you write it. Whether it…","2026-09-25","Reference","markdown footnotes across platforms, github footnotes, gitlab footnotes, notion footnotes, obsidian footnotes support",5,1792184947016]