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

pi-frontier

v1.2.0

Published

Daily-updated, curated catalog of frontier AI models (LLMs, multimodal, image, video). Includes unified API routing tables, pricing data, a headless JS library, CLI, and Web UI.

Readme

pi-frontier

pi-frontier banner

A daily-rebuilt snapshot of the frontier AI landscape — the latest models per provider × family × tier (release-date-first, no AI in the loop) spanning LLMs, multimodal, image, and video generators. It includes a complete reseller API route table and pricing data for every model. Available as a Node.js library, a CLI tool, and a static web UI.

Source: models.dev. The pipeline is purely deterministic and curates the top generative AI models globally.

Three ways to use it

1. Headless — npm install pi-frontier

import {
  getFrontierModels,
  cheapestRoute,
  filterCapability,
  findRoutes,
  getGeneratedAt,
} from 'pi-frontier';

getFrontierModels();                          // → All frontier model objects
getGeneratedAt();                             // → "2026-05-15"

cheapestRoute('glm-5-turbo');
// → { provider: 'zai-coding-plan', model_key: 'zai-coding-plan/glm-5-turbo',
//     model_id: 'glm-5-turbo', input_cost: 0, output_cost: 0, ... }

filterCapability({ reasoning: true, tools: true, minContext: 200_000, maxInputCost: 5 });
// → array of frontier models matching every constraint

findRoutes('gpt-5.5');
// → [ { frontier: {...}, routes: [ {provider,model_id,$,...}, ... ] }, ... ]

The bundled snapshots are also directly importable:

import frontier from 'pi-frontier/data/frontier';
import routes   from 'pi-frontier/data/routes';

Costs in getFrontierModels() entries are per token (USD). Routes use the raw catalog's native unit: per 1M tokens (USD). filterCapability takes its maxInputCost / maxOutputCost caps as $/1M for human-friendly input.

2. CLI — npx pi-frontier

npx pi-frontier                              # list all 44 frontier models
npx pi-frontier glm-5-turbo                  # frontier match + route table (★ = cheapest)
npx pi-frontier --reasoning --tools --min-context 200000
npx pi-frontier --vision --open-weights
npx pi-frontier gpt-5.5 --json               # machine-readable

Flags: --reasoning / --no-reasoning, --tools / --no-tools (maps to tool_call), --attachment / --no-attachment, --vision (image input), --audio (audio input), --open-weights / --no-open-weights.

Constraints: --min-context <tokens>, --max-input-cost <usd-per-1m>, --max-output-cost <usd-per-1m>.

Output: --routes (force route view without a pattern), --json, -h / --help.

3. Headed — ffrappo.github.io/pi-frontier

A single static page with the same filter logic. Filter by name, toggle capability chips, drag the context / max-cost sliders, click a card to see the full route table inline.

4. Raw JSON artifacts

Stable URLs anyone can fetch — no npm install, no API key, just curl:

| URL | Contents | | --- | --- | | https://ffrappo.github.io/pi-frontier/data/frontier_final.json | The 44-model frontier array | | https://ffrappo.github.io/pi-frontier/data/routes.json | Per-model full route table | | https://ffrappo.github.io/pi-frontier/FRONTIER_MODELS.md | Markdown dashboard |

curl -s https://ffrappo.github.io/pi-frontier/data/routes.json \
  | jq '.models["zai/glm-5-turbo"].routes[0]'

Both files are also pinned inside the npm tarball — import 'pi-frontier/data/frontier' gives you a build-time-frozen copy if you'd rather not depend on Pages.

How the snapshot is built

npm run all       # fetch → filter → frontier → routes
npm run fetch     # download the models.dev catalog
npm run filter    # flatten + release-date cutoff + normalize
npm run frontier  # dedup + prune + write final output
npm run routes    # precompute every frontier model's full route table
npm run where     # CLI lookup

filter.js — release-date-first cut

The primary filter is a release_date cutoff: drop every model whose release_date is older than MONTHS_THRESHOLD months (default 6). This single cut removes ~64% of the dump and all the legacy junk (GPT-3.5, Llama 3.x, Mixtral, o1, …) with no name regex and no AI. release_date is used — not last_updated, which is polluted by reseller catalog re-indexing. Models with no release_date survive (missing data is never grounds for dropping).

Also flattens the provider-keyed catalog to a clean single key (no double provider prefix), drops non-chat modalities (image/audio/video/embedding-only), and carries through both release_date and last_updated.

frontier.js — dedup, prune, finalize

The release-date cutoff is orthogonal to deduplication, so this stage still:

  • Regional dedup — collapses regional creator mirrors (minimax-cn, moonshotai-cn, zhipuaizai) that re-list the same models; keeps the global / cheaper-priced entry.
  • Version-aware family pruning — keeps the top version per provider × family × tier.
  • Keep newest in family — guarantees every surviving family keeps its current head even if its release_date is >6 months old. This closes the one real false-negative: a slow-cadence model like claude-haiku-4-5 (no Haiku successor shipped) would otherwise be wrongly aged out.

Writes data/frontier_final.json and the FRONTIER_MODELS.md dashboard. The final record carries model-intrinsic capability fields too: reasoning, tool_call, attachment, modalities ({input, output} arrays), open_weights, knowledge (cutoff date).

SCOPE env var (default creators) restricts to creators, creators+cloud, or all provider classes.

routes.js — every reseller copy of every frontier model

The frontier list is canonical (44 first-party rows), but the same model is typically also hosted under a dozen aggregators / clouds (openrouter, vercel, chutes, kilo, nano-gpt, …). routes.js precomputes that view into data/routes.json: for each frontier model, the full sorted route array (by input_cost asc). Routes are matched by last-segment-after-slash case-insensitive — so glm-5-turbo correctly collects zai/glm-5-turbo, openrouter/z-ai/glm-5-turbo, kilo/zai/glm-5-turbo, etc., while still ignoring strict variants like glm-5-turbo-fp8 (different last segment).

CI & freshness

  • .github/workflows/daily.yml — runs the full pipeline at 03:17 UTC daily, commits if any of frontier_final.json, routes.json, or FRONTIER_MODELS.md changed.
  • .github/workflows/pages.yml — every push to main redeploys the static UI + JSON artifacts to GitHub Pages.
  • .github/workflows/publish.yml — pushing a vMAJOR.MINOR.PATCH tag publishes to npm with prepublishOnly: npm run all, so the tarball always ships a fresh snapshot.

Limitations

The pipeline is only as current as models.dev. A brand-new model may not appear here until models.dev adds it (PRs typically merge within days). If a model is missing, check whether models.dev has it yet before assuming a pipeline bug.

Tuning

MONTHS_THRESHOLD=3 npm run filter   # tighter cutoff — only models <3 months old
SCOPE=creators+cloud npm run frontier

License

MIT