Angular 17: end of life and how to upgrade
Angular 17 introduced the built-in control flow, deferrable views and the esbuild-based application builder. It has been unsupported since May 2025.
Release and support dates
Angular 17 was released in November 2023. Active support ended in May 2024 and long-term support ended in May 2025. It receives no security patches today. The dates for every major are in Angular version support and end of life.
What Angular 17 introduced
- Built-in control flow in developer preview.
@if,@forand@switchblocks replace the structural directives, with an automated migration:ng generate @angular/core:control-flow. - Deferrable views in developer preview.
@deferblocks lazy load parts of a template. - Stable hydration and the
@angular/ssrpackage, which takes over from the Angular Universal express engine. - The application builder, based on esbuild and Vite, stable and enabled by default for new projects.
- Standalone by default in new projects.
ng generatescaffolds standalone components, directives and pipes. - Signals out of developer preview, with
effectstill in preview. - New lifecycle hooks:
afterRenderandafterNextRender. - The angular.dev documentation site, launched in beta.
What needs attention when you upgrade
From 17 to 18:
- Node.js 18.19 or later and TypeScript 5.4 or later are required.
- The
asynctest helper is replaced bywaitForAsync. StateKeyandTransferStateare imported from@angular/core.- Tests may run additional rounds of change detection, and
ComponentFixture.whenStablemay wait longer than before. - Route guards and resolvers can return a
RedirectCommand, andredirectTocan be a function. Code that readsRouteobjects directly must handle both. - Apps that paired Angular 17 with Angular Material 16 must finish the move to the MDC components.
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, and tests that depend on change detection timing may need changes.BrowserModule.withServerTransition()is removed. Set theAPP_IDtoken.- The Protractor builder is removed from the CLI.
A short upgrade approach
- Update to the latest 17.3.x patch, confirm that the build and the tests pass, and commit.
- Run
ng update @angular/core@18 @angular/cli@18, thenng update @angular/material@18. - Fix the tests that fail because of the change detection timing changes.
- Replace Protractor e2e tests before the step to v19.
- Update third-party libraries, fix deprecations, run the tests and release.
- Repeat for the next major. The next stop is Angular 18.
Optional migrations such as the control flow, standalone components and the application builder can wait. Run them as separate changes after the version upgrade is stable.
When it is worth getting help
Five majors separate v17 from the current version, and each one has an ng update path. Help is worth it if the test suite is large and fragile, if the app still runs e2e tests on Protractor, or if the team wants to reach a supported version quickly and modernize afterwards with a clear plan. The order of work is in Angular upgrade strategy for old versions.
More in this section
- Angular 18: end of life and how to upgrade
- 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
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