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.
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,computedandeffectarrived in@angular/core, withtoSignal,toObservableandtakeUntilDestroyedin@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, andng 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/zonemust becomezone.jsandzone.js/testing. - Router options such as
urlUpdateStrategyare set throughprovideRouterorRouterModule.forRoot. NgSwitchcompares with===.- Code that used
mutateon a signal must useupdate.
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. - In server-side rendering,
platformDynamicServeris replaced byplatformServerandServerTransferStateModuleis removed. - Angular Material 16 is no longer an option, so legacy components must be migrated by then.
A short upgrade approach
- Update to the latest 16.2.x patch, confirm that the build and the tests pass, and commit.
- Move local machines and CI to Node.js 18.13 or later.
- Run
ng update @angular/core@17 @angular/cli@17, thenng update @angular/material@17. - Keep the existing webpack-based builder for now. The move to the esbuild-based application builder is a separate change with its own testing.
- Update third-party libraries, fix deprecations, run the tests and release.
- 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
- Angular 17: end of life and how to upgrade
- 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
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