Node v4.0.0

Can't you count?

Colin J. Ihrig / @cjihrig

Counting is Hard

Node.js Under Joyent

  • Joyent was the corporate steward of Node.js for years
  • Followed the BDFL governance model
  • Used odd-even versioning scheme

Node.js Under Joyent

  • The project begins to stagnate despite booming ecosystem
  • Issues and pull requests piled up and went untouched
  • Community frustration with the project and Joyent
  • Serious doubts about Joyent and the BDFL model

The 0.12 Debacle

  • Node 0.10 was released in March 2013
  • Development never stopped on 0.11, leading to a large delta
  • Node 0.12 was "almost ready" for months

Node Forward

  • In mid-2014, Node Forward surfaced
  • A rallying cry by core contributors to the community
  • Created a private fork
  • Recruited contributors, but could not make releases

What the Fork?

  • Thanksgiving'ish 2014, Node.js was forked
  • io.js was born!
    • Community driven
    • Open governance model
    • Quick release cadence
    • Technical Committee instead of BDFL

io.js 1.0.0

  • Released in January 2015
  • Essentially, 0.12 (and more) before Joyent
  • New V8 with ES6 features
  • Lead to interesting versioning situation

Joyent Responds

  • Node.js 0.12 is finally released in February 2015
  • At Node Summit, Joyent announces the Node Foundation
  • Unfortunately, 0.12 was DOA
  • Shipped with an unsupported V8

A Split Community

  • io.js is out and doing reasonably well
  • Joyent still doing releases of 0.10 and 0.12
  • Community was fractured and confused
  • Not an ideal place to be


Node.js v4.0.0

  • First converged release on September 8, 2015
  • Continues io.js usage of Semver (hence 4.0.0)
  • Shipped with V8 v4.5 (same as Chrome)
  • First class support for ARM
  • Revamped website -

API Changes (since 0.12)

  • Buffer rewritten to use TypedArrays
  • Child Process send() is now always asynchronous
  • dgram socket send() no longer emits error on callback
  • RC4 cipher, SSLv2, and SSLv3 disabled.

API Changes (Continued)

  • Array.prototype.values() removed
  • Added os.homedir(). No trailing slash on os.tmpdir()
  •*() methods are deprecated.
  • Domains are deprecated.

ES6 Features

  • Block scoping (let / const)
  • Arrow functions
  • Symbols
  • Object literal extensions
  • Binary and Octal literals
  • Template literals
  • Classes
  • Collections (Map, Set, etc.)
  • Promises
  • More!

How to Upgrade

  • Spoiler alert: test a lot!
  • Improve your code coverage
  • Test locally
  • Test thoroughly in QA
  • If possible, phase into production
  • Report any bugs you find

Looking Forward

  • Node moves fast (now)
  • Node wants enterprise adoption
    • Enterprises move slowly
    • Value stability over bleeding edge
  • But... we want to keep moving fast

Tracking V8

  • V8 moves very fast. Six week releases
  • Chrome is evergreen. Old versions are abandoned
  • Frequent C++ API breakage
  • Breaks roughly 30% of npm ecosystem
  • nan helps, but isn't perfect or future proof

Long Term Support (LTS)

  • LTS release cut yearly in early October
  • 18 months of active LTS
  • 12 months of maintenance
  • Master branch continues to make releases
  • Semver major bump every ~6 months

LTS Strawman Schedule

*v4.4.1 is hypothetical

Useful Links

The End