TODO comments are everywhere in software development, but they're inconsistent and unstructured:
# TODO: Fix this later
# TODO(john): Refactor by Friday
# TODO [HIGH]: Memory leak in parser
# FIXME: This is urgent!!!
# @todo implement caching - due 2025-02-01This inconsistency means:
- No tooling interoperability β Each IDE, linter, and project tracker parses TODOs differently
- Lost context β Priority, ownership, and deadlines are expressed ad-hoc or not at all
- No lifecycle management β TODOs are created but rarely tracked to completion
- Scattered information β Task context lives in code, Jira, Linear, GitHub Issues, and Slack separately
A lightweight, universal format that works inline anywhere text exists:
// TODO: Implement caching layer π
2026-02-15 β« @simenandre #backend- [ ] Review PR for auth module π
2026-01-20 π every friday #security# TODO: Refactor database connection pooling π
2026-03-01 β« π TODO-1234The format must be instantly understandable without documentation. A developer glancing at a TODO should immediately grasp its meaning.
Consistent syntax enables tooling: IDE plugins, linters, CI/CD integrations, and synchronization with external task managers.
Works in any text context:
- Source code comments (any language)
- Markdown task lists
- Plain text files
- Git commit messages
- Documentation
- Configuration files
A taskspec annotation is still a valid, readable TODO even in tools that don't understand the format. The metadata enhances but doesn't obscure.
Every metadata field is optional. A simple // TODO: Fix bug is valid. Metadata can be added incrementally as needed.
Where possible, align with existing standards:
- Dates: ISO 8601 / RFC 3339 (
YYYY-MM-DD) - Recurrence: Inspired by iCalendar RRULE (RFC 5545)
- Identifiers: Flexible, supporting UUIDs or external references
<description> [metadata...]
Metadata fields can appear in any order after the description.
| Field | Text Alternative | Emoji | Example |
|---|---|---|---|
| Due Date | due: |
π | due:2026-02-15 or π
2026-02-15 |
| Scheduled Date | scheduled: |
β³ | scheduled:2026-02-01 |
| Start Date | start: |
π« | start:2026-01-15 |
| Priority | priority: or p: |
πΊβ«πΌπ½β¬ | p:highest or πΊ |
| Recurrence | repeat: or rec: |
π | rec:weekly or π every week |
| Identifier | id: |
π | id:TODO-1234 or π TODO-1234 |
| Assignee | @ |
π€ | @martin or @team-backend |
| Tags/Projects | # or + |
β | #backend or +ProjectX |
| Status | status: |
β π§β | status:in-progress |
| Created Date | created: |
β | created:2026-01-01 |
| Completed Date | done: |
β | done:2026-01-20 |
| Estimate | estimate: |
β±οΈ | estimate:2h or β±οΈ 2h |
| Level | Emoji | Text Values |
|---|---|---|
| Highest | πΊ | highest, critical, 1 |
| High | β« | high, 2 |
| Medium | πΌ | medium, normal, 3 |
| Low | π½ | low, 4 |
| Lowest | β¬ | lowest, 5 |
Simple patterns (human-friendly):
π every day
π every week
π every month
π every friday
π every 2 weeks
π every weekday
Advanced patterns (RRULE-compatible for tooling):
rec:FREQ=WEEKLY;BYDAY=MO,WE,FR
rec:FREQ=MONTHLY;BYMONTHDAY=15
| Status | Emoji | Meaning |
|---|---|---|
todo |
β¬ | Not started (default) |
in-progress |
π§ | Currently being worked on |
done |
β | Completed |
cancelled |
β | Will not be done |
blocked |
π« | Waiting on something |
The default, most compatible format:
// TODO: Implement user authentication due:2026-02-15 p:high @sarah #securityAn alternative format, optimized for readability and modern editor support:
// TODO: Implement user authentication π
2026-02-15 β« @sarah #securityBoth can coexist:
// TODO: Implement user authentication π
2026-02-15 p:high @sarah #securityJavaScript/TypeScript:
// TODO: Add input validation π
2026-02-01 β« #security
// FIXME: Memory leak in event handler π
2026-01-20 π BUG-456 @johnPython:
# TODO: Optimize database queries π
2026-03-01 πΌ #performance
# TODO: Add retry logic for API calls π every sprint @backend-teamGo:
// TODO: Implement graceful shutdown π
2026-02-15 β« π TASK-789Rust:
// TODO: Replace unwrap() with proper error handling π
2026-01-30 πΌ #tech-debtHTML/JSX:
<!-- TODO: Add aria labels for accessibility π
2026-02-01 #a11y -->CSS:
/* TODO: Replace with CSS variables π
2026-02-15 π½ #refactor */Shell:
# TODO: Add error handling for missing env vars π
2026-01-25 β«## Sprint 23 Tasks
- [ ] Design new onboarding flow π
2026-02-01 β« @design-team #ux
- [ ] Implement OAuth2 integration π
2026-02-15 πΌ @martin #auth
- [ ] Write API documentation π
2026-02-20 π½ #docs
- [x] Fix login redirect bug β
2026-01-18 π BUG-123Meeting Notes - 2026-01-15
==========================
Action items:
- TODO: Send proposal to client π
2026-01-17 β« @sarah
- TODO: Schedule follow-up meeting π
2026-01-20 π every 2 weeks
- TODO: Review contract terms π
2026-01-22 @legal-team
feat: Add user profile endpoint
TODO: Add rate limiting π
2026-02-01 #security
TODO: Add caching layer π
2026-02-15 πΌ #performance
- Syntax highlighting for taskspec metadata
- Inline date pickers and priority selectors
- TODO panel with filtering and sorting
- Jump-to-definition for referenced issues
taskspec listβ List all TODOs in a projecttaskspec lintβ Validate TODO formattaskspec syncβ Sync with external tools (Linear, Jira, GitHub Issues)taskspec reportβ Generate TODO reports
- Fail builds on overdue high-priority TODOs
- Auto-create issues from new TODOs
- Track TODO debt over time
- GitHub Issues: Two-way sync between code TODOs and issues
- Linear: Create/update Linear issues from TODOs
- Jira: Link TODOs to Jira tickets via ID
- Slack: Notify on approaching due dates
The original plain-text TODO format. taskspec extends similar concepts but:
- Works inline in any text (not just dedicated files)
- Adds emoji syntax for visual clarity
- Includes more metadata fields (recurrence, estimates, etc.)
GFM defines - [ ] task list syntax. taskspec:
- Builds on top of GFM task lists
- Adds structured metadata after the description
The VTODO component defines task properties. taskspec:
- Draws inspiration from VTODO fields (PRIORITY, DUE, RRULE)
- Uses simplified, human-readable syntax
- Designed for inline annotation, not standalone files
Popular Markdown task format using emojis. taskspec:
- Adopts similar emoji conventions where sensible
- Extends to work in source code comments
- Provides text-only alternative syntax
- RFC 5545 - iCalendar β VTODO component, RRULE recurrence
- RFC 8984 - JSCalendar β JSON calendar/task format
- RFC 7763 - text/markdown β Markdown media type
- RFC 3339 - Date and Time β Timestamp format
- todo.txt β Plain text TODO format
- Obsidian Tasks β Markdown task plugin
- GFM Task Lists β GitHub task list syntax