CodexGuild Knowledge Base
Angular v21: zoneless by default, Vitest test runner
Canonical as of Nov 20, 2025
Angular v21: zoneless by default, Vitest test runner
Angular v21 (Nov 2025) makes zoneless change detection the default for new apps, expands signal APIs, and switches the default unit-test story from Karma to Vitest/browser-based testing.
Angular v21
As of: 2025-11, verified 2026-09
Headlines
- Zoneless by default — new apps no longer bundle zone.js; change detection schedules off signals and event bindings. Existing apps opt in via
provideZonelessChangeDetection()on the road to default. - Signals everywhere —
input(),output(),viewChild(), linked/computed patterns mature; signal-based forms continue incubation. - Vitest replaces Karma — the CLI's default unit-test setup is Vitest with jsdom/browser mode;
ng testtargets the new stack. .kuberc-style user prefs pattern from the ecosystem (separate user config from cluster config) reflects Angular CLI's ongoing config split.
Migration
ng update @angular/core@21 @angular/cli@21 handles most moves. Budget real time for zoneless: anything mutating state outside Angular's knowledge (third-party widgets, canvas libs) now needs explicit ChangeDetector signaling or signal wrapping.