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.
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 unifiedeventsobservable on form controls andredirectToas 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.
standalonedefaults totrue.ng updateaddsstandalone: falseto every declaration that belongs to an NgModule.- Template reference variables can no longer be read with a
this.prefix. Router.errorHandleris replaced bywithNavigationErrorHandlerinprovideRouter, or byerrorHandlerinRouterModule.forRoot.fakeAsyncflushes pending timers by default.- The timing of
effect()changed, and theallowSignalWritesoption 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.
afterRenderis renamed toafterEveryRender.TestBed.get()and theInjectFlagsenum are removed.TestBed.flushEffects()is replaced byTestBed.tick().provideExperimentalZonelessChangeDetectionis renamed toprovideZonelessChangeDetection.ng-reflect-*attributes are no longer available by default, which affects tests that query them.*ngIf,*ngForand*ngSwitchare deprecated in favour of the built-in control flow.
A short upgrade approach
- Update to the latest 18.2.x patch, confirm that the build and the tests pass, and commit.
- Run
ng update @angular/core@19 @angular/cli@19, thenng update @angular/material@19. - Review the
standalone: falsechanges that the migration adds. They keep NgModule-based code working as before. - Move CI and local machines to a Node.js version supported by Angular 20 before that step.
- Update third-party libraries, fix deprecations, run the tests and release.
- 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
- Angular 19: end of life and how to upgrade
- Angular 20: end of life and how to upgrade
- How to upgrade an Angular app that is many versions behind
- Angular version support and end of life
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