Node v4.0.0 (Current)

The collaborators of the Node.js project and the members of the Node.js Foundation are proud to offer v4.0.0 for general release. This release represents countless hours of hard work encapsulated in both the Node.js project and the io.js project that are now combined in a single codebase. The Node.js project is now operated by a team of 44 collaborators, 15 of which form its Technical Steering Committee (TSC). Further, over 100 new individuals have been added to the list of people contributing code to core since v0.12.7.

Node.js v4.0.0 contains V8 v4.5, the same version of V8 shipping with the Chrome web browser today. This brings with it many bonuses for Node.js users, most notably a raft of new ES6 features that are enabled by default including block scoping, classes, typed arrays (Node's Buffer is now backed by Uint8Array ), generators, Promises, Symbols, template strings, collections (Map, Set, etc.) and, new to V8 v4.5, arrow functions.

Over the past year thanks to donations from companies such as Rackspace, DigitalOcean, Scaleway, miniNodes, Voxer, Joyent, CloudFlare, ARM Holdings, and individuals from the community, we've built an amazing test cluster that includes an impressive line-up of Linux variants, OS X, Windows, FreeBSD and SmartOS. New to Node.js, we also have first-class support for ARM processors. Our test suite must be continually passing on ARMv6, ARMv7 and the new 64-bit ARMv8 processors. So Node.js is officially ready for use by hobbyists and ARM server users alike.

Node.js v4 also brings a plan for long-term support (LTS) and a regular release cycle. Release versioning now follows SemVer, so expect increments of both minor and patch version over the coming weeks as we fix bugs and add features. What we won't be doing within the v4.x branch is adding breaking changes.

However, we have mapped a quick initial path to our first LTS version which will come in October. At the same time, a new v5.x branch will be cut and we will begin making a new series of Stable releases available, starting with v5.0.0. These will likely contain a new version of V8 and any breaking changes that may be necessary. The v4.x line of releases will continue for an additional 18 months in LTS, with a focus on stability and security and no unnecessary additions in functionality. Beyond that, v4.x will move in to Maintenance for an additional 12 months where it will continue to receive attention for critical bugs and security fixes.

In parallel, we will be branching a new Stable line of releases every 6 months, one in October and one in April each year. Stable lines will be made up of regular releases as development continues, expect minor and patch version bumps every week or two from these. Every second Stable release line will continue life in LTS form by the time October comes around. This means that there will be overlapping LTS branches being maintained throughout the year, each receiving attention for a total of 30 months (LTS plus Maintenance). We believe that the Stable and LTS cycles provide the room for the project to continue its innovation and stay with the cutting-edge of JavaScript while also serving the need for predictable long-term stability and security demanded by the growing line-up of enterprise users proudly adopting Node.js as a key technology; some of who already count themselves as members of the Node.js Foundation.

As always with a major release, we don't expect the adoption of Node.js v4 to be painless. It will take time to adapt, particularly as compiled add-ons catch up with the new version of V8 (hint: see NAN for our official solution to the compatibility problem). Thankfully, the io.js v3.x series of releases have given many add-on authors a chance to prepare their code for Node.js v4, so much of the npm ecosystem is ready today.

An initial list of breaking changes between v0.12 and v4 can be found on the LTS wiki, in the coming days we will continue to populate both this wiki and the core wiki with documentation regarding the changes you should be aware of.

Please file any bugs at our new home on GitHub, https://github.com/nodejs/node, and consider joining the growing crew of collaborators by contributing to core!

Notable changes

This list of changes is relative to the last io.js v3.x branch release, v3.3.0. Please see the list of notable changes in the v3.x, v2.x and v1.x releases compiled in unified CHANGELOG for a more complete list of changes from 0.12.x. Note, that some changes in the v3.x series as well as major breaking changes in this release constitute changes required for full convergence of the Node.js and io.js projects.

child_process : ChildProcess.prototype.send() and process.send() operate asynchronously across all platforms so an optional callback parameter has been introduced that will be invoked once the message has been sent, i.e. .send(message[, sendHandle][, callback]) (Ben Noordhuis) #2620.

: and operate asynchronously across all platforms so an optional callback parameter has been introduced that will be invoked once the message has been sent, i.e. (Ben Noordhuis) #2620. node : Rename "io.js" code to "Node.js" (cjihrig) #2367.

: Rename "io.js" code to "Node.js" (cjihrig) #2367. node-gyp : This release bundles an updated version of node-gyp that works with all versions of Node.js and io.js including nightly and release candidate builds. From io.js v3 and Node.js v4 onward, it will only download a headers tarball when building addons rather than the entire source. (Rod Vagg) #2700

: This release bundles an updated version of node-gyp that works with all versions of Node.js and io.js including nightly and release candidate builds. From io.js v3 and Node.js v4 onward, it will only download a headers tarball when building addons rather than the entire source. (Rod Vagg) #2700 npm : Upgrade to version 2.14.2 from 2.13.3, includes a security update, see https://github.com/npm/npm/releases/tag/v2.14.2 for more details, (Kat Marchán) #2696.

: Upgrade to version 2.14.2 from 2.13.3, includes a security update, see https://github.com/npm/npm/releases/tag/v2.14.2 for more details, (Kat Marchán) #2696. timers : Improved timer performance from porting the 0.12 implementation, plus minor fixes (Jeremiah Senkpiel) #2540, (Julien Gilli) nodejs/node-v0.x-archive#8751 nodejs/node-v0.x-archive#8905

: Improved timer performance from porting the 0.12 implementation, plus minor fixes (Jeremiah Senkpiel) #2540, (Julien Gilli) nodejs/node-v0.x-archive#8751 nodejs/node-v0.x-archive#8905 util : The util.is*() functions have been deprecated, beginning with deprecation warnings in the documentation for this release, users are encouraged to seek more robust alternatives in the npm registry, (Sakthipriyan Vairamani) #2447.

: The functions have been deprecated, beginning with deprecation warnings in the documentation for this release, users are encouraged to seek more robust alternatives in the npm registry, (Sakthipriyan Vairamani) #2447. v8 : Upgrade to version 4.5.103.30 from 4.4.63.30 (Ali Ijaz Sheikh) #2632. Implement new TypedArray prototype methods: copyWithin() , every() , fill() , filter() , find() , findIndex() , forEach() , indexOf() , join() , lastIndexOf() , map() , reduce() , reduceRight() , reverse() , slice() , some() , sort() . See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray for further information. Implement new TypedArray.from() and TypedArray.of() functions. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray for further information. Implement arrow functions, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions for further information. Full ChangeLog available at https://github.com/v8/v8-git-mirror/blob/4.5.103/ChangeLog

: Upgrade to version 4.5.103.30 from 4.4.63.30 (Ali Ijaz Sheikh) #2632.

Known issues

See https://github.com/nodejs/node/labels/confirmed-bug for complete and current list of known issues.

Some uses of computed object shorthand properties are not handled correctly by the current version of V8. e.g. [{ [prop]: val }] evaluates to [{}] . #2507

evaluates to . #2507 Some problems with unreferenced timers running during beforeExit are still to be resolved. See #1264.

are still to be resolved. See #1264. Surrogate pair in REPL can freeze terminal. #690

Calling dns.setServers() while a DNS query is in progress can cause the process to crash on a failed assertion. #894

while a DNS query is in progress can cause the process to crash on a failed assertion. #894 url.resolve may transfer the auth portion of the url when resolving between two full hosts, see #1435.

Commits

[ 4f50d3fb90 ] - (SEMVER-MAJOR) This commit sets the value of process.release.name to "node". (cjihrig) #2367

] - This commit sets the value of process.release.name to "node". (cjihrig) #2367 [ d3178d8b1b ] - buffer : SlowBuffer only accept valid numeric values (Michaël Zasso) #2635

] - : SlowBuffer only accept valid numeric values (Michaël Zasso) #2635 [ 0cb0f4a6e4 ] - build : fix v8_enable_handle_zapping override (Karl Skomski) #2731

] - : fix v8_enable_handle_zapping override (Karl Skomski) #2731 [ a7596d7efc ] - build : remote commands on staging in single session (Rod Vagg) #2717

] - : remote commands on staging in single session (Rod Vagg) #2717 [ be427e9efa ] - build : make .msi install to "nodejs", not "node" (Rod Vagg) #2701

] - : make .msi install to "nodejs", not "node" (Rod Vagg) #2701 [ 5652ce0dbc ] - build : fix .pkg creation tooling (Rod Vagg) #2687

] - : fix .pkg creation tooling (Rod Vagg) #2687 [ 101db80111 ] - build : add --enable-asan with builtin leakcheck (Karl Skomski) #2376

] - : add --enable-asan with builtin leakcheck (Karl Skomski) #2376 [ 2c3939c9c0 ] - child_process : use stdio.fd even if it is 0 (Evan Lucas) #2727

] - : use stdio.fd even if it is 0 (Evan Lucas) #2727 [ 609db5a1dd ] - child_process : check execFile and fork args (James M Snell) #2667

] - : check execFile and fork args (James M Snell) #2667 [ d010568c23 ] - (SEMVER-MAJOR) child_process : add callback parameter to .send() (Ben Noordhuis) #2620

] - : add callback parameter to .send() (Ben Noordhuis) #2620 [ c60857a81a ] - cluster : allow shared reused dgram sockets (Fedor Indutny) #2548

] - : allow shared reused dgram sockets (Fedor Indutny) #2548 [ b2ecbb6191 ] - contextify : ignore getters during initialization (Fedor Indutny) #2091

] - : ignore getters during initialization (Fedor Indutny) #2091 [ 3711934095 ] - cpplint : make it possible to run outside git repo (Ben Noordhuis) #2710

] - : make it possible to run outside git repo (Ben Noordhuis) #2710 [ 03f900ab25 ] - crypto : replace rwlocks with simple mutexes (Ben Noordhuis) #2723

] - : replace rwlocks with simple mutexes (Ben Noordhuis) #2723 [ 847459c29b ] - (SEMVER-MAJOR) crypto : show exponent in decimal and hex (Chad Johnston) #2320

] - : show exponent in decimal and hex (Chad Johnston) #2320 [ e1c976184d ] - deps : improve ArrayBuffer performance in v8 (Fedor Indutny) #2732

] - : improve ArrayBuffer performance in v8 (Fedor Indutny) #2732 [ cc0ab17a23 ] - deps : float node-gyp v3.0.0 (Rod Vagg) #2700

] - : float node-gyp v3.0.0 (Rod Vagg) #2700 [ b2c3c6d727 ] - deps : create .npmrc during npm tests (Kat Marchán) #2696

] - : create .npmrc during npm tests (Kat Marchán) #2696 [ babdbfdbd5 ] - deps : upgrade to npm 2.14.2 (Kat Marchán) #2696

] - : upgrade to npm 2.14.2 (Kat Marchán) #2696 [ 155783d876 ] - deps : backport 75e43a6 from v8 upstream (again) (saper) #2692

] - : backport 75e43a6 from v8 upstream (again) (saper) #2692 [ 5424d6fcf0 ] - deps : upgrade V8 to 4.5.103.30 (Ali Ijaz Sheikh) #2632

] - : upgrade V8 to 4.5.103.30 (Ali Ijaz Sheikh) #2632 [ c43172578e ] - (SEMVER-MAJOR) deps : upgrade V8 to 4.5.103.24 (Ali Ijaz Sheikh) #2509

] - : upgrade V8 to 4.5.103.24 (Ali Ijaz Sheikh) #2509 [ 714e96e8b9 ] - deps : backport 75e43a6 from v8 upstream (saper) #2636

] - : backport 75e43a6 from v8 upstream (saper) #2636 [ 8637755cbf ] - doc : add TSC meeting minutes 2015-09-02 (Rod Vagg) #2674

] - : add TSC meeting minutes 2015-09-02 (Rod Vagg) #2674 [ d3d5b93214 ] - doc : update environment vars in manpage and --help (Roman Reiss) #2690

] - : update environment vars in manpage and --help (Roman Reiss) #2690 [ 29f586ac0a ] - doc : update url doc to account for escaping (Jeremiah Senkpiel) #2605

] - : update url doc to account for escaping (Jeremiah Senkpiel) #2605 [ ba50cfebef ] - doc : reorder collaborators by their usernames (Johan Bergström) #2322

] - : reorder collaborators by their usernames (Johan Bergström) #2322 [ 8a9a3bf798 ] - doc : update changelog for io.js v3.3.0 (Rod Vagg) #2653

] - : update changelog for io.js v3.3.0 (Rod Vagg) #2653 [ 6cd0e2664b ] - doc : update io.js reference (Ben Noordhuis) #2580

] - : update io.js reference (Ben Noordhuis) #2580 [ f9539c19e8 ] - doc : update changelog for io.js v3.2.0 (Rod Vagg) #2512

] - : update changelog for io.js v3.2.0 (Rod Vagg) #2512 [ cded6e7993 ] - doc : fix CHANGELOG.md on master (Roman Reiss) #2513

] - : fix CHANGELOG.md on master (Roman Reiss) #2513 [ 93e2830686 ] - (SEMVER-MINOR) doc : document deprecation of util.is* functions (Sakthipriyan Vairamani) #2447

] - : document deprecation of util.is* functions (Sakthipriyan Vairamani) #2447 [ 7038388558 ] - doc,test : enable recursive file watching in Windows (Sakthipriyan Vairamani) #2649

] - : enable recursive file watching in Windows (Sakthipriyan Vairamani) #2649 [ f3696f64a1 ] - events,lib : don't require EE#listenerCount() (Jeremiah Senkpiel) #2661

] - : don't require EE#listenerCount() (Jeremiah Senkpiel) #2661 [ 45a2046f5d ] - (SEMVER-MAJOR) installer : fix installers for node.js rename (Frederic Hemberger) #2367

] - : fix installers for node.js rename (Frederic Hemberger) #2367 [ 7a999a1376 ] - (SEMVER-MAJOR) lib : add net.Socket#localFamily property (Ben Noordhuis) #956

] - : add net.Socket#localFamily property (Ben Noordhuis) #956 [ de88255b0f ] - Revert " lib,src : add unix socket getsockname/getpeername" (Ben Noordhuis) #2584

] - " : add unix socket getsockname/getpeername" (Ben Noordhuis) #2584 [ f337595441 ] - (SEMVER-MAJOR) lib,src : add unix socket getsockname/getpeername (Ben Noordhuis) #956

] - : add unix socket getsockname/getpeername (Ben Noordhuis) #956 [ 3b602527d1 ] - (SEMVER-MAJOR) node : additional cleanup for node rename (cjihrig) #2367

] - : additional cleanup for node rename (cjihrig) #2367 [ a69ab27ab4 ] - (SEMVER-MAJOR) node : rename from io.js to node (cjihrig) #2367

] - : rename from io.js to node (cjihrig) #2367 [ 9358eee9dd ] - node-gyp : float 3.0.1, minor fix for download url (Rod Vagg) #2737

] - : float 3.0.1, minor fix for download url (Rod Vagg) #2737 [ d2d981252b ] - src : s/ia32/x86 for process.release.libUrl for win (Rod Vagg) #2699

] - : s/ia32/x86 for process.release.libUrl for win (Rod Vagg) #2699 [ eba3d3dccd ] - src : use standard conform snprintf on windows (Karl Skomski) #2404

] - : use standard conform snprintf on windows (Karl Skomski) #2404 [ cddbec231f ] - src : fix buffer overflow for long exception lines (Karl Skomski) #2404

] - : fix buffer overflow for long exception lines (Karl Skomski) #2404 [ dd3f3417c7 ] - src : re-enable fast math on arm (Michaël Zasso) #2592

] - : re-enable fast math on arm (Michaël Zasso) #2592 [ e137c1177c ] - (SEMVER-MAJOR) src : enable vector ics on arm again (Ali Ijaz Sheikh) #2509

] - : enable vector ics on arm again (Ali Ijaz Sheikh) #2509 [ 7ce749d722 ] - src : replace usage of v8::Handle with v8::Local (Michaël Zasso) #2202

] - : replace usage of v8::Handle with v8::Local (Michaël Zasso) #2202 [ b1a2d9509f ] - src : enable v8 deprecation warnings and fix them (Ben Noordhuis) #2091

] - : enable v8 deprecation warnings and fix them (Ben Noordhuis) #2091 [ 808de0da03 ] - (SEMVER-MAJOR) src : apply debug force load fixups from 41e63fb (Ali Ijaz Sheikh) #2509

] - : apply debug force load fixups from 41e63fb (Ali Ijaz Sheikh) #2509 [ 5201cb0ff1 ] - src : fix memory leak in ExternString (Karl Skomski) #2402

] - : fix memory leak in ExternString (Karl Skomski) #2402 [ 2308a27c0a ] - src : only set v8 flags if argc > 1 (Evan Lucas) #2646

] - : only set v8 flags if argc > 1 (Evan Lucas) #2646 [ 384effed20 ] - test : fix use of common before required (Rod Vagg) #2685

] - : fix use of before required (Rod Vagg) #2685 [ f146f686b7 ] - (SEMVER-MAJOR) test : fix test-repl-tab-complete.js for V8 4.5 (Ali Ijaz Sheikh) #2509

] - : fix test-repl-tab-complete.js for V8 4.5 (Ali Ijaz Sheikh) #2509 [ fe4b309fd3 ] - test : refactor to eliminate flaky test (Rich Trott) #2609

] - : refactor to eliminate flaky test (Rich Trott) #2609 [ 619721e6b8 ] - test : mark eval_messages as flaky (Alexis Campailla) #2648

] - : mark eval_messages as flaky (Alexis Campailla) #2648 [ 93ba585b66 ] - test : mark test-vm-syntax-error-stderr as flaky (João Reis) #2662

] - : mark test-vm-syntax-error-stderr as flaky (João Reis) #2662 [ 367140bca0 ] - test : mark test-repl-persistent-history as flaky (João Reis) #2659

] - : mark test-repl-persistent-history as flaky (João Reis) #2659 [ f6b093343d ] - timers : minor _unrefActive fixes and improvements (Jeremiah Senkpiel) #2540

] - : minor fixes and improvements (Jeremiah Senkpiel) #2540 [ 403d7ee7d1 ] - timers : don't mutate unref list while iterating it (Julien Gilli) #2540

] - : don't mutate unref list while iterating it (Julien Gilli) #2540 [ 7a8c3e08c3 ] - timers : Avoid linear scan in _unrefActive . (Julien Gilli) #2540

] - : Avoid linear scan in . (Julien Gilli) #2540 [ b630ebaf43 ] - win,msi: Upgrade from old upgrade code (João Reis) #2439

