GitHub Trending Repos surfaces repositories gaining stars and traffic today. npm weekly downloads measure package installs over months. The two signals diverge often because repo names do not map cleanly to npm package names. This page defines mapping rules, triangulation workflows, and when each feed leads.
Developer trend research pulls from two feeds that answer different questions. GitHub Trending Repos shows which repositories gained attention today. npm weekly downloads show which packages teams actually installed. Treating them as interchangeable produces false positives.
| Feed | API call | Signal | Lag |
|---|---|---|---|
| GitHub Trending Repos | get_top_trends type GitHub Trending Repos | Star and traffic velocity on repos | Hours |
| npm downloads | get_growth source npm | Weekly install counts | Days to weeks |
GitHub ranks org/repo slugs. npm requires the exact package name from npmjs.com, case-sensitive.
On 2026-07-25, get_top_trends returned:
{
"as_of_ts": "2026-07-25T04:01:42.229953+00:00",
"type": "GitHub Trending Repos",
"limit": 10,
"data": [
[1, "block/buzz"],
[2, "koala73/worldmonitor"],
[3, "ComposioHQ/awesome-claude-skills"],
[4, "Pumpkin-MC/Pumpkin"],
[5, "shiyu-coder/Kronos"],
[6, "Automattic/harper"],
[7, "likec4/likec4"],
[8, "citrolabs/ego-lite"],
[9, "yorukot/superfile"],
[10, "ruvnet/RuView"]
]
}
block/buzz ranks first on GitHub. That does not mean the npm package buzz gained equivalent traction. The repo slug and the published package name are independent identifiers.
Before any npm API call:
name in the root package.json.package.json exists, the project may not publish to npm. Skip npm checks.name field.Pass the resolved string exactly:
{
"mode": "get_growth",
"source": "npm",
"keyword": "langchain",
"percent_growth": ["3M", "12M"]
}
npm rejects fuzzy matches. @block/buzz and buzz are different packages.
A get_growth response on langchain on 2026-07-25 showed:
| Period | Growth | Recent weekly downloads | Baseline weekly downloads |
|---|---|---|---|
| 12M | +104.25% | 2,144,486 | 1,049,891 |
| 3M | +3.29% | 2,144,486 | 2,074,817 |
Twelve-month growth was strong while three-month growth flattened. That pattern fits a mature package past its initial hype curve. GitHub trending would not flag langchain today because the repo is established, even though installs remain high.
Contrast with react on the same date:
| Period | Growth | Recent weekly downloads |
|---|---|---|
| 12M | +207.72% | 122,216,526 |
| 3M | -6.57% | 122,216,526 |
Massive absolute volume with slight recent decline. GitHub trending and npm growth tell opposite short-term stories for the same ecosystem anchor.
Querying npm with a guessed name from a trending repo can return misleading growth. A lookup on worldmonitor returned 12M growth above 999,000% because the baseline weekly volume was zero. The response included data_quality: low and a warning that the underlying signal was over 90% zero values.
Treat those results as "new or near-zero baseline," not as proof of viral adoption. Confirm with:
recent_volume below 1,000 weekly downloads (niche)data_quality: low in the responseStars without installs. Repo trends on GitHub, npm growth flat. Common for awesome-list repos, devtools with binary releases, or pre-1.0 libraries developers bookmark before shipping.
Installs without stars. npm 3M growth rises, GitHub repo absent from trending. Typical of B2B libraries adopted through internal security review rather than social discovery.
Name collision false positive. Repo block/buzz trends while an unrelated npm package buzz shows high growth. The API returns data for the keyword asked, not the repo linked. Mapping discipline prevents this error.
Monorepo mismatch. Trending repo is org/monorepo but the installable package is @org/cli inside packages/cli. npm queries must target @org/cli.
1. get_top_trends(type="GitHub Trending Repos", limit=25)
2. For each new repo slug:
a. Resolve npm package name from package.json
b. get_growth(source="npm", keyword=<package>, percent_growth=["3M","12M"])
c. If volume_available and recent_volume > 10,000: flag "production scale"
d. If data_quality low: flag "early signal, verify manually"
3. Optional: get_growth(source="google search, news volume", keyword=<project name>)
Step 3 catches hype cycles where press coverage outpaces package installs.
| Step | Requests per repo |
|---|---|
| GitHub leaderboard poll | 1 (shared across all repos) |
| npm growth check | 1 per package |
| Cross-source growth | 1 per project name |
Scanning 10 new trending repos with npm and cross-source checks costs 1 + 10 + 10 = 21 requests. On the free tier at 100 requests per month, batch weekly rather than on every hourly GitHub poll.
Explicit source names in prompts reduce routing errors. For npm, always include the exact package string.
npm covers JavaScript packages only. GitHub trending includes Rust, Go, Python, and other ecosystems. Pair GitHub polls with:
get_growth on google search for the project or maintainer nameget_top_trends on Steam Most Played when the repo is a gameget_growth on steam with the game display name for player countsFor broader developer ecosystem coverage, see developer ecosystem trends and the npm API reference.
FAQ