Tdx
tdx - your todos, in markdown, done fast.
Install / Use
/learn @niklas-heer/TdxREADME
tdx
Your todos, in markdown, done fast.
<p align="center"> <img src="assets/demo-0.11.0.gif" alt="tdx demo" width="600"> </p>A fast, single-binary CLI todo manager focused on developer experience. Features vim-style navigation, an interactive TUI, and scriptable commands—all stored in plain markdown you can version control.
Features
- ⚡ Fast - Single binary (4MB), instant startup, 30-40x faster than alternatives
- 📝 Markdown-native - Todos live in
todo.md, version control friendly - ⌨️ Vim-style navigation -
j/k, relative jumps (5j), number keys - 🖥️ Interactive TUI - Toggle, create, edit, delete, undo, move, copy
- 🎯 Command Palette - Helix-style
:commands with fuzzy search - 📋 Read-Only Mode - Prevent auto-save, check/uncheck all, filter done
- 🔧 Scriptable -
list,add,toggle,edit,deletecommands - 🔄 Smart Conflict Detection - Auto-merge external changes, reactive file watching
- 📑 Per-File Configuration - YAML frontmatter for file-specific settings
- 📂 Recent Files - Jump to recently opened files with cursor position restoration
- 🌍 Cross-platform - macOS, Linux, Windows
Installation
Homebrew (macOS/Linux)
brew install niklas-heer/tap/tdx
Quick Install Script
curl -fsSL https://niklas-heer.github.io/tdx/install.sh | bash
Download Binary
Download the latest binary for your platform from Releases:
tdx-darwin-arm64- macOS Apple Silicontdx-darwin-amd64- macOS Inteltdx-linux-amd64- Linux x64tdx-linux-arm64- Linux ARM64tdx-windows-amd64.exe- Windows x64
From Source
Requires Go 1.25+:
git clone https://github.com/niklas-heer/tdx.git
cd tdx
just build
just install
Nix
# Try it without installing
nix run github:niklas-heer/tdx
# Install to profile
nix profile install github:niklas-heer/tdx
Usage
Interactive TUI (Default)
Launch the interactive todo manager:
tdx
Keyboard Shortcuts:
| Key | Action |
|-----|--------|
| j / k | Move down / up |
| gg | Go to first item |
| G | Go to last item |
| Space / Enter | Toggle completion |
| n | New todo after cursor |
| N | New todo at end of file |
| e | Edit todo |
| d | Delete todo |
| c | Copy to clipboard |
| m | Move mode |
| Tab | Indent (nest under previous) |
| Shift+Tab | Outdent (move up one level) |
| / | Fuzzy search |
| t | Tag filter |
| p | Priority filter |
| D | Due date filter |
| r | Recent files |
| : | Command palette |
| u | Undo |
| ? | Help menu |
| Esc | Quit |
| Cmd+V / Ctrl+Y | Paste (in edit mode) |
Command Palette (:):
Press : to open the command palette with fuzzy search. Available commands:
| Command | Description |
|---------|-------------|
| check-all | Mark all todos as complete |
| uncheck-all | Mark all todos as incomplete |
| sort-done | Sort todos by completion (incomplete first) |
| sort-priority | Sort todos by priority (p1 first, then p2, etc.) |
| sort-due | Sort todos by due date (earliest first) |
| filter-done | Toggle showing/hiding completed todos |
| filter-due | Toggle showing only todos with due dates |
| filter-overdue | Toggle showing only overdue todos |
| filter-today | Toggle showing only todos due today |
| filter-week | Toggle showing only todos due this week |
| clear-done | Delete all completed todos |
| read-only | Toggle read-only mode (changes not saved) |
| save | Save current state to file |
| force-save | Force save even if file was modified externally |
| reload | Reload file from disk (discards unsaved changes) |
| wrap | Toggle word wrap for long lines |
| line-numbers | Toggle relative line numbers |
| set-max-visible | Set max visible items for this session |
| show-headings | Toggle displaying markdown headings between tasks |
Read-Only Mode:
Start tdx with -r or --read-only flag for workflows where you don't want changes saved automatically:
tdx -r checklist.md
Use :save to manually save when ready, or :read-only to turn auto-save back on.
Vim-style navigation:
5j- Move down 5 lines3k- Move up 3 linesgg- Jump to first itemG- Jump to last item
Fuzzy Search:
Press / to enter search mode. Type to filter todos with live highlighting. Press Enter to select or Esc to cancel.
Nested Tasks:
Organize your todos hierarchically using Tab and Shift+Tab:
- [ ] Main project
- [ ] Subtask 1
- [ ] Subtask 2
- [ ] Sub-subtask
- [ ] Another task
- Press
Tabto indent a task under its previous sibling - Press
Shift+Tabto outdent (move up one level) - Deleting a parent task promotes its children to the parent's level
- New tasks (
n) are created at the same nesting level as the cursor
Tags & Filtering:
Add hashtags to your todos for organization:
- [ ] Fix authentication #urgent #backend
- [ ] Update docs #docs
- [ ] Add dark mode #feature #frontend
Press t to open tag filter mode:
- Navigate with
↑/↓orj/k - Toggle tags with
SpaceorEnter - Clear all filters with
c - Press
Escwhen done
Active tag filters are shown in the status bar. Todos are automatically filtered to show only matching items.
Priorities:
Add priority markers to your todos using !p1, !p2, !p3, etc.:
- [ ] Fix critical security bug !p1
- [ ] Update dependencies !p2
- [ ] Write documentation !p3
- [ ] Refactor code !p2
- [ ] Add nice-to-have feature
Priority levels:
!p1- Critical/Urgent (displayed in red)!p2- High priority (displayed in orange)!p3- Medium priority (displayed in yellow)!p4+- Lower priorities (displayed dimmed)
Use the :sort-priority command to sort todos by priority (p1 first, then p2, etc.). Tasks without a priority marker are placed at the end. You can combine priorities with tags: Fix bug !p1 #backend #urgent
Priority Filtering:
Press p to open priority filter mode:
- Navigate with
↑/↓orj/k - Toggle priorities with
SpaceorEnter - Clear all filters with
c - Press
Escwhen done
Active priority filters are shown in the status bar (e.g., ⚡ p1 p2). You can combine priority and tag filters to narrow down your view.
Due Dates:
Add due dates to your todos using @due(YYYY-MM-DD):
- [ ] Submit quarterly report @due(2025-12-01)
- [ ] Review pull request @due(2025-11-30) #code-review
- [ ] Fix critical bug !p1 @due(2025-11-29) #urgent
- [ ] Plan team meeting @due(2025-12-15)
Due date display colors based on urgency:
- Overdue - Red (past the due date)
- Due today - Orange
- Due soon - Yellow (within 3 days)
- Future - Dimmed
Use the :sort-due command to sort todos by due date (earliest first). Tasks without a due date are placed at the end. You can combine due dates with priorities and tags.
Due Date Filtering:
Press D (capital D) to open due date filter mode:
- Overdue - Show only overdue tasks
- Today - Show tasks due today
- This Week - Show tasks due within 7 days
- Has Due Date - Show all tasks with any due date
Navigate with ↑/↓ or j/k, select with Space or Enter, clear with c, and press Esc when done.
Active due date filters are shown in the status bar (e.g., 📅 overdue). You can combine due date filters with priority and tag filters.
CLI Commands
# List all todos
tdx list
# Add a new todo
tdx add "Buy milk"
# Toggle completion (1-based index)
tdx toggle 1
# Edit a todo
tdx edit 2 "Updated text"
# Delete a todo
tdx delete 3
# Open most recent file
tdx last
# Use custom file
tdx ~/notes/work.md list
tdx project.md add "Task"
Recent Files
tdx automatically tracks recently opened files and restores your cursor position when you reopen them.
TUI Mode:
Press r in the TUI to open the recent files overlay:
- Type to filter files by path (fuzzy search)
- Navigate with
↑/↓orj/k - Press
Enterto open a file - Press
Escorrto close
CLI Commands:
# Open the most recently used file
tdx last
# List recently opened files (sorted by frequency and recency)
tdx recent
# Open a specific recent file by number
tdx recent 1
# Clear recent files history
tdx recent clear
Features:
- Smart Sorting: Files are ranked by both frequency (how often you open them) and recency (when you last accessed them)
- Cursor Restoration: When you reopen a file, tdx automatically restores your cursor to the last position
- Change Detection: If the file content has changed since your last visit, the cursor resets to the first item for safety
- Configurable Limit: Set maximum recent files in your config (default: 20)
Configuration:
In ~/.config/tdx/config.toml:
[recent]
max_files = 20 # Maximum number of recent files to track
Recent files are stored in ~/.config/tdx/recent.json and include:
- File path
- Last access time
- Access count (frequency)
- Last cursor position
- Content hash (for change detection)
File Format
Todos are stored in todo.md using standard Markdown:
# Todos
- [x] Completed task
- [ ] Incomplete task
- [ ] Another task
O
Related Skills
apple-reminders
347.2kManage Apple Reminders via remindctl CLI (list, add, edit, complete, delete). Supports lists, date filters, and JSON/plain output.
gh-issues
347.2kFetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]
healthcheck
347.2kHost security hardening and risk-tolerance configuration for OpenClaw deployments
node-connect
347.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
