Carlos Cifuentes
Angular versions · v17

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.

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

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, @for and @switch blocks replace the structural directives, with an automated migration: ng generate @angular/core:control-flow.
  • Deferrable views in developer preview. @defer blocks lazy load parts of a template.
  • Stable hydration and the @angular/ssr package, 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 generate scaffolds standalone components, directives and pipes.
  • Signals out of developer preview, with effect still in preview.
  • New lifecycle hooks: afterRender and afterNextRender.
  • 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 async test helper is replaced by waitForAsync.
  • StateKey and TransferState are imported from @angular/core.
  • Tests may run additional rounds of change detection, and ComponentFixture.whenStable may wait longer than before.
  • Route guards and resolvers can return a RedirectCommand, and redirectTo can be a function. Code that reads Route objects 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.
  • 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, and tests that depend on change detection timing may need changes.
  • BrowserModule.withServerTransition() is removed. Set the APP_ID token.
  • The Protractor builder is removed from the CLI.

A short upgrade approach

  1. Update to the latest 17.3.x patch, confirm that the build and the tests pass, and commit.
  2. Run ng update @angular/core@18 @angular/cli@18, then ng update @angular/material@18.
  3. Fix the tests that fail because of the change detection timing changes.
  4. Replace Protractor e2e tests before the step to v19.
  5. Update third-party libraries, fix deprecations, run the tests and release.
  6. 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

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