Windows 32-bit Installer: https://nodejs.org/dist/v4.0.0/node-v4.0.0-x86.msi

Windows 64-bit Installer: https://nodejs.org/dist/v4.0.0/node-v4.0.0-x64.msi

Mac OS X 64-bit Installer: https://nodejs.org/dist/v4.0.0/node-v4.0.0.pkg

Mac OS X 64-bit Binary: https://nodejs.org/dist/v4.0.0/node-v4.0.0-darwin-x64.tar.gz

Linux 32-bit Binary: https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-x86.tar.gz

Linux 64-bit Binary: https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-x64.tar.gz

SmartOS 32-bit Binary: https://nodejs.org/dist/v4.0.0/node-v4.0.0-sunos-x86.tar.gz

SmartOS 64-bit Binary: https://nodejs.org/dist/v4.0.0/node-v4.0.0-sunos-x64.tar.gz

ARMv6 32-bit Binary: https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv6l.tar.gz

ARMv7 32-bit Binary: https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv7l.tar.gz

ARMv8 64-bit Binary: https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-arm64.tar.gz

Source Code: https://nodejs.org/dist/v4.0.0/node-v4.0.0.tar.gz

Other release files: https://nodejs.org/dist/v4.0.0/

Documentation: https://nodejs.org/docs/v4.0.0/api/

Shasums (GPG signing hash: SHA1, file hash: SHA256):