{"id":41541920,"url":"https://github.com/joaofelipegalvao/todo-cli","last_synced_at":"2026-02-21T22:17:12.825Z","repository":{"id":334228859,"uuid":"1140586221","full_name":"joaofelipegalvao/todo-cli","owner":"joaofelipegalvao","description":"A fast, minimal, and extensible task manager CLI written in Rust — featuring JSON persistence, priorities, tags, filters, and safe task indexing.","archived":false,"fork":false,"pushed_at":"2026-02-19T14:36:34.000Z","size":1838,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-19T17:57:54.228Z","etag":null,"topics":["cli","command-line-tool","developer-tools","json","open-source","productivity","rust","serd","task-manager","todo","todolist-cli"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joaofelipegalvao.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-23T13:39:15.000Z","updated_at":"2026-02-19T14:36:36.000Z","dependencies_parsed_at":"2026-02-05T02:02:21.685Z","dependency_job_id":null,"html_url":"https://github.com/joaofelipegalvao/todo-cli","commit_stats":null,"previous_names":["joaofelipegalvao/todo-cli"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/joaofelipegalvao/todo-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaofelipegalvao%2Ftodo-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaofelipegalvao%2Ftodo-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaofelipegalvao%2Ftodo-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaofelipegalvao%2Ftodo-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joaofelipegalvao","download_url":"https://codeload.github.com/joaofelipegalvao/todo-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaofelipegalvao%2Ftodo-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29634723,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T18:02:07.722Z","status":"ssl_error","status_checked_at":"2026-02-19T18:01:46.144Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command-line-tool","developer-tools","json","open-source","productivity","rust","serd","task-manager","todo","todolist-cli"],"created_at":"2026-01-24T01:18:37.710Z","updated_at":"2026-02-19T22:05:12.309Z","avatar_url":"https://github.com/joaofelipegalvao.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Todo CLI 🦀\n\n\u003e A minimalist command-line task manager built to learn Rust\n\nA simple, colorful, and functional task manager developed to learn Rust in practice, focusing on CLI design, file manipulation, error handling, type safety, and visual UX.\n\n## Features\n\n- **Recurring Tasks** - Automate daily, weekly, and monthly tasks with intelligent deduplication\n- **Modular Refactoring** - Transform monolithic code into professional architecture\n- **Edit Command** - Modify existing tasks without deleting them\n- **Interactive Confirmation** - Safe prompts for destructive operations (remove/clear)\n- **Global Data Directory** - OS-appropriate storage (XDG on Linux, Application Support on macOS, AppData on Windows)\n- **Error Handling with `anyhow` and `thiserror`** - Professional error messages with context chains\n- **Professional CLI with Clap** - Auto-generated help, type-safe parsing, shell completions\n- **Type-safe architecture** with structs and enums\n- **Tags system** for task categorization\n- **Priority system** (high, medium, low)\n- **Due dates** with automatic validation\n- **Advanced search and filters**\n- **Progress statistics**\n- **Colorful interface**\n- **JSON storage** with automatic serialization\n- **Fast and lightweight**\n\n## Quick Start\n\n```bash\n# Install\ngit clone https://github.com/joaofelipegalvao/todo-cli\ncd todo-cli\ncargo install --path .\n\n# Use\ntodo add \"Learn Rust\" --priority high --tag programming --tag learning --due 2026-02-20\ntodo list --status pending --sort priority\ntodo done 1\ntodo tags\n\n# Edit tasks\ntodo edit 1 --text \"Learn Rust properly\" --priority high\ntodo edit 2 --due 2026-03-01\n\n# Recurring tasks\ntodo recur 3 daily              # Make task repeat daily\ntodo recur 5 weekly             # Make task repeat weekly\ntodo recur 7 monthly            # Make task repeat monthly\ntodo list --recurrence daily    # Show only daily tasks\ntodo norecur 3                  # Remove recurrence\n\n# Find where your data is stored\ntodo info\n```\n\n## Data Storage\n\nTasks are automatically saved to platform-specific locations:\n\n- **Linux:** `~/.local/share/todo-cli/todos.json`\n- **macOS:** `~/Library/Application Support/todo-cli/todos.json`\n- **Windows:** `%APPDATA%\\todo-cli\\todos.json`\n\nUse `todo info` to see your exact data file location.\n\n## Commands\n\n```bash\ntodo add \u003cdescription\u003e [options]              # Add a new task\ntodo edit \u003cid\u003e [options]                      # Edit an existing task\ntodo recur \u003cid\u003e \u003cfrequency\u003e                   # Make task recurring\ntodo norecur \u003cid\u003e                             # Remove recurrence\ntodo list [options]                           # List and filter tasks\ntodo search \u003cquery\u003e [--tag \u003cn\u003e]               # Search tasks by text\ntodo done \u003cid\u003e                                # Mark task as completed\ntodo undone \u003cid\u003e                              # Mark task as pending\ntodo remove \u003cid\u003e [--yes]                      # Remove a task (with confirmation)\ntodo clear [--yes]                            # Remove all tasks (with confirmation)\ntodo clear-recur [--yes]                      # Remove all recurring tasks\ntodo tags                                     # List all tags with counts\ntodo info                                     # Show data file location\n```\n\n### Add Command\n\n```bash\ntodo add \"Task description\" [options]\n\nOptions:\n  --priority \u003cPRIORITY\u003e   Task priority: high, medium (default), low\n  -t, --tag \u003cTAG\u003e        Add tags (repeatable: -t work -t urgent)\n  --due \u003cDATE\u003e           Due date in YYYY-MM-DD format\n```\n\n**Examples:**\n\n```bash\ntodo add \"Deploy to production\" --priority high --tag work --due 2026-02-15\ntodo add \"Buy groceries\" -t personal -t shopping\n```\n\n### Recur Command\n\n```bash\ntodo recur \u003cid\u003e \u003cfrequency\u003e\n\nFrequencies:\n  daily      Repeat every day\n  weekly     Repeat every week\n  monthly    Repeat every month\n\nExamples:\n  todo recur 3 daily              # Task repeats daily\n  todo recur 5 weekly             # Task repeats weekly\n  todo recur 7 monthly            # Task repeats monthly\n```\n\n**How it works:**\n\n- When you mark a recurring task as done, a new instance is automatically created\n- The new task inherits all properties (text, priority, tags, recurrence)\n- Due dates are automatically calculated:\n  - **Daily:** +1 day\n  - **Weekly:** +7 days\n  - **Monthly:** Same day next month (handles boundaries like Jan 31 → Feb 28)\n- Intelligent deduplication prevents duplicate tasks\n- Tasks are linked via `parent_id` for tracking recurring chains\n\n### Norecur Command\n\n```bash\ntodo norecur \u003cid\u003e\n\n# Remove recurrence from a task\ntodo norecur 3\n\n# Task becomes a regular one-time task\n# Existing future instances remain but won't generate more\n```\n\n### Clear-Recur Command\n\n```bash\ntodo clear-recur [--yes]\n\n# Remove all recurring tasks (with confirmation)\ntodo clear-recur\n\n# Skip confirmation (for scripts)\ntodo clear-recur --yes\n```\n\n### Edit Command\n\n```bash\ntodo edit \u003cid\u003e [options]\n\nOptions:\n  --text \u003cTEXT\u003e          New task description\n  --priority \u003cPRIORITY\u003e  New priority (high|medium|low)\n  -t, --tag \u003cTAG\u003e       Replace tags (repeatable)\n  --due \u003cDATE\u003e          New due date (YYYY-MM-DD)\n  --clear-due           Remove due date\n  --clear-tags          Remove all tags\n```\n\n**Examples:**\n\n```bash\n# Fix a typo\ntodo edit 5 --text \"Updated description\"\n\n# Change priority and due date\ntodo edit 3 --priority high --due 2026-03-15\n\n# Replace tags\ntodo edit 1 --tag work --tag urgent\n\n# Clear due date\ntodo edit 2 --clear-due\n\n# Multiple changes at once\ntodo edit 3 --text \"New text\" --priority low --due 2026-04-01\n```\n\n**What's preserved:**\n\n- ✅ Task ID (stays the same)\n- ✅ Creation date (`created_at`)\n- ✅ Completion status\n- ✅ Recurrence settings\n\n### List Command\n\n```bash\ntodo list [options]\n\nFilters:\n  --status \u003cSTATUS\u003e           Filter by status: all (default), pending, done\n  --priority \u003cPRIORITY\u003e       Filter by priority: high, medium, low\n  --due \u003cDUE_FILTER\u003e         Filter by due date: overdue, soon, with-due, no-due\n  --tag \u003cTAG\u003e                Filter by tag name\n  --recurrence \u003cRECURRENCE\u003e  Filter by recurrence: daily, weekly, monthly, recurring, non-recurring\n\nSorting:\n  -s, --sort \u003cSORT_BY\u003e  Sort by: priority, due, created\n```\n\n**Examples:**\n\n```bash\n# Show all daily recurring tasks\ntodo list --recurrence daily\n\n# Show all recurring tasks (any frequency)\ntodo list --recurrence recurring\n\n# Show only non-recurring tasks\ntodo list --recurrence non-recurring\n\n# Pending high-priority recurring tasks\ntodo list --status pending --priority high --recurrence recurring\n\n# Combine multiple filters\ntodo list --status pending --priority high --tag work --sort priority\n```\n\n**Output format:**\n\n```\n  ID  P  R   S  Task                      Tags              Due\n──────────────────────────────────────────────────────────────\n   1  H  🔁  [ ]  Daily standup             work              due today\n   2  M  📅  [ ]  Weekly report             work              in 5 days\n   3  L  📆  [x]  Monthly review            management\n```\n\n**Legend:**\n\n- **R:** Recurrence indicator\n  - **🔁** Daily recurring\n  - **📅** Weekly recurring\n  - **📆** Monthly recurring\n  - (blank) Non-recurring\n\n### Remove \u0026 Clear Commands\n\nBoth commands now prompt for confirmation to prevent accidental deletion:\n\n```bash\n# Remove with confirmation\n$ todo remove 5\nRemove task 'Important meeting'? [y/N]: y\n✓ Task removed: Important meeting\n\n# Skip confirmation (for scripts)\n$ todo remove 5 --yes\n$ todo remove 5 -y\n\n# Clear with warning\n$ todo clear\nWARNING: 10 tasks will be permanently deleted!\nAre you sure? [y/N]: y\n✓ All tasks have been removed\n\n# Clear only recurring tasks\n$ todo clear-recur\nWARNING: 5 recurring tasks will be permanently deleted!\nAre you sure? [y/N]: y\n✓ All recurring tasks have been removed\n\n# Skip confirmation\n$ todo clear --yes\n$ todo clear-recur --yes\n```\n\n### Info Command\n\n```bash\n# Show data file location and status\ntodo info\n```\n\n**Example output:**\n\n```\nTodo-List Information\n\nData file: /home/user/.local/share/todo-cli/todos.json\nStatus: exists ✓\nSize: 1245 bytes\n```\n\n### Command Aliases\n\nFor faster typing:\n\n```bash\ntodo a \"Task\"          # alias for 'add'\ntodo e 1 --text \"New\"  # alias for 'edit'\ntodo ls                # alias for 'list'\ntodo rm 3              # alias for 'remove'\ntodo delete 3          # also works for 'remove'\n```\n\n### Getting Help\n\n```bash\ntodo --help            # Show all commands\ntodo add --help        # Help for specific command\ntodo edit --help       # Edit command options\ntodo list --help       # Detailed filtering options\ntodo recur --help      # Recurring task options\n```\n\n## Documentation\n\n- **[Complete Guide](GUIDE.md)** - All commands and examples\n- **[Changelog](CHANGELOG.md)** - Version history\n\n---\n\n## Educational Project\n\nThis project was developed as a Rust learning exercise, documenting each incremental step. Each version represents a learning milestone:\n\n| Version | Feature | Key Concepts |\n|---------|---------|--------------|\n| v0.1.0 | Basic CLI | `OpenOptions`, `match`, `?` operator |\n| v0.2.0 | Mark as done | `.map()`, `.collect()`, `Vec\u003cString\u003e` |\n| v0.8.0 | Priorities + Filters | `Option\u003cT\u003e`, pattern matching, pipeline |\n| v1.0.0 | Search + Refactoring | Atomic functions, separation of concerns |\n| v1.2.0 | Type-safe structs | `struct`, `enum`, `impl`, derive macros |\n| v1.3.0 | JSON serialization | `serde`, automatic serialization, 91% I/O reduction |\n| v1.4.0 | Tags system | `Vec\u003cString\u003e`, `.retain()`, bug fixes |\n| v1.5.0 | Due dates | `chrono`, `NaiveDate`, date validation |\n| v1.6.0 | Professional CLI | `clap`, derive macros, type-safe enums, auto-help |\n| v1.7.0 | Error Handling | `anyhow`, `thiserror`, error chains |\n| v1.8.0 | Global Data Directory | `directories` crate, `PathBuf`, XDG compliance |\n| v1.9.0 | Edit + Confirmations + Refactoring | `todo edit`, let-chains, `confirm()`, `--yes`, `TableLayout` struct |\n| v2.0.0 | Modular Refactoring | Modules, re-exports, separation of concerns, Command pattern |\n| v2.1.0 | Recurring Tasks | `Recurrence` enum, `RecurrenceFilter`, `parent_id`, auto-generation, deduplication |\n\n[See full evolution →](CHANGELOG.md)\n\n### For Students\n\n- Clone, read the code, explore version diffs  \n- Each tag documents what was learned  \n- Perfect for understanding CLI design in Rust\n- Study the evolution from manual parsing to professional CLI with Clap\n- Learn cross-platform development with OS-appropriate storage\n- See how recurring task automation is implemented with date arithmetic\n\n### For End Users\n\n- The code works but lacks comprehensive automated tests  \n- May have unhandled edge cases  \n- Use at your own risk, or contribute improvements!  \n\n## Roadmap\n\n### Completed ✅\n\n- Basic CRUD operations\n- Priority system with visual indicators\n- Advanced filters and search\n- Sorting by priority and due date\n- Optimized pipeline architecture\n- Type-safe architecture with structs/enums\n- JSON serialization with serde\n- Tags system for categorization\n- Due dates with automatic validation\n- Professional CLI with Clap framework\n- Type-safe filtering with enums\n- Auto-generated help and documentation\n- Command aliases for productivity\n- Professional error handling with anyhow + thiserror\n- Global data directory with OS-appropriate storage\n- Edit command for modifying existing tasks\n- Interactive confirmation for destructive operations\n- TableLayout architecture for cleaner display code\n- Modular Refactoring for a professional structure\n- Recurring tasks (daily, weekly, monthly)\n- Intelligent deduplication for recurring tasks\n- Referential integrity with parent_id tracking\n\n### Planned 🚀\n\n- Subtasks/nested tasks\n- Export/import commands\n- Shell completions (bash, zsh, fish)\n- Comprehensive unit tests\n- Task history and analytics\n- Batch operations on recurring chains\n- TUI (Terminal User Interface)\n\n## Contributing\n\nContributions are welcome! This is a learning project, so feel free to:\n\n- **Report bugs** - Open an issue with details\n- **Suggest features** - Share your ideas\n- **Improve documentation** - Fix typos, add examples\n- **Submit PRs** - Fix bugs or add features\n- **Share learning insights** - Add to the wiki\n\n### Development\n\n```bash\n# Clone and build\ngit clone https://github.com/joaofelipegalvao/todo-cli\ncd todo-cli\ncargo build\n\n# Run tests (when available)\ncargo test\n\n# Run with logging\nRUST_LOG=debug cargo run -- add \"Test task\"\n\n# Check code quality\ncargo clippy\ncargo fmt --check\n```\n\n## License\n\n**MIT License** - Educational project developed to learn Rust 🦀\n\nSee [LICENSE](https://github.com/joaofelipegalvao/todo-cli/blob/main/LICENSE) for full details.\n\n---\n\n**Built with ❤️ to learn Rust - Each commit represents a step in the learning journey**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoaofelipegalvao%2Ftodo-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoaofelipegalvao%2Ftodo-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoaofelipegalvao%2Ftodo-cli/lists"}