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.
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.