Carlos Cifuentes
Angular versions · v18

Angular 18: end of life and how to upgrade

Angular 18 stabilized the built-in control flow and deferrable views, and shipped experimental zoneless change detection. It has been unsupported since November 2025.

By Carlos Cifuentes · Frontend architect · Updated 2026-10-02

Release and support dates

Angular 18 was released in May 2024. Active support ended in November 2024 and long-term support ended in November 2025. It receives no security patches today. The dates for every major are in Angular version support and end of life.

What Angular 18 introduced

  • Experimental zoneless change detection, enabled with provideExperimentalZonelessChangeDetection().
  • Stable built-in control flow and deferrable views. Both left developer preview.
  • Material 3 stable in Angular Material.
  • Signal inputs, signal-based queries and the new output syntax in developer preview.
  • Server-side rendering improvements: hydration for i18n blocks and event replay, both in developer preview.
  • angular.dev as the official documentation site.
  • Smaller additions: fallback content for ng-content, a unified events observable on form controls and redirectTo as a function.
  • Tooling for the move to the application builder, and TypeScript 5.4.

What needs attention when you upgrade

From 18 to 19:

  • TypeScript 5.5 or later is required.
  • standalone defaults to true. ng update adds standalone: false to every declaration that belongs to an NgModule.
  • Template reference variables can no longer be read with a this. prefix.
  • Router.errorHandler is replaced by withNavigationErrorHandler in provideRouter, or by errorHandler in RouterModule.forRoot.
  • fakeAsync flushes pending timers by default.
  • The timing of effect() changed, and the allowSignalWrites option is deprecated.
  • The Protractor builder is removed from the CLI.

From 19 to 20:

  • Node.js 18 is no longer supported. The version table lists Node 20.19, 22.12 and 24 for Angular 20.
  • TypeScript 5.8 or later is required.
  • afterRender is renamed to afterEveryRender.
  • TestBed.get() and the InjectFlags enum are removed. TestBed.flushEffects() is replaced by TestBed.tick().
  • provideExperimentalZonelessChangeDetection is renamed to provideZonelessChangeDetection.
  • ng-reflect-* attributes are no longer available by default, which affects tests that query them.
  • *ngIf, *ngFor and *ngSwitch are deprecated in favour of the built-in control flow.

A short upgrade approach

  1. Update to the latest 18.2.x patch, confirm that the build and the tests pass, and commit.
  2. Run ng update @angular/core@19 @angular/cli@19, then ng update @angular/material@19.
  3. Review the standalone: false changes that the migration adds. They keep NgModule-based code working as before.
  4. Move CI and local machines to a Node.js version supported by Angular 20 before that step.
  5. Update third-party libraries, fix deprecations, run the tests and release.
  6. Repeat for the next major. The next stop is Angular 19.

When it is worth getting help

Four majors separate v18 from the current version. Help is worth it if the app mixes NgModules, standalone components and early signal APIs in ways that make the migrations hard to review, if the tests depend on fakeAsync timing, or if the team has a fixed date to be back on a supported version. The order of work is in Angular upgrade strategy for old versions.

More in this section

Planning a migration or a micro-frontend platform?

In a 20-minute call you describe your situation and I tell you how I'd approach it. If it isn't worth doing yet, I'll say so.

Message me on LinkedIn