Skip to content
Back to skills

Angular Upgrade Hops Angular 16 To 17

ASecurity

Upgrade an Angular application from Angular 16.x to Angular 17.x using a controlled major-hop process. Use when the project is ready to move from Angular 16 to Angular 17 and needs explicit handling for changelog baseline review, Node.js/TypeScript/Zone.js requirements, router configuration, hydration, Signals, destroyed component styles, NgSwitch, Zone.js imports, and dynamic component behavior.

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 2, 2026
developmenttypescriptgobashangularnodetestingrefactoringapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 2, 2026

npx -y skills add janpereira-dev/ngAutoPilot --skill angular--upgrade--hops--angular-16-to-17 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Angular Upgrade Hops Angular 16 To 17?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Angular  Upgrade  Hops  Angular 16 To 17
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/janpereira-dev-angular-upgrade-hops-angular-16-to-17/badge)](https://www.skillsdirectory.com/skills/janpereira-dev-angular-upgrade-hops-angular-16-to-17)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
id: angular.upgrade.hops.angular-16-to-17
name: Angular 16 to Angular 17 Upgrade
description: >
  Upgrade an Angular application from Angular 16.x to Angular 17.x using a controlled major-hop process. Use when the project is ready to move from Angular 16 to Angular 17 and needs explicit handling for changelog baseline review, Node.js/TypeScript/Zone.js requirements, router configuration, hydration, Signals, destroyed component styles, NgSwitch, Zone.js imports, and dynamic component behavior.
stack:
  - Angular
  - TypeScript
category: upgrade
status: stable
version: 0.10.0
owner: NgAutoPilot
triggers:
  - Angular 16 to 17
  - Angular 17 upgrade
  - Angular 16 changelog review
  - Zone.js imports
compatibility:
  angular:
    min: "16"
---

# Angular 16 to Angular 17 Upgrade

## Purpose

Upgrade an Angular application from Angular 16.x to Angular 17.x using a controlled major-hop process.

## When to Use

- The project uses Angular 16.x.
- The target next hop is Angular 17.x.
- The Angular 15 -> 16 validation gate passed.
- The Angular 16 changelog risk review passed.
- View Engine and ngcc risks are already resolved.
- Angular Material usage is known.
- Router usage is known.
- Hydration usage is known.
- Signals usage is known.
- Zone.js usage is known.

## When Not to Use

- The project is AngularJS 1.x.
- The project is Angular 15.x or lower.
- The project is already Angular 17 or later.
- The previous Angular 15 -> 16 validation gate failed.
- Angular 16 changelog risk review failed.
- ngcc or View Engine dependency risk remains unresolved.
- The task is only control-flow migration.
- The task is only Signals refactoring.
- The task is only standalone migration.

## Mandatory Cross-Skill Routing

Before upgrading from Angular 16 to Angular 17, run:

`skills/angular/upgrades/changelog/angular-major-changelog-risk-review/SKILL.md`

For Angular 16, prefer stabilizing on the latest allowed Angular 16.2.x patch before moving to Angular 17.

If the changelog review returns `FAIL_BLOCK_NEXT_HOP`, do not continue to Angular 17.

## Recommended Cross-Skill Routing

Run these focused skills when detected:

- `skills/angular/upgrades/router/angular-router-v17-public-api-migration/SKILL.md`
- `skills/angular/upgrades/zone/angular-zonejs-imports-v17-migration/SKILL.md`
- `skills/angular/upgrades/hydration/angular-hydration-v17-risk-gate/SKILL.md`
- `skills/angular/upgrades/signals/angular-signals-mutate-to-update-v17/SKILL.md`
- `skills/angular/upgrades/styles/angular-remove-styles-on-destroy-v17/SKILL.md`
- `skills/angular/upgrades/components/angular-dynamic-component-docheck-v17/SKILL.md`

## Required Inputs

- `package.json`
- lock file
- Angular package versions
- Angular CLI version
- Angular Material version
- Angular CDK version
- TypeScript version
- RxJS version
- Zone.js version
- Node.js version
- `angular.json`
- `tsconfig.json`
- `tsconfig.app.json`
- `tsconfig.spec.json`
- router configuration
- custom `UrlSerializer`
- absolute redirects
- `loadComponent` routes
- child routes of `loadComponent`
- Zone.js imports
- hydration config
- Signals usage
- `NgSwitch` usage
- `REMOVE_STYLES_ON_COMPONENT_DESTROY`
- dynamic component creation
- animation usage
- tests using router navigation
- tests using redirects
- tests using dynamic components
- tests using Zone.js imports
- tests using hydration/SSR
- current build/test/lint/e2e scripts
- production build scripts
- SSR/prerender scripts
- screenshot/golden test scripts

## Dependency Upgrade

### Node.js

Angular 17 supports Node.js 18.13.0 and newer.

Block the upgrade when Node.js is lower than 18.13.0.

### TypeScript

Angular 17 supports TypeScript 5.2 or later.

### Zone.js

Angular 17 supports Zone.js 0.14.x or later.

### Angular Core and CLI

Run:

```bash
ng update @angular/core@17 @angular/cli@17
```

If local CLI is unreliable, use:

```bash
npx @angular/cli@17 update @angular/core@17 @angular/cli@17
```

### Angular Material

If the project uses Angular Material, update to v17 after Angular core and CLI succeed.

```bash
ng update @angular/material@17
```

or:

```bash
npx @angular/cli@17 update @angular/material@17
```

## Required Code Changes

### 1. Zone.js deep imports

Replace deep imports:

```ts
import 'zone.js/dist/zone';
import 'zone.js/bundles/zone-testing.js';
```

with:

```ts
import 'zone.js';
import 'zone.js/testing';
```

### 2. Router public API configuration

Move router configuration to `provideRouter` or `RouterModule.forRoot`.

Do not mutate router internals directly.

### 3. malformedUriErrorHandler migration

Handle URL parsing errors through `UrlSerializer.parse` instead of relying on `malformedUriErrorHandler`.

### 4. Absolute redirect behavior

Review routes with absolute redirects because Angular 17 no longer prevents additional redirects after them.

### 5. loadComponent child route inheritance

Review `loadComponent` child routes and `paramsInheritanceStrategy` when parent data must flow down.

### 6. Dynamic components and ngDoCheck

Review dynamic component creation if `ngDoCheck` side effects are involved.

### 7. Destroyed component styles removal

Review screens that may have relied on styles leaking after component destruction.

### 8. AnimationDriver.NOOP migration

Replace `AnimationDriver.NOOP` with `NoopAnimationDriver`.

### 9. NgSwitch strict equality

Review `NgSwitch` cases because comparison is now strict.

### 10. Signals mutate to update

Replace `mutate(...)` with immutable `update(...)` patterns where Signals are used.

### 11. Hydration API changes

Use supported hydration APIs only.

### 12. Optional modernizations not included

Do not automatically migrate to built-in control flow, deferrable views, standalone architecture, signals refactors, or zoneless experimentation during this hop.

## Do

- Run the Angular 16 changelog risk review before changing package versions.
- Keep changelog baseline, runtime requirements, and router/hydration risk explicit.
- Validate SSR and hydration when used.
- Validate dynamic components, NgSwitch, and style cleanup where present.
- Keep Material/MDC validation explicit if Material is used.

## Do Not

- Do not continue if Angular 16 changelog review failed.
- Do not keep Zone.js deep imports.
- Do not mutate router internals directly.
- Do not ignore absolute redirect loops.
- Do not mix control flow or Signals modernization into the hop.
- Do not rely on leaked component styles as architecture.

## Review Checklist

- [ ] Angular 16 changelog review passed.
- [ ] Node.js, TypeScript, and Zone.js are compatible.
- [ ] Zone.js deep imports are removed.
- [ ] Router configuration is public-API-based.
- [ ] Absolute redirects are reviewed.
- [ ] `loadComponent` inheritance is reviewed.
- [ ] Hydration behavior is validated where used.
- [ ] `NgSwitch` strict equality cases are reviewed.
- [ ] Signals `mutate` usage is removed or documented.
- [ ] Dynamic component behavior is validated.
- [ ] Destroyed component style cleanup is reviewed.
- [ ] Material/MDC regression risk is reviewed.
- [ ] Production build passes.

## Validation

Run only existing scripts:

- `npm run build`
- `npm run test`
- `npm run lint`
- `npm run e2e`
- `ng build --configuration production`
- `npm run build:ssr`
- `npm run prerender`
- `npm run serve:ssr`

## Validation Gate

Use `FAIL_BLOCK_NEXT_HOP` when:

- Angular 16 changelog risk review failed
- Node.js is lower than 18.13.0
- TypeScript version is unsupported
- Zone.js version is unsupported
- build fails
- tests fail
- production build fails
- Angular CLI update is incomplete
- Angular Material update is incomplete in a Material project
- Zone.js deep imports remain
- router internals are still mutated directly
- malformed URI handling is unresolved
- absolute redirect loops are possible or untested
- critical `loadComponent` inheritance is broken
- dynamic component `ngDoCheck` side effects are unresolved
- component style removal breaks critical screens
- `AnimationDriver.NOOP` remains
- critical `NgSwitch` loose equality cases remain
- Signals `mutate` remains
- hydration behavior is unknown in SSR/hydrated apps
- Material/style regressions are unreviewed
- workspace config is unstable

## Expected Output

1. Upgrade summary.
2. Changelog baseline summary.
3. Router and hydration migration summary.
4. Validation result.
5. Gate decision.

## Exit Criteria

- Angular 16 changelog risk review has passed.
- Angular dependencies are upgraded to Angular 17-compatible versions.
- Angular CLI is upgraded to v17.
- Angular Material/CDK are upgraded to v17 only if used.
- Node.js 18.13.0+ compatibility is confirmed.
- TypeScript 5.2+ compatibility is confirmed.
- Zone.js 0.14.x+ compatibility is confirmed.
- Zone.js deep imports are migrated.
- Router configuration does not rely on removed direct mutation patterns.
- Hydration is validated where used.
- NgSwitch strict equality cases are reviewed.
- Signals mutate usage is removed or documented.
- Angular Material and style regressions are reviewed.
- Production build has been validated.
- Validation gate result is explicit.
- The next hop is not started automatically.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…