Angular Supported Node.js Versions: The Complete Compatibility Matrix
The definitive Angular-to-Node.js compatibility guide—and why outdated pairings create a double layer of security risk.

Every version of Angular has a specific range of Node.js versions it will run on, and getting the pairing wrong is one of the fastest ways to break a build. The Angular CLI enforces these requirements at runtime: start it on the wrong Node.js version and it refuses to run, usually with a message along the lines of The Angular CLI requires a minimum Node.js version of....
This page is the complete compatibility matrix, covering every Angular release from AngularJS through Angular 21 (plus what's expected for the still-pre-release Angular 22). Every row is sourced from the official Angular version compatibility table and the Angular CLI package.json engines field. If you're pinning CI/CD runners, debugging a legacy build, or planning an upgrade path, the numbers below are the authoritative ones.
There's a second reason this matters that most compatibility guides don't mention: if your Angular version is EOL, the Node.js versions it requires are almost certainly EOL too. We'll get to that problem after the matrix.
Quick answer: the master compatibility matrix
The table below shows the Node.js version ranges officially supported by each Angular release. Entries use semver shorthand: ^18.19.1 means 18.19.1 or any later 18.x. The || separator means "or". So ^18.19.1 || ^20.11.1 || ^22.0.0 means you can use any 18.19.1+, any 20.11.1+, or any 22.x.
Two notes before moving on. First, Angular skipped version 3: the framework jumped from 2 to 4 in 2017 so the core framework version number would align with the then-current router package (which was already at v3). Second, the pre-v9 CLI and Angular versions were not synchronized, so the Node.js requirements for Angular 2 through 8 are driven by whichever Angular CLI version you were using, not strictly by the framework version itself.
The detail behind the matrix
The matrix above hides some nuance within each major version. The sections below expand the Node.js compatibility by minor version and point out the places where teams most commonly trip up.
AngularJS (1.x) supported Node.js versions
AngularJS is a browser-side JavaScript library, not a server runtime. Strictly speaking, AngularJS itself has no Node.js requirement: you can run an AngularJS application on a browser without Node anywhere in the production stack.
The Node.js requirement only enters the picture through build tooling. Most AngularJS projects used some combination of Grunt, Gulp, Karma, Bower, and Webpack, all of which have their own Node.js version requirements that evolved over time. An AngularJS 1.5 project built in 2016 likely expected Node 4 or 6; a project that moved to a modern Webpack toolchain in 2021 may require Node 14 or later for the build itself, while the production artifact still runs in any browser.
AngularJS reached EOL on December 31, 2021 and no longer receives security patches from Google. HeroDevs NES for AngularJS supports 1.4.x, 1.5.x, and 1.8.x/1.9.x and is the only commercial provider that continues to ship CVE fixes for the framework, built and maintained by core AngularJS contributors.
Angular 2 supported Node.js versions
Angular 2 was the ground-up TypeScript rewrite and shipped in September 2016. The framework required Node.js ^6.9.0 for its tooling. Because Angular CLI wasn't yet the default scaffolding approach, many early Angular 2 projects used SystemJS-based builds with varying Node.js requirements.
Angular 2 has been EOL since March 2019 and there have been no framework-level security patches in over seven years.
Angular 4 supported Node.js versions
Angular skipped version 3 and went directly to version 4 in March 2017. Node.js requirements stayed at ^6.9.0 for the 4.0 and 4.1 releases. Starting with Angular CLI 1.4 (which typically shipped with Angular 4.2 projects), Node.js 8 support was added, making the effective range ^6.9.0 || ^8.9.0.
Angular 5 supported Node.js versions
Angular 5 (November 2017) required Node.js ^6.9.0 || ^8.9.0. The CLI tooling in this era used Angular CLI 1.5 through 1.7 depending on the minor version.
Angular 6 supported Node.js versions
Angular 6 (May 2018) was the first release where Angular and Angular CLI version numbers aligned (both moved to 6.x). Node.js requirements dropped support for Node 6 and the supported range became Node.js ^8.9.0. This was a notable breaking change for teams still standardized on Node 6.
Angular 7 supported Node.js versions
Angular 7 (October 2018) added Node 10 support, giving a supported range of ^8.9.0 || ^10.9.0. Both Node versions are long EOL.
Angular 8 supported Node.js versions
Angular 8 (May 2019) dropped Node 8 and required Node.js ^10.9.0. This was the last Angular release before the version number jumped to match the CLI's 9.x. Teams running Angular 8 today are on a Node 10 runtime that reached EOL on April 30, 2021, nearly five years ago.
Angular 9 supported Node.js versions
Angular 9 (February 2020) introduced Ivy as the default rendering engine and required Node.js ^10.13.0 || ^12.11.0. This is the single most-searched compatibility question on the web: enterprises often inherit Angular 9 codebases that refuse to build on modern Node versions because the Angular CLI from that era explicitly rejects Node 14 and later.
Both Node 10 (EOL April 2021) and Node 12 (EOL April 2022) are long past their support windows. Running Angular 9 in production today means running two stacked EOL runtimes: the framework itself (EOL August 2021) and the Node.js version required to build it.
Angular 10 supported Node.js versions
Angular 10 (June 2020) kept the same Node.js compatibility as Angular 9: ^10.13.0 || ^12.11.0. No new Node versions were added to the supported range. Angular 10 reached EOL in December 2021.
Angular 11 supported Node.js versions
Angular 11 (November 2020) also stayed with Node.js ^10.13.0 || ^12.11.0. Despite Node 14 reaching Active LTS in October 2020 (one month before Angular 11's release), the CLI didn't officially support Node 14 until Angular 12. Teams who upgraded Node to 14 with Angular 11 typically ran in "unsupported but working" territory.
Angular 12 supported Node.js versions
Angular 12 (May 2021) dropped Node 10 support and required Node.js ^12.14.0 || ^14.15.0. This is a common upgrade pain point: moving from Angular 11 to 12 forces a Node.js upgrade at the same time.
Angular 13 supported Node.js versions
Angular 13 (November 2021) widened the range to Node.js ^12.20.0 || ^14.15.0 || ^16.10.0, adding Node 16 support. Angular 13 is frequently the version enterprises are stuck on, because the jump to Angular 14 forces another Node bump and introduces standalone components in a way that affects downstream code.
Angular 14 supported Node.js versions
Angular 14 (June 2022) dropped Node 12 and required Node.js ^14.15.0 || ^16.10.0. It introduced standalone components as a developer-preview feature and reached EOL in November 2023.
Angular 15 supported Node.js versions
Angular 15 (November 2022) added Node 18 support: Node.js ^14.20.0 || ^16.13.0 || ^18.10.0. The minor versions 15.1 and 15.2 kept the same range.
Angular 16 supported Node.js versions
Angular 16 (May 2023) dropped Node 14 and required Node.js ^16.14.0 || ^18.10.0. Angular 16 introduced Signals as developer preview and reached EOL in November 2024.
Angular 17 supported Node.js versions
Angular 17 (November 2023) required Node.js ^18.13.0 || ^20.9.0. The supported Node versions here are significant: Node 18 reached EOL on April 30, 2025, and Node 20 reaches EOL on April 30, 2026. Teams on Angular 17 who haven't upgraded their Node runtime since release are already on an unsupported combination today.
Angular 18 supported Node.js versions
Angular 18 (May 2024) required Node.js ^18.19.1 || ^20.11.1 || ^22.0.0. It added Node 22 support and tightened the minimum patch versions for Node 18 and 20 (a common source of "minimum Node.js version" CI failures after npm auto-upgrading tooling). Angular 18 reached EOL in November 2025.
Angular 19 supported Node.js versions
Angular 19 (November 2024) uses the same range as Angular 18: Node.js ^18.19.1 || ^20.11.1 || ^22.0.0. Angular 19 is in its LTS window now and reaches EOL on May 19, 2026.
Angular 20 supported Node.js versions
Angular 20 (May 2025) dropped Node 18 and added Node 24, giving a supported range of Node.js ^20.19.0 || ^22.12.0 || ^24.0.0. Note the tight minimum patch requirements: Angular 20 won't build on Node 20.18 or earlier. Angular 20 is the current LTS release, with LTS through November 28, 2026.
Angular 21 supported Node.js versions
Angular 21 (November 2025) matches Angular 20's Node.js range: ^20.19.0 || ^22.12.0 || ^24.0.0. Angular 21 is the currently active release, with active support until May 19, 2026.
Angular 22 expected Node.js versions
Angular 22 is expected to reach general availability around May 2026, following the framework's six-month cadence. Pre-release builds (v22.0.0-next as of April 2026) continue the ^20.19.0 || ^22.12.0 || ^24.0.0 range, though Node 20 will be EOL within days of Angular 22's expected launch date, and the final release may drop it entirely. Check the official Angular version compatibility page closer to GA.
The dual EOL problem (and why this matrix matters for security)
Here's the compounding risk most teams don't think about: EOL Angular almost always requires EOL Node.js.
Line up the two EOL timelines and the pattern is obvious:
The upshot: if you're on Angular 17 or earlier, you have at least one EOL component in your build toolchain right now. You may have two. Neither receives security patches from its maintainer. And the CVE risk compounds: AngularJS and Angular have both had high-severity CVEs disclosed in the last 12 months (see the HeroDevs vulnerability directory for the running list), and Node.js regularly ships patches for v8, OpenSSL, and platform-level vulnerabilities that never reach EOL branches.
For teams subject to SOC 2, PCI DSS, FedRAMP, or the incoming EU Cyber Resilience Act (enforcement begins September 2026), running an EOL JavaScript runtime under an EOL framework is an auditor finding waiting to happen.
The Node 20 deadline teams keep missing
Node.js 20 reaches EOL on April 30, 2026. This affects:
- Every Angular 17 project (Node 18 and 20 are its only supported runtimes, and Node 18 EOL'd a year ago)
- Every Angular 18 and 19 project that hasn't upgraded to Node 22
- Every Angular 20 and 21 project still running the minimum supported Node 20 instead of 22 or 24
For teams that built Angular 17 apps in November 2023 and haven't touched the Node runtime since, April 30, 2026 is the day the supported Node floor disappears entirely. Upgrading to Node 22 or 24 is straightforward on Angular 18 and later, but Angular 17 doesn't support either: you're forced into a framework upgrade, a Node workaround, or commercial support. See the HeroDevs Node.js 20 EOL guide for the complete picture on what changes after April 30.
Common compatibility errors and what they mean
If you've ever seen one of these Angular CLI error messages, it's a Node.js version mismatch:
- Node.js version vX.Y.Z detected. The Angular CLI requires a minimum Node.js version of...: You're below the minimum patch version. Most common after updating an older CI image that bumped npm but left Node pinned.
- You are running an unsupported version of Node.js: You're on a Node version the CLI explicitly rejects (often an odd-numbered "Current" release like Node 21, 23, or 25).
- Cannot find module 'node:...': You're trying to run modern tooling on a Node version that predates Node: protocol imports (added in Node 14.18 / 16.0).
- error:0308010C:digital envelope routines::unsupported: Classic OpenSSL 3 mismatch when running older Angular (v11 or v12) on Node 17+. The workaround is NODE_OPTIONS=--openssl-legacy-provider, but it's a warning sign your Angular version is old enough that it predates the Node upgrade.
- gyp ERR! stack Error during npm install: Native module compilation fails because node-gyp doesn't support your Python version, Xcode version, or Visual Studio toolchain on the old Node release.
Each of these is technically a Node.js issue, but the root cause is almost always "this Angular version was pinned to a Node release that's now EOL." Patching the symptoms keeps builds running, but it leaves the underlying security problem intact.
Your options when Angular and Node versions both go EOL
There are three ways out:
1. Upgrade Angular and Node together. This is the Angular team's recommended path and the right answer for teams with the engineering bandwidth. The Angular ng update tool handles most of the work for major version jumps, but multi-version jumps (for example, Angular 11 to 19) typically require sequential upgrades through each major version, each with its own breaking changes. Budget 2 to 6 engineer-weeks per major version for a mid-sized codebase, more if you have custom builders or a large surface area of templates.
2. Migrate off Angular entirely. Viable if you're already planning a rewrite or if the app is approaching end-of-business-life. Not usually the best path for a working codebase: the migration cost dwarfs the upgrade cost.
3. Adopt Never-Ending Support. HeroDevs NES for Angular covers Angular v4 through v19, with ongoing security patches for all CVEs disclosed against those versions. HeroDevs NES for Node.js covers Node 12, 14, 16, 18, 20, and 22. Both are drop-in replacements: you update package.json to point at the HeroDevs private registry, and your existing code continues to build and run without changes.
For teams running Angular 14 on Node 16, or Angular 17 on Node 18, or any of the dozens of other EOL pairs in the matrix above, NES solves both EOL problems with a single vendor relationship. You continue shipping while you plan the real upgrade, which gives you the runway to do the migration right rather than rushing it under audit pressure.
NES is built and maintained by core contributors to both Angular and Node.js, including AngularJS creator Miško Hevery at HeroDevs. Every patch ships with compliance documentation (SBOMs, VEX files, and evidence packs) designed for SOC 2, PCI DSS, FedRAMP, HIPAA, and EU CRA requirements.
Frequently asked questions
What Node.js version does Angular 9 support?
Angular 9 officially supports Node.js 10.13.0 or later in the 10.x line, or 12.11.0 or later in the 12.x line. Both are EOL and no longer receive security updates from the Node.js project.
What Node.js version does Angular 10 support?
Angular 10 supports the same range as Angular 9: Node.js ^10.13.0 || ^12.11.0. No additional Node versions were added for Angular 10.
What Node.js version does Angular 11 support?
Angular 11 supports Node.js ^10.13.0 || ^12.11.0. Node 14 is not officially supported even though it was available at the time.
What Node.js version does Angular 12 support?
Angular 12 supports Node.js ^12.14.0 || ^14.15.0. Node 10 support was dropped in this release.
What Node.js version does Angular 13 support?
Angular 13 supports Node.js ^12.20.0 || ^14.15.0 || ^16.10.0. This was the release that first added Node 16 support.
What Node.js version does Angular 14 support?
Angular 14 supports Node.js ^14.15.0 || ^16.10.0. Node 12 support was dropped.
What Node.js version does Angular 15 support?
Angular 15 supports Node.js ^14.20.0 || ^16.13.0 || ^18.10.0. This was the first release to officially support Node 18.
What Node.js version does Angular 16 support?
Angular 16 supports Node.js ^16.14.0 || ^18.10.0. Node 14 support was dropped.
What Node.js version does Angular 17 support?
Angular 17 supports Node.js ^18.13.0 || ^20.9.0. Node 16 support was dropped, and Node 20 was added.
What Node.js version does Angular 18 support?
Angular 18 supports Node.js ^18.19.1 || ^20.11.1 || ^22.0.0. Note the tighter minimum patch requirements compared to Angular 17.
What Node.js version does Angular 19 support?
Angular 19 supports the same range as Angular 18: Node.js ^18.19.1 || ^20.11.1 || ^22.0.0.
What Node.js version does Angular 20 support?
Angular 20 supports Node.js ^20.19.0 || ^22.12.0 || ^24.0.0. Node 18 was dropped and Node 24 was added.
What Node.js version does Angular 21 support?
Angular 21 supports the same range as Angular 20: Node.js ^20.19.0 || ^22.12.0 || ^24.0.0.
Can I run Angular on an odd-numbered Node.js release like Node 23 or 25?
No, not in a supported configuration. Angular only certifies Even-numbered LTS Node releases. Odd-numbered "Current" releases (Node 9, 11, 13, 15, 17, 19, 21, 23, 25) are never part of the officially supported matrix, even if builds occasionally work.
Does AngularJS require Node.js?
AngularJS itself is a browser library and doesn't require Node.js at runtime. Build tooling (Grunt, Gulp, Webpack, Karma) requires Node, and the specific version depends entirely on which tooling and versions you're using, not on AngularJS itself.
Taking action
If you're on an actively supported Angular and Node combination (Angular 19, 20, or 21 on Node 20.19+, 22.12+, or 24), you're in good shape. Keep patch versions current and plan the Node 20 to Node 22 or 24 transition before April 30, 2026.
If you're on Angular 17 or earlier, every week that passes adds CVE exposure across two EOL layers of the stack. The upgrade path exists, but so does the shortcut: HeroDevs NES for Angular and NES for Node.js together cover the full range of EOL pairs in the matrix above, as drop-in replacements that ship with the compliance documentation auditors actually ask for.
To compare your current stack against current CVEs, check the HeroDevs vulnerability directory. To see which Angular versions are approaching EOL and what changes at each boundary, the Angular version history reference lays out every release date and support window from AngularJS to Angular 22.


