Using Markdown Task Lists for Blog TODO Tracking
Embed task lists into your Markdown blog drafts to track drafting, editing, and publishing stages. Learn the syntax, rendering support, a practical example, and limitations of this lightweight TODO system.
07 Oct 2026, 03:28 UTC

Problem: Tracking Blog Drafts Without Extra Tools
Authors often keep a running list of tasks—drafting, editing, publishing—inside their Markdown files. Without a dedicated task manager, these lists become static notes that are hard to update and easy to lose. Markdown’s task list syntax offers a lightweight solution that integrates directly into the source and renders as clickable checkboxes in modern editors and static site generators.
What Are Markdown Task Lists?
Task lists are a GitHub‑Flavored Markdown (GFM) extension. A line beginning with - [ ] or + [ ] creates an unchecked box; - [x] creates a checked box. The syntax is:
- [ ] Draft the introduction
- [x] Finish the conclusion
The square brackets are interpreted by the parser and rendered as an <input type="checkbox"> element. The state (checked/unchecked) is purely visual in the rendered output unless additional JavaScript is added.
Rendering Support Across Tools
- GitHub – Renders task lists as interactive checkboxes; clicking toggles the state in the web UI but does not modify the source file.
- VS Code – The Markdown preview shows clickable boxes; the editor can toggle state when the preview is active.
- Hugo, Jekyll, MkDocs – Most static site generators use a GFM‑compatible parser (e.g.,
blackfriday,Goldmark), so task lists appear as checkboxes in the generated HTML. - Legacy Parsers – Some minimal renderers strip the brackets and display the raw text; verify your parser’s capabilities before relying on the feature.
Practical Example: A Blog Draft with a TODO List
Below is a minimal draft file post.md that uses a task list to track stages of a blog article. The file can be edited locally, committed to Git, and rendered by your static site generator.
# My New Feature Post
## TODO
- [ ] Write the introduction
- [ ] Draft the technical section
- [ ] Review the code samples
- [ ] Publish the article
## Content
(Your markdown content goes here.)
After committing, the ## TODO section will appear as a list of checkboxes in the rendered site. To mark a task as done, simply edit the Markdown file and replace [ ] with [x] before pushing the change. If you prefer to toggle the state from the preview, open post.md in VS Code, switch to the preview pane, and click the checkbox. The change will be reflected in the source when you save.
Checking the Result
Verify that your parser supports task lists by:
- Render
post.mdlocally and open the generated HTML. - Inspect the
<li>elements containing the tasks. They should include an<input type="checkbox">element. - Toggle a checkbox in the preview (e.g., VS Code). Save the file and ensure the source now contains
[x]for that item.
Limitations and Trade‑offs
- State Not Persisted in HTML – The rendered checkbox state is not stored in the static HTML file. Refreshing the page resets the view to the original state defined in the source.
- Accessibility Concerns – Screen readers may not announce the checkbox state unless additional ARIA attributes are added manually.
- Requires GFM‑Compatible Parser – If your build pipeline uses a minimal Markdown engine, the syntax will be ignored or displayed literally.
- Manual Updates Needed – Changing the checkbox state requires editing the Markdown file; automated tools can be built to batch‑update tasks via scripts.
Actionable Closing
Embed task lists into your blog drafts to keep a live TODO list that’s part of the source. Test your static site generator or editor to confirm support, and consider adding a small JavaScript snippet if you need the checkbox state to persist on the client side. For most use cases, the simplicity of editing [ ] to [x] in the Markdown file provides a clean, version‑controlled workflow for blog authors.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.