Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Loose Ends: TODO tree without ripgrepNew to Visual Studio Code? Get it now.
Loose Ends: TODO tree without ripgrep

Loose Ends: TODO tree without ripgrep

Plainwork Digital

|
1 install
| (0) | Free
Every TODO, FIXME and HACK comment in your workspace in one list, with highlights. Uses VS Code's own file APIs instead of a ripgrep binary, so updates don't break it. Reads your Todo Tree tags. No telemetry.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Loose Ends: TODO tree without ripgrep

Every TODO, FIXME, HACK, BUG and XXX comment in your workspace in one list, highlighted in the editor and counted in the status bar.

Why another TODO list? Todo Tree finds comments by running the ripgrep binary bundled inside VS Code. When VS Code 1.122 moved that binary (May 2026), Todo Tree showed an empty list and "Failed to find vscode-ripgrep", and people are still reporting it months later. Loose Ends doesn't run ripgrep or any other binary. It reads files only through the file APIs VS Code gives every extension (locally, over Remote SSH and WSL, in dev containers and in forks), so there is no bundled path to break. Tested end to end in VS Code 1.142 on Linux.

Loose Ends listing the TODO and XXX comments of psf/requests in VS Code, with the tag highlighted in the editor

Free

  • One list for the whole workspace. Group by tag or by file; click an item to jump to the line.
  • Highlights the tag in the editor (or the rest of the line), with a mark in the scroll bar.
  • Filter by text, tag, file or owner, or show only the current file.
  • Updates as you type, including unsaved changes and files created or deleted outside VS Code.
  • Status bar count (8 TODO, 3 FIXME… on hover).
  • Switching from Todo Tree? If you set todo-tree.general.tags, Loose Ends uses those tags until you set looseEnds.tags.
  • Owners and due dates written in the comment are shown in the list: TODO(@sam 2026-11-01): … or TODO rotate keys @lee due:2026-11-01.

Matching rule: a tag counts when it starts a comment (//, #, /*, *, <!--, --, ;, %) or a line, optionally after a Markdown list item or checkbox. Tags are matched as whole words and case-sensitively by default, so TODOS, todo_list and a bare 'TODO' inside a string are ignored. A string that itself looks like a comment ("# TODO …", '// TODO …') is listed, as in Todo Tree, and ; and -- count as comment markers in any file type.

Pro ($9 once, no subscription)

For when the list gets long and you need to decide what to do first:

  • Age and author of every item from local git blame (trusted workspaces only; nothing leaves your machine). Items older than looseEnds.staleDays (90) are marked.
  • Group by owner, age or due date, with overdue items first.
  • Overdue items in the Problems panel: TODO overdue by 16 days (due 2026-10-01): …
  • Export a report as Markdown (a table to paste into a PR, issue or sprint doc) or CSV.

Pro: the same list grouped by age from git blame

Get a key at https://plainworkdigital.com/d20261017a25/, then run Loose Ends: Enter Pro key. The same key unlocks Pro in every build of Loose Ends, whether you installed it from the Marketplace or from the VSIX download on that page. The key is kept in VS Code's secret storage.

Settings

Setting Default What it does
looseEnds.tags [] Words to look for. Empty means your Todo Tree tags, else TODO FIXME HACK BUG XXX.
looseEnds.caseSensitive true Match TODO but not todo.
looseEnds.include **/* Glob of files to scan in each workspace folder. With a custom pattern, files created after the last full scan appear only after Loose Ends: Scan again.
looseEnds.exclude node_modules, .git, dist, build, out, coverage, vendor, venvs, target, minified files, lockfiles Added to your files.exclude and search.exclude.
looseEnds.maxFiles 5000 Files per scan; the view says when it stops early.
looseEnds.maxFileSizeKB 1024 Larger files are skipped, as are binary files.
looseEnds.highlight tag tag, line or none.
looseEnds.colors {} Per-tag colour, e.g. { "TODO": "#ffcc0055" }.
looseEnds.statusBar true Show the count.
looseEnds.blame true (Pro) Age and author from git.
looseEnds.staleDays 90 (Pro) When an item counts as stale.
looseEnds.overdueWarnings true (Pro) Overdue items in the Problems panel.

Speed

Measured in VS Code 1.142 on a shallow clone of facebook/react (7,260 files): a full scan takes about 2 seconds and finds 1,229 items. After that, only the file you edit is rescanned.

Privacy

No telemetry, no account. The free features make no network requests at all. With a Pro key, the extension sends only the key to Plainwork's licence server, at most once every 10 minutes. Git runs locally, without a shell, and only in trusted workspaces.

Fixing Todo Tree instead

If you'd rather keep Todo Tree, install ripgrep yourself and set todo-tree.ripgrep.ripgrep (not todo-tree.ripgrep, which the error message names) to its absolute path. A full guide, including Remote SSH: https://plainworkdigital.com/d20261017a25/todo-tree-failed-to-find-vscode-ripgrep

Made by Plainwork Digital · hello@plainworkdigital.com · MIT licence

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft