The NodeSource Blog

Digging Into Node by Numbers 2017

Today, we've published the Node by Numbers 2017 analysis. 🎉

Node by Numbers is an annual analysis we work on as a retrospective of the last year in Node.js. We're consistently impressed at the growth of Node.js as a project - each year is unfailingly better than the last.

This year, we've taken some extra time to dig into the metrics and take note of interesting trends, growth, and anomalies that we've witnessed in 2017. There are quite a few interesting new data points in this year's analysis - ones that even the NodeSource team didn't instantly recognize!

Comparing Versions: Node.js 4, 6, and 8 LTS

In 2017, Node.js had three supported LTS (Long-term Support) release lines: Node.js 4.x ("Argon"), Node.js 6.x (“Boron”), and Node.js 8.x (“Carbon”).

Last year, Node.js 6.x was newly minted as an LTS release line which meant for the first time ever we had two supported LTS release lines. With the Node.js 8.x switch to LTS in October 2017, we now—for the first time—have three supported LTS release lines. From this point on, unless something changes in the way Node.js LTS releases are managed, we will always have three actively supported LTS release lines when Node by Numbers rolls around.

This means that 2017 is the first time we’ll be seeing the dynamics of adoption and movement from one Node.js LTS release to another—giving the project, maintainers, and end-users better insight into which versions are most supported and most relied upon.

Let’s take a look at the downloads, by version, for each of the three supported LTS release lines:

Node.js Downloads by Release Line in 2017 In this, you can see the the three release lines represented by solid green (Node.js 4 "Argon"), solid blue (Node.js 6 “Boron”), and solid purple (Node.js 8 “Carbon”).

Throughout the year, you can see Node.js 6 reigning supreme—peaking at 388,417 downloads on October 25th. Unlike last year with Node.js 6 and Node.js 4, the downloads of Node.js 8 didn’t surpass the downloads of the Node.js 6 LTS. This is an interesting trend that we should watch into the new year. It seems that the majority of downloads of Node.js are still Node.js 6, even though Node.js 8 has been trending upward for the past few months.

Given the data, it may be safe to assume that the delayed LTS-adoption trend will continue, and as Node.js usage continues to grow, adoption of new LTS versions could very well take longer and longer with each new LTS cycle. We’ll be able to confirm or reassess this assumption with next year’s data, though!

Looking at the usage of Node.js 4 LTS in the chart, we can see something interesting: a consistently slow downward trend. If you look at the bottom of the chart, you’ll notice two dotted lines—Node.js 0.10 and 0.12—that are following an almost identical pattern of decline. While it’s likely that no release line after Node.js 0.10 will ever entirely zero out, we can probably assume that once release lines turn into "Maintenance LTS" and eventually hit their EOL date they will follow the same or a similar trend of consistently sinking usage.

More information on the Node.js release schedule can be found on GitHub.

Illustrating the Bandwidth Consumed by Node.js

Every year, we include some lump-sum totals around the year’s downloads from; namely, total number of downloads and total data transfer for all downloads.

Every year, the total data transfer number is absolutely mind-boggling. From 893 TB reported to be downloaded in 2015 to 1819 TB downloaded in 2017, the total data transfer for the project never ceases to amaze.

To illustrate just how large these numbers are, here are some comparisons for the total bandwidth consumed in 2017.

The total amount of bandwidth transferred downloading Node.js is equal to…

  • 761,406,694 downloads of the original DOOM [1]
  • Enough data to fill up 387,183 DVDs [2] and 36,395 dual-layer Blu-ray discs [3]
  • 1,136,038,415 copies of Mixu’s Node Book (single page version, downloaded) [4]
  • 356,816,078 downloads of Lodash, the most used package on npm [5]
  • Approximately 32 times the storage needed to house all books that have ever existed [6]
  • 2,066,291 downloads of the macOS installer for Photoshop CC, and 1,444,255 downloads of the Windows 32-bit installer for Photoshop CC [7]
  • 121,317 copies of the zipped JSON backup of the "Have i been pwned?" records from December, listed on the front page [8]

Anomalies of Node’s Numbers in 2017

This year, we saw a few interesting anomalies in the numbers that are worth highlighting.

Jump in Russian Downloads of Node.js

In the 2016 Node by Numbers report, Russia came in fourth place for downloads of Node.js in developing economies. In 2017, downloads in of Node.js in Russia jumped to over 3 million more than reported in 2016. This jump pushed Russia to the second highest user of Node.js in the Developing Economy section, leapfrogging Brazil and India.

A Very Node.js Holiday: An Unexpected Uptick in Node.js 9 Downloads

Download patterns for both Node.js and the greater JavaScript and Node.js ecosystem follow a pretty consistent pattern, year after year: around the middle of December, we see a heavy drop in downloads, which picks back up again within a few days after the new year.

We saw this as-per usual in the majority of Node.js release lines this year—Node.js 0.10, 0.12, 4, 6, and 8 had a standard holiday season by all accounts. There was, however, an outlier.

Node.js 9 saw a massive spike in downloads in December, compared to its initial numbers. You can see this spike on the Total Downloads chart. Over the traditional dip period, Node.js 9 surpassed 150,000 downloads for a few consecutive days. Previously, it had not even surpassed 100,000 downloads in a day. The data seems to suggest that the increased Node 9 downloads may have been directly cannibalizing Node 8 numbers, at least for a short period.

It will be worth keeping an eye on this into 2018 as Node 9 will not be an LTS release line and as such was never intended to be heavily adopted. All support for Node 9 will cease not long after Node 10 is released early next year and it does not come with the same kind of stability guarantee that the LTS branches attempt to provide. Interest in potential performance boosts provided by the new JavaScript execution pipeline enabled in V8 (Ignition and TurboFan) may be driving some of this unexpected adoption.

There may be a more simple explanation for this spike, although it’s something that the Node.js Build Working Group may be able to share some answers on once they’ve had some more time to analyse the data thoroughly. We’ll be sure to share any insights on Twitter as they arise.

Spike in "Downloads" of Node.js 6 from April to May

On initially piping in an incomplete data set before the end of 2017, the NodeSource team noticed an absolutely massive spike in downloads of Node.js 6—and only Node.js 6.

Upon investigation, this spike happened directly following an incident with the Node.js downloads that was resolved within 24 hours.

The bizarre spike lasted for over a month; and then, one day, severely dropped to seemingly normal levels. Digging a bit deeper, we discovered that this massive spike could be attributed to a single server attempting (and failing) to download one specific file roughly 140,000 times every single day for the duration. This single server accounts for the entirety of the spike that was seen in April and May.

We’ve corrected this spike in Node by Numbers 2017, as it completely misrepresented the actual downloads and usage of Node.js 6 and also incorrectly skewed a set of the other metrics that directly depended upon that data set.

Reaching New Milestones in Total Downloads

For the first time ever, experienced more than one million downloads of Node.js in a single day in 2017. April 25th saw 1,009,710 total downloads. Unfortunately, this coincides with the Node 6 anomaly mentioned above, and when adjusted, comes down to 868,256.

However, the upward trend rolled on and October 25th a new record of 1,026,189 downloads was set. The 1 million barrier was breached again 7 times in November and 4 more times in December, the last of which set the record for all of 2017 at 1,121,568 downloads in a single day.

Analyzing Node.js Core’s Community Numbers

As part of Node by Numbers, we also analyze some of the metrics around the Node.js core open source codebase. In the past we’ve called this section "Community" but this year we settled on a new name for this section: Core.

The reason that the name has changed is pretty simple: Node.js, the project, is so much more than the core repo. Branding metrics from that core repo as "Community" just won’t cut it anymore. There’s vital work being done to help grow, improve, and maintain the project in so many areas by people that haven’t ever touched the core project.

The metrics are the same but the scope is now a tad more accurate, a snapshot of the contributions to the Node.js core project. So, how *is *Node.js core doing?

New Contributors to Node.js Core, Year over Year

Each year we’re impressed by the growth of new contributors to Node.js core and this year certainly does not break that trend.

In 365 days, we saw a total of 741 new contributors, a full 63% over last year. There’s a pretty massive uptick in October that can be attributed to the Code and Learn at the Node.js Collaborator Summit at Node Interactive 2017.

This pattern—growth from Code and Learn events—is something we saw last year too. While it definitely skews the basic metrics, it is now something that the community is repeatably driving and engaging new contributors with the project. Rich Trott and Anna Henningsen deserve the lion’s share of the credit for this effort in 2017.

Releases Per Month as a Sign of Good Health

One of the most important and least understood metrics around Node.js in the core section is average releases per month.

Every year, average releases per month has continued to trend downward; not massively, but slowly trickling down. In 2015 there were 5.91 releases, on average, every month. In 2016, there were 5.83. In 2017? There was an average of just 5.08 releases per month.

Releases per month measures any kind of official release: Current, Active LTS and Maintenance LTS. The main the reason for the slow-down in 2017 is the core team’s increasing rigor and forward-planning approach to all LTS releases, driven primarily by Myles Borins. With ad-hoc LTS releases now reserved for security updates only, we’re seeing more batching of commits and more rigour in determining when a commit qualifies as stable enough for backporting to an LTS branch.

Looking Forward to Another Year of Node.js

Year over year, Node.js continues to succeed and grow. Credit for this growth is deserved across the board: to the countless hours that individuals contribute to the project to help build it, to the hundreds of thousands of modules that JavaScript developers have published, and to the developers who use it on a daily basis for everything from Enterprise-grade IoT to rapidly building out basic MVPs.

At NodeSource, we’re looking forward to another incredible year of growth and exploration in Node.js—and we’re always around to help you be a part of it.