Node.js v 12 arrived on schedule. It went into LTS in October and will be maintained until 2022. In the meantime, Node 13.0.1 became the Current version.

update node js latest version

Node.js LTS & Current Download for macOS:

Node.js LTS & Current Download for Windows:

For other downloads like Linux libraries, source codes, Docker images, etc.. please visit

Node.js v12 - New Features You Shouldn't Miss

Here is a list of changes we consider essential to highlight:

  • V8 updated to version 7.4
    • Async stack traces arrived
    • Faster async/await implementation
    • New JavaScript language features
    • Performance tweaks & improvements
    • Progress on Worker threads, N-API
  • Default HTTP parser switched to llhttp
  • New experimental “Diagnostic Reports” feature

You can browse the full changelog here and read our deep-dive on Node.js v12 here.

Node.js LTS v12 Changelogs

Changelog for Node v12.13.1 (LTS)

  • Experimental support for building Node.js with Python 3 is improved.
  • ICU time zone data is updated to version 2019c. This fixes the date offset in Brazil.

Changelog for Node v12.13.0 (LTS)

This release marks the transition of Node.js 12.x into Long Term Support (LTS) with the codename 'Erbium'. The 12.x release line now moves into "Active LTS" and will remain so until October 2020. After that time, it will move into "Maintenance" until end of life in April 2022.

Notable changes:

  • npm was updated to 6.12.0. It now includes a version of node-gyp that supports Python 3 for building native modules.

Changelog for Node v12.12.0 (LTS)

  • build: Add --force-context-aware flag to prevent usage of native node addons that aren't context aware
  • deprecations: Add documentation-only deprecation for process._tickCallback()
  • esm: Using JSON modules is experimental again
  • fs: Introduce opendir() and fs.Dir to iterate through directories
  • process: Add source-map support to stack traces by using --enable-source-maps
  • tls:
    • Honor pauseOnConnect option
    • Add option for private keys for OpenSSL engines

Changelog for Node v12.11.1 (LTS)

  • build: This release fixes a regression that prevented from building Node.js using the official source tarball
  • deps: Updated small-icu data to support "unit" style in the Intl.NumberFormat API

Changelog for Node v12.11.0 (LTS)

  • crypto:
    • Add oaepLabel option
  • deps: Update V8 to
    • More efficient memory handling
    • Stack trace serialization got faster
    • The Intl.NumberFormat API gained new functionality
    • For more information:
  • events:
    • Add support for EventTarget in once
  • fs:
    • Expose memory file mapping flag UV_FS_O_FILEMAP
  • inspector:
    • New API - Session.connectToMainThread
  • process:
    • Initial SourceMap support via env.NODE_V8_COVERAGE
  • stream:
    • Make _write() optional when _writev() is implemented
  • tls:
    • Add option to override signature algorithms
  • util:
    • Add encodeInto to TextEncoder
  • worker:
    • The worker_thread module is now stable

Changelog for Node v12.10.0 (LTS)

  • deps:
    • Update npm to 6.10.3
  • fs:
    • Add recursive option to rmdir()
    • Allow passing true to emitClose option
    • Add *timeNs properties to BigInt Stats objects
  • net:
    • Allow reading data into a static buffer

Changelog for Node v12.9.0 (LTS)

  • crypto:
    • Added an oaepHash option to asymmetric encryption which allows users to specify a hash function when using OAEP padding
  • deps:
    • Updated V8 to 7.6.303.29
      • Improves the performance of various APIs such as JSON.parse and methods called on frozen arrays.
      • Adds the Promise.allSettled method.
      • Improves support of BigInt in Intl methods.
      • For more information:
    • Updated libuv to 1.31.0
      • UV_FS_O_FILEMAP has been added for faster access to memory mapped files on Windows.
      • uv_fs_mkdir() now returns UV_EINVAL for invalid filenames on Windows. It previously returned UV_ENOENT.
      • The uv_fs_statfs() API has been added.
      • The uv_os_environ() and uv_os_free_environ() APIs have been added.
  • fs:
    • Added fs.writev, fs.writevSync and filehandle.writev (promise version) methods. They allow to write an array of ArrayBufferViews to a file descriptor
  • http:
    • Added three properties to OutgoingMessage.prototype: writableObjectMode, writableLength and writableHighWaterMark
  • stream:
    • Added an new property readableEnded to readable streams. Its value is set to true when the 'end' event is emitted.
  • Added an new property writableEnded to writable streams. Its value is set to true after writable.end() has been called.

Changelog for Node v12.8.0 (LTS)

  • assert:
    • Legacy mode deprecation (DEP0089) is revoked
  • crypto:
    • The outputLength option is added to crypto.createHash
    • The maxmem range is increased from 32 to 53 bits
  • n-api:
    • Added APIs for per-instance state management
  • report:
    • Network interfaces get included in the report
  • src:
    • v8.getHeapCodeStatistics() is now exported

Changelog for Node v12.7.0 (LTS)

  • deps:
    • Updated nghttp2 to 1.39.1
    • Updated npm to 6.10.0
  • esm:
    • Implemented experimental "pkg-exports" proposal. A new "exports" field can be added to a module's package.json file to provide custom subpath aliasing. See proposal-pkg-exports for more information
  • http:
    • Added response.writableFinished
    • Exposed headers, rawHeaders and other fields on an http.ClientRequest "information" event
  • inspector:
    • Added inspector.waitForDebugger()
  • policy:
    • Added --policy-integrity=sri CLI option to mitigate policy tampering. If a policy integrity is specified and the policy does not have that integrity, Node.js will error prior to running any code
  • readline,tty:
    • Exposed stream API from various methods which write characters
  • src:
    • Use cgroups to get memory limits. This improves the way we set the memory ceiling for a Node.js process. Previously we would use the physical memory size to estimate the necessary V8 heap sizes. The physical memory size is not necessarily the correct limit, e.g. if the process is running inside a docker container or is otherwise constrained. This change adds the ability to get a memory limit set by linux cgroups, which is used by docker containers to set resource constraints

Changelog for Node v12.6.0 (LTS)

  • build:
    • Experimental support for building Node.js on MIPS architecture is back
  • child_process:
    • The promisified versions of child_process.exec and child_process.execFile now both return a Promise which has the child instance attached to their child property
  • deps: Updated libuv to 1.30.1
    • Support for the Haiku platform has been added.
    • The maximum UV_THREADPOOL_SIZE has been increased from 128 to 1024.
    • uv_fs_copyfile() now works properly when the source and destination files are the same.
  • process:
    • A new method, process.resourceUsage() was added. It returns resource usage for the current process, such as CPU time
  • src:
    • Fixed an issue related to stdio that could lead to a crash of the process in some circumstances
  • stream:
    • Added a writableFinished property to writable streams. It indicates that all the data has been flushed to the underlying system
  • worker:
    • Fixed an issue that prevented worker threads to listen for data on stdin

Node.js Current v13 Changelogs

Changelog for Node 13.3.0 (Current)

  • fs:
    Reworked experimental recursive rmdir(). The maxBusyTries option is renamed to maxRetries, and its default is set to 0. The emfileWait option has been removed, and EMFILE errors use the same retry logic as other errors. The retryDelay option is now supported. ENFILE errors are now retried.
  • http: Make maximum header size configurable per-stream or per-server
  • http2: Make maximum tolerated rejected streams configurable. Allow to configure maximum tolerated invalid frames.
  • wasi: Introduce initial WASI support

Changelog for Node 13.2.0 (Current)

  • addons: Deprecate one- and two-argument AtExit(). Use the three-argument variant of AtExit() or AddEnvironmentCleanupHook() instead
  • child_process,cluster:
    The serialization option is added that allows child process IPC to use the V8 serialization API (to e.g., pass through data types like sets or maps)
  • deps: Update V8 to 7.9, Update npm to 6.13.1
  • embedder: Exposes the ability to pass cli flags / options through an API as embedder. Allow adding linked bindings to Environment.
  • esm: Unflag --experimental-modules
  • stream: Add writable.writableCorked property
  • worker: Allow specifying resource limits
  • v8: The Serialization API is now stable

Changelog for Node 13.1.0 (Current)

  • cli: Added a new flag (--trace-uncaught) that makes Node.js print the stack trace at the time of throwing uncaught exceptions, rather than at the creation of the Error object, if there is any. This is disabled by default because it affects GC behavior.
  • crypto: Added Hash.prototype.copy() method. It returns a new Hash object with its internal state cloned from the original one.
  • dgram: Added source-specific multicast support. This adds methods to Datagram sockets to support RFC 4607 for IPv4 and IPv6.
  • fs: Added a bufferSize option to fs.opendir(). It allows to control the number of entries that are buffered internally when reading from the directory.

Changelog for Node 13.0.1 (Current)

  • deps: Fixed a bug in npm 6.12.0 where warnings are emitted on Node.js 13.x
  • esm: Changed file extension resolution order of --es-module-specifier-resolution=node to match that of the CommonJS loader

Changelog for Node 13.0.0 (Current)

  • assert:
    • If the validation function passed to assert.throws() or assert.rejects() returns a value other than true, an assertion error will be thrown instead of the original error to highlight the programming mistake
    • If a constructor function is passed to validate the instance of errors thrown in assert.throws() or assert.reject(), an assertion error will be thrown instead of the original error
  • build:
    • Node.js releases are now built with default full-icu support. This means that all locales supported by ICU are now included and Intl-related APIs may return different values than before.
    • The minimum Xcode version supported for macOS was increased to 10. It is still possible to build Node.js with Xcode 8 but this may no longer be the case in a future v13.x release.
  • child_process:
    • ChildProcess._channel (DEP0129) is now a Runtime deprecation
  • console:
    The output console.timeEnd() and console.timeLog() will now automatically select a suitable time unit instead of always using milliseconds.
  • deps:
    The V8 engine was updated to version 7.8. This includes performance improvements to object destructuring, memory usage and WebAssembly startup time.
  • domain:
    The domain's error handler is now executed with the active domain set to the domain's parent to prevent inner recursion.
  • fs:
    • The undocumented method FSWatcher.prototype.start() was removed
    • Calling the open() method on a ReadStream or WriteStream now emits a runtime deprecation warning. The methods are supposed to be internal and should not be called by user code.
    •, fs.readSync/writeSync and now accept any safe integer as their offset parameter. The value of offset is also no longer coerced, so a valid type must be passed to the functions.
  • http:
    • Aborted requests no longer emit the end or error events after aborted
    • Data will no longer be emitted after a socket error
    • The legacy HTTP parser (previously available under the --http-parser=legacy flag) was removed
    • The host option for HTTP requests is now validated to be a string value
    • The request.connection and response.connection properties are now runtime deprecated. The equivalent request.socket and response.socket should be used instead
  • http, http2:
    • The default server timeout was removed,
    • Brought 425 status code name into accordance with RFC 8470. The name changed from "Unordered Collection" to "Too Early".
  • lib:
    • The error.errno property will now always be a number. To get the string value, use error.code instead.
  • module:
    • module.createRequireFromPath() is deprecated. Use module.createRequire() instead.
  • src:
    • Changing the value of process.env.TZ will now clear the tz cache. This affects the default time zone used by methods such as Date.prototype.toString.
  • stream:
    • The timing and behavior of streams was consolidated for a number of edge cases. Please look at the individual commits below for more information.deps:
      Fixed a bug in npm 6.12.0 where warnings are emitted on Node.js 13.x.

Learn More Node.js from RisingStack

At RisingStack we've been writing JavaScript / Node tutorials for the community in the past 5 years. If you're beginner to Node.js, we recommend checking out our Node Hero tutorial series! The goal of this series is to help you get started with Node.js and make sure you understand how to write an application using it.

As a sequel to Node Hero, we have completed another series called Node.js at Scale - which focuses on advanced Node / JavaScript topics. Take a look!