| Crates.io | todo-tree |
| lib.rs | todo-tree |
| version | 0.3.0 |
| created_at | 2025-12-06 20:03:46.552985+00 |
| updated_at | 2026-01-07 22:44:41.508545+00 |
| description | A CLI tool to find and display TODO-style comments in your codebase |
| homepage | https://github.com/alexandretrotel/todo-tree |
| repository | https://github.com/alexandretrotel/todo-tree |
| max_upload_size | |
| id | 1970679 |
| size | 215,229 |
A command-line tool to find and display TODO-style comments in your codebase, similar to the VS Code "Todo Tree" extension.

.gitignore rules automatically.todorc in JSON or YAML formatbrew tap alexandretrotel/todo-tree
brew install todo-tree
cargo install todo-tree
# runs the default todo-tree command
nix run github:alexandretrotel/todo-tree
# create a shell with the command available (with nix-output-monitor)
nom shell github:alexandretrotel/todo-tree
tt tags
# or, just normal nix
nix shell github:alexandretrotel/todo-tree
tt scan ~/projects/todo-tree --tags FIXME
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 for more details.
# flake.nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
todo-tree.url = "github:alexandretrotel/todo-tree";
};
outputs = { self, nixpkgs, todo-tree, ... }: {
nixosConfigurations.my-host = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./configuration.nix ];
specialArgs = { inherit todo-tree; };
};
};
}
# configuration.nix
{ pkgs, todo-tree, ... }:
{
environment.systemPackages = [
todo-tree.packages.${pkgs.stdenv.hostPlatform.system}.todo-tree
];
}
# Clone the repository
git clone https://github.com/alexandretrotel/todo-tree.git
cd todo-tree
# Build and install
cargo install --path .
The tool provides two binary names: todo-tree and tt (alias for quick access).
# Scan current directory (default command)
tt
# Scan a specific directory
tt scan ./src
# Scan with specific tags
tt scan --tags TODO,FIXME,BUG
# List all TODOs in flat format
tt list
# Show configured tags
tt tags
# Show statistics
tt stats
Create a .todorc.json or .todorc.yaml file in your project root:
.todorc.json){
"tags": ["TODO", "FIXME", "BUG", "NOTE", "HACK", "XXX", "WARN", "PERF"],
"include": ["*.rs", "*.py", "*.js", "*.ts"],
"exclude": ["target/**", "node_modules/**", "dist/**"],
"json": false,
"flat": false,
"no_color": false,
"ignore_case": false,
"require_colon": true
}
.todorc.yaml)tags:
- TODO
- FIXME
- BUG
- NOTE
- HACK
include:
- "*.rs"
- "*.py"
exclude:
- "target/**"
- "node_modules/**"
json: false
flat: false
no_color: false
.todorc in the current directory.todorc.json in the current directory.todorc.yaml or .todorc.yml in the current directory~/.config/todo-tree/config.json (global config)The tool recognizes TODO-style tags in various comment formats:
| Language | Comment Styles |
|---|---|
| C, C++, Rust, Go, Java, JavaScript, TypeScript | //, /* */ |
| Python, Ruby, Shell, YAML | # |
| HTML, XML | <!-- --> |
| SQL | --, /* */ |
| Lisp, Clojure | ; |
| Lua | -- |
By default, todo-tree requires tags to be UPPERCASE and followed by a colon:
// TODO: This will be found ✓
// FIXME: This will be found ✓
// BUG: This will be found ✓
// todo: This will NOT be found (lowercase) ✗
// TODO This will NOT be found (no colon) ✗
// Todo: This will NOT be found (mixed case) ✗
Optional author/assignee syntax (still works with colon):
// TODO(john): Assigned to john ✓
// FIXME(team): Needs team review ✓
You can customize the matching behavior with CLI flags:
# Ignore case when matching (matches TODO, todo, Todo, etc.)
tt scan --ignore-case
# Allow tags without colon (matches "TODO something")
tt scan --no-require-colon
# Use both options together (most flexible, like v0.2.x behavior)
tt scan --ignore-case --no-require-colon
Or set these options in your .todorc.json:
{
"ignore_case": true,
"require_colon": false
}
The strict defaults (uppercase + colon required) significantly reduce false positives:
std::io::Error in Rust/C++ won't matchERROR_CODE won't matchResult<T, Error> won't matchThese defaults align with most coding conventions and help you find intentional TODO comments, not accidental matches.
Tags are assigned priority levels for sorting and coloring:
| Priority | Tags | Color |
|---|---|---|
| Critical | BUG, FIXME, ERROR | Red |
| High | HACK, WARN, WARNING, FIX | Yellow |
| Medium | TODO, WIP, MAYBE | Cyan |
| Low | NOTE, XXX, INFO, DOCS, PERF, TEST, IDEA | Green |
The tool generates clickable hyperlinks (OSC 8) in supported terminals:
Colors are automatically enabled when outputting to a terminal. Use --no-color or set the NO_COLOR environment variable to disable.
A GitHub Action that automatically scans your pull requests for TODO comments and posts a summary as a PR comment. Features include:
A Zed Editor extension that integrates TODO scanning directly into Zed. Features include:
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feat/amazing-feature)git commit -m 'Add some amazing feature')git push origin feat/amazing-feature)MIT License - see LICENSE for details.