A minimal, terminal-based todo list application built with Rust. GotTodo provides a clean, keyboard-driven interface for managing your tasks without leaving the terminal.
- Add/Delete Tasks - Create and remove tasks with simple keystrokes
- Toggle Completion - Mark tasks as done/undone
- Hide/Show Interface - Toggle visibility to work alongside terminal
- Help System - Built-in keymap reference
- Persistent Storage - Tasks saved to
todos.json
- Debug Mode - Optional logging for troubleshooting
- Rust (latest stable version)
git clone <repository-url>
cd gottodo
cargo build --release
cargo run
Key | Action |
---|---|
h |
Show/hide help popup |
a |
Add new task |
d |
Delete selected task (with confirmation) |
Space |
Toggle task completion |
↑/↓ |
Navigate between tasks |
Ctrl+Space |
Hide/show todo interface |
q |
Quit application |
- Adding Tasks: Press
a
, type your task, pressEnter
to save orEsc
to cancel - Deleting Tasks: Press
d
on selected task, confirm withy
or cancel withn
/Esc
- Marking Complete: Use
Space
to toggle between[ ]
and[x]
- Normal Mode: Standard navigation and task management
- Adding Task: Text input for new tasks
- Confirming Delete: Y/N prompt for task deletion
- Help Mode: Overlay showing all keyboard shortcuts
cargo run -- --debug
Debug mode shows real-time logging of:
- Key presses and their codes
- State changes (UI toggles, task modifications)
- Navigation movements
- Mode transitions
Tasks are automatically saved to todos.json
in the current directory. The file uses a simple JSON format:
[
{
"text": "Complete the project",
"done": false
},
{
"text": "Write documentation",
"done": true
}
]
gottodo/
├── src/
│ └── main.rs # Main application code
├── Cargo.toml # Rust dependencies
├── Cargo.lock # Dependency lockfile
├── todos.json # Task storage (created on first run)
└── README.md # This file
serde
- JSON serializationcrossterm
- Cross-platform terminal manipulationratatui
- Terminal UI framework
# Development build
cargo build
# Release build (optimized)
cargo build --release
# Run with debug logging
cargo run -- --debug
┌TODO (h=help)──────────────────────┐
│[ ] Learn Rust │
│[x] Build todo app │
│[ ] Write documentation │
│[ ] Deploy to production │
└───────────────────────────────────┘
This project is open source. Feel free to use, modify, and distribute as needed.
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
Help popup won't close: Press any key to dismiss the help overlay
UI doesn't toggle: Try using the exact key combination Ctrl+Space
Tasks not saving: Ensure write permissions in the current directory
Key not responding: Use debug mode (cargo run -- --debug
) to see what keys are being detected
When issues arise, run with debug mode to see detailed logging:
cargo run -- --debug
The debug panel shows real-time information about key presses, state changes, and application behavior.