Todo Tree
A command-line tool to find and display TODO-style comments in your codebase, similar to the VS Code "Todo Tree" extension.

Features
- 🔍 Recursive directory scanning - Respects
.gitignorerules automatically - 🏷️ Configurable tags - TODO, FIXME, BUG, NOTE, HACK, WARN, PERF, and more (and custom tags)
- 🌳 Tree view output - Beautiful hierarchical display grouped by file
- 📋 Multiple output formats - Tree, flat list, and JSON
- ⚙️ Configuration file support -
.todorcin JSON or YAML format - 🎨 Colored output - Priority-based coloring for different tag types
- 🔗 Clickable links - Terminal hyperlinks to file locations (where supported)
- 🧩 Editor extensions - Integrates with Zed via slash commands
- 🤖 GitHub Action - Automatically scan PRs and post TODO summaries as comments
Installation
Using Homebrew (macOS/Linux)
Using Cargo
NixOS (Flakes)
Try before you install
# runs the default todo-tree command
# create a shell with the command available (with nix-output-monitor)
# or, just normal nix
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.
Install for your system
# 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
];
}
From Source
# Clone the repository
# Build and install
Usage
The tool provides two binary names: todo-tree and tt (alias for quick access).
Basic Commands
# Scan current directory (default command)
# Scan a specific directory
# Scan with specific tags
# List all TODOs in flat format
# Show configured tags
# Show statistics
Configuration
Create a .todorc.json or .todorc.yaml file in your project root:
JSON Format (.todorc.json)
YAML Format (.todorc.yaml)
tags:
- TODO
- FIXME
- BUG
- NOTE
- HACK
include:
- "*.rs"
- "*.py"
exclude:
- "target/**"
- "node_modules/**"
json: false
flat: false
no_color: false
Configuration Search Order
.todorcin the current directory.todorc.jsonin the current directory.todorc.yamlor.todorc.ymlin the current directory- Parent directories (recursive)
~/.config/todo-tree/config.json(global config)
Supported Comment Styles
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 | -- |
Tag Formats Recognized
// TODO: Simple tag with colon
// TODO Simple tag without colon
// TODO(author): Tag with author
// todo: Case insensitive (by default)
Priority Levels
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 |
Terminal Support
Clickable Links
The tool generates clickable hyperlinks (OSC 8) in supported terminals:
- iTerm2
- WezTerm
- Hyper
- VS Code Terminal
- GNOME Terminal (VTE 0.50+)
- Konsole
- Alacritty
Color Support
Colors are automatically enabled when outputting to a terminal. Use --no-color or set the NO_COLOR environment variable to disable.
Extensions
GitHub Action
The todo-tree-action automatically scans your pull requests for TODO comments and posts a summary as a PR comment.
# .github/workflows/todo-tree.yml
name: Todo Tree
on:
pull_request:
types:
permissions:
contents: read
pull-requests: write
jobs:
scan-todos:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: alexandretrotel/todo-tree-action@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
changed-only: true # Only scan files changed in the PR
new-only: true # Only show NEW TODOs (not in base branch)
See the todo-tree-action repository for full documentation and configuration options.
Zed Editor
The zed-todo-tree extension integrates TODO scanning directly into Zed Assistant using slash commands.
See the zed-todo-tree repository for installation instructions, usage details, and required capabilities.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feat/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feat/amazing-feature) - Open a Pull Request
Acknowledgments
License
MIT License - see LICENSE for details.