ok so a little story.
I published a small package to npm. Nothing crazy. Next morning I open the stats page and see... 140 downloads. In one day.
And for like 10 minutes I genuinely thought "wow, people actually need this??" 😅
Spoiler: they didn't. Nobody did. It was robots.
where do those downloads come from
Turns out every time you publish a new version, registry mirrors and security scanners grab it right away. Usually that's somewhere around 100-150 downloads per version, doesn't matter if a single human ever touched it.
Plus there's a constant "background noise", bots pulling every version of every package every week. Plus CI pipelines reinstalling stuff on every commit.
So the "weekly downloads" number on npm is basically just "how many times the tarball got served". Not users. Not even close sometimes.
And this kinda bugs me, because we all look at that number. When picking between two libs, when checking if our own project is going anywhere, when writing "used by thousands" in a README...
so I built a thing
It's called humanloads 👋
You type any package name and see the npm number next to an estimate of real installs. The idea is pretty simple:
- cut the spike every new version gets from mirrors in the first days
- subtract the flat floor that bots download from every version each week
- show what's left as a range with a confidence level
Important: it's not a "number of people". Nobody can count that, npm included. CI and dependency installs are still in there. But it's way closer to reality than the raw number.
No signup, everything is computed right in your browser.
stuff that's fun to poke at
- compare mode: react vs vue, jest vs vitest, moment vs dayjs. Holy wars, but with cleaner data
- per-version breakdown, so you can see which versions people actually use
- category lists: best ORMs, test frameworks, bundlers and so on
- and my favorite rabbit hole: why does is-number have so many downloads? 🙃
try it on your own package
Seriously, put your own package in there. It might hurt a little 😄 but at least it's honest.
Code is open on GitHub. The methodology is here if you want to argue with my math (please do, that's how it gets better).
What's the biggest gap between npm and humanloads you've found? Drop it in the comments, I'm curious 👇
Top comments (0)