~ $ cd open-source/packages && cat README.md
What strangers install
Thirty-four packages on npm are mine. Most were written for one project and are of interest only to it. None was ever promoted, and a few kept being installed anyway, years after I had stopped looking:
| package | 2015 to 2025, a bar a year | downloads |
|---|---|---|
string-cache-mapa WeakMap replacement for string keys, with a bounded cache behind it | 100,982 | |
async-barriera helper that makes async/await tests say what they wait for | 71,966 | |
spy-middlewarea Redux middleware for spying on actions in tests | 27,885 | |
grunt-frontmattera Grunt task: many files with YAML front matter into one JSON | 22,087 | |
object-canonical-keysalways the same array of keys for the same keys, so comparisons stay cheap | 9,804 | |
async-deferrerone function that returns a promise, or resolves it | 6,231 | |
| the other 28mostly AngularJS and Redux helpers written for one project each | 41,712 | |
| all of them | 280,667 |
Source: npm, Inc. Download counts of the public registry. The dataset, at its source. This site keeps sums of the finished years 2015 to 2025, last added to on 21 September 2026.
Each row of bars is on its own scale: it shows the shape of a package's life, and the number beside it says how much.
What is in it
string-cache-maphad its best year four years after it was written. It is from 2018 and was downloaded a few hundred times a year until 2021; in 2022 it was downloaded fifty thousand times.async-barrieris still growing. Its best year so far is 2024, six years after it was published, and it is a helper for writing tests.grunt-frontmatteris the other shape: it peaked in 2017 with Grunt itself, and has been going quietly ever since.
What it is not
A download is not a person. The registry counts every mirror, every robot and every build server that ever ran an install, and one company's continuous integration can be most of a package's year. What the numbers do say is that the code is in use somewhere, by someone who found it on their own and did not replace it.