Skip to content
| Marketplace
Sign in
Visual Studio Code>Visualization>TodoForge – TODO Tree, Highlights & Due DatesNew to Visual Studio Code? Get it now.
TodoForge – TODO Tree, Highlights & Due Dates

TodoForge – TODO Tree, Highlights & Due Dates

Onur KARAKUS

|
1 install
| (0) | Free
Fast, offline TODO and FIXME tree with theme-aware highlights, owners and due dates, quick fixes, a Changes view for your branch and first-class .NET support. No account, no telemetry.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

TodoForge icon

TodoForge

Every TODO in your code, in one tree, with owners, due dates and a Changes view for your branch.
Fast on big .NET and web repos. Offline. No account. No telemetry.

TodoForge: type a TODO with an owner, a date and a priority, see it in the tree, snooze it with a quick fix

Why TodoForge

  • Works on install. Open a folder and the TODO tree fills in. bin/, obj/, node_modules/, generated C# and minified files are skipped out of the box, and .gitignore is honored.
  • TODOs that carry meaning. Write TODO(onur, 2026-12-01, !high, #perf): … and get an owner, a due date that turns red when overdue, a priority and labels. Every part is optional.
  • See what you are adding. The Changes view lists TODOs you have not committed and TODOs added on your branch, from local git. Check it before you open a pull request.
  • Act from the line. Hover a TODO for who wrote it and when, then Snooze, set a date, set a priority, pin or remove it with one click or Ctrl+.
  • Private by design. Nothing leaves your machine. No sign-in, no telemetry, no network calls. AI help and the Copilot chat tools are off unless you turn them on.

Features

A tree of every TODO

The TODO tree grouped by tag next to a C# file with highlighted TODOs, an inline due-date hint and the status bar counter

  • Group by tag, file, owner, label or a flat list. Sort by location, priority, due date or age.
  • Finds TODO FIXME HACK BUG XXX UNDONE NOTE REVIEW OPTIMIZE and your own tags. NOTE, BUG, REVIEW and OPTIMIZE only count with a : or (, so “// Note that…” is not a TODO.
  • Reads real comments in 70+ file types, including Vue, Svelte, JSX/TSX, Astro, Razor, LaTeX and INI files. A todoList variable or a "TODO" string is not a TODO.
  • In C#, also lists throw new NotImplementedException(), [Obsolete] and #warning.
  • Markdown checklists (- [ ]) get their own group; tick them from the tree.
  • Pins keep the TODOs you care about at the top, and follow the line when the file changes. Drag to reorder.
  • Mute a TODO you never want to see again in this workspace.

Highlights that follow your theme

Tags are colored in the editor, the gutter and the overview ruler, with separate light and dark colors that pass WCAG AA contrast on the light theme. Recolor built-in tags from your theme with workbench.colorCustomizations (todoforge.todoForeground, todoforge.fixmeForeground, …).

The light theme: a HACK comment with an "overdue 6d" hint, a BUG and a NotImplementedException

Owners, due dates and priorities

// TODO(onur, 2026-12-01, !high, #perf): cache the price lookup
// FIXME(@ayse): null check before Save()
// HACK(2026-11-15): remove after the API fix ships
  • Overdue and due-soon TODOs show a hint at the end of the line (overdue 6d, due in 3d · !high).
  • Type todo in a comment and pick TODO(owner, date) to get the snippet.
  • Your name comes from todoforge.syntax.owner or your local git config user.name.
Hover card Quick fixes
Hover card with owner, due date, priority, label, git blame and action links Quick fix menu: Snooze 1 day, 1 week, 1 month, set due date, set priority, remove, pin, mute

Changes: TODOs on your branch

The Changes view: one uncommitted FIXME and two TODOs added on feature/checkout since main

TodoForge runs read-only local git commands (git diff, git ls-files, git merge-base, git blame) to split TODOs into Uncommitted and This branch. The base branch is detected (origin/HEAD, main, master, develop) or set with todoforge.git.baseBranch. Nothing is fetched.

Filter as you type

Live filter with is:mine applied: 5 of 18 TODOs

Query Shows
is:mine yours, by inline owner or git blame
is:overdue, is:due past due, has a due date
is:new uncommitted or added on this branch
is:stale older than todoforge.stale.afterDays (git blame)
tag:FIXME,BUG these tags
@ayse, #perf, path:src/api owner, label, path
-word, -tag:NOTE exclude

Save any filter as a view. Built-in views: My TODOs, Overdue, Due dates, New on this branch, Stale, FIXME and BUG, .NET code markers.

Insights

Insights: totals, overdue, stale, new on this branch, counts by tag, folder and owner, age from git blame, overdue and oldest lists

Counts by tag, folder and owner, age from git blame, and the overdue and oldest TODOs. It is a local webview with a strict content security policy: no scripts or styles from the network.

Ask Copilot about your TODOs

TodoForge adds three read-only tools for Copilot Chat and agent mode (VS Code 1.95 or later). They are off by default: set todoforge.ai.chatTools to true (or use the Ask Copilot about your TODOs step in Get Started) to turn them on.

Tool Reference What it returns
List TODOs #todos TODOs filtered by file, tag, owner, label, priority, overdue, due soon, stale, mine, new, uncommitted or this branch
TODO Changes #todoChanges TODOs you have not committed and TODOs added on this branch
TODO Details #todo One TODO with its metadata and git blame

Ask “which overdue TODOs are mine?”, “what TODOs did I add on this branch?” or “plan the FIXMEs in src/api”. Results are capped (50 by default, 200 at most) so a large repo does not flood the chat.

The tools read the index TodoForge already has. They never read surrounding code and make no network request. They run only when you chat and the model calls them, and VS Code shows each call. They are off in untrusted workspaces. Without Copilot or another chat extension, or on VS Code older than 1.95, nothing changes.

Get started in a minute

The Get Started walkthrough in the light theme

The walkthrough opens from TodoForge: Get Started. Coming from Todo Tree, JetBrains Rider/ReSharper or Visual Studio? TodoForge: Import Settings brings your tags and excludes in one step.

Completion inside a comment offering TODO and TODO(owner, date)

TodoForge and Todo Tree

Todo Tree is the extension most people know. TodoForge covers the same daily job and adds what individual developers kept asking for. Comparison with Todo Tree 0.0.226 (April 2023, its latest release as of November 2026).

TodoForge Todo Tree
Tree of TODOs, editor highlights, custom tags ✓ ✓
Works without extra setup on .NET (bin/, obj/, generated files) ✓ needs exclude globs
Ships its own ripgrep ✓ per-platform build uses the one inside VS Code
Comment-aware matching (not in strings or names) ✓ per language one regex for all files
Owner, due date, priority, labels in the comment ✓ –
Hover card, quick fixes, snippet ✓ –
Changes view (uncommitted / this branch) ✓ –
Git blame age and author, is:mine, stale ✓ –
Pins, mute, saved views, live filter query ✓ filter text only
Theme colors with light-theme contrast ✓ custom colors
Insights panel ✓ –
Import Todo Tree settings ✓ –

Todo Tree still has more highlight knobs (per-tag regex, line styles, icons from many sets). If you rely on one TodoForge does not have, tell us in an issue.

Commands and keys

Command Key
Go to Next TODO in File Ctrl+Alt+PageDown (Cmd+Alt+PageDown)
Go to Previous TODO in File Ctrl+Alt+PageUp (Cmd+Alt+PageUp)
Filter… (when the tree has focus) Ctrl+Alt+F (Cmd+Alt+F)
Quick fixes on a TODO Ctrl+. (Cmd+.)
Go to TODO… Command Palette
Show My TODOs / Show All TODOs Command Palette, tree toolbar
Open Saved View… / Save Current View… Command Palette, tree menu
Show Insights Command Palette, tree menu
Import Settings (Todo Tree, Rider, Visual Studio)… Command Palette
Export View as Markdown… / JSON… tree menu
Explain TODO with AI… Command Palette, after you opt in

Settings

The defaults are meant to be left alone. The ones people change most:

Setting Default What it does
todoforge.general.tags TODO FIXME HACK BUG XXX UNDONE NOTE REVIEW OPTIMIZE Tags to find.
todoforge.general.strictTags NOTE BUG REVIEW OPTIMIZE Tags that need : or ( after them.
todoforge.general.caseSensitive true todo in prose is not a TODO.
todoforge.scanning.excludeGlobs .NET, node and generated files Paths to skip.
todoforge.scanning.mode workspace Or only open files / the current file.
todoforge.tree.groupBy tag tag, file, owner, subtag, flat.
todoforge.tree.sortBy location location, priority, due, age.
todoforge.highlighting.style tag What to color.
todoforge.highlighting.inlineHints true overdue 3d after the line.
todoforge.highlighting.tags {} Per-tag colors, icons, ruler lane.
todoforge.dotnet.codePatterns true NotImplementedException, [Obsolete], #warning.
todoforge.markdown.enabled true Find - [ ] checklist items.
todoforge.statusbar.format compact 2/18 ⚠1, or per-tag counts.
todoforge.problems.enabled false Also list TODOs in Problems.
todoforge.codelens.enabled false Pin / Snooze above each TODO.
todoforge.syntax.owner "" Your name for is:mine; empty uses git.
todoforge.stale.afterDays 180 When a TODO counts as stale.
todoforge.git.enabled true Changes view, blame, is:mine.
todoforge.git.baseBranch "" Branch for “This branch”; empty detects it.
todoforge.ai.enabled false Opt in to Explain TODO with AI.
todoforge.ai.chatTools false Opt in to the Copilot Chat tools (#todos, #todoChanges, #todo).

All 42 settings are listed in the Settings editor under TodoForge (TodoForge: Open Settings).

Privacy

  • No network. TodoForge makes no HTTP requests. Scanning uses the bundled ripgrep; git features run local, read-only git commands.
  • No telemetry, no account, no sign-in.
  • Your data stays in VS Code. Pins, muted TODOs and saved views live in VS Code's workspace and global state. Nothing is written to your repo unless you edit a TODO (snooze, set a date, remove) or export a view.
  • AI is opt-in. With todoforge.ai.enabled on, Explain TODO with AI asks for consent once, then sends only the TODO and nearby lines to a chat model you already have in VS Code (for example GitHub Copilot). Off by default, and off in untrusted workspaces.
  • Chat tools are opt-in. Off by default; turn on todoforge.ai.chatTools. When they are on and you chat with Copilot (or another chat model in VS Code) and the model calls a TodoForge tool, the tool returns TODO lines and their metadata (path, line, tag, text, owner, dates, labels, blame author) from TodoForge's local index to that chat. That chat model, and its provider's terms, then see that data, as with any file you attach. TodoForge makes no request itself, never sends surrounding code, and does nothing when you do not chat.
  • Untrusted workspaces. Scanning and highlights work; git, the workspace's custom regex, AI and the chat tools stay off.

See SECURITY.md for how to report a problem.

FAQ

Does it work with Todo Tree installed? Yes. Both can run; you may want to turn one off to avoid double highlights. Import Settings copies your Todo Tree tags and excludes.

My TODO is not found. Check that it is in a comment, that the tag is in todoforge.general.tags, and that the file is not excluded (.gitignore, files.exclude, todoforge.scanning.excludeGlobs). Strict tags (NOTE, BUG, …) need a : or (. The TodoForge channel in the Output panel has the details.

How fast is it? Activation takes about 50 ms and does not wait for the scan. On a 20,000-file test repo a full scan takes about 50 ms and one changed file about 7 ms.

Does it support Remote SSH, WSL, Dev Containers and Codespaces? Yes, it runs where your files are. It does not support virtual workspaces (such as vscode.dev with a GitHub repo) because it needs ripgrep and git.

Where do pins and saved views go? VS Code's storage for this workspace (pins, mute) and for you (saved views). Not in your repo.

More answers in docs/faq.md.

Feedback

Found a bug or missing something? Open an issue. Release notes are in CHANGELOG.md.

TodoForge is MIT licensed.

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