State of Node.js Core

Colin J. Ihrig / @cjihrig

Node.js Under Joyent

  • Joyent was the corporate steward of Node.js for years
  • Followed the BDFL governance model
  • Node 0.10 was released in March 2013
  • The project begins to stagnate despite booming ecosystem
  • Node 0.12 was perpetually "almost ready"

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

io.js


  • Node.js was forked circa Thanksgiving 2014
  • Community driven with open governance
  • Version 1.0.0 released in January 2015
  • Quick release cadence
  • New V8 with ES6 features
  • Lead to interesting versioning situation

Convergence

  • Node.js 0.12 is finally released in February 2015
  • Community was fractured and confused
  • At Node Summit, Joyent announces the Node Foundation
  • May 2015, io.js TC votes to join the Node Foundation
  • Project moves from joyent and iojs to nodejs GitHub org
  • ~30 companies backing the Node Foundation now

Node.js v4.0.0

  • First converged release on September 8, 2015
  • Shipped with V8 v4.5 (same as Chrome at the time)
  • First class support for ARM
  • By December 2015, v4.x reached ~26% market share

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
  • New release branches get up to date V8

LTS Schedule

Node.js v4.2.0

  • Released on October 12, 2015
  • Fifth release in v4.x release line
  • Became first LTS release
  • Named Argon per LTS policy
  • Can check via process.release.lts

ES6 Features in LTS

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

Node.js v5.0.0

  • Released on October 29, 2015
  • First converged release line not destined for LTS
  • Stable release line pulls in all non-breaking changes
  • Maximum of eight months of support vs. 30 for LTS


Breaking changes between v4 and v5 doc

Node.js v6.0.0


  • Release on April 26, 2016
  • Hey look, a slightly different logo!
  • Includes V8 5.0, same as Chrome
  • Drops support for Windows XP and Vista
  • Drops support for OS X < 10.7
  • Improved IBM support and PPC binaries
  • v6.x.x to follow Argon in LTS in October 2016

Elements Starting with "B"

  • Barium
  • Beryllium
  • Bohrium
  • Bromine
  • Berkelium
  • Bismuth
  • Boron

ES6 Features in v6.0.0

  • Spread operator
  • Default parameters
  • @@toStringTag, etc.
  • Regex sticky flag
  • Rest parameters
  • Destructuring
  • Proxies
  • new.target

96% ES6 support. 93% without flags

Breaking Changes

  • Native modules need to be recompiled
  • Improved type checking
  • Deprecate several legacy APIs
  • Removal of several deprecated APIs
  • Some undocumented features removed or made internal
  • Improved logging and handling of errors
  • REPL allows assigning to _
  • V4MAPPED DNS hint not set by default
  • cluster's suicide is now exitedAfterDisconnect


Breaking changes between v5 and v6 doc

Safer Buffers

  • Remote memory disclosure in ws module in early January
  • new Buffer(1000) vs. new Buffer('1000')
  • v6.0.0 deprecates new Buffer() in favor of Buffer.from(), Buffer.alloc(), and Buffer.allocUnsafe().

v6.0.0 Adoption

On the Horizon

  • Node moves fast
  • Always bikeshedding interesting discussion going on
  • Following topics are interesting. Will they land in core?

ES6 Modules

  • Node: Hey, I made the largest module system in the world.
  • TC39: I'm going to invent JavaScript modules.
  • Node: But... check out what I did!
  • TC39: Hey look, I invented JavaScript modules!

https://github.com/nodejs/node-eps/pull/3

Integration of DevTools

Support for Promises

Chakra Support

The End

Questions?