What is the difference between node.js and io.js?

What is the difference between io.js and node.js? The more recent io.js is forked from node.js, and is furthermore made by some of the same people that made node.js.

What are the key differences that have lead to this fork, and what does it mean for the node.js community as a whole?


io.js is a fork of Joyent's Node.js

What are the differences?

io.js:

  • Node-forward is basically being merged into io.js
  • forked on the basis of community-driven development and active release cycles
  • includes many of the original Node.js developers
  • has the future goal of "merging back with Node.js"

This repository began as a GitHub fork of joyent/node where contributions, releases, and contributorship are under an open governance model.

We intend to land, with increasing regularity, releases which are compatible with the npm ecosystem that has been built to date for node.js.

Node.js:

  • the original software
  • has slowed down development in recent time
  • sponsored by Joyent
  • Joyent owns the trademark Node.js

Why did they split?

It was primarily split for three reasons: faster, more active releases and development towards a 1.0.0 release, for a more community-driven development rather than the Advisory Board, and the use of semver for releases.

What is the advisory board?

The Advisory Board was Joyent's plan to bring Node.js a more centralized, faster way to plan development and plan future features along the road towards a 1.0.0 release. This was planned to be done by putting together a board of larger companies that use Node.js

Quote from Joyent's blog:

As the community becomes more complex, it is important that we find ways to balance the needs of all constituents and provide a platform for these organizations to come together and to provide input into the project.

Why is the advisory board hated?

Previously, Node.js was run via mailing lists, GitHub issues, and anyone could contribute their idea. This idea started getting some hate because it brought control away from your average, everyday contributor and moved the power to the "big shots": companies such as Walmart, Yahoo, IBM, Microsoft, Joyent, Netflix, and PayPal.

Outside sources on this

  • https://github.com/iojs/io.js/issues/3
  • http://www.infoworld.com/article/2855057/application-development/why-iojs-decided-to-fork-nodejs.html
  • http://www.wired.com/2014/12/io-js/

In fact, there are practical differences between Node.js and io.js. Some facts forgotten by other answers:

  • Currently, io.js is, in multiple aspects, a bit faster than Node.js. A performance benchmark can be found here.
  • io.js's ECMAScript 6 support is much broader than Node.js. Comparison can be found here.

Why? Because io.js 1.6.2 ships with Google V8 4.1.0.25, and Node.js 0.12.1 ships with V8 3.28.73. Also, flags for ECMAScript 6 are different between Node.js and io.js. io.js's guide to ECMAScript 6 flags can be found here.


TL;DR io.js is the future incarnation of node.js.

The io.js website says: "io.js is a node & npm compatible javascript platform." It's a set of tools (a runtime/VM, a package manager, etc.) which is compatible with what currently exists as node. Any differences will presumably be in the underlying implementation, and any extensions that io.js adds beyond the node.js feature set.

(Why would something compatible with what already exists divide the community? Why's that a bad thing?)

Note that io.js hasn't even been released yet! However the io.js roadmap illustrates some particularly relevant differences between node and io.

  • "Node is pretty damn stable already" and yet Node still hasn't hit 1.0; it's currently at 0.10.33.
  • "The entire ecosystem uses semver while node uses a confusing even/odd release structure." By introducing a new name for a new(ish) project, they'll be able to fix that.

So as I understand it, io.js is the 1.0-alpha1 and future release of node, but with:

  • different (sane) release versioning
  • deliberately frequent releases
  • governance by a technical committee