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

@ramarivera/pi-television

v0.0.6

Published

Pi extension that powers native Pi @file picking with background television-style search

Readme

@ramarivera/pi-television

Pi extension that keeps Pi's native file picking UX while replacing the default @file search path with a faster background television-style search.

Install

pi install npm:@ramarivera/[email protected]

Modes

Default: native live picker

By default, typing @ in Pi keeps using Pi's native picker UI, but the suggestions come from this extension's background file search instead of launching the full-screen tv interface.

Optional: select dialog mode

If you want the simpler fallback flow, create .pi/television.json in your project:

{
  "mode": "select-dialog"
}

That mode uses background search plus a native Pi select dialog when you trigger @.

Config

Project config lives at:

.pi/television.json

You can also set a user-level default at:

~/.pi/agent/television.json

Project config overrides user config.

Supported fields:

{
  "mode": "native-live",
  "includeFolders": true,
  "maxResults": 20,
  "refreshMs": 10000,
  "gitTracked": true,
  "gitRecencyDays": 14
}

includeFolders defaults to true, so folder paths are returned alongside files. Set it to false to restrict the picker to regular files only.

gitTracked defaults to true. When the project is inside a git work tree, the searcher runs best-effort git ls-files and git log --since=N in the background to build ranking signals:

  • Tracked files rank above untracked ones (noise like generated/vendored files sinks to the bottom of the list).
  • Files edited within the last gitRecencyDays days (default 14) get an additional boost.

Git is fully optional: if git is missing or the directory is not a repo, ranking silently falls back to fd-only fuzzy matching. Set "gitTracked": false to disable the git probes entirely.

Ranking

Results are ordered as exact path prefix, then basename prefix, then fuzzy match (pi-tui's fuzzyMatch, tokenized on whitespace and /). Within each bucket, ties are broken by git tier (tracked + recent > tracked > untracked), then path depth, then length, so the canonical file wins over vendored/test copies. Case-variant paths (e.g. Foo.ts / foo.ts) collapse to the best-ranked spelling.

The native picker shows the basename as the item label and the directory as the description, so the first column stays readable instead of truncating long paths.

Local Development

This checkout is live-enabled for Pi through:

.pi/extensions/television/index.ts

That shim imports the package entrypoint in src/index.ts, which imports the extension factory from src/extension.ts. Tests use the same symbol so local behavior, package behavior, and manual Pi behavior do not drift.

npm install
npm run check
npm test
npm run test:e2e
npm pack --dry-run

Publishing

Publishing uses GitHub Actions trusted publishing in .github/workflows/publish.yml.

Before the first publish, configure npm trusted publishing:

  • owner/repo: ramarivera/pi-television
  • workflow: .github/workflows/publish.yml
  • environment: blank unless the workflow is changed to require one

No NPM_TOKEN is required for trusted publishing.