Latest in branch 12.x
12.22.12
Released 05 Apr 2022
(4 years ago)
SoftwareNode.js
Branch12.x
StatusLTS
End of life
Initial release12.0.0
23 Apr 2019
(7 years ago)
Latest release12.22.12
05 Apr 2022
(4 years ago)
CodenameErbium
End of bug fixes30 Nov 2020
(Ended 5 years, 5 months ago)
End of security fixes30 Apr 2022
(Ended 4 years ago)
Release noteshttps://github.com/nodejs/node/releases/tag/v12.22.12
Source codehttps://github.com/nodejs/node/tree/v12.22.12
Documentationhttps://nodejs.org/dist/latest-v12.x/docs/api/
Downloadhttps://nodejs.org/download/release/latest-v12.x/
Node.js 12.x ReleasesView full list

What Is New in Node.js 12?

CategoryChange
New FeaturesV8 7.4 -- async stack traces, faster async/await
New FeaturesTLS 1.3 support
New FeaturesHeap dump on --heapsnapshot-near-heap-limit
New FeaturesES6 module support (experimental, opt-in)
ImprovementsDefault HTTP parser changed to llhttp
ImprovementsWorkers (worker_threads) stabilized
ImprovementsStartup performance improved via V8 code cache
SecurityTLS: system CA certificates honored by default

Faster async/await and Async Stack Traces

V8 7.4 rewrites the async/await implementation. In V8 6.x, awaiting a non-promise value inside an async function had unnecessary overhead. V8 7.4 makes this path almost as fast as sync code, which improves throughput in async-heavy Express/Koa route handlers noticeably.

Async stack traces now show the correct call chain through awaits, instead of stopping at the first await boundary. Debugging async errors in production finally shows the full path from the origin call.

Worker Threads Stabilized

worker_threads moves from experimental to a stable (but not fully stable) status in Node.js 12. You can run CPU-heavy tasks in separate threads with shared memory via SharedArrayBuffer.

import { Worker, isMainThread, workerData } from 'node:worker_threads';

if (isMainThread) {
  const worker = new Worker('./image-resize.js', { workerData: { path: './img.png' } });
  worker.on('message', (result) => console.log('Done:', result));
} else {
  // CPU-heavy work here, does not block the main event loop
}

llhttp HTTP Parser

Node.js 12 switches from the legacy http_parser (C) to llhttp as the default HTTP parser. llhttp is generated from TypeScript specification, making it maintainable and easier to validate for correctness. It is also strictly faster in benchmarks.

This should be transparent to most users. If you use custom HTTP parsers or raw TCP connections that depend on parser quirks, verify compatibility.

Startup Performance via V8 Code Cache

Node.js 12 generates V8 code cache at build time for built-in libraries. This cuts startup time significantly for small scripts and CLI tools -- a welcome improvement for developers who run short-lived scripts frequently.

FAQ

Is Node.js 12 an LTS release?
Yes. Node.js 12 (codename "Erbium") was an LTS release with support ending April 2022. It is fully end-of-life.

Is worker_threads suitable for I/O-bound work?
Not really. Workers shine for CPU-bound tasks (video encoding, image processing, crypto). For I/O, Node's event loop handles it efficiently without threads -- adding threads for I/O adds overhead with minimal benefit.

Does the llhttp switch change how HTTP responses are parsed?
It is stricter in some edge cases (e.g., malformed header handling). If you have HTTP clients or servers sending technically invalid HTTP, you may see parsing errors that were previously silently accepted.

Can I use ES modules without a flag in Node.js 12?
No -- ESM is behind --experimental-modules in Node.js 12. Full ESM support without flags arrives in Node.js 14.

What is the --heapsnapshot-near-heap-limit flag for?
It automatically writes a heap snapshot file when V8's heap usage approaches its limit. This gives you a snapshot to analyze with Chrome DevTools before the OOM crash happens -- useful for tracking down memory leaks in long-running processes.

Releases In Branch 12.x

VersionRelease datenpm version
12.22.1205 Apr 2022
(4 years ago)
6.14.16
12.22.1117 Mar 2022
(4 years ago)
6.14.16
12.22.1001 Feb 2022
(4 years ago)
6.14.16
12.22.910 Jan 2022
(4 years ago)
6.14.15
12.22.816 Dec 2021
(4 years ago)
6.14.15
12.22.712 Oct 2021
(4 years ago)
6.14.15
12.22.630 Aug 2021
(4 years ago)
6.14.15
12.22.511 Aug 2021
(4 years ago)
6.14.14
12.22.429 Jul 2021
(4 years ago)
6.14.14
12.22.305 Jul 2021
(4 years ago)
6.14.13
12.22.201 Jul 2021
(4 years ago)
6.14.13
12.22.106 Apr 2021
(5 years ago)
6.14.12
12.22.030 Mar 2021
(5 years ago)
6.14.11
12.21.023 Feb 2021
(5 years ago)
6.14.11
12.20.210 Feb 2021
(5 years ago)
6.14.11
12.20.104 Jan 2021
(5 years ago)
6.14.10
12.20.024 Nov 2020
(5 years ago)
6.14.8
12.19.116 Nov 2020
(5 years ago)
6.14.8
12.19.006 Oct 2020
(5 years ago)
6.14.8
12.18.415 Sep 2020
(5 years ago)
6.14.6
12.18.322 Jul 2020
(5 years ago)
6.14.6
12.18.230 Jun 2020
(5 years ago)
6.14.5
12.18.117 Jun 2020
(5 years ago)
6.14.5
12.18.002 Jun 2020
(5 years ago)
6.14.4
12.17.026 May 2020
(5 years ago)
6.14.4
12.16.328 Apr 2020
(6 years ago)
6.14.4
12.16.208 Apr 2020
(6 years ago)
6.14.4
12.16.118 Feb 2020
(6 years ago)
6.13.4
12.16.011 Feb 2020
(6 years ago)
6.13.4
12.15.005 Feb 2020
(6 years ago)
6.13.4
12.14.107 Jan 2020
(6 years ago)
6.13.4
12.14.017 Dec 2019
(6 years ago)
6.13.4
12.13.119 Nov 2019
(6 years ago)
6.12.1
12.13.021 Oct 2019
(6 years ago)
6.12.0
12.12.011 Oct 2019
(6 years ago)
6.11.3
12.11.101 Oct 2019
(6 years ago)
6.11.3
12.11.025 Sep 2019
(6 years ago)
6.11.3
12.10.004 Sep 2019
(6 years ago)
6.10.3
12.9.126 Aug 2019
(6 years ago)
6.10.2
12.9.020 Aug 2019
(6 years ago)
6.10.2
12.8.115 Aug 2019
(6 years ago)
6.10.2
12.8.006 Aug 2019
(6 years ago)
6.10.2
12.7.023 Jul 2019
(6 years ago)
6.10.0
12.6.003 Jul 2019
(6 years ago)
6.9.0
12.5.026 Jun 2019
(6 years ago)
6.9.0
12.4.004 Jun 2019
(6 years ago)
6.9.0
12.3.122 May 2019
(6 years ago)
6.9.0
12.3.021 May 2019
(6 years ago)
6.9.0
12.2.007 May 2019
(7 years ago)
6.9.0
12.1.029 Apr 2019
(7 years ago)
6.9.0
12.0.023 Apr 2019
(7 years ago)
6.9.0