Code-Notes
Tool to summarise all code annotation like TODO or FIXME
code-notes
Status: Actively maintained. The has around 190 stars and was last pushed in August 2026.
code-notes is a node.js version of Rails' "rake notes" functionality. It scans your source for annotation comments (NOTE, OPTIMIZE, TODO, HACK, XXX, FIXME, BUG) and summarises them across your whole project, so the promises buried in your codebase actually surface somewhere.
Why a fork
code-notes started life as a fork of , with some inspiration from . fixme did the core job well, but I kept hitting the same walls in real projects: I could not control which directories were scanned, and I could not exclude paths with any flexibility. On any non-trivial codebase, that means either scanning node_modules or not using the tool.
So the fork exists to make scanning scope a first-class concern:
- Flexibility in defining the source scanning directory
- Exclude patterns compatible with globbing
- The ability to read the exclusion list straight from a
.gitignorefile, so the tool skips exactly what git does - Include-only patterns that overwrite any exclusions, for scanning just one slice of a project
code-notes also exits with proper error codes: it terminates with an error code if any annotations are found, which makes it usable as a CI gate ("no FIXMEs reach master").
Installation and usage
The core options are the scanning-scope ones:
Two things to keep in mind: directory exclusions need a trailing slash (node_modules/, not node_modules), and some extension patterns like *.md or *.html have to be wrapped in quotes to reach the tool unexpanded; if a pattern does not seem to work, quote it. The full list of flags (encoding, line-length limits, and so on) is in the .
What the output looks like
Given comments like these somewhere in a file:
you get an annotated summary per file:
Authors in parentheses, as in // NOTE(Mr Author): ..., are picked up and displayed with the message.
Extending code-notes
If you want annotations beyond the built-in seven, add a definition to lib/messageChecks.js:
Each definition has three fields: regex extracts the line containing the annotation, label defines what is printed in the console, and colorer takes any valid option. Binary and log file extensions are skipped by default; the skip lists live in lib/notes.js if you need to adjust them.