RS registry-stats
Zero dependencies · Node 18+

Five registries, one AI-powered platform.

Engine, Pulse AI co-pilot with voice output, six interactive charts, smart growth engine, and desktop app — all from one repo. Query npm, PyPI, NuGet, VS Code Marketplace, and Docker Hub through a single CLI, API, or live dashboard.

Install

npm install @mcptoolshop/registry-stats

Query

await stats('npm', 'express')

Dashboard

https://...github.io/registry-stats/dashboard/

The platform

Three layers, one repo.

Engine

TypeScript library + CLI + REST server. Published to npm. Zero dependencies, native fetch().

Pulse AI Co-pilot

Conversational AI with voice output (4 voices, auto-speak), fullscreen mode, GitHub org data connector, streaming responses, and model selector. Powered by Ollama.

Dashboard

Tabbed Astro app with six interactive Chart.js visualizations, export reports (PDF / JSONL / Markdown), and built-in help guide.

Desktop

WinUI 3 + WebView2 native Windows app. Offline-capable, live stats refresh, CSV export.

Five registries

npm, PyPI, NuGet, VS Code Marketplace, and Docker Hub — all through one interface.

Smart Growth

Baseline threshold, percentage cap, and damped velocity formula eliminate misleading percentages from small-denominator distortion.

Velocity Tracker

Damped growth metric with sparkline visualizations and spike detection (>2σ) on a 30-day heatmap.

Bulk & comparison

Fetch multiple packages at once or compare the same package across registries.

Export formats

Output as CSV, Chart.js-compatible JSON, or raw data for your own dashboards.

Retry & caching

Automatic retry with exponential backoff. 5-minute TTL cache, pluggable for Redis.

Supported registries

Package formats and available data from each source.

Registry
Package format
Time series
Data available
npm
express, @scope/pkg
Yes (549 days)
lastDay, lastWeek, lastMonth
pypi
requests
Yes (180 days)
lastDay, lastWeek, lastMonth, total
nuget
Newtonsoft.Json
No
total
vscode
publisher.extension
No
total (installs), rating, trends
docker
namespace/repo
No
total (pulls), stars

Usage

Install

npm install @mcptoolshop/registry-stats

Single registry

import { stats } from '@mcptoolshop/registry-stats';

const npm = await stats('npm', 'express');
// → { registry, package, downloads }

All registries at once

const results = await stats.all('express');
// Promise.allSettled style — never throws

Time series + trend

import { stats, calc } from '@mcptoolshop/registry-stats';

const daily = await stats.range(
  'npm', 'express', '2025-01-01', '2025-06-30'
);
const trend = calc.trend(daily);
// → { direction: 'up', changePercent: 8.3 }

Compare across registries

const cmp = await stats.compare('express');
// → { package, registries: { npm, pypi, ... } }

CLI

registry-stats express -r npm
registry-stats express --compare
registry-stats serve --port 3000

API reference

Core functions and utilities.

stats(registry, package, options?)

Fetch stats from a single registry. Returns PackageStats | null.

stats.all(package)

Query all registries at once. Uses Promise.allSettled — never throws.

stats.bulk(registry, packages)

Fetch stats for multiple packages from one registry, concurrency-limited.

stats.range(registry, package, start, end)

Fetch daily download counts (npm + PyPI only).

stats.compare(package, registries?)

Compare the same package across multiple registries side-by-side.

calc.trend(daily)

Detect trend direction and percent change from daily download data.

calc.monthly(daily) / calc.yearly(daily)

Group daily data into monthly or yearly buckets.

calc.toCSV(daily) / calc.toChartData(daily)

Export time-series data as CSV or Chart.js-compatible JSON.

createHandler() / serve(options?)

REST API server — use createHandler() for serverless or serve() for standalone.