9.0 - Angular 21 & Playwright
Summary
Major upgrade of the Angular Starter project from Angular 20 to Angular 21, along with a full modernization of the development tooling stack.
Angular 21 Migration
- Upgraded all
@angular/*core packages, CLI, and Material to v21 - Bumped TypeScript to
5.9.3(required by Angular 21) - Updated
@angular-eslintschematics and plugins to v21
Storybook v10
- Upgraded Storybook from v8 to v10.2.10
- Removed obsolete v8 addon packages (
@storybook/addon-essentials,@storybook/blocks, etc.) that are no longer needed in v10 - Aligned
@storybook/angularandeslint-plugin-storybookto v10
Cypress → Playwright Migration
- Removed Cypress and
@cypress/schematicentirely - Added
@playwright/testwith Chromium, Firefox, and WebKit browser support - Created playwright.config.ts with auto-start of the Angular dev server
- Migrated E2E test to Playwright syntax (tests/app.spec.ts)
npm run e2enow runs Playwright across all 3 browser engines ✅
DevDependencies Upgraded to Latest
- ESLint → v10 (with
@eslint/jsand@eslint/eslintrcas explicit deps) - Jest → v30, jest-preset-angular → v16
- @commitlint → v20, @babel/core → v7.29, babel-loader → v10
- prettier → v3.8, @types/node → v25, @jsverse/transloco → v8
- tailwindcss & @tailwindcss/postcss → v4.2
Dependency Resolution
- Added .npmrc with
legacy-peer-deps=trueto handle ESLint v10 peer dependency conflicts with@angular-eslint(which hasn't updated its peer range yet) - Added
overridesin package.json for@typescript-eslint/*TypeScript version compatibility - Added
transformIgnorePatternsto Jest config for@jsverseESM module support - Updated
huskyprepare script from deprecatedhusky installtohusky
Verification
- ✅
npm run build:prod— production build passes - ✅
npm run test:ci— all unit tests pass - ✅
npm run lint— linting passes (ESLint 10) - ✅
npm run e2e— 3/3 Playwright E2E tests pass (Chromium, Firefox, WebKit)