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!
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.
...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?
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.
Current Project Team Members
============================
Isaac Z. Schlueter
Ben Noordhuis
Bert Belder
Fedor Indutny
Trevor Norris
Chris Dickinson
Colin Ihrig
Mikeal Rogers
Rod Vagg
> 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.
For the record, I believe that's what should be written as the first answer on the FAQ (and maybe on the site's index.hml). The current one is atrocious.
Are node/io permanently joined to V8? I know that Oracle has been putting some effort into getting Avatar.js to be fully compatible with node and run on the JVM, but it isn't gaining much traction.
io.js is a fork/continuation of Node.js "unstable" 0.11.x branch. Node.js stable, under Joyent's stewardship, has been stuck in 0.10.x land for over a year.
io.js has many of the top core Node.js contributors. They're trying to move server-side JavaScript forward with open governance, faster release cycles, ES6, etc.
That website needs serious work in terms of wording. Absolutely zero information on the website apart from the extremely vague tagline. I clicked a few links and all I could find was politics. Without the context given on HN I would still be wondering:
Is it a node.js replacement? Is it a NPM replacement? Is it a dog? Is it a cat? Can I eat it?
Even you want to sell something to people (even if that something is free as in beer) they need to know what that something is, first.
Agree...couldn't find a clear explanation anywhere within several clicks of the home page. If it's a fork of node.js with ES6 support, as people are saying, they should put that on the front page or at the top of the FAQ section or on the front page of the documentation.
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?
"io.js is an api-compatible alternative to the node.js runtime, including support for the npm ecosystem, that aims to release faster than the node.js release cycle and move according to a community-driven open governance model."
Given the tremendous volume of packages released to npm, the current one-liner initially just doesn't convey much information. In context of the comments here, it all parses perfectly, but I was one of many who needed this context to understand the (apparent) goals of the project.
> The main point seems to be that it's run on an open governance model
Ya, I think the main problem is that no one has any idea what that means from a practical sense. Will my code go faster? Will I get better support? etc.
Basically anything you can do in Node.js you can do in Io.js. It's nothing that really breaks backwards compatibility. The benefits of Io.js over Node.js is that it'll have a faster release cycle bringing in newer versions of V8 JavaScript Engine, allowing you to use newer features of that in your code.
In Node.js to use ES6 you would have to use the --harmony flag to enable them because the version of V8 that is used is so old. Whereas in Io.js anything V8 deems stable is available in Io.js without having to use the --harmony flag.
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');
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.
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]
> 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.
Though I'd imagine this will not hold true with addons, seeing as there are vastly different versions of the V8 engine.
I'm not sure it's worth publishing both ES6 and ES5 transpiled versions when you could just glue the transpiler into Node's "require": http://6to5.org/docs/setup/#require-hook
Please don't rely on require hooks in libraries. They are kind of evil in applications already (because they amplify the "synchronous require" problem). Test your library against a version of 6to5, compile, publish, and remove that paragraph in font size 48 from your README.*
(*) I hope you add such a paragraph when your library relies on a global require hook that changes the default behavior of require for all .js files in all libraries.
I don't think so. People publishing libraries in ES6 are asking for trouble. There are far too many half-complete ES6 implementations out there and compiling to ES5 definitely is the way to go (for libraries) unless there's a really compelling reason not to.
It looks like iojs is only going to ship features once they've shipped in Chrome without a flag. The compelling reason to use the features is that they're useful!
EDIT: I don't think anyone is going to be sympathetic to holding back from using conveniences because people are choosing to stick with an old runtime. It's a different ballgame than the browser.
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?
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.
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.
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?
They're sticking the strict semver with no tags, and explicitly wanted to abandon the 0.x version numbers, so the TC decided to do 1.0.0 as the first release but make it clear that it's not production ready.
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.
> When a corporation sinks their hooks into an active open source project, it's only a matter of time.
An ironic statement given that one of the main motivations for io.js is to upgrade to the new awesome versions of V8 with all of its great new features.
V8, of course, has always been "corped": it was created and is maintained almost entirely by Google.
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.
> The official name is io.js, which should never be capitalized, especially not at the start of a sentence, unless it is being displayed in a location that is customarily all-caps (such as the title of man pages.)
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.
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.
To me it just follows on the ridiculousness of the Node community in general. A tool at version 0.10 and everyone screams about how stable it is and can't wait to bet their business on it.
A bunch of people are unhappy and fork the project, and make the initial version 1.0, but make a point of saying (despite not using a related version number/identifier) that it's beta.
Realistically it sounds like both projects should be at v0.9.x.
This seems like a step away from "ridiculous" to me.
Declaring something as 1.0 means that any 1.X releases are going to be backwards-compatible with the 1.0 spec.
This is objectively different than versioning something 0.X, which implies that the baseline spec is not finalized.
Calling something "Beta", however, just means that a feature-complete major version is still being actively developed (i.e. new minor features and bugfixes).
In other words "1.0 Beta" just means "Stable spec, active codebase".
Yes, I've watched some of the io.js minutes on YouTube and they basically reached a consensus that this was definitely necessary. They want to be a drop in replacement for Node.js.
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.
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).
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
"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."
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.
Homebrew asked me to overwrite my node symlink with the iojs symlink. I decided to link iojs to iojs on my own. I hope I'm not spinning myself into some technical debt here, but for now, I'd like to maintain both.
Some npm modules require specific version of node. If iojs overwrites `node` you may see node-gyp use algernative fallback build, which causes installation failure. At least now, the better way is to keep symlink to node as node. Use iojs when needed.
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.
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.
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.
Heroku node maintainer here. No official docs yet (it's like an hour old already! :) but it works about the way you might guess: use engines.iojs instead of engines.node in your package.json.
We're also excited to see node hit a 1.0 and merge in new V8, ES6 features, etc. I'm especially excited about Cluster's round-robin load balancing which has been a compelling reason to use 'unstable 0.11' for a while.
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.
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?
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
> "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."
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.
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.
Honest question, do you have good luck with semantic versioning? I find it's pretty hit or miss on whether an X.Y.2 patch breaks functionality in the previous X.Y.1 build.
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!
Lets hope they keep momentum, otherwise they'll be 'corkscrewing' the community!
For posterity to anyone who still reads this, the spork thing is mostly my fault. And it sort of caught on.
I do website and irc stuff for io.js and I had trouble describing what the project was in relation to node.js.
So I called it a spork, because "sporks are friendlier". Whatever that means. Aside from being friendly.
Proof is somewhere in the io.js irc logs back near when the project sporked.
http://logs.libuv.org/io.js
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.
I named my new external drive "Rama". Not sure how far I can take that, though.
4 replies →
...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?
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
> 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.
For the record, I believe that's what should be written as the first answer on the FAQ (and maybe on the site's index.hml). The current one is atrocious.
For a comparison, node.js contributors are (http://nodejs.org/about/core-team/)
TJ Fontaine Alexis Campailla Fedor Indutny Trevor Norris Nathan Rajlich
Rather strange to see Fedor as a core team member in both projects, or at least one of them (likely node.js page) is out of date.
1 reply →
Are node/io permanently joined to V8? I know that Oracle has been putting some effort into getting Avatar.js to be fully compatible with node and run on the JVM, but it isn't gaining much traction.
I find Ben's inclusion on this list interesting, given his history with Joyent/the node community.
19 replies →
io.js is a fork/continuation of Node.js "unstable" 0.11.x branch. Node.js stable, under Joyent's stewardship, has been stuck in 0.10.x land for over a year.
io.js has many of the top core Node.js contributors. They're trying to move server-side JavaScript forward with open governance, faster release cycles, ES6, etc.
> io.js is a fork/continuation of Node.js
Thanks.
That website needs serious work in terms of wording. Absolutely zero information on the website apart from the extremely vague tagline. I clicked a few links and all I could find was politics. Without the context given on HN I would still be wondering:
Is it a node.js replacement? Is it a NPM replacement? Is it a dog? Is it a cat? Can I eat it?
Even you want to sell something to people (even if that something is free as in beer) they need to know what that something is, first.
1 reply →
It will be interesting what Joyent will do with its 0.11 unstable branch and how popular io.js will get.
2 replies →
Agree...couldn't find a clear explanation anywhere within several clicks of the home page. If it's a fork of node.js with ES6 support, as people are saying, they should put that on the front page or at the top of the FAQ section or on the front page of the documentation.
It's more than that: a lot of people who made node.js to what it is are now working on io.js.
It's more like a new version of node with a different name to circumvent trademark issues.
In a gist, io.js is node.js with faster release cycles using more up-to-date versions of V8 along with an open governance
link to gist?
2 replies →
io.js is a program that makes JavaScript run on a server.
io.js is a fork of node.js but is "better" because:
1) io.js always uses the latest JavaScript engine.
2) io.js is not controlled by private interests.
Really? I thought V8 makes JavaScript run on a server.
4 replies →
I still cannot figure out what this actually is besides Javascript
Google's v8 is the JavaScript. io.js provides APIs for performing disk and network io, using v8.
1 reply →
It's basically a fork of nodejs
It's an implementation of the Reactor Pattern with some package management capability. Not a platform. Not a framework. Not an engine. Just a script.
1 reply →
(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
Also of interest, the state of ES6 in io.js: https://github.com/seegno/io.js/wiki/The-state-of-ES6-on-io..... 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
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?
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
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
If I were them, I'd say something like:
"io.js is an api-compatible alternative to the node.js runtime, including support for the npm ecosystem, that aims to release faster than the node.js release cycle and move according to a community-driven open governance model."
Given the tremendous volume of packages released to npm, the current one-liner initially just doesn't convey much information. In context of the comments here, it all parses perfectly, but I was one of many who needed this context to understand the (apparent) goals of the project.
We should start referring to PHP as a "Composer compatible platform" and Python as a "PyPI compatible platform"
4 replies →
> The main point seems to be that it's run on an open governance model
Ya, I think the main problem is that no one has any idea what that means from a practical sense. Will my code go faster? Will I get better support? etc.
Basically anything you can do in Node.js you can do in Io.js. It's nothing that really breaks backwards compatibility. The benefits of Io.js over Node.js is that it'll have a faster release cycle bringing in newer versions of V8 JavaScript Engine, allowing you to use newer features of that in your code.
In Node.js to use ES6 you would have to use the --harmony flag to enable them because the version of V8 that is used is so old. Whereas in Io.js anything V8 deems stable is available in Io.js without having to use the --harmony flag.
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:
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.
> 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
> 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.
Though I'd imagine this will not hold true with addons, seeing as there are vastly different versions of the V8 engine.
I'm not sure it's worth publishing both ES6 and ES5 transpiled versions when you could just glue the transpiler into Node's "require": http://6to5.org/docs/setup/#require-hook
Please don't rely on require hooks in libraries. They are kind of evil in applications already (because they amplify the "synchronous require" problem). Test your library against a version of 6to5, compile, publish, and remove that paragraph in font size 48 from your README.*
(*) I hope you add such a paragraph when your library relies on a global require hook that changes the default behavior of require for all .js files in all libraries.
6 replies →
> es5 is a dinosaur as of today
I don't think so. People publishing libraries in ES6 are asking for trouble. There are far too many half-complete ES6 implementations out there and compiling to ES5 definitely is the way to go (for libraries) unless there's a really compelling reason not to.
It looks like iojs is only going to ship features once they've shipped in Chrome without a flag. The compelling reason to use the features is that they're useful!
EDIT: I don't think anyone is going to be sympathetic to holding back from using conveniences because people are choosing to stick with an old runtime. It's a different ballgame than the browser.
3 replies →
I don't think you can really call something "a dinosaur" when the standard that is supposed to supersede it hasn't even formally been published yet!
The fiction that formal publications of standards matter should not be propagated. Implementations are well under way.
(I say this as a member of the TC39 committee in charge of the ECMAScript standard.)
I think a better option might be to use some kind of flag in `package.json` -- kinda like the `engines` flag.
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?
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)
> "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
I think it is probably too soon to answer that question since this is the first release available for devs to start playing around with.
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.
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?
Version 1.0.0 (Beta stability)
The hell? Seems it's intentional:
https://github.com/iojs/io.js/issues/251#issuecomment-694177...
They're sticking the strict semver with no tags, and explicitly wanted to abandon the 0.x version numbers, so the TC decided to do 1.0.0 as the first release but make it clear that it's not production ready.
Doesn't 1.0.0 simply mean, API stability?
An explanation about the downvotes would be appreciated. Thanks.
2 replies →
Congratulations to the team who made this possible. Thanks for your hard work. Looking forward to switching binaries.
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.
> When a corporation sinks their hooks into an active open source project, it's only a matter of time.
An ironic statement given that one of the main motivations for io.js is to upgrade to the new awesome versions of V8 with all of its great new features.
V8, of course, has always been "corped": it was created and is maintained almost entirely by Google.
Plenty of corporations have successfully managed open-source projects.
Yes. And I wouldn't compare Joyent with Oracle.
OP: sorry to nitpick, but the proper capitalization is 'io.js'.
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.
Sounds like some sort of title-fixing job they run, sigh.
Actually, it's both io.js or Io.js. The one that got canned was IO.js.
From https://github.com/iojs/io.js
> Is it io.js or IO.js or iojs or IOjs or iOjS?
> The official name is io.js, which should never be capitalized, especially not at the start of a sentence, unless it is being displayed in a location that is customarily all-caps (such as the title of man pages.)
Am I alone in being bemused and amused by this:
Surely the main point of a 1.0 release is "stability" and to no longer be "beta"?
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.
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.
To me it just follows on the ridiculousness of the Node community in general. A tool at version 0.10 and everyone screams about how stable it is and can't wait to bet their business on it.
A bunch of people are unhappy and fork the project, and make the initial version 1.0, but make a point of saying (despite not using a related version number/identifier) that it's beta.
Realistically it sounds like both projects should be at v0.9.x.
This seems like a step away from "ridiculous" to me.
Declaring something as 1.0 means that any 1.X releases are going to be backwards-compatible with the 1.0 spec.
This is objectively different than versioning something 0.X, which implies that the baseline spec is not finalized.
Calling something "Beta", however, just means that a feature-complete major version is still being actively developed (i.e. new minor features and bugfixes).
In other words "1.0 Beta" just means "Stable spec, active codebase".
5 replies →
Is this necessary?
Yes, lots of packages depend on "the JavaScript executable" being called node. Discussion: https://github.com/iojs/io.js/issues/43
Yes, I've watched some of the io.js minutes on YouTube and they basically reached a consensus that this was definitely necessary. They want to be a drop in replacement for Node.js.
What is a spork, as contrasted with a development fork?
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.
I think it is the same ? Some people think a spork sounds less offensive (more friendly) then a fork ? Also as a utensil (which these are both).
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).
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
Congratulations to the io.js team! I look forward to future releases. Specifically, no longer having to use --harmony_arrow_functions.
Ugh, please don't use that. The semantics of --harmony_arrow_functions are totally different from real arrow functions. Your code will break horribly.
...not to mention the habit of triggering assertion errors when combined with let-scopes.
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/...
"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?
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.
It's for bin scripts such as NPM which refer to the executable directly. See here: https://github.com/iojs/io.js/issues/249
Homebrew asked me to overwrite my node symlink with the iojs symlink. I decided to link iojs to iojs on my own. I hope I'm not spinning myself into some technical debt here, but for now, I'd like to maintain both.
Some npm modules require specific version of node. If iojs overwrites `node` you may see node-gyp use algernative fallback build, which causes installation failure. At least now, the better way is to keep symlink to node as node. Use iojs when needed.
Can this be installed with Node side-by-side or does it take over the `node` name?
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.
It gets symlinked to node and npm
nvm is being updated to support installing both project-specific node and io.js libraries.
In case you want to install it with `brew` https://github.com/smockle/homebrew-iojs
Nodeup podcast 81 about io.js, with Mikeal Rogers, Isaac Schlueter and Chris Dickinson.
http://nodeup.com/eightyone
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.
I can unalias my `alias node=node --harmony` now!!
io.js version management https://github.com/demohi/ivm
Is there a ubuntu ppa for this already?
Congratulations on the release! Keep moving JS-server-stuff forward!
Any advice on whether it's better to use ES6 or Coffeescript?
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.
Support for generators has been merged into Coffeescript master — https://github.com/jashkenas/coffeescript/pull/3240
Thanks -- that meshes with my impression so far. Is it smart/reasonable to use the es6 shim today?
I think that ES6 is going to reduce the need for things like CoffeeScript, or at least a lot of what people use (arrow functions, for instance).
how would one go about deploying (say on Heroku) an iojs app?
Heroku node maintainer here. No official docs yet (it's like an hour old already! :) but it works about the way you might guess: use engines.iojs instead of engines.node in your package.json.
(screencast: https://twitter.com/HunterLoftis/status/555234067520565249)
We're also excited to see node hit a 1.0 and merge in new V8, ES6 features, etc. I'm especially excited about Cluster's round-robin load balancing which has been a compelling reason to use 'unstable 0.11' for a while.
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.
Heroku's way ahead of you... https://github.com/heroku/heroku-buildpack-nodejs/blob/a77cd...
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.
1 reply →
Heroku supports arbitrary "buildpacks", it should be easy to create one for iojs.
How does a 1.0.0 translate to beta-stability build?
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?
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
2 replies →
Node is moving to semantic versioning: http://semver.org/
In this scheme, version number is not an indicator of stability.
Semver specifically stipulates that pre-1.0.0 is for unstable work.
> Major version zero (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable.
It also allows for identifiers/metadata after the version eg 1.0.0-alpha or similar.
It also specifically says:
> Version 1.0.0 defines the public API.
it seems it uninstall `node` when install itself.
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."
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.
i was talking about windows installer.
hard to argue with that changeset
Without reading, just looking I thought it would be about Steve Dekorte's Io Language targeting javascript.
Same here, got my hopes up. Kinda wish they hadn't overloaded that name.
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.
And so it begins
Congratulations guys!
Well, that escalated quickly.
Anyone fork it yet?
Now that browsers are starting to be compatible, lets make js on the server incompatible...
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 ?
They didn't drop semantic versioning (assuming you're talking about http://semver.org/), they're switching to it (see 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.
Honest question, do you have good luck with semantic versioning? I find it's pretty hit or miss on whether an X.Y.2 patch breaks functionality in the previous X.Y.1 build.
Sorry but (Beta stability) looks like it says "bestiality." I would recommend changing that...