NPM By Numbers

Bocoup

Exploring patterns in the NPM software package ecosystem

See it Live

Many developers use NPM on a daily basis to manage server-side and client-side dependencies, but do we know what goes on behind the scenes? What does the NPM ecosystem look like from 10,000 feet? We set out to answer some of those questions in an interactive data visualization investigating the state of NPM. NPM By Numbers explores how packages on NPM breakdown across several dimensions such as version numbers, age, and dependent counts. We put together a data analysis pipeline as well as a web and mobile experience to tell this story. Learn more on our blog here.

Challenge

NPM (Node Package Manager) is the default package manager for Node.js. As of September 22nd, 2014, NPM hosted over 99,000 packages, a number that grew by 10,000 packages in the subsequent two months alone. We wanted to understand what the node ecosystem looked like as a whole, and to explore questions around software package age, contributors, and dependencies.

Solution

The Bocoup Data Visualization team conducted a statistical analysis of the collection of NPM's entire package ecosystem from the end of 2014. Once we identified certain patterns, we designed and built an interactive visualization exploring several questions about the NPM ecosystem: we explored whether there is a relationship between the age of a package and its version number, whether older packages tend to have more maintainers, and whether there was a relationship between the age of a package and the number of other packages that depended on it.

Impact

The NPM By Numbers interactive visualization revealed some fascinating statistics about the ecosystem as a whole. We learned that the majority (75%) of packages did not have any dependents. By contrast, we discovered that only the top 1% of packages had 100 or more dependents. We also identified the tremendous growth of NPM in our analysis by recognizing that the majority (57%) of packages were actually added that year. You can learn more about the results of our analysis on our blog post.

More work like this at Bocoup