Angular Modernization

Transform legacy Angular code to modern patterns with CLI migrations

✨ The solution you've been looking for

Verified
Tested and verified by our team
11848 Stars

Modernizes Angular code such as components and directives to follow best practices using both automatic CLI migrations and Bitwarden-specific patterns. YOU must use this skill when someone requests modernizing Angular code. DO NOT invoke for general Angular discussions unrelated to modernization.

angular modernization migration signals standalone cli bitwarden typescript
Repository

See It In Action

Interactive preview & real-world examples

Live Demo
Skill Demo Animation

AI Conversation Simulator

See how users interact with this skill

User Prompt

I have this old Angular component that uses @Input() decorators and constructor injection. Can you modernize it to use signals and the inject() function?

Skill Processing

Analyzing request...

Agent Response

Automated CLI migrations applied followed by Bitwarden-specific patterns like OnPush change detection and proper visibility modifiers

Quick Start (3 Steps)

Get up and running in minutes

1

Install

claude-code skill install angular-modernization

claude-code skill install angular-modernization
2

Config

3

First Trigger

@angular-modernization help

Commands

CommandDescriptionRequired Args
@angular-modernization legacy-component-migrationTransform an NgModule-based component to standalone architecture with modern signalsNone
@angular-modernization control-flow-modernizationUpdate templates from structural directives to new Angular control flow syntaxNone
@angular-modernization enterprise-pattern-complianceApply Bitwarden-specific architectural patterns and ADR complianceNone

Typical Use Cases

Legacy Component Migration

Transform an NgModule-based component to standalone architecture with modern signals

Control Flow Modernization

Update templates from structural directives to new Angular control flow syntax

Enterprise Pattern Compliance

Apply Bitwarden-specific architectural patterns and ADR compliance

Overview

Angular Modernization

Transforms legacy Angular components to modern architecture using a two-step approach:

  1. Automated migrations - Angular CLI schematics for standalone, control flow, and signals
  2. Bitwarden patterns - ADR compliance, OnPush change detection, proper visibility, thin components

Workflow

Step 1: Run Angular CLI Migrations

⚠️ CRITICAL: ALWAYS use Angular CLI migrations when available. DO NOT manually migrate features that have CLI schematics.

Angular provides automated schematics that handle edge cases, update tests, and ensure correctness. Manual migration should ONLY be used for patterns not covered by CLI tools.

IMPORTANT:

  • Always run the commands using npx ng.
  • All the commands must be run on directories and NOT files. Use the --path option to target directories.
  • Run migrations in order (some depend on others)

1. Standalone Components

1npx ng generate @angular/core:standalone --path=<directory> --mode=convert-to-standalone

NgModule-based → standalone architecture

2. Control Flow Syntax

1npx ng generate @angular/core:control-flow

*ngIf, *ngFor, *ngSwitch@if, @for, @switch

3. Signal Inputs

1npx ng generate @angular/core:signal-input-migration

@Input() → signal inputs

4. Signal Outputs

1npx ng generate @angular/core:output-migration

@Output() → signal outputs

5. Signal Queries

1npx ng generate @angular/core:signal-queries-migration

@ViewChild, @ContentChild, etc. → signal queries

6. inject() Function

1npx ng generate @angular/core:inject-migration

Constructor injection → inject() function

7. Self-Closing Tag

1npx ng generate @angular/core:self-closing-tag

Updates templates to self-closing syntax

8. Unused Imports

1npx ng generate @angular/core:unused-imports

Removes unused imports

Step 2: Apply Bitwarden Patterns

See migration-patterns.md for detailed examples.

  1. Add OnPush change detection
  2. Apply visibility modifiers (protected for template access, private for internal)
  3. Convert local component state to signals
  4. Keep service observables (don’t convert to signals)
  5. Extract business logic to services
  6. Organize class members correctly
  7. Update tests for standalone

Step 3: Validate

  • Fix linting and formatting using npm run lint:fix
  • Run tests using npm run test

If any errors occur, fix them accordingly.

Key Decisions

Signals vs Observables

  • Signals - Component-local state only (ADR-0027)
  • Observables - Service state and cross-component communication (ADR-0003)
  • Use toSignal() to bridge observables into signal-based components

Visibility

  • protected - Template-accessible members
  • private - Internal implementation

Other Rules

  • Always add OnPush change detection
  • No TypeScript enums (use const objects with type aliases per ADR-0025)
  • No code regions (refactor instead)
  • Thin components (business logic in services)

Validation Checklist

Before completing migration:

  • OnPush change detection added
  • Visibility modifiers applied (protected/private)
  • Signals for component state, observables for service state
  • Class members organized (see migration-patterns.md)
  • Tests updated and passing
  • No new TypeScript enums
  • No code regions

References

Bitwarden ADRs

Angular Resources

What Users Are Saying

Real feedback from the community

Environment Matrix

Dependencies

Angular CLI (ng command)
Node.js with npm/npx
@angular/core schematics

Framework Support

Angular 15+ ✓ (recommended) Angular CLI schematics ✓

Context Window

Token Usage ~5K-15K tokens for complex component migrations

Security & Privacy

Information

Author
bitwarden
Updated
2026-01-30
Category
automation-tools