lazytodo
v0.1.0
Published
Fast and beautiful vim-centric TUI for todo.txt
Maintainers
Readme
lazytodo
A fast, beautiful, vim-centric TUI for managing todo.txt files. Built with TypeScript, OpenTUI, and Bun.

Features
- Vim-style Keybindings - Navigate with
j/k,g/G, and use:commands like:w,:q,:wq - Full todo.txt Support - Compliant with the todo.txt format specification
- Multi-Panel Interface - Priority chart, projects, contexts, and command history panels
- 8 Built-in Themes - Catppuccin, Dracula, Nord, Gruvbox, Tokyo Night, Solarized, One Dark, Monokai
- Braille Bar Charts - High-resolution priority visualization with 20 levels of granularity
- Fast & Lightweight - Single binary with no runtime dependencies
- Undo Support - Revert changes with
u - Yank/Paste - Copy tasks with
y, paste withp
Installation
From Source
# Install Bun
curl -fsSL https://bun.sh/install | bash
# Clone and build
git clone <repository-url>
cd lazytodo
bun install
bun run build
# Move to PATH
sudo mv lazytodo /usr/local/bin/Development
bun run dev # Run without building
bun test # Run testsUsage
TUI Mode (Recommended)
lazytodo tui # Launch TUI with default ~/todo.txt
lazytodo -f todo.txt tui # Use specific fileKeyboard Shortcuts
Navigation
| Key | Action |
|-----|--------|
| j / ↓ | Move down |
| k / ↑ | Move up |
| g | Go to top |
| G | Go to bottom |
| TAB | Cycle panels (Tasks → Priorities → Projects → Contexts) |
| ESC | Return to tasks / Clear filter |
Task Actions
| Key | Action |
|-----|--------|
| Space | Toggle task completion |
| Enter / e / i | Edit task |
| n / a | Add new task |
| d | Add due date |
| x | Delete task |
| y | Yank (copy) task |
| p | Paste task |
| 0-9 | Set priority (number mode) |
| Shift+A-Z | Set priority (letter mode) |
View
| Key | Action |
|-----|--------|
| v | Toggle show completed tasks |
| / | Search tasks |
| s | Cycle sort mode |
| o | Toggle highlight overdue |
| u | Undo last action |
| ? | Show help |
| , | Open settings |
Vim Commands
| Command | Action |
|---------|--------|
| :q / :quit | Quit |
| :w / :write | Save |
| :wq / :x | Save and quit |
| :help | Show help |
| :set | Open settings |
| :theme <name> | Switch theme |
| :sort <mode> | Change sort mode |
CLI Mode
lazytodo list # List active tasks
lazytodo add "Call Mom +Family" # Add task
lazytodo do 1 # Complete task 1
lazytodo pri 1 A # Set priority A
lazytodo edit 1 "New text" # Edit task
lazytodo delete 1 # Delete taskFiltering
lazytodo list -c phone # Filter by @context
lazytodo list -p Work # Filter by +project
lazytodo list --priority A # Filter by priority
lazytodo list -s "search term" # Search text
lazytodo list --all # Include completedPanels
Priority Chart
Visual bar chart showing task distribution by priority. Uses braille characters for high-resolution display with 20 levels of granularity.
Projects Panel
Lists all +project tags. Press Enter to filter tasks by project.
Contexts Panel
Lists all @context tags. Press Enter to filter tasks by context.
Command History
Read-only log of recent commands (not included in TAB navigation).
Stats (Header)
Shows DUE/OVERDUE count, DONE TODAY, and ACTIVE tasks.
Configuration
Config file: ~/.config/todo-tui/config.toml
# Priority mode: 'letter' (A-Z) or 'number' (0-9)
priorityMode = "number"
# Color theme
theme = "catppuccin"Available Themes
catppuccin(default)draculanordgruvboxtokyonightsolarizedonedarkmonokai
Priority Format Detection
When opening a file, lazytodo detects the priority format used (letter A-Z or number 0-9). If it differs from your settings, you'll be prompted to:
- Convert the file - Transform all priorities to match your settings
- Switch settings - Adapt your settings to match the file format
- Ignore - Keep both formats as-is
This ensures consistency and prevents confusion when working with files created with different priority modes.
Todo File Location
Priority order:
-fflag:lazytodo -f ~/my-todos.txt tuiTODO_FILEenvironment variable./todo.txt(current directory)~/todo.txt(home directory)
Todo.txt Format
(A) 2025-12-10 Call Mom +Family @phone due:2025-12-15
x 2025-12-11 (A) 2025-12-10 Completed task +Project @context(A)- Priority (A-Z or 0-9)2025-12-10- Creation date+Family- Project tag@phone- Context tagdue:2025-12-15- Due date metadatax- Completion marker- Second date after
x- Completion date
Tech Stack
- Runtime: Bun
- Language: TypeScript
- TUI Framework: @opentui/react
- State Management: Zustand
- CLI: Commander.js
License
MIT
