{"id":45450032,"url":"https://github.com/atrtde/todo-tree","last_synced_at":"2026-02-22T05:01:04.425Z","repository":{"id":327812210,"uuid":"1110753859","full_name":"atrtde/todo-tree","owner":"atrtde","description":"A command-line tool to find and display TODO-style comments in your codebase.","archived":false,"fork":false,"pushed_at":"2026-01-07T22:44:45.000Z","size":16095,"stargazers_count":29,"open_issues_count":1,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-03T16:34:36.407Z","etag":null,"topics":["cli","command-line-tool","statistics","todo"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/todo-tree","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/atrtde.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":"2025-12-05T17:05:42.000Z","updated_at":"2026-01-30T17:49:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/atrtde/todo-tree","commit_stats":null,"previous_names":["alexandretrotel/todo-tree","atrtde/todo-tree"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/atrtde/todo-tree","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atrtde%2Ftodo-tree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atrtde%2Ftodo-tree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atrtde%2Ftodo-tree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atrtde%2Ftodo-tree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atrtde","download_url":"https://codeload.github.com/atrtde/todo-tree/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atrtde%2Ftodo-tree/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29705523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T03:17:42.375Z","status":"ssl_error","status_checked_at":"2026-02-22T03:17:31.622Z","response_time":110,"last_error":"SSL_read: 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","statistics","todo"],"created_at":"2026-02-22T05:01:02.189Z","updated_at":"2026-02-22T05:01:04.414Z","avatar_url":"https://github.com/atrtde.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Todo Tree\n\nA command-line tool to find and display TODO-style comments in your codebase, similar to the VS Code \"Todo Tree\" extension.\n\n![Demo of Todo Tree](./assets/todo-tree.gif)\n\n## Features\n\n- 🔍 **Recursive directory scanning** - Respects `.gitignore` rules automatically\n- 🏷️ **Configurable tags** - TODO, FIXME, BUG, NOTE, HACK, WARN, PERF, and more (and custom tags)\n- 🌳 **Tree view output** - Beautiful hierarchical display grouped by file\n- 📋 **Multiple output formats** - Tree, flat list, and JSON\n- ⚙️ **Configuration file support** - `.todorc` in JSON or YAML format\n- 🎨 **Colored output** - Priority-based coloring for different tag types\n- 🔗 **Clickable links** - Terminal hyperlinks to file locations (where supported)\n- 🤖 **GitHub Action** - Automatically scan PRs and post TODO summaries as comments\n\n## Installation\n\n### Using Cargo (Recommended)\n\n```bash\ncargo install todo-tree\n```\n\n### From Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/atrtde/todo-tree.git\ncd todo-tree\n\n# Build and install\ncargo install --path .\n```\n\n### Using Homebrew (macOS/Linux)\n\n```bash\nbrew tap atrtde/todo-tree\nbrew install todo-tree\n```\n\n### NixOS (Flakes)\n\n#### Try before you install\n\n```bash\n# runs the default todo-tree command\nnix run github:atrtde/todo-tree\n\n# create a shell with the command available (with nix-output-monitor)\nnom shell github:atrtde/todo-tree\ntt tags\n\n# or, just normal nix\nnix shell github:atrtde/todo-tree\ntt scan ~/projects/todo-tree --tags FIXME\n```\n\n**Note:** If you haven't enabled the experimental Nix command and flakes features, you need to pass `--extra-experimental-features \"nix-command flakes\"` to the command. See the [Nix command wiki](https://nixos.wiki/wiki/Nix_command) for more details.\n\n#### Install for your system\n\n```nix\n# flake.nix\n{\n  inputs = {\n    nixpkgs.url = \"github:nixos/nixpkgs/nixos-unstable\";\n    todo-tree.url = \"github:atrtde/todo-tree\";\n  };\n\n  outputs = { self, nixpkgs, todo-tree, ... }: {\n    nixosConfigurations.my-host = nixpkgs.lib.nixosSystem {\n      system = \"x86_64-linux\";\n      modules = [ ./configuration.nix ];\n      specialArgs = { inherit todo-tree; };\n    };\n  };\n}\n\n# configuration.nix\n{ pkgs, todo-tree, ... }:\n\n{\n  environment.systemPackages = [\n    todo-tree.packages.${pkgs.stdenv.hostPlatform.system}.todo-tree\n  ];\n}\n```\n\n## Usage\n\nThe tool provides two binary names: `todo-tree` and `tt` (alias for quick access).\n\n### Basic Commands\n\n```bash\n# Scan current directory (default command)\ntt\n\n# Scan a specific directory\ntt scan ./src\n\n# Scan with specific tags\ntt scan --tags TODO,FIXME,BUG\n\n# List all TODOs in flat format\ntt list\n\n# Show configured tags\ntt tags\n\n# Show statistics\ntt stats\n```\n\n## Configuration\n\nCreate a `.todorc.json` or `.todorc.yaml` file in your project root:\n\n### JSON Format (`.todorc.json`)\n\n```json\n{\n  \"tags\": [\"TODO\", \"FIXME\", \"BUG\", \"NOTE\", \"HACK\", \"XXX\", \"WARN\", \"PERF\"],\n  \"include\": [\"*.rs\", \"*.py\", \"*.js\", \"*.ts\"],\n  \"exclude\": [\"target/**\", \"node_modules/**\", \"dist/**\"],\n  \"json\": false,\n  \"flat\": false,\n  \"no_color\": false,\n  \"ignore_case\": false,\n  \"require_colon\": true\n}\n```\n\n### YAML Format (`.todorc.yaml`)\n\n```yaml\ntags:\n  - TODO\n  - FIXME\n  - BUG\n  - NOTE\n  - HACK\n\ninclude:\n  - \"*.rs\"\n  - \"*.py\"\n\nexclude:\n  - \"target/**\"\n  - \"node_modules/**\"\n\njson: false\nflat: false\nno_color: false\n```\n\n### Configuration Search Order\n\n1. `.todorc` in the current directory\n2. `.todorc.json` in the current directory\n3. `.todorc.yaml` or `.todorc.yml` in the current directory\n4. Parent directories (recursive)\n5. `~/.config/todo-tree/config.json` (global config)\n\n## Tag Matching Rules\n\nBy default, todo-tree requires tags to be **UPPERCASE** and followed by a **colon**:\n\n```rust\n// TODO: This will be found ✓\n// FIXME: This will be found ✓\n// BUG: This will be found ✓\n\n// todo: This will NOT be found (lowercase) ✗\n// TODO This will NOT be found (no colon) ✗\n// Todo: This will NOT be found (mixed case) ✗\n```\n\n**Optional author/assignee syntax** (still works with colon):\n```rust\n// TODO(john): Assigned to john ✓\n// FIXME(team): Needs team review ✓\n```\n\n### Flexible Matching Options\n\nYou can customize the matching behavior with CLI flags:\n\n```bash\n# Ignore case when matching (matches TODO, todo, Todo, etc.)\ntt scan --ignore-case\n\n# Allow tags without colon (matches \"TODO something\")\ntt scan --no-require-colon\n\n# Use both options together (most flexible, like v0.2.x behavior)\ntt scan --ignore-case --no-require-colon\n```\n\nOr set these options in your `.todorc.json`:\n\n```json\n{\n  \"ignore_case\": true,\n  \"require_colon\": false\n}\n```\n\n### Why These Defaults?\n\nThe strict defaults (uppercase + colon required) significantly reduce false positives.\n\nThese defaults align with most coding conventions and help you find **intentional TODO comments**, not accidental matches.\n\n## Terminal Support\n\n### Clickable Links\n\nThe tool generates clickable hyperlinks (OSC 8) in supported terminals:\n\n- iTerm2\n- WezTerm\n- Hyper\n- VS Code Terminal\n- GNOME Terminal (VTE 0.50+)\n- Konsole\n- Alacritty\n- Ghostty\n\n### Color Support\n\nColors are automatically enabled when outputting to a terminal. Use `--no-color` or set the `NO_COLOR` environment variable to disable.\n\n## Related Projects\n\n### [todo-tree-action](https://github.com/atrtde/todo-tree-action)\n\nA GitHub Action that automatically scans your pull requests for TODO comments and posts a summary as a PR comment. Features include:\n- Scan only changed files in PRs\n- Filter to show only NEW TODOs (not in base branch)\n- Automatic PR comment with formatted results\n- Full configuration support\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Acknowledgments\n\nInspired by the [Todo Tree](https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree) VS Code extension\n\n## License\n\nGPL-3.0-or-later\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatrtde%2Ftodo-tree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatrtde%2Ftodo-tree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatrtde%2Ftodo-tree/lists"}