📝 Todo CLI
A simple "Todo List Manager" written in Rust. Supports both an interactive menu and a command-line interface (CLI).
✨ Features
- Add, list, update, search, and delete todos
- Store todos in a JSON file (
todos.json) - Interactive menu mode (
--menu) for guided use - CLI for quick commands
- Desktop notifications for due/overdue tasks (
todo notify) - Todos have:
- Unique ID (UUID)
- Title & optional description
- Priority: High | Medium | Low
- Status: Pending | In Progress | Done
- Creation timestamp
- Optional due date (UTC) and tags
- Optional recurrence: Daily | Weekly | Custom("...")
- Optional parent/subtasks relationships
🚀 Installation
Clone the repository and install the binary locally:
This will install the binary to ~/.cargo/bin/todo.
Make sure ~/.cargo/bin is in your $PATH.
🖥️ Usage
1. Interactive Menu Mode
Launch the program with a text-based menu:
# or while developing
You'll see options like:
2. Command-Line Mode
Use direct commands without the menu:
Add a todo
# Flags for add:
# -t/--title (required), -d/--description, -p/--priority, -s/--status,
# -D/--due-date (YYYY-MM-DD), -r/--recurrence, -g/--tags, -P/--parent-id, -u/--subtasks
View todos
# --sort-by created|priority|status|due-date|overdue (default: created)
Search by title
Search by ID
Search by priority
Search by status
Search by due date
Search by tags (comma separated)
Update a todo
# Update uses flags like add, but all are optional except --id
Delete a todo
Send desktop notifications
# Shows notifications for tasks due now or overdue
Notes:
- On Linux, ensure a notification daemon is running (e.g., GNOME/KDE notifier, dunst).
📂 Project Structure
📊 Example JSON Output
✍️ Author
- leocm889