Todo.md
Manage tasks in plain Markdown, right in VS Code.
Inspired by todo.txt, but not strictly compliant - it uses Markdown checkbox syntax and extends the format with nesting and custom metadata.
Syntax
Tasks are standard Markdown checkboxes.
Enrich them with optional inline markers:
- [ ] (A) Task title +project @context #tag due:2025-06-01
- [x] Completed task completed:2025-05-20
- [ ] Sub-task (indented child)
- Any indented non-task line is treated as a note
| Marker |
Example |
Meaning |
| Priority |
(A) (B) (C) |
Priority level, A–Z |
| Project |
+project |
Project label |
| Context |
@context |
Context label |
| Tag |
#tag |
Freeform tag |
| Due date |
due:2025-06-01 |
Due date in ISO format |
| Completion |
completed:2025-05-20 |
Auto-appended on completion |
| Custom |
key:value |
Any key:value pair (configurable) |
Example
- [ ] (A) Prepare v2.0 release +release @writing due:2025-06-15
- [ ] Write release notes +release @writing #draft
- Keep it user-facing; skip internal refactors
- [ ] Update landing page copy +release @frontend
- [x] Freeze feature scope completed:2025-05-28
- [ ] (B) Refactor authentication +backend due:2025-06-30
- [ ] Replace token library +backend @security #breaking-change
- New library supports RS256 and ES256
- [ ] Add refresh token endpoint +backend
- [ ] Update integration tests +backend @ci
- [ ] Team retrospective @team due:2025-06-27
- [ ] Send calendar invite @team
- [ ] Prepare slide deck @writing
- Async notes go here as plain indented lines
- [x] Set up CI pipeline +devops @ci completed:2025-05-10
- [x] Configure GitHub Actions completed:2025-05-08
- [x] Add lint and test steps completed:2025-05-09
Views
The extension adds a sidebar with some views:
Tasks - mirrors the structure of your todo.md file.
Each item shows the task label and, for incomplete tasks, the due date (relative or ISO).
Overdue tasks are marked with a warning icon.
The view toolbar provides:
- Add a new task (also available via command palette: Todo.md: Add Task)
- Sort by priority or due date
- Filter by tag, project, or context
Tags / Projects / Contexts - grouped lists of all metadata values found in the file.
Clicking an entry shows all tasks that carry it.
Right-clicking a value lets you rename it across the entire file.
Keybindings
These shortcuts work when the cursor is on a task line in your todo file:
| Shortcut |
Action |
Alt+X |
Toggle completion ([ ] <--> [x]) |
Alt+P |
Set priority (QuickPick A–Z or None) |
Alt+D |
Set due date (presets or custom input) |
Alt+J |
Add project tag |
Alt+C |
Add context tag |
Alt+T |
Add tag |
Settings
| Setting |
Default |
Description |
todomd.todoFile |
"todo.md" |
File name to track (relative to workspace root) |
todomd.metadataKeys |
[] |
Additional key:value keys to highlight (due and completed are always highlighted) |
todomd.dateDisplayFormat |
"relative" |
Due date display in the Tasks view: "relative" or "iso" |
todomd.recordCompletionDate |
true |
Append completed:YYYY-MM-DD automatically when a task is completed |