Node v0.6.0

We are happy to announce the third stable branch of Node v0.6. We will be freezing JavaScript, C++, and binary interfaces for all v0.6 releases.

The major differences between v0.4 and v0.6 are

  • Native Windows support using I/O Completion Ports for sockets.

  • Integrated load balancing over multiple processes. docs

  • Better support for IPC between Node instances docs

  • Improved command line debugger docs

  • Built-in binding to zlib for compression docs

  • Upgrade v8 from 3.1 to 3.6

In order to support Windows we reworked much of the core architecture. There was some fear that our work would degrade performance on UNIX systems but this was not the case. Here is a Linux system we benched for demonstration:

v0.4.12 (linux)v0.6.0 (linux)
http_simple.js /bytes/1024 5461 r/s 6263 r/s
io.js read 19.75 mB/s 26.63 mB/s
io.js write 21.60 mB/s 17.40 mB/s
startup.js 74.7 ms 49.6 ms

Bigger is better in http and io benchmarks, smaller is better in startup. The http benchmark was done with 600 clients on a 10GE network served from three load generation machines.

In the last version of Node, v0.4, we could only run Node on Windows with Cygwin. Therefore we've gotten massive improvements by targeting the native APIs. Benchmarks on the same machine:

v0.4.12 (windows)v0.6.0 (windows)
http_simple.js /bytes/1024 3858 r/s 5823 r/s
io.js read 12.41 mB/s 26.51 mB/s
io.js write 12.61 mB/s 33.58 mB/s
startup.js 152.81 ms 52.04 ms

We consider this a good intermediate stage for the Windows port. There is still work to be done. For example, we are not yet providing users with a blessed path for building addon modules in MS Visual Studio. Work will continue in later releases.

For users upgrading code bases from v0.4 to v0.6 we've documented most of the issues that you will run into. Most people find the change painless. Despite the long list of changes most core APIs remain untouched.

Our release cycle will be tightened dramatically now. Expect to see a new stable branch in January. We wish to eventually have our releases in sync with Chrome and V8's 6 week cycle.

Thank you to everyone who contributed code, tests, docs, or sent in bug reports.

Here are the changes between v0.5.12 and v0.6.0:

2011.11.04, Version 0.6.0 (stable)

  • print undefined on undefined values in REPL (Nathan Rajlich)
  • doc improvements (koichik, seebees, bnoordhuis, Maciej Małecki, Jacob Kragh)
  • support native addon loading in windows (Bert Belder)
  • rename getNetworkInterfaces() to networkInterfaces() (bnoordhuis)
  • add pending accepts knob for windows (igorzi)
  • http.request(url.parse(x)) (seebees)
  • #1929 zlib Respond to 'resume' events properly (isaacs)
  • stream.pipe: Remove resume and pause events
  • test fixes for windows (igorzi)
  • build system improvements (bnoordhuis)
  • #1936 tls: does not emit 'end' from EncryptedStream (koichik)
  • #758 tls: add address(), remoteAddress/remotePort
  • #1399 http: emit Error object after .abort() (bnoordhuis)
  • #1999 fs: make mkdir() default to 0777 permissions (bnoordhuis)
  • #2001 fix pipe error codes
  • #2002 Socket.write should reset timeout timer
  • stdout and stderr are blocking when associated with file too.
  • remote debugger support on windows (Bert Belder)
  • convenience methods for zlib (Matt Robenolt)
  • process.kill support on windows (igorzi)
  • process.uptime() support on windows (igorzi)
  • Return IPv4 addresses before IPv6 addresses from getaddrinfo
  • util.inspect improvements (Nathan Rajlich)
  • cluster module api changes
  • Downgrade V8 to


Windows Executable: