
Io.js 1.0.0 - elisee
https://iojs.org/?1.0.0
======
duncanawoods
In their words, io.js is "A spork of Node.js with an open governance model".

Hmm. Lets hope the spork gets spooned so that no projects get knifed. If not
then I guess we have to hope for a knork so we don't get stuck with a couple
of chopsticks.

 _Glossary_

Forking : Creating a fork to intentionally diverge from main-line development.

Spooning : Merging a fork back into the main line of a project

Sporking : Creating a fork that you would really like to become the next main-
line version but you kinda have to prove its awesome first (sporks are pretty
awesome)

Knifing : Action killing a project, abandon hope :(

Knorking : A fork replaces the original project which dies off i.e. a fork
knifes the original

Chopsticking : Two forks vie for popularity splitting the community and
becoming lone chopsticks. Chopsticks need to work together to make stuff
happen!

~~~
benihana
_groan_

Don't get me wrong, thanks for the information. But seriously. It's like when
you come up with a whimsical naming scheme for your home network devices and
you get trapped in that naming scheme and have to come up with more and more
obscure Lithuanian folk demons that fit into your conventions and it becomes a
parody of itself and you're not sure if you're serious or joking anymore.

~~~
jscheel
I named my new external drive "Rama". Not sure how far I can take that,
though.

~~~
whacker
about 10, avatars of Vishnu.

OTOH, Vishnu himself has a thousand names (Vishnu-Sahasra-nama)!

I'd say you are in fairly good shape.

~~~
jscheel
Haha, except mine is Rama like the spaceship :)

~~~
palimpsests
...which is named after the Hindu deity

[http://en.m.wikipedia.org/wiki/Rama_(spacecraft)](http://en.m.wikipedia.org/wiki/Rama_\(spacecraft\))

~~~
jscheel
Yes, yes, I know. But my hard-drive is named after the characteristics of the
spacecraft, not the deity :)

------
quaunaut
...Okay, normally I roll my eyes at people asking "What does this do" but
Christ this is ridiculous.

From the FAQ:

> _What is io.js?_

> io.js is a JavaScript platform that is compatable with Node.js & npm.

What does that even mean?

Edit: Thanks for those answering. I started figuring out what it was, but
sometimes folks really need to learn that "A correct definition" is not the
same as "a useful definition". However, if it's as cool as described,
definitely might give it a shot.

Edit2: Is this expected to be as stable as Node.js consistently? And how solid
is the upgrade path- is it going to be a pain upgrading between versions the
way Node used to be, or is there a smoother upgrade process? I guess what I'm
wondering is, do I get any benefit from using this right now, or would it be
smart to still wait for whatever version they consider release quality?

~~~
mintplant
It's a fork of node.js with ES6 support. The goal is a faster release cycle
and an updated V8 engine, plus an "open governance model" as opposed to
Joyent's domination of node.js prime.

[https://github.com/iojs/io.js](https://github.com/iojs/io.js)

    
    
        Current Project Team Members
        ============================
    
        Isaac Z. Schlueter
        Ben Noordhuis
        Bert Belder
        Fedor Indutny
        Trevor Norris
        Chris Dickinson
        Colin Ihrig
        Mikeal Rogers
        Rod Vagg

~~~
silversupreme
I find Ben's inclusion on this list interesting, given his history with
Joyent/the node community.

~~~
nevi-me
Even though he stopped being part of core, he has remained active in Node.js
development. It's part of his job at StrongLoop I suppose. A fresh start with
an open governance model at least should mean that most politics are set
aside.

~~~
throwaway432324
I hope so. Pretty much everyone on that list except isaac and mikeal are
apolitical.

Mikeal is overtly political. Isaac is political from time to time since he's
strongly aligned with the identity politics mob that attacked ben noordhuis
back in the day. I really hope identity politics doesn't creep into the io.js
governance.

~~~
untog
A great way to stop identity politics becoming an issue is to bring it up
unprompted through a throwaway account on Hacker News. Anonymously singling
out specific members of the community that you dislike and labeling them as
bad actors is particularly helpful.

Oh, wait...

------
elisee
(Huge) changelog from the latest stable Node version v0.10.35, including all
changes from unstable v0.11:
[https://github.com/iojs/io.js/blob/v1.x/CHANGELOG.md](https://github.com/iojs/io.js/blob/v1.x/CHANGELOG.md)

Also of interest, the state of ES6 in io.js:
[https://github.com/seegno/io.js/wiki/The-state-of-ES6-on-
io....](https://github.com/seegno/io.js/wiki/The-state-of-ES6-on-io.js).
Highlights: 'let', generators, promises, template literals, symbols are all
enabled by default. EDIT: just realized this wiki page has been updated and
integrated into the website at
[https://iojs.org/es6.html](https://iojs.org/es6.html)

------
aasarava
Tip to anyone rolling out a library and wanting others to start using it: It'd
be helpful if the home page or the FAQ explained what io.js actually does and
why a developer might want to explore it further. "Bringing ES6" is only
helpful if you know what ES6 is and have already decided it's something you
need. Likewise, the FAQ simply says io.js is compatible with Node.js and npm,
but that doesn't give you much to work with. Can someone who knows the project
explain the benefits?

~~~
tach4n
You're right that the page linked in OP needs improvement. The phrase to focus
on is this:

> io.js is an npm compatible platform originally based on node.js

It's not a library, it's a platform that's based on node.js. It's more or less
a fork of node or "spork" as they call it.

The github repo is a bit more clear:
[https://github.com/iojs/io.js](https://github.com/iojs/io.js)

The main point seems to be that it's run on an open governance model:
[https://github.com/iojs/io.js/blob/v1.x/GOVERNANCE.md](https://github.com/iojs/io.js/blob/v1.x/GOVERNANCE.md)

~~~
dan15
We should start referring to PHP as a "Composer compatible platform" and
Python as a "PyPI compatible platform"

~~~
mintplant
The huge collection of modules on npm is one of the strongest factors node.js
has going for it, so it makes sense for them to emphasize that they're not
breaking compatibility with this in forking node.

~~~
dan15
Yes, but something "JavaScript runtime with npm compatibility" would be
friendlier and significantly easier for people to understand.

~~~
CHY872
They don't provide the Javascript runtime - Google does that. This is a fork
of Node.js - glossing over this is at least a little disrespectful to Node.js.

~~~
rlaanemets
There was a trademark issue between them and Joyent that also made the node-
forward GH repo to go private. They might not be comfortable using term
Node.JS on the frontpage.

------
_greim_
I suspect there will be a split in the npm ecosystem now, not so much along
node/iojs lines but along es5/es6 lines. There's already been lots of
discussion about whether module builders should publish es6 code, or should
everything be transpiled down to es5 code in order to keep the ecosystem
unified (the unspoken caveat being, around es5).

I think es5 is a dinosaur as of today, so I say go ahead and publish es6 code,
and if you want to be nice to es5 people then add a prepublish transpiler that
makes something like this possible:

    
    
        // es6 people can do
        var foo = require('foo');
    
        // es5 people can do
        var foo = require('foo/es5');

~~~
wycats
Important to note: because JavaScript itself is _always_ backwards-compatible
(1JS), any code that runs on Node will run on iojs, but not necessarily vice
versa.

That means there need not be a split in the ecosystem: people who want maximal
coverage can target ES5, while people who want the latest features can target
ES6. Unlike the browser, however, where people can't control their runtimes, I
suspect there will be much less tolerance for sticking with older versions of
JavaScript.

Indeed, the pain and suffering people have felt with IE6 will likely make
everyone much more willing to reject an unnecessary lowest-common-denominator
approach on the server. We're liberated on the server. Let's act like it.

~~~
_greim_
> We're liberated on the server.

I'm liberated on the server in my own app, but not necessarily if I'm
publishing something for everyone to use. In that case I'm either forced to
feature-detect my way along, or target certain engines. The reason I think the
latter will happen is devs to whom node was an escape-hatch from client-side
hell will loathe the idea of going back. E.g. [1]

[1]
[https://twitter.com/brianleroux/status/554753200503271424](https://twitter.com/brianleroux/status/554753200503271424)

------
untog
As someone who tries as hard as they can to avoid project politics and the
like: is this the new Node.js? By which I mean I know it isn't the Node
project, but where is most of the mindshare these days? Is io.js a small
offshoot or has it taken most of the Node devs with it? Or is it the same code
just with a more aggressive release schedule?

Also, when do we go back to one executable already?

~~~
shadowmint
If we're lucky this will turn into the 'unstable branch' with new features and
things which is periodically folded back into the 'stable' node.js platform.

...but if node wont play ball, it'll become 'the new node', yes.

(there's a lot of backstory to this, which you can read about here:
[http://blog.izs.me/post/104685388058/io-
js](http://blog.izs.me/post/104685388058/io-js))

~~~
btown
> "npm" does not stand for Node Package Manager. It is officially an
> abbreviation for “npm is not an acronym”. We do enjoy novel pun-making
> though.

I couldn't resist: [https://github.com/npm/npm-
expansions/pull/245/files](https://github.com/npm/npm-
expansions/pull/245/files)

------
maga
Since there are features in Io that are neither in the current version nor
planned for the future versions of Node, I guess Io.js should be explicitly
specified as an engine in the package.json file of Io-specific modules.
Tracking those modules will be a good metric of how well Io is received by the
community.

------
gobengo

      $> diff <(node --v8-options | grep harmony) <(./iojs --v8-options | grep harmony)
      1,6c1,18
      <   --harmony_typeof (enable harmony semantics for typeof)
      <   --harmony_scoping (enable harmony block scoping)
      <   --harmony_modules (enable harmony modules (implies block scoping))
      <   --harmony_proxies (enable harmony proxies)
      <   --harmony_collections (enable harmony collections (sets, maps, and weak maps))
      <   --harmony (enable all harmony features (except typeof))
      ---
      >   --es_staging (enable all completed harmony features)
      >   --harmony (enable all completed harmony features)
      >   --harmony_shipping (enable all shipped harmony fetaures)
      >   --harmony_modules (enable "harmony modules (implies block scoping)" (in progress))
      >   --harmony_arrays (enable "harmony array methods" (in progress))
      >   --harmony_array_includes (enable "harmony Array.prototype.includes" (in progress))
      >   --harmony_regexps (enable "harmony regular expression extensions" (in progress))
      >   --harmony_arrow_functions (enable "harmony arrow functions" (in progress))
      >   --harmony_proxies (enable "harmony proxies" (in progress))
      >   --harmony_sloppy (enable "harmony features in sloppy mode" (in progress))
      >   --harmony_unicode (enable "harmony unicode escapes" (in progress))
      >   --harmony_tostring (enable "harmony toString")
      >   --harmony_numeric_literals (enable "harmony numeric literals")
      >   --harmony_strings (enable "harmony string methods")
      >   --harmony_scoping (enable "harmony block scoping")
      >   --harmony_classes (enable "harmony classes (implies block scoping & object literal extension)")
      >   --harmony_object_literals (enable "harmony object literal extensions")
      >   --harmony_templates (enable "harmony template literals")

------
bsimpson
I understand that Node was lagging behind on merging newer versions of V8, but
holy hell: how did they have so many patches to the standard library that
weren't properly released?

------
dsissitka
_Version 1.0.0 (Beta stability)_

The hell? Seems it's intentional:

[https://github.com/iojs/io.js/issues/251#issuecomment-694177...](https://github.com/iojs/io.js/issues/251#issuecomment-69417750)

~~~
k__
Doesn't 1.0.0 simply mean, API stability?

~~~
reitanqild
An explanation about the downvotes would be appreciated. Thanks.

~~~
k__
hu?

~~~
reitanqild
I know it is late but here is the explanation:

It was not my post and I care less about being downvoted and more about the
problem that some people seems to prefer downvoting to explainating.

Downvoting, -in my opinion, is for things like redditism, clear breach of site
guidelines etc. It is not for being uninformed (within reasonable limits) and
certianly not for asking reasonable questions.

------
jorangreef
Congratulations to the team who made this possible. Thanks for your hard work.
Looking forward to switching binaries.

------
drderidder
Node got forked because it got corped. When a corporation sinks their hooks
into an active open source project, it's only a matter of time. Mysql, Maria,
Hudson, Jenkins... same story. io.js is the way forward, and congrats to the
core team.

~~~
TazeTSchnitzel
Plenty of corporations have successfully managed open-source projects.

~~~
vlunkr
Yes. And I wouldn't compare Joyent with Oracle.

------
silverwind
OP: sorry to nitpick, but the proper capitalization is 'io.js'.

~~~
elisee
HN auto-capitalizes the first letter when submitting, sadly. EDIT: Turns out
it doesn't do it a second time if I edit, so, fixed :) EDIT2: Aaaand it
reverted itself to Io.js, somehow.

~~~
silverwind
Sounds like some sort of title-fixing job they run, sigh.

------
sambeau
Am I alone in being bemused and amused by this:

    
    
      Version 1.0.1 (Beta stability)
    

Surely the main point of a 1.0 release is "stability" and to no longer be
"beta"?

~~~
sturadnidge
Not really, at least according to semver (which is what iojs uses). Stability
of the _API_ is denoted by a 1.x.x, it isn't necessarily an indication of the
quality of the implementation, beta or otherwise.

Node 0.12 was always being referred to as 'pretty much the 1.0 API', not
calling it 1.x.x was a kind of 'get out of jail free' card in my opinion. So
i'm glad the iojs team have least drawn a line in the sand and declared their
API stable.

~~~
M2Ys4U
1.x is not _really_ about stability either. To quote from the semver FAQ:

>How do I know when to release 1.0.0?

>If your software is being used in production, it should probably already be
1.0.0. If you have a stable API on which users have come to depend, you should
be 1.0.0. If you're worrying a lot about backwards compatibility, you should
probably already be 1.0.0.

------
nickfargo

      ls -l /usr/local/bin/node
      lrwxr-xr-x  1 502  staff  4 Jan 13 20:10 /usr/local/bin/node -> iojs
    

Is this necessary?

~~~
elisee
Yes, lots of packages depend on "the JavaScript executable" being called node.
Discussion:
[https://github.com/iojs/io.js/issues/43](https://github.com/iojs/io.js/issues/43)

------
ykl
What is a spork, as contrasted with a development fork?

~~~
elisee
It's a playful way to say they don't really want to fork the Node.js
ecosystem. io.js will evolve alongside Node.js and the core team is open to
merging back with Node.js if possible.

------
thomasfoster96
From what I can understand, io.js is now node with the latest version of v8
and ES6(+ES7) features enabled by default (as opposed to behind a flag).

I'm wondering, what technical reasons are there for Node not using the latest
version of v8 for each release? I can understand Node keeping some new ES6/7
features behind a flag (just as some are behind a flag in Chrome).

~~~
ivank
V8 updates bring incompatible changes to the V8 API, and many node extensions
written in C++ need to be updated. Hence the decision to stick with an old V8,
even though it's no longer maintained by Google.

There is a compatibility layer to assist with making these modules work across
different V8 versions:
[https://github.com/rvagg/nan](https://github.com/rvagg/nan)

------
chadpaulson
Congratulations to the io.js team! I look forward to future releases.
Specifically, no longer having to use --harmony_arrow_functions.

~~~
domenicd
Ugh, please don't use that. The semantics of --harmony_arrow_functions are
totally different from real arrow functions. Your code will break horribly.

~~~
jkrems
...not to mention the habit of triggering assertion errors when combined with
let-scopes.

------
misterdai
Here's the most recent minutes (2014-12-19) for the Node.js Advisory Board
where they discussed Io.js (while considering their 0.12 release).

[https://github.com/joyent/nodejs-advisory-
board/blob/master/...](https://github.com/joyent/nodejs-advisory-
board/blob/master/meetings/2014-12-19/minutes.md#node-012)

------
acdanger
"This package will install io.js v1.0.0 and npm v2.1.18 into /usr/local/. The
binary /usr/local/bin/iojs will also be symlinked as /usr/local/bin/node."

Why the symlinking as node?

~~~
Killswitch
Because Io.js is a Node.js replacement, but most of the time you're probably
going to instinctively type `node script.js` and not `iojs script.js` so the
symlink is just a helper.

~~~
solomone
It's for bin scripts such as NPM which refer to the executable directly. See
here:
[https://github.com/iojs/io.js/issues/249](https://github.com/iojs/io.js/issues/249)

------
Touche
Can this be installed with Node side-by-side or does it take over the `node`
name?

~~~
AdamCraven
It takes over the `node` name via symlinks. But you can have a working REPL
side by side by overwriting with the prior node one again. Node isn't
uninstalled.

------
AbeEstrada
In case you want to install it with `brew`
[https://github.com/smockle/homebrew-
iojs](https://github.com/smockle/homebrew-iojs)

------
antouank
Nodeup podcast 81 about io.js, with Mikeal Rogers, Isaac Schlueter and Chris
Dickinson.

[http://nodeup.com/eightyone](http://nodeup.com/eightyone)

------
debacle
This is cool and I am excited. I have been playing with Node for a while but
the pace towards stable was so glacial I couldn't take the software seriously.

------
waitingkuo
I can unalias my `alias node=node --harmony` now!!

------
mdemo
io.js version management
[https://github.com/demohi/ivm](https://github.com/demohi/ivm)

------
pascalo
Is there a ubuntu ppa for this already?

------
evantahler
Congratulations on the release! Keep moving JS-server-stuff forward!

------
grandalf
Any advice on whether it's better to use ES6 or Coffeescript?

~~~
robinricard
First of all they're not the same thing. Coffeescript transpiles to JS (ES3 or
4 if I remember well) and ES6 is a new standard (not finished yet). Maybe one
day coffee may compile to ES6 (but that's not likely since that would break
support with older browsers). As said before, ES6 may reduce the need of
transpiled languages but won't replace them. From my point of view, ES6 will
never replace ClojureScript nor TypeScript (ES6 doesn't bring the power of a
LISP like clojure or the type system of TS). As for coffee, many people may
still prefer its more lightweight syntax that ES6 does not intend to replace
either.

Let's say that ES6 will provide a better runtime that may make transpiled
languages less useful. Yes, ES6 does arrow functions and classes but it also
provides many more cool stuff that the transpiled languages may never support
such as generators if they intend to keep backward compat to older browsers.
If you are in this case you should bet on ES6. If you don't care and are happy
with what's included in coffee, use coffee ! You can always compile it to JS
and continue your project with ES6 !

To sum up, transpiled languages are not dead and are still way more flexible
than vanilla JS (as they don't depend on a big specification such as the ES
specs) but ES6 does improve the runtime, and one day transpiled languages may
use this new runtime.

~~~
kylemathews
Support for generators has been merged into Coffeescript master —
[https://github.com/jashkenas/coffeescript/pull/3240](https://github.com/jashkenas/coffeescript/pull/3240)

------
scope
how would one go about deploying (say on Heroku) an iojs app?

~~~
silverwind
Heroku has pretty good node support, but I'd doubt they support replacing the
binary yet, so you'd have to wait for Heroku to support that.

For manual deployment, the single iojs binary and your project folder should
suffice, along with a way to start/restart your app automatically.

~~~
btown
Heroku's way ahead of you... [https://github.com/heroku/heroku-buildpack-
nodejs/blob/a77cd...](https://github.com/heroku/heroku-buildpack-
nodejs/blob/a77cd257d1052d7bcffd5b5b261ee9794703daac/bin/compile#L36)

EDIT: To clarify, though I haven't tried it myself, it looks like you can just
specify `"engine.iojs": "1.0.0"` in your package.json, and Heroku will install
the entire io.js system for you.

~~~
j_0
Came across this just before opening this thread, you are correct
[https://twitter.com/hunterloftis/status/555234067520565249](https://twitter.com/hunterloftis/status/555234067520565249)

------
nubela
How does a 1.0.0 translate to beta-stability build?

~~~
elisee
As I understand it, the io.js devs think Node.js should have switched to 1.x
("stable") a long time ago. But from their perspective, this is io.js's first
release with their own build infrastructure and they made a lot of aggressive
changes (updated V8 dependency, etc.), so they're calling their own release
beta-quality. Makes sense?

~~~
stephenr
It doesn't make sense to release beta quality software as "v1.0.0" without any
reference to being a beta in the version itself. Either use a 0.x version or
use a -beta -identifier if the api is fixed but stability is not guaranteed

~~~
diggan
It does say "Version 1.0.1 (Beta stability)", what more are you requesting?

~~~
stephenr
The "(Beta stability)" is just text on that webpage. The version is just
1.0.1.

By any sane logic any release after 1.x should be considered stable UNLESS
otherwise stated.

This is why we have the concepts of things like "dev", "alpha", "beta", "rc"
(release candidate) identifiers for versions.

Nowhere does io.js use any of these terms except in that homepage. So now,
anyone relying on any other source to get the product either as source or in a
binary package has no way to know if it's considered "stable" yet.

So what I want - basic common fucking sense is what I want. Nobody in their
right mind would release software marked as version "1.0.0" with full
knowledge and even the barest of acknowledgement, that it's only beta quality.

The explanation I've seen so far is that the people behind the fork are sick
of NodeJS never reaching 1.0 despite being used in production. Sure thats a
good reason to make it 1.0 - because a heap of cool kids have jumped on the
bandwagon and bet their business on it, it must be stable right?

Oh wait, but then they admit that it's only beta quality. So they want it to
be versioned as if it's appropriate to use it in production, but they know its
actually not.

------
tuananh
it seems it uninstall `node` when install itself.

~~~
stepstep
It just overwrites the node symlink.

> "This package will install io.js v1.0.0 and npm v2.1.18 into /usr/local/.
> The binary /usr/local/bin/iojs will also be symlinked as
> /usr/local/bin/node."

~~~
dustinls
The windows install for this took the liberty of removing my original nodejs
install, removed the binary and batch files from the program files\nodejs
directory, even though I opted to install iojs to its own folder. Nodejs
shortcuts are removed from start menu, and path variables were removed as
well.

Go to reinstall nodejs, and that install says a later version is already
installed and cancels the install without giving me an option to install
anyway.

------
dmamills
hard to argue with that changeset

------
malkia
Without reading, just looking I thought it would be about Steve Dekorte's Io
Language targeting javascript.

~~~
DennisP
Same here, got my hopes up. Kinda wish they hadn't overloaded that name.

------
_almosnow
From their changelog, it seems that addons changed, does anyone know if
current npm packages will still be usable?

Also, good to see bnoorhuids in there.

------
nsamuell
And so it begins

------
Killswitch
Congratulations guys!

------
hayd
Well, that escalated quickly.

------
hmans
Anyone fork it yet?

------
roelvanhintum
Now that browsers are starting to be compatible, lets make js on the server
incompatible...

------
simlevesque
I have no issue with this fork but why oh why did they drop semantic
versioning ? Do they want us to waste our time reading every single changelog
?

~~~
elisee
They didn't drop semantic versioning (assuming you're talking about
[http://semver.org/](http://semver.org/)), they're switching to it (see
[https://github.com/iojs/io.js/issues/28](https://github.com/iojs/io.js/issues/28)).

Node.js uses MINOR even = stable, odd = unstable (which is not semver) and is
still in 0.x even though it's been used by giants in production all over the
world for a couple years.

------
Exuma
Sorry but (Beta stability) looks like it says "bestiality." I would recommend
changing that...

