Carlos Cifuentes
Angular versions · v16

Angular 16: end of life and how to upgrade

Angular 16 brought Signals in developer preview, non-destructive hydration and the removal of ngcc. It has been unsupported since November 2024.

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

Release and support dates

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

What Angular 16 introduced

  • Signals in developer preview. signal, computed and effect arrived in @angular/core, with toSignal, toObservable and takeUntilDestroyed in @angular/core/rxjs-interop.
  • Non-destructive hydration in developer preview for server-side rendered apps, enabled with provideClientHydration().
  • Standalone tooling. A migration schematic, ng generate @angular/core:standalone, and ng new --standalone.
  • The esbuild-based build system in developer preview, with Vite as the development server.
  • Experimental Jest support for unit tests.
  • Required inputs with @Input({ required: true }), and route data bound to component inputs.
  • DestroyRef, self-closing tags in templates and a CSP nonce for inline styles.
  • TypeScript 5.0 support, and the removal of ngcc.

What needs attention when you upgrade

From 16 to 17:

  • Node.js 18.13 or later, TypeScript 5.2 or later and Zone.js 0.14 or later are required.
  • The legacy Angular Material components are not part of Material 17. Angular 17 can run with Material 16 as a temporary option that ends with v18.
  • Zone.js deep imports such as zone.js/dist/zone must become zone.js and zone.js/testing.
  • Router options such as urlUpdateStrategy are set through provideRouter or RouterModule.forRoot.
  • NgSwitch compares with ===.
  • Code that used mutate on a signal must use update.

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.
  • In server-side rendering, platformDynamicServer is replaced by platformServer and ServerTransferStateModule is removed.
  • Angular Material 16 is no longer an option, so legacy components must be migrated by then.

A short upgrade approach

  1. Update to the latest 16.2.x patch, confirm that the build and the tests pass, and commit.
  2. Move local machines and CI to Node.js 18.13 or later.
  3. Run ng update @angular/core@17 @angular/cli@17, then ng update @angular/material@17.
  4. Keep the existing webpack-based builder for now. The move to the esbuild-based application builder is a separate change with its own testing.
  5. Update third-party libraries, fix deprecations, run the tests and release.
  6. Repeat for the next major. The next stop is Angular 17.

When it is worth getting help

From v16 on, much of the work listed in the official update guide concerns tests and tooling. Help is worth it if the unit tests rely on change detection timing, if the app uses server-side rendering with Angular Universal, or if the team wants a plan for adopting Signals, standalone components and the new build system in the right order. The plan 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