npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

todoprompt

v0.1.0

Published

A TUI that scans your codebase for TODOs (via ripgrep) and turns them into ready-to-paste prompts for a coding agent.

Readme

todoprompt

A terminal UI that scans your codebase for TODO comments (using ripgrep) and turns the one you pick into a ready-to-paste prompt for a coding agent.

┌─ TODOs (3) ────────────────────┐┌─ src/a.ts:2 ───────────────────────────────┐
│ ▶ src/a.ts:2                   ││ ts                                          │
│   TODO: validate inputs        ││  1 export function add(a: number, b: number)│
│   src/a.ts:7                   ││  2   // TODO: validate inputs are finite     │
│   TODO refactor this helper    ││  3   return a + b;                          │
│   src/style.css:2              ││  4 }                                        │
│   TODO: use theme token        ││  5 // regular comment                       │
└────────────────────────────────┘└─────────────────────────────────────────────┘
 ↑/↓ move  enter prompt  c config  r rescan  q quit
  • Two-pane browser — found TODOs on the left, the surrounding code (with the TODO centred) on the right.
  • Prompt generator — press Enter to turn a TODO into a prompt from a configurable template, edit it inline, and copy it to the system clipboard.
  • Config screen — customise the prompt template, the search term, and the include/exclude globs without leaving the app. Settings persist to ~/.config/todoprompt/config.json.

Requirements

  • Bun — the renderer (OpenTUI) loads a native library via FFI, which Bun provides out of the box. The CLI runs under Bun even when installed with npm.
  • ripgrep (rg) on your PATH.

Install

npm install -g todoprompt
# or
bun install -g todoprompt

The published package's executable uses a #!/usr/bin/env bun shebang, so Bun must be installed and on your PATH.

Run without installing:

bun x todoprompt

Usage

todoprompt                       # scan the current directory
todoprompt -d ~/Sites/my-app     # scan a specific directory
todoprompt --dir ./packages/web
todoprompt --help

Keys

| Screen | Keys | | ---------- | ----------------------------------------------------------------------------------- | | Browse | / or j/k move · Enter build prompt · c config · r rescan · q quit | | Prompt | e edit · c copy to clipboard · r reset to template · Esc back | | Config | / move · Enter edit field · Esc back & rescan | | | in a field: Enter save (Ctrl+S for the template) · Esc cancel |

Configuration

Stored at ~/.config/todoprompt/config.json (honours XDG_CONFIG_HOME). Everything below is editable from the in-app Config screen.

| Setting | Description | | --------------- | ---------------------------------------------------------------------- | | Search term | The regex passed to ripgrep (default TODO; try TODO\|FIXME\|HACK). | | Include globs | Comma-separated globs of files to search (each becomes -g <glob>). | | Exclude globs | Comma-separated globs to skip (each becomes -g !<glob>). | | Context lines | How many lines to show either side of a TODO. | | Prompt template | The text generated for each TODO. Supports the tokens below. |

ripgrep also honours your .gitignore, so generated/vendored files are skipped on top of the exclude globs.

Prompt template tokens

| Token | Replaced with | | -------------- | ------------------------------------------------------ | | {{relPath}} | File path relative to the scanned directory | | {{absPath}} | Absolute file path | | {{line}} | Line number of the TODO | | {{column}} | Column of the matched keyword | | {{todo}} | The TODO text (from the keyword to end of line) | | {{lineText}} | The full matched line, trimmed | | {{context}} | The surrounding code window (raw source) | | {{lang}} | Language hint for the fenced code block (ts, php…) | | {{cwd}} | The directory being scanned |

Development

bun install
bun run src/cli.tsx        # run against the current directory
bun run typecheck          # tsc --noEmit
bun test                   # headless render + logic checks (scripts/smoke.tsx)

License

MIT