NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3979 most downloaded on npm
Angular - commonly needed directives and services
Last release today
16 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
10 years old
1110 releases · first in 2016
|  | strip namespaced SVG script elements durin
| Commit | Description |
|---|---|
| strip namespaced SVG script elements during template compilation |
| Commit | Description |
|---|---|
| skip scroll-to-top on initial navigation when hydrating |
| Commit | Type | Description |
|---|---|---|
| 68282dff9f | fix | strip namespaced SVG script elements during template compilation |
| Commit | Type | Description |
|---|---|---|
| c0f52272ed | fix | do not insert todo when migrating void @Output |
| 938a7f3edd | fix | makes resource URL sanitizer lookup case-insensitive |
| 0fb2724194 | fix | reject script element as a dynamic component host |
| 49113ac0ef | fix | visit ICU expressions in signal migration schematics |
| Commit | Type | Description |
|---|---|---|
| 099bf577ee | fix | skip scroll-to-top on initial navigation when hydrating |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.13"></a>
One column per quarter.
|  | disallow event attribute bindings in host
| Commit | Type | Description |
|---|---|---|
| 1c6553e97d | fix | disallow event attribute bindings in host bindings unconditionally |
| Commit | Type | Description |
|---|---|---|
| 629905d537 | fix | add allowedHosts option to renderModule and renderApplication |
| 0b7192f441 | fix | forward BEFORE_APP_SERIALIZED errors to ErrorHandler |
<!-- CHANGELOG SPLIT MARKER -->
<a name="19.2.22"></a>
|  | allow explicit read generic with signal in
| Commit | Description |
|---|---|
| prohibit concurrent submits in signal forms |
| Commit | Type | Description |
|---|---|---|
| fe13bb669d | fix | allow explicit read generic with signal input transforms |
| 3430251fef | fix | i18n flags leaking on errors |
| 1aeebbe304 | fix | respect ngSkipHydration on components with projectable nodes in LContainers |
| 9e38ed7d57 | fix | sanitizer typings |
| 7a05a9a71a | fix | validate security-sensitive attributes in i18n bindings |
| c37f6ca42f | fix | visit ng-let expression value in signal migration schematics |
| Commit | Type | Description |
|---|---|---|
| 03ad53863b | fix | prohibit concurrent submits in signal forms |
<!-- CHANGELOG SPLIT MARKER -->
<a name="20.3.20"></a>
|  | prevent focus from scrollToAnchor |
| Commit | Description |
|---|---|
| prevent focus from scrollToAnchor |
| Commit | Description |
|---|---|
| let declaration span not including end character |
| Commit | Description |
|---|---|
| ensure origin has a trailing slash when parsing url |
| Commit | Type | Description |
|---|---|---|
| 10ad3c0692 | fix | prevent focus from scrollToAnchor |
| Commit | Type | Description |
|---|---|---|
| 4f5d8a2c0b | fix | let declaration span not including end character |
| Commit | Type | Description |
|---|---|---|
| a40e2cebc8 | fix | fix ordering of view queries metadata in JIT mode |
| 885a1a1d97 | fix | guard against non-object events and avoid listener wrapper identity mismatch |
| 7a64aff9b5 | fix | prevent event replay double-invocation when element hydrates before app stability |
| Commit | Type | Description |
|---|---|---|
| be1f80a253 | fix | ensure origin has a trailing slash when parsing url |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.10"></a>
|  | link formatting in "Animating your Applica
| Commit | Type | Description |
|---|---|---|
| 0d5ee9ae1b | fix | link formatting in "Animating your Application with CSS" |
| Commit | Type | Description |
|---|---|---|
| 5533ab4f56 | fix | fix NgClass leaving trailing comma after removal |
| Commit | Type | Description |
|---|---|---|
| 580212c995 | fix | restore internal URL on popstate when browserUrl is used |
<!-- CHANGELOG SPLIT MARKER -->
<a name="19.2.21"></a>
|  | escape forward slashes in transfer state t
| Commit | Description |
|---|---|
| escape forward slashes in transfer state to prevent crawler indexing |
| Commit | Description |
|---|---|
| add CSP nonce support to JsonpClientBackend | |
| Don't on Passthru outside of reactive context |
| Commit | Description |
|---|---|
| prevent SSRF bypasses via protocol-relative and backslash URLs |
| Commit | Description |
|---|---|
| normalize multiple leading slashes in URL parser |
| Commit | Type | Description |
|---|---|---|
| f603d4714f | fix | escape forward slashes in transfer state to prevent crawler indexing |
| Commit | Type | Description |
|---|---|---|
| 540536c386 | fix | add CSP nonce support to JsonpClientBackend |
| 63a857b874 | fix | Don't on Passthru outside of reactive context |
| Commit | Type | Description |
|---|---|---|
| e0b5078cf2 | fix | prevent SSRF bypasses via protocol-relative and backslash URLs |
| Commit | Type | Description |
|---|---|---|
| 684e9fd53d | fix | normalize multiple leading slashes in URL parser |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.8"></a>
|  | handle nested brackets in host object bind
| Commit | Description |
|---|---|
| handle nested brackets in host object bindings |
| Commit | Description |
|---|---|
| error for type parameter declarations |
| Commit | Description |
|---|---|
| handle missing serialized container hydration data | |
| remove obsolete iOS cursor pointer hack in event delegation |
| Commit | Description |
|---|---|
| get quick info at local var location to align with TS semantics and support type narrowing |
| Commit | Type | Description |
|---|---|---|
| e40d378f3e | fix | handle nested brackets in host object bindings |
| Commit | Type | Description |
|---|---|---|
| 2c6781071f | fix | error for type parameter declarations |
| Commit | Type | Description |
|---|---|---|
| 82192deda9 | fix | handle missing serialized container hydration data |
| 057cc6d09d | fix | remove obsolete iOS cursor pointer hack in event delegation |
| Commit | Type | Description |
|---|---|---|
| 7797671257 | fix | get quick info at local var location to align with TS semantics and support type narrowing |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.7"></a>
|  | register SVG animation attributes in URL s
| Commit | Description |
|---|---|
| register SVG animation attributes in URL security context (#67797) |
| Commit | Description |
|---|---|
| prevent recursive scope checks for invalid NgModule imports |
| Commit | Description |
|---|---|
| validate locale in getOutputPathFn to prevent path traversal |
| Commit | Description |
|---|---|
| pass outlet context to split to fix empty path named outlets |
| Commit | Type | Description |
|---|---|---|
| fea25d1a60 | fix | register SVG animation attributes in URL security context (#67797) |
| Commit | Type | Description |
|---|---|---|
| bba5ed8e64 | fix | prevent recursive scope checks for invalid NgModule imports |
| Commit | Type | Description |
|---|---|---|
| d04ddd73df | fix | prevent binding unsafe attributes on SVG animation elements (#67797) |
| 8fd896e99a | fix | resolve component import by exact specifier in route lazy-loading schematic |
| b682c62873 | fix | treat object[data] as resource URL context (#67797) |
| Commit | Type | Description |
|---|---|---|
| 3c41e74fdd | fix | validate locale in getOutputPathFn to prevent path traversal |
| Commit | Type | Description |
|---|---|---|
| 0960592d3d | fix | pass outlet context to split to fix empty path named outlets |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.6"></a>
|  | avoid redundant image fetch on destroy wit
| Commit | Description |
|---|---|
| avoid redundant image fetch on destroy with auto sizes |
| Commit | Description |
|---|---|
| prevent shimCssText from adding extra blank lines per CSS comment |
| Commit | Description |
|---|---|
| fixes a regression with animate.leave and reordering |
| Commit | Description |
|---|---|
| inject migration not work in multi-project workspace with option path |
| Commit | Type | Description |
|---|---|---|
| b4ab6ba2e8 | fix | avoid redundant image fetch on destroy with auto sizes |
| Commit | Type | Description |
|---|---|---|
| 880a57d4b3 | fix | prevent shimCssText from adding extra blank lines per CSS comment |
| Commit | Type | Description |
|---|---|---|
| ad0156e056 | fix | fixes a regression with animate.leave and reordering |
| Commit | Type | Description |
|---|---|---|
| 73d6b01b47 | fix | inject migration not work in multi-project workspace with option path |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.5"></a>
|  | ensure generated code compiles |
| Commit | Description |
|---|---|
| ensure generated code compiles | |
| parse named HTML entities containing digits |
| Commit | Description |
|---|---|
| escape template literal in TCB | |
| generic types not filled out correctly in type check block |
| Commit | Description |
|---|---|
| clean up dehydrated views during HMR component replacement | |
| run linked signal equality check without reactive consumer |
| Commit | Description |
|---|---|
| prevent trailing comma syntax errors after removing NgStyle |
| Commit | Description |
|---|---|
| preserve redirect policy on reconstructed asset requests |
| Commit | Type | Description |
|---|---|---|
| 334ae10168 | fix | ensure generated code compiles |
| 23ea431c4e | fix | parse named HTML entities containing digits |
| Commit | Type | Description |
|---|---|---|
| 26c43d14ba | fix | escape template literal in TCB |
| 67e0ba7e03 | fix | generic types not filled out correctly in type check block |
| Commit | Type | Description |
|---|---|---|
| 1890c3008b | fix | clean up dehydrated views during HMR component replacement |
| bf948be4c2 | fix | run linked signal equality check without reactive consumer |
| Commit | Type | Description |
|---|---|---|
| 076d41c3f6 | fix | prevent trailing comma syntax errors after removing NgStyle |
| Commit | Type | Description |
|---|---|---|
| e19150d2b5 | fix | preserve redirect policy on reconstructed asset requests |
<!-- CHANGELOG SPLIT MARKER -->
<a name="19.2.20"></a>
|  | disallow translations of iframe src |
| Commit | Type | Description |
|---|---|---|
| ed2d324f9c | fix | disallow translations of iframe src |
| Commit | Type | Description |
|---|---|---|
| abbd8797bb | fix | reverts "feat(core): add support for nested animations" |
| d1dcd16c5b | fix | sanitize translated form attributes |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.3"></a>
|  | ensure definitions compile |
| Commit | Type | Description |
|---|---|---|
| 62a97f7e4b | fix | ensure definitions compile |
| 21b1c3b2ee | fix | include signal debug names in their toString() representation |
| 224e60ecb1 | fix | sanitize translated attribute bindings with interpolations |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.2"></a>
|  | prevent mutation of children array in Recu
| Commit | Type | Description |
|---|---|---|
| 1df1697c6e | fix | prevent mutation of children array in RecursiveVisitor |
| Commit | Type | Description |
|---|---|---|
| c822bf8e76 | fix | always parenthesize object literals in TCB |
| 05d022d5e6 | fix | ignore generated ngDevMode signal branch for code coverage |
| Commit | Type | Description |
|---|---|---|
| 670d1660c4 | feat | add 'blur' option to debounce rule |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.1"></a>
|  | adds transfer cache to httpResource to fix
| Commit | Type | Description |
|---|---|---|
| e2e9a9a531 | fix | adds transfer cache to httpResource to fix hydration |
| b4ec3cc4e4 | fix | prevent child animation elements from being orphaned |
| e923d88398 | fix | Prevent removal of elements during drag and drop |
| Commit | Type | Description |
|---|---|---|
| 277ade97ac | fix | correctly cache blob responses in transfer cache (#67002) |
<!-- CHANGELOG SPLIT MARKER -->
<a name="19.2.19"></a>
|  | add an 'outlet' injector option for ngTem
| Commit | Description |
|---|---|
| add an 'outlet' injector option for ngTemplateOutlet | |
| Add Location strategies to manage trailing slash on write | |
| support height in ImageLoaderConfig and built-in loaders |
| Commit | Description |
|---|---|
| attach source spans to object literal keys in TCB | |
| support nested component declaration | |
| update diagnostic to flag no-op arrow functions in listeners |
| Commit | Description |
|---|---|
| add JSON schema for angularCompilerOptions | |
| add linked editing ranges for HTML tag synchronization | |
| use lightweight project warmup for Angular analysis |
| Commit | Description |
|---|---|
Add partial ActivatedRouteSnapshot information to canMatch params |
|
| Make match options optional in isActive | |
Update IsActiveMatchOptions APIs to accept a Partial |
| Commit | Type | Description |
|---|---|---|
| 18003a33bb | feat | add an 'outlet' injector option for ngTemplateOutlet |
| 8bbe6dc46c | feat | Add Location strategies to manage trailing slash on write |
| 51cc914807 | feat | support height in ImageLoaderConfig and built-in loaders |
| Commit | Type | Description |
|---|---|---|
| 72534e2a34 | feat | Add support for the instanceof binary operator |
| 95b3f37d4a | feat | Exhaustive checks for switch blocks |
| 04ba09a8d9 | feat | support AstVisitor.visitEmptyExpr() |
| ce80136e7b | fix | optimize away unnecessary restore/reset view calls |
| 3242a61bae | fix | variable counter visiting some expressions twice |
| Commit | Type | Description |
|---|---|---|
| 473dd3e1cb | fix | attach source spans to object literal keys in TCB |
| a904d9f77b | fix | support nested component declaration |
| 2ea6dfc6c9 | fix | update diagnostic to flag no-op arrow functions in listeners |
| Commit | Type | Description |
|---|---|---|
| 8d5210c9fe | feat | add ChangeDetectionStrategy.Eager alias for Default |
| 92d2498910 | feat | add host node to DeferBlockData (#66546) |
| ea2016a6dc | feat | add support for nested animations |
| 81cabc1477 | feat | add support for TypeScript 6 |
| 1ba9b7ac50 | feat | resource composition via snapshots |
| d9923b72a2 | feat | support arrow functions in expressions |
| a7e8abbb7e | fix | correctly handle SkipSelf when resolving from embedded view injector |
| 0806ee3826 | fix | prevent animated element duplication with dynamic components in zoneless mode |
| ed78fa05c7 | fix | Remove note to skip arrow functions in best practices |
| Commit | Type | Description |
|---|---|---|
| f56bb07d83 | feat | add field param to submit action and onInvalid |
| ba009b6031 | feat | add form directive |
| 22afbb2f36 | feat | add parsing support to native inputs (#66917) |
| 95c386469c | feat | Add passing focus options to form field |
| 95ecce8334 | feat | allow setting submit options at form-level |
| ebae211add | feat | introduce parse errors in signal forms |
| 3937afc316 | feat | introduce SignalFormControl for Reactive Forms compatibility |
| 30f0914754 | feat | support binding null to number input (#66917) |
| dd208ca259 | feat | update submit function to accept options object |
| 27397b3f4f | fix | clear parse errors when model updates (#66917) |
| 63d8005703 | fix | preserve custom-control focus context in signal forms |
| 631f60d1f9 | fix | preserve parse errors when parse returns value |
| adfb83146b | fix | simplify design of parse errors |
| fb05fc86d0 | fix | sort error summary by DOM order |
| 567f292e8e | fix | support custom controls as host directives |
| bdfb60f3e3 | fix | use consistent error format returned from parse |
| d75046bc09 | fix | warn when showing hidden field state |
| Commit | Type | Description |
|---|---|---|
| ebc90c26f5 | feat | Add completions and hover info for inline styles |
| 26fd0839c3 | feat | Add folding range support for inline styles |
| 573aadef7e | feat | Add quick info for inline styles |
| 6fb39d9b62 | feat | Support client-side file watching via onDidChangeWatchedFiles |
| Commit | Type | Description |
|---|---|---|
| 496967e7b1 | feat | add JSON schema for angularCompilerOptions |
| 8c21866f49 | feat | add linked editing ranges for HTML tag synchronization |
| d2137928e8 | perf | use lightweight project warmup for Angular analysis |
| Commit | Type | Description |
|---|---|---|
| b51bab583d | feat | Add partial ActivatedRouteSnapshot information to canMatch params |
| cf9620f7d0 | feat | Make match options optional in isActive |
| 907a94dcec | feat | Update IsActiveMatchOptions APIs to accept a Partial |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.1.6"></a>
|  | Exhaustive checks for switch blocks |
| Commit | Description |
|---|---|
| Exhaustive checks for switch blocks |
| Commit | Description |
|---|---|
| add support for TypeScript 6 | |
| prevent animated element duplication with dynamic components in zoneless mode |
|  | add an 'outlet' injector option for ngTem
| Commit | Description |
|---|---|
| add an 'outlet' injector option for ngTemplateOutlet | |
| support height in ImageLoaderConfig and built-in loaders |
| Commit | Description |
|---|---|
| add geolocation element to schema |
| Commit | Description |
|---|---|
| update diagnostic to flag no-op arrow functions in listeners |
| Commit | Description |
|---|---|
| add field param to submit action and onInvalid | |
| add form directive | |
| support signal-based schemas in validateStandardSchema | |
| simplify design of parse errors |
| Commit | Description |
|---|---|
| correctly parse ArrayBuffer and Blob in transfer cache |
|  | add ChangeDetectionStrategy.Eager alias f
| Commit | Description |
|---|---|
| add JSON schema for angularCompilerOptions | |
| add linked editing ranges for HTML tag synchronization |
| Commit | Description |
|---|---|
| add support for unit-test builder in ng-add schematic |
|  | Add Location strategies to manage trailin
| Commit | Description |
|---|---|
| Add Location strategies to manage trailing slash on write |
| Commit | Description |
|---|---|
| introduce parse errors in signal forms | |
| only touch visible, interactive fields on submit | |
| sort error summary by DOM order |
| Commit | Description |
|---|---|
Support client-side file watching via onDidChangeWatchedFiles |
| Commit | Description |
|---|---|
| Detect local project version on creation |
| Commit | Description |
|---|---|
Add partial ActivatedRouteSnapshot information to canMatch params |
|
| Do not intercept reload events with Navigation integration |
|  | Add support for the instanceof binary ope
| Commit | Description |
|---|---|
| attach source spans to object literal keys in TCB | |
| support nested component declaration |
| Commit | Description |
|---|---|
| add host node to DeferBlockData (#66546) | |
| resource composition via snapshots | |
| support arrow functions in expressions | |
| Remove note to skip arrow functions in best practices |
| Commit | Description |
|---|---|
| Add passing focus options to form field |
| Commit | Description |
|---|---|
| Add completions and hover info for inline styles | |
| Add folding range support for inline styles | |
| Add quick info for inline styles |
|  | fix LCP image detection with duplicate URL
| Commit | Description |
|---|---|
| fix LCP image detection with duplicate URLs |
| Commit | Description |
|---|---|
| detect uninvoked functions in defer trigger expressions |
| Commit | Description |
|---|---|
| block creation of sensitive URI attributes from ICU messages |
Angular now only applies known attributes from HTML in translated ICU content. Unknown attributes are dropped and not rendered.
(cherry picked from commit 306f367899dfc2e04238fecd3455547b5d54075d)
Angular now only applies known attributes from HTML in translated ICU content. Unknown attributes are dropped and not rendered.
(cherry picked from commit 306f367899dfc2e04238fecd3455547b5d54075d)
| Commit | Type | Description |
|---|---|---|
| 31d3d56496 | fix | fix LCP image detection with duplicate URLs |
| Commit | Type | Description |
|---|---|---|
| 24b578ce90 | fix | detect uninvoked functions in defer trigger expressions |
| Commit | Type | Description |
|---|---|---|
| b858309532 | fix | block creation of sensitive URI attributes from ICU messages |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.1.5"></a>
No user facing changes in this release
No user facing changes in this release
|  | add geolocation element to schema |
| Commit | Description |
|---|---|
| add geolocation element to schema |
| Commit | Description |
|---|---|
| capture animation dependencies eagerly to avoid destroyed injector | |
| Fix flakey test due to document injection |
| Commit | Description |
|---|---|
| support signal-based schemas in validateStandardSchema |
| Commit | Description |
|---|---|
| correctly parse ArrayBuffer and Blob in transfer cache |
| Commit | Type | Description |
|---|---|---|
| caab23dfe6 | fix | add geolocation element to schema |
| Commit | Type | Description |
|---|---|---|
| 2b99eaa019 | fix | capture animation dependencies eagerly to avoid destroyed injector |
| d6aeac504c | fix | Fix flakey test due to document injection |
| Commit | Type | Description |
|---|---|---|
| 0d1acd0165 | feat | support signal-based schemas in validateStandardSchema |
| Commit | Type | Description |
|---|---|---|
| 3905015ccc | fix | correctly parse ArrayBuffer and Blob in transfer cache |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.1.3"></a>
|  | linkedSignal.update should propagate error
| Commit | Description |
|---|---|
linkedSignal.update should propagate errors |
|
| export DirectiveWithBindings | |
| hold constructors weakly in DepsTracker cache | |
| prevent element duplication with dynamic components |
| Commit | Description |
|---|---|
| Resolves debounce promise on abort in debounceForDuration |
| Commit | Description |
|---|---|
| add support for unit-test builder in ng-add schematic |
| Commit | Description |
|---|---|
| limit UrlParser recursion depth to prevent stack overflow | |
| Use .bind to avoid holding other closures in memory |
| Commit | Type | Description |
|---|---|---|
| 2b254bc050 | fix | linkedSignal.update should propagate errors |
| e5110b4fa1 | fix | export DirectiveWithBindings |
| 2cf4da0ea1 | fix | hold constructors weakly in DepsTracker cache |
| 70a5b651be | fix | prevent element duplication with dynamic components |
| Commit | Type | Description |
|---|---|---|
| 6f75b6e3f6 | fix | Resolves debounce promise on abort in debounceForDuration |
| Commit | Type | Description |
|---|---|---|
| 4c7126d23b | fix | add support for unit-test builder in ng-add schematic |
| Commit | Type | Description |
|---|---|---|
| d6268c0bbb | fix | limit UrlParser recursion depth to prevent stack overflow |
| 49a36f4cc7 | perf | Use .bind to avoid holding other closures in memory |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.1.2"></a>
|  | only touch visible, interactive fields on
| Commit | Type | Description |
|---|---|---|
| 9f99b14882 | fix | only touch visible, interactive fields on submit |
| Commit | Type | Description |
|---|---|---|
| c57b0355b5 | fix | Detect local project version on creation |
| Commit | Type | Description |
|---|---|---|
| 21ecdc036a | fix | Do not intercept reload events with Navigation integration |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.1.1"></a>
|  | drop .tsx extension for generated relative
| Commit | Type | Description |
|---|---|---|
| 0e1f1ed573 | fix | drop .tsx extension for generated relative imports |
| Commit | Type | Description |
|---|---|---|
| 05adfcf8f2 | fix | handle Set in class bindings |
| Commit | Type | Description |
|---|---|---|
| d89a80a970 | feat | Ability to manually register a form field binding in signal forms |
| cb75f9ce85 | fix | fix control value syncing on touch |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.1.0"></a>
|  | deprecate VERSION export |
| Commit | Description |
|---|---|
| Add custom transformations for Cloudflare and Cloudinary image loaders | |
| support custom transformations in ImageKit and Imgix loaders |
| Commit | Description |
|---|---|
| Add support for multiple swich cases matching | |
| Support empty cases |
| Commit | Description |
|---|---|
| allow focusing bound control from field state |
| Commit | Description |
|---|---|
add context to createApplication |
|
resolve JIT resources in createApplication |
| Commit | Description |
|---|---|
deprecate VERSION export |
VERSION from @angular/upgrade is deprecated. Please use the entry from @angular/upgrade/static instead.VERSION from @angular/upgrade is deprecated. Please use the entry from @angular/upgrade/static instead.| Commit | Type | Description |
|---|---|---|
| d8790972be | feat | Add custom transformations for Cloudflare and Cloudinary image loaders |
| a6b8cb68af | feat | support custom transformations in ImageKit and Imgix loaders |
| Commit | Type | Description |
|---|---|---|
| 640693da8e | feat | Add support for multiple swich cases matching |
| 0ad3adc7c6 | fix | Support empty cases |
| Commit | Type | Description |
|---|---|---|
| 99ad18a4ee | feat | Add stability debugging utility |
| a0dfa5fa86 | feat | support rest arguments in function calls |
| 6e18fa8bc9 | feat | support spread elements in array literals |
| e407280ab5 | feat | support spread expressions in object literals |
| 06be8034bb | fix | Microtask scheduling should be used after any application synchronization |
| b4f584cf42 | fix | return StaticProvider for providePlatformInitializer |
| Commit | Type | Description |
|---|---|---|
| 1ea5c97703 | feat | allow focusing bound control from field state |
| Commit | Type | Description |
|---|---|---|
| ec9dc94cee | feat | add context to createApplication |
| ab67988d2e | feat | resolve JIT resources in createApplication |
| Commit | Type | Description |
|---|---|---|
| 5edceffd04 | feat | add controls for route cleanup |
| a03c82564d | feat | Add scroll behavior controls on router navigation |
| e44839b016 | feat | Add standalone function to create a comptued for isActive |
| c25d749d85 | feat | Execute RunGuardsAndResolvers function in injection context |
| 1c00ab42f8 | feat | extend paramters of RedirectFunction to include paramMap and queryParamMap |
| 7003e8d241 | feat | Publish Router's integration with platform Navigation API as experimental |
| c84d372778 | feat | Support wildcard params with segments trailing (#64737) |
| Commit | Type | Description |
|---|---|---|
| 75fe8f8af9 | refactor | deprecate VERSION export |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.0.9"></a>
|  | Add custom transformations for Cloudflare
| Commit | Description |
|---|---|
| Add custom transformations for Cloudflare and Cloudinary image loaders | |
| support custom transformations in ImageKit and Imgix loaders |
| Commit | Description |
|---|---|
ensure component import diagnostics are reported within the imports expression |
|
| fix up spelling of diagnostic | |
support qualified names in typeof type references |
|  | Microtask scheduling should be used after
| Commit | Description |
|---|---|
| pass field directive to class config | |
| rename field to fieldTree in FieldContext and ValidationError |
| Commit | Description |
|---|---|
| avoid interpolation highlighting inside @let | |
| Prevent language service from crashing on suggestion diagnostic errors |
The shape of SignalFormsConfig.classes has changed
Previously each function in the classes map took a FieldState. Now
it takes a Field directive.
For example if you previously had:
provideSignalFormsConfig({
classes: {
'my-valid': (state) => state.valid()
}
})
You would need to update to:
provideSignalFormsConfig({
classes: {
'my-valid': ({state}) => state().valid()
}
})
…| avoid false-positive deprecation when using InjectionToken with factory only |
|  | deprecate VERSION export |
| Commit | Description |
|---|---|
| chain query creation instructions |
| Commit | Description |
|---|---|
| expand type for native controls with a dynamic type |
| Commit | Description |
|---|---|
deprecate VERSION export |
VERSION from @angular/upgrade is deprecated. Please use the entry from @angular/upgrade/static instead.|  | prevent XSS via SVG animation attributeNam
| Commit | Description |
|---|---|
prevent XSS via SVG animation attributeName and MathML/SVG URLs |
| Commit | Description |
|---|---|
| avoid allocating an object for signals in production mode | |
| check that field radio button values are strings |
| Commit | Description |
|---|---|
Allows transforms on FormUiControl signals |
|
support dynamic [field] bindings (#65599) |
| Commit | Description |
|---|---|
| enable XSRF protection for same-origin absolute URLs |
| Commit | Description |
|---|---|
| handle errors from view transition finished promise |
|  | add context to createApplication |
| Commit | Description |
|---|---|
add context to createApplication |
|
resolve JIT resources in createApplication |
| Commit | Description |
|---|---|
| Add scroll behavior controls on router navigation | |
| Execute RunGuardsAndResolvers function in injection context | |
| Support wildcard params with segments trailing (#64737) |
|  | Ensure the control instruction comes after
| Commit | Type | Description |
|---|---|---|
| 82d556a8fb | fix | Ensure the control instruction comes after the other bindings |
| 0055f3cc79 | fix | Rename signal form [field] to [formField] |
| Commit | Type | Description |
|---|---|---|
| e4bfa5c9e7 | fix | prevent duplicate imports in common-to-standalone migration |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.0.8"></a>
|  | fix memory leak with event replay |
| Commit | Type | Description |
|---|---|---|
| a6a2621bf9 | fix | fix memory leak with event replay |
| 5239e471a1 | fix | handle cancelled traversals in fake navigation |
<!-- CHANGELOG SPLIT MARKER -->
<a name="20.3.16"></a>
|  | better types for a few expression AST node
| Commit | Description |
|---|---|
ensure component import diagnostics are reported within the imports expression |
|
| fix up spelling of diagnostic | |
support qualified names in typeof type references |
| Commit | Description |
|---|---|
| avoid leaking view data in animations | |
| explicitly cast signal node value to String | |
| sanitize sensitive attributes on SVG script elements |
| Commit | Description |
|---|---|
Fix RouterLink href not updating with queryParamsHandling |
|
handle errors from view transition updateCallbackDone promise |
| Commit | Type | Description |
|---|---|---|
| 8e808740c9 | fix | better types for a few expression AST nodes |
| 63b1cdcf70 | fix | produce accurate span for typeof and void expressions |
| 3c3ae0cb64 | fix | provide location information for literal map keys |
| 523dbaf1c3 | fix | stop ThisReceiver inheritance from ImplicitReceiver |
| Commit | Type | Description |
|---|---|---|
| 4d9c4567ed | fix | ensure component import diagnostics are reported within the imports expression |
| cd405685af | fix | fix up spelling of diagnostic |
| 778460fcca | fix | support qualified names in typeof type references |
| Commit | Type | Description |
|---|---|---|
| 7c74674eb0 | fix | avoid leaking view data in animations |
| 0edbee4550 | fix | explicitly cast signal node value to String |
| f9c29572d2 | fix | sanitize sensitive attributes on SVG script elements |
| Commit | Type | Description |
|---|---|---|
| e3fba182f9 | feat | add [formField] directive |
| 561772b152 | fix | allow custom controls to require dirty input |
| f0fb1d8581 | fix | allow custom controls to require hidden input |
| ec110f170b | fix | allow custom controls to require pending input |
| ae1dc16bb0 | fix | clean up abort listener after timeout |
| 9748b0d5da | fix | support custom controls with non signal-based models |
| 6bd22df987 | fix | Support readonly arrays in signal forms |
| Commit | Type | Description |
|---|---|---|
| 41cd4a6af8 | fix | Fix RouterLink href not updating with queryParamsHandling |
| 5e9e09aee0 | fix | handle errors from view transition updateCallbackDone promise |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.0.6"></a>
|  | throw better errors for potential circular
| Commit | Description |
|---|---|
| throw better errors for potential circular references | |
| use mutable ResponseInit type for RESPONSE_INIT token |
| Commit | Description |
|---|---|
| pass field directive to class config | |
| rename field to fieldTree in FieldContext and ValidationError |
| Commit | Description |
|---|---|
| avoid interpolation highlighting inside @let | |
| Prevent language service from crashing on suggestion diagnostic errors |
The shape of SignalFormsConfig.classes has changed
Previously each function in the classes map took a FieldState. Now
it takes a Field directive.
For example if you previously had:
provideSignalFormsConfig({
classes: {
'my-valid': (state) => state.valid()
}
})
You would need to update to:
provideSignalFormsConfig({
classes: {
'my-valid': ({state}) => state().valid()
}
})
(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)
(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)
The shape of SignalFormsConfig.classes has changed
Previously each function in the classes map took a FieldState. Now
it takes a Field directive.
For example if you previously had:
provideSignalFormsConfig({
classes: {
'my-valid': (state) => state.valid()
}
})
You would need to update to:
provideSignalFormsConfig({
classes: {
'my-valid': ({state}) => state().valid()
}
})
(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)
(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)
| Commit | Type | Description |
|---|---|---|
| 4c8fb3631d | fix | throw better errors for potential circular references |
| 48492524ea | fix | use mutable ResponseInit type for RESPONSE_INIT token |
| Commit | Type | Description |
|---|---|---|
| 81772b420d | feat | pass field directive to class config |
| 729b96476b | refactor | rename field to fieldTree in FieldContext and ValidationError |
| Commit | Type | Description |
|---|---|---|
| e0694df3ec | fix | avoid interpolation highlighting inside @let |
| 5047be4bc1 | fix | Prevent language service from crashing on suggestion diagnostic errors |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.0.5"></a>
…| avoid false-positive deprecation when using InjectionToken with factory only |
| Commit | Type | Description |
|---|---|---|
| 69d243abb74 | fix | avoid false-positive deprecation when using InjectionToken with factory only |
| Commit | Type | Description |
|---|---|---|
| 4fd2b722b40 | fix | fix signal forms type error |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.0.4"></a>
|  | chain query creation instructions |
| Commit | Description |
|---|---|
| chain query creation instructions |
| Commit | Description |
|---|---|
| expand type for native controls with a dynamic type |
| Commit | Type | Description |
|---|---|---|
| f901cc9eb32 | perf | chain query creation instructions |
| Commit | Type | Description |
|---|---|---|
| 65297c62011 | fix | expand type for native controls with a dynamic type |
| Commit | Type | Description |
|---|---|---|
| f254ff4f2e0 | feat | expose element on signal forms Field directive |
| 5880fbc73c6 | feat | redo the signal forms metadata API |
| 55fc677cef4 | fix | add signals for dirty, hidden, and pending states in custom controls |
| cbb10179c80 | fix | allow resetting with empty string |
| bf1c12cd932 | fix | memoize reads of child fields in signal forms (#65802) |
| 6d7475582f9 | fix | Reuse key in parent in compat structure |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.0.3"></a>
|  | avoid allocating an object for signals in
| Commit | Description |
|---|---|
| avoid allocating an object for signals in production mode | |
| check that field radio button values are strings |
| Commit | Description |
|---|---|
Allows transforms on FormUiControl signals |
|
support dynamic [field] bindings (#65599) |
| Commit | Description |
|---|---|
| enable XSRF protection for same-origin absolute URLs |
| Commit | Description |
|---|---|
| handle errors from view transition finished promise |
| Commit | Type | Description |
|---|---|---|
| 5a80a48e96 | fix | avoid allocating an object for signals in production mode |
| 1f1856e897 | fix | check that field radio button values are strings |
| Commit | Type | Description |
|---|---|---|
| 8c3304c766 | fix | run animation queue in environment injector context |
| 4bb085311e | fix | unable to inject viewProviders when host directive with providers is present |
| 609699ae17 | perf | tree shake unused dynamic [field] binding instructions (#65599) |
| Commit | Type | Description |
|---|---|---|
| 6b4ab876e8 | feat | Allows transforms on FormUiControl signals |
| a5dbd4b382 | fix | support dynamic [field] bindings (#65599) |
| Commit | Type | Description |
|---|---|---|
| 20474d3f0f | fix | enable XSRF protection for same-origin absolute URLs |
| Commit | Type | Description |
|---|---|---|
| 48b89f9fbe | fix | handle errors from view transition finished promise |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.0.2"></a>
|  | prevent XSS via SVG animation attributeNam
| Commit | Type | Description |
|---|---|---|
| 78fd159b78 | fix | prevent XSS via SVG animation attributeName and MathML/SVG URLs |
<!-- CHANGELOG SPLIT MARKER -->
<a name="20.3.15"></a>
|  | do not type check native controls with Con
| Commit | Description |
|---|---|
| do not type check native controls with ControlValueAccessor | |
| escape angular control flow in jsdoc | |
| ignore non-existent files |
| Commit | Description |
|---|---|
add DI option for classes on Field directive |
|
allow dynamic type bindings on signal form controls |
|
| run reset as untracked |
| Commit | Description |
|---|---|
| prevent XSRF token leakage to protocol-relative URLs |
| Commit | Description |
|---|---|
| detect structural ngTemplateOutlet and ngComponentOutlet |
| Commit | Type | Description |
|---|---|---|
| 39c577bc36 | fix | do not type check native controls with ControlValueAccessor |
| 8d3a89a477 | fix | escape angular control flow in jsdoc |
| bc34083d34 | fix | ignore non-existent files |
| Commit | Type | Description |
|---|---|---|
| 0ea1e07174 | fix | apply bootstrap-options migration to platformBrowserDynamic |
| 70507b8c1c | fix | debug data causing memory leak for root effects |
| a55482fca3 | fix | notify profiler events in case of errors |
| 49ad7c6508 | fix | use injected DOCUMENT for CSP_NONCE |
| cc1ec09931 | perf | avoid repeat searches for field directive |
| Commit | Type | Description |
|---|---|---|
| 7d5c7cf99a | feat | add DI option for classes on Field directive |
| 8acf5d2756 | fix | allow dynamic type bindings on signal form controls |
| de5fca94c5 | fix | run reset as untracked |
| Commit | Type | Description |
|---|---|---|
| 3240d856d9 | fix | prevent XSRF token leakage to protocol-relative URLs |
| Commit | Type | Description |
|---|---|---|
| f394215b14 | fix | detect structural ngTemplateOutlet and ngComponentOutlet |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.0.0"></a>
|  | remove deprecated interpolation optio…
| Commit | Description |
|---|---|
| return value on signal input getter (#62113) |
| Commit | Description |
|---|---|
| fix directory renaming on Windows |
| Commit | Description |
|---|---|
| address potential memory leak during project creation | |
| prevent interpolation from superseding block braces (#64392) |
| Commit | Description |
|---|---|
remove deprecated ApplicationConfig export (#63529) |
| Commit | Description |
|---|---|
| Remove deprecated UpgradeAdapter (#61659) |
TestBed now provides a fake PlatformLocation
implementation that supports the Navigation API. This may break some
tests, though we have not observed any failures internally. You can revert to the
old default for TestBed by providing the MockPlatformLocation from
@angular/common/testing in your providers:
{provide: PlatformLocation, useClass: MockPlatformLocation}ngComponentOutletContent is now of type Node[][] | undefined instead of any[][] | undefined."typeCheckHostBindings": false in the angularCompilerOptions section of your tsconfig.emitDeclarationOnly TS compiler option is enabled as this mode is
not supported.The server-side bootstrapping process has been changed to eliminate the reliance on a global platform injector.
Before:
const bootstrap = () => bootstrapApplication(AppComponent, config);
After:
const bootstrap = (context: BootstrapContext) =>
bootstrapApplication(AppComponent, config, context);
A schematic is provided to automatically update main.server.ts files to pass the BootstrapContext to the bootstrapApplication call.
In addition, getPlatform() and destroyPlatform() will now return null and be a no-op respectively when running in a server environment.
Using a combination of provideZoneChangeDetection
while also removing ZoneJS polyfills will no longer result in the
internal scheduler being disabled. All Angular applications now
consistenly use the same scheduler, and those with the Zone change detection
provider include additional automatic scheduling behaviors based on
NgZone stabilization.
(test only) - Using provideZoneChangeDetection in the
TestBed providers would previously prevent TestBed from rethrowing
errors as it should. Errors in the test will now be rethrown, regardless
of the usage of provideZoneChangeDetection. Tests should be adjusted to
prevent or account for these errors. As in previous major versions,
this behavior can be disabled with rethrowApplicationErrors: false in
configureTestingModule as a last resort.
ignoreChangesOutsideZone is no longer available as an
option for configuring ZoneJS change detection behavior.
Angular no longer provides a change detection scheduler
for ZoneJS-based change detection by default. Add
provideZoneChangeDetection to the providers of your
bootstrapApplication function or your AppModule (if using
bootstrapModule). This provider addition will be covered by an
automated migration.
moduleId was removed from Component metadata.
The interpolation option on Components has been removed. Only the default {{ ... }} is now supported.
Fix signal input getter behavior in custom elements.
Before this change, signal inputs in custom elements required function calls to access their values (elementRef.newInput()), while decorator inputs were accessed directly (elementRef.oldInput). This inconsistency caused confusion and typing difficulties.
The getter behavior has been standardized so signal inputs can now be accessed directly, matching the behavior of decorator inputs:
Before:
elementRef.oldInputelementRef.newInput()After:
elementRef.oldInputelementRef.newInputApplicationConfig export from @angular/platform-browser has been removed.
Please import ApplicationConfig from @angular/core instead.lastSuccessfulNavigation is now a signal and needs to be invokedUpgradeAdapter is no longer available. Use
upgrade/static insteadHttpResponseBase.statusText is deprecatedBlog post "Announcing Angular v21".
TestBed now provides a fake PlatformLocation
implementation that supports the Navigation API. This may break some
tests, though we have not observed any failures internally. You can revert to the
old default for TestBed by providing the MockPlatformLocation from
@angular/common/testing in your providers:
{provide: PlatformLocation, useClass: MockPlatformLocation}ngComponentOutletContent is now of type Node[][] | undefined instead of any[][] | undefined."typeCheckHostBindings": false in the angularCompilerOptions section of your tsconfig.emitDeclarationOnly TS compiler option is enabled as this mode is
not supported.The server-side bootstrapping process has been changed to eliminate the reliance on a global platform injector.
Before:
const bootstrap = () => bootstrapApplication(AppComponent, config);
After:
const bootstrap = (context: BootstrapContext) =>
bootstrapApplication(AppComponent, config, context);
A schematic is provided to automatically update main.server.ts files to pass the BootstrapContext to the bootstrapApplication call.
In addition, getPlatform() and destroyPlatform() will now return null and be a no-op respectively when running in a server environment.
Using a combination of provideZoneChangeDetection
while also removing ZoneJS polyfills will no longer result in the
internal scheduler being disabled. All Angular applications now
consistently use the same scheduler, and those with the Zone change detection
provider include additional automatic scheduling behaviors based on
NgZone stabilization.
(test only) - Using provideZoneChangeDetection in the
TestBed providers would previously prevent TestBed from rethrowing
errors as it should. Errors in the test will now be rethrown, regardless
of the usage of provideZoneChangeDetection. Tests should be adjusted to
prevent or account for these errors. As in previous major versions,
this behavior can be disabled with rethrowApplicationErrors: false in
configureTestingModule as a last resort.
ignoreChangesOutsideZone is no longer available as an
option for configuring ZoneJS change detection behavior.
Angular no longer provides a change detection scheduler
for ZoneJS-based change detection by default. Add
provideZoneChangeDetection to the providers of your
bootstrapApplication function or your AppModule (if using
bootstrapModule). This provider addition will be covered by an
automated migration.
moduleId was removed from Component metadata.
The interpolation option on Components has been removed. Only the default {{ ... }} is now supported.
Fix signal input getter behavior in custom elements.
Before this change, signal inputs in custom elements required function calls to access their values (elementRef.newInput()), while decorator inputs were accessed directly (elementRef.oldInput). This inconsistency caused confusion and typing difficulties.
The getter behavior has been standardized so signal inputs can now be accessed directly, matching the behavior of decorator inputs:
Before:
elementRef.oldInputelementRef.newInput()After:
elementRef.oldInputelementRef.newInputApplicationConfig export from @angular/platform-browser has been removed.
Please import ApplicationConfig from @angular/core instead.lastSuccessfulNavigation is now a signal and needs to be invokedUpgradeAdapter is no longer available. Use
upgrade/static insteadHttpResponseBase.statusText is deprecated| Commit | Type | Description |
|---|---|---|
| c795960ada | feat | Add experimental support for the Navigation API (#63406) |
| 9eac43cf46 | feat | Support of optional keys for the KeyValue pipe (#48814) |
| a1868c9d13 | feat | update to cldr 47 (#64032) |
| 196fa500a3 | fix | properly type ngComponentOutlet (#64561) |
| 7a4b225c57 | refactor | improve typing of ngComponentOutletContent (#63674) |
| 25f593ce2a | refactor | removengModuleFactory input of NgComponentOutlet (#62838) |
| Commit | Type | Description |
|---|---|---|
| ecea909bcc | fix | don't choke on unbalanced parens in declaration block |
| 04dd75ba94 | fix | support arbitrary nesting in :host-context() |
| f54cc4f28a | fix | support commas in :host() argument |
| 814b2713f5 | fix | support complex selectors in :nth-child() |
| aad6ced0ef | fix | support one additional level of nesting in :host() |
| Commit | Type | Description |
|---|---|---|
| 563dbd998c | feat | Adds diagnostic for misconfigured @defer triggers (#64069) |
| 0571b335b9 | feat | enable type checking of host bindings by default (#63654) |
| 5b55200edf | fix | allow value to be set on radio fields |
| ab98b2425f | fix | capture metadata for undecorated fields (#63957) |
| be7110342b | fix | disallow compiling with the emitDeclarationOnly TS compiler option enabled (#61609) |
| bd322ca410 | fix | do not flag custom control required inputs as missing when field is present |
| 471da8a311 | fix | infer type of custom field controls |
| 96cb0cffda | fix | infer types of signal forms set on native inputs |
| 71ab11ccf0 | fix | make field detection logic more robust |
| 1f389b8b97 | fix | missingStructuralDirective diagnostic produces false negatives (#64579) |
| 7fd3db0423 | fix | remove internal syntax-related flags (#63787) |
| c371251e4c | fix | report invalid bindings on form controls |
| 01290ab275 | fix | use any when checking field interface conformance |
| Commit | Type | Description |
|---|---|---|
| 809a4ed8c1 | feat | Add migration for zoneless by default. (#63042) |
| 2a7a5de53f | feat | Allow passing application providers in bootstrapModule options (#64354) |
| 28926ba92c | feat | introduce BootstrapContext for improved server bootstrapping (#63562) |
| c2d376b85a | feat | make SimpleChanges generic (#64535) |
| ad2376435b | feat | support IntersectionObserver options in viewport triggers (#64130) |
| 539717f58a | feat | support regular expressions in templates (#63887) |
| ab415f3d7f | fix | control not recognized when input has directive injecting ViewContainerRef (#64368) |
| f008045ded | fix | do not rename ARIA property bindings to attributes (#63925) |
| 1352fbdbf2 | fix | Drop special-case disables automatic change detection scheduling (#63846) |
| c0791e1887 | fix | drop support for TypeScript 5.8 (#63589) |
| aa389a691b | fix | ensure @for iteration over field is reactive (#64113) |
| fec7c288e9 | fix | Error on invalid APP_ID (#63252) |
| d399d7d02b | fix | Explicit Zone CD in TestBed providers should not override TestBed error handler (#63404) |
| 92e09adc0a | fix | Remove ignoreChangesOutsideZone option (#62700) |
| 45fed3d201 | fix | Remove Zone-based change provider from internals by default (#63382) |
| c9f977833e | fix | skip Angular formatting when formatting signals recursively |
| 67fbd5ff1e | fix | SSR error in signal forms |
| c241038111 | fix | update symbols (#64481) |
| a5e5dbbc16 | refactor | remove moduleId from Component metadata (#63482) |
| 9a16718b13 | refactor | remove deprecated interpolation option on Components. (#63474) |
| Commit | Type | Description |
|---|---|---|
| be0455adda | fix | return value on signal input getter (#62113) |
| Commit | Type | Description |
|---|---|---|
| a278ee358c | feat | add debounce() rule for signal forms |
| b8314bd340 | feat | add experimental signal-based forms (#63408) |
| 0dd95c503f | feat | Add FormArrayDirective (#55880) |
| d201cd2c2b | feat | Prevents marking fields as touched/dirty when state is hidden/readonly/disabled (#63633) |
| 9c5e969f51 | fix | bind invalid input in custom controls (#64526) |
| 10ef96adb3 | fix | consistent treatment of empty (#63456) |
| d89e522a1f | fix | debounce updates from interop controls |
| c0d88c37c9 | fix | Emit FormResetEvent when resetting control (#64024) |
| 94b0afec00 | fix | implement interoperability between signal forms and reactive forms (#64471) |
| a1ac9a6415 | fix | interop supports CVAs with signals (#64618) |
| 505bde1fed | fix | mark field as dirty when value is changed by ControlValueAccessor (#64471) |
| 3529877772 | fix | mark field as dirty when value is changed by a bound control (#64483) |
| fd9af2afaf | fix | only propagate schema defined properties from field to control (#64446) |
| 91d8d55a80 | fix | Set error message of a schema error. |
| f4d1017c25 | fix | test that common field states are propagated to controls (#63884) |
| acd7c83597 | fix | test that min/max properties are propagated to controls (#63884) |
| 71e8672837 | fix | test that minLength/maxLength properties are propagated to controls (#63884) |
| 507b3466ee | perf | implement change detection for field control bindings |
| 781a3299f9 | perf | only update interop controls when bound field changes |
| 32f86d35f7 | perf | optimize [field] binding instructions (#64351) |
| Commit | Type | Description |
|---|---|---|
| 2739b7975b | feat | add referrerPolicy option to HttpResource (#64283) |
| 07e678872f | feat | Add reponseType property to HttpResponse and HttpErrorResponse (#63043) |
| 5cbdefcf11 | feat | add support for fetch referrerPolicy option in HttpClient (#64116) |
| 4bed062bc9 | feat | Provide http services in root (#56212) |
| 0e4e17cd97 | refactor | HttpResponseBase.statusText (#64176) |
| Commit | Type | Description |
|---|---|---|
| 3f7111a9c3 | fix | fix directory renaming on Windows |
| Commit | Type | Description |
|---|---|---|
| 89095946cf | fix | address potential memory leak during project creation |
| 80e00ff4e5 | fix | prevent interpolation from superseding block braces (#64392) |
| Commit | Type | Description |
|---|---|---|
| 6ddb250391 | feat | add migration to convert ngClass to use class (#62983) |
| 8dc8914c8a | feat | add migration to convert ngStyle to use style (#63517) |
| 861cee34e0 | feat | Adds migration for deprecated router testing module (#64217) |
| 75fc16b261 | feat | Adds support for CommonModule to standalone migration (#64138) |
| 655a99d0c6 | fix | fix bug in ngclass-to-class migration (#63617) |
| 62bbce63b7 | fix | remove error for no matching files in control flow migration (#64253) |
| Commit | Type | Description |
|---|---|---|
| ce8db665f9 | refactor | remove deprecated ApplicationConfig export (#63529) |
| Commit | Type | Description |
|---|---|---|
| 4e0fc81491 | feat | convert lastSuccessfulNavigation to signal (#63057) |
| 5e61e8d3c3 | fix | Fix memory leak through Navigation.abort and canDeactivate guards (#64141) |
| f6a73f1913 | fix | Respect custom UrlSerializer handling of query parameters (#64449) |
| 5b53535dd1 | fix | Update recognize stage to use internally async/await (#62994) |
| Commit | Type | Description |
|---|---|---|
| f86846555b | fix | Remove deprecated UpgradeAdapter (#61659) |
<!-- CHANGELOG SPLIT MARKER -->
<a name="20.3.13"></a>
|  | don't choke on unbalanced parens in declar
|  | remove placeholder image listeners once vi
| Commit | Description |
|---|---|
| remove placeholder image listeners once view is removed |
| Commit | Description |
|---|---|
| support commas in :host() argument | |
| support complex selectors in :nth-child() | |
| support one additional level of nesting in :host() |
| Commit | Description |
|---|---|
| skip Angular formatting when formatting signals recursively |
| Commit | Description |
|---|---|
add debounce() rule for signal forms |
|
| only update interop controls when bound field changes |
| Commit | Description |
|---|---|
| fix directory renaming on Windows |
| Commit | Description |
|---|---|
| address potential memory leak during project creation |
|  | infer type of custom field controls |
| Commit | Description |
|---|---|
| infer type of custom field controls | |
| infer types of signal forms set on native inputs | |
| make required inputs diagnostic less noisy | |
| report invalid bindings on form controls |
| Commit | Description |
|---|---|
| skip leave animations on view swaps |
| Commit | Description |
|---|---|
| implement change detection for field control bindings |
| Commit | Description |
|---|---|
| Prevent removal of templates referenced with preceding whitespace characters |
Nothing published for this version
|  | Blocks IPv6 localhost from preconnect che
| Commit | Description |
|---|---|
| Blocks IPv6 localhost from preconnect checks |
| Commit | Description |
|---|---|
| support arbitrary nesting in :host-context() |
| Commit | Description |
|---|---|
| Clear lView from IcuIteratorState when stack is empty to prevent memory leak | |
ensure @for iteration over field is reactive (#64113) |
| Commit | Description |
|---|---|
| interop supports CVAs with signals (#64618) |
| Commit | Description |
|---|---|
| Do not remove a template if it is referenced even with a trailing semilocon |
| Commit | Description |
|---|---|
| handle parenthesized outlets without a name in DefaultUrlSerializer (#64507) |
|  | account for Element.animate exceptions (#6
| Commit | Description |
|---|---|
account for Element.animate exceptions (#64506) |
| Commit | Description |
|---|---|
| update to cldr 47 (#64032) | |
| properly type ngComponentOutlet (#64561) |
| Commit | Description |
|---|---|
| correctly compile long numeric HTML entities (#64297) |
| Commit | Description |
|---|---|
| missingStructuralDirective diagnostic produces false negatives (#64470) | |
| missingStructuralDirective diagnostic produces false negatives (#64579) |
| Commit | Description |
|---|---|
| prevent interpolation from superseding block braces (#64392) |
| Commit | Description |
|---|---|
| Adds support for CommonModule to standalone migration (#64138) |
| Commit | Description |
|---|---|
DomEventsPlugin should always be the last plugin to be called for supports(). (#50394) |
…| Adds migration for deprecated router testing module (#64217) |
| Commit | Description |
|---|---|
Adds diagnostic for misconfigured @defer triggers (#64069) |
|
| capture metadata for undecorated fields (#63957) | |
| fix performance of "interpolated signal not invoked" check (#64410) |
| Commit | Description |
|---|---|
| add referrerPolicy option to HttpResource (#64283) |
| Commit | Description |
|---|---|
| Scroll restoration should use instant scroll behavior for traversals (#64299) |
HttpResponseBase.statusText is deprecated
| Commit | Description |
|---|---|
| Support of optional keys for the KeyValue pipe (#48814) |
| Commit | Description |
|---|---|
| add support for fetch referrerPolicy option in HttpClient (#64116) | |
HttpResponseBase.statusText (#64176) |
| Commit | Description |
|---|---|
| preserve component imports when pruning NgModules in standalone migration (#64186) | |
| remove error for no matching files in control flow migration (#64253) |
| Commit | Description |
|---|---|
| Fix memory leak through Navigation.abort and canDeactivate guards (#64141) |
HttpResponseBase.statusText is deprecated|  | Support of optional keys for the KeyValue
| Commit | Description |
|---|---|
| Support of optional keys for the KeyValue pipe (#48814) |
| Commit | Description |
|---|---|
| recover template literals with broken expressions (#64150) |
| Commit | Description |
|---|---|
| Fixes animations in conjunction with content projection (#63776) | |
| prevents unintended early termination of leave animations and hoisting (#64088) |
| Commit | Description |
|---|---|
| return value on signal input getter (#62113) |
| Commit | Description |
|---|---|
| handle shorthand property declarations in NgModule (#64160) | |
| skip migration for inputs with 'this' references (#64142) |
Fix signal input getter behavior in custom elements.
Before this change, signal inputs in custom elements required function calls to access their values (elementRef.newInput()), while decorator inputs were accessed directly (elementRef.oldInput). This inconsistency caused confusion and typing difficulties.
The getter behavior has been standardized so signal inputs can now be accessed directly, matching the behavior of decorator inputs:
Before:
elementRef.oldInputelementRef.newInput()After:
elementRef.oldInputelementRef.newInput|  | update to cldr 47 (#63923) |
| Commit | Description |
|---|---|
| update to cldr 47 (#63923) |
| Commit | Description |
|---|---|
| capture metadata for undecorated fields (#63904) | |
| resolve import alias in defer blocks (#63966) |
| Commit | Description |
|---|---|
Emit FormResetEvent when resetting control (#64024) |
| Commit | Description |
|---|---|
| handle import aliases to the same module name (#63934) | |
| handle reused templates in control flow migration (#63996) |
|  | remove deprecated interpolation optio…
| Commit | Description |
|---|---|
improve typing of ngComponentOutletContent (#63674) |
| Commit | Description |
|---|---|
Add support for aria-invalid (#63748) |
| Commit | Description |
|---|---|
| Prevents marking fields as touched/dirty when state is hidden/readonly/disabled (#63633) |
| Commit | Description |
|---|---|
| add migration to convert ngStyle to use style (#63517) | |
| fix route-lazy-loading migration (#63818) |
ngComponentOutletContent is now of type Node[][] | undefined instead of any[][] | undefined.provideZoneChangeDetection
while also removing ZoneJS polyfills will no longer result in the
internal scheduler being disabled. All Angular applications now
consistenly use the same scheduler, and those with the Zone change detection
provider include additional automatic scheduling behaviors based on
NgZone stabilization.provideZoneChangeDetection to the providers of your
bootstrapApplication function or your AppModule (if using
bootstrapModule). This provider addition will be covered by an
automated migration.moduleId was removed from Component metadata.interpolation option on Components has been removed. Only the default {{ ... }} is now supported.|  | remove refresh button from transfer state
| Commit | Description |
|---|---|
| remove refresh button from transfer state tab (#63592) |
| Commit | Description |
|---|---|
| enable type checking of host bindings by default (#63654) |
| Commit | Description |
|---|---|
introduce BootstrapContext for improved server bootstrapping (#63562) |
|
| drop support for TypeScript 5.8 (#63589) |
| Commit | Description |
|---|---|
| fix bug in ngclass-to-class migration (#63617) |
"typeCheckHostBindings": false in the angularCompilerOptions section of your tsconfig.The server-side bootstrapping process has been changed to eliminate the reliance on a global platform injector.
Before:
const bootstrap = () => bootstrapApplication(AppComponent, config);
After:
const bootstrap = (context: BootstrapContext) =>
bootstrapApplication(AppComponent, config, context);
A schematic is provided to automatically update main.server.ts files to pass the BootstrapContext to the bootstrapApplication call.
In addition, getPlatform() and destroyPlatform() will now return null and be a no-op respectively when running in a server environment.
For more information please see: https://github.com/angular/angular/security/advisories/GHSA-68x2-mx4q-78m7
|  | remove deprecated ApplicationConfig e…
| Commit | Description |
|---|---|
| Add experimental support for the Navigation API (#63406) |
| Commit | Description |
|---|---|
| fixes regression with event parsing and animate prefix (#63470) |
| Commit | Description |
|---|---|
| add experimental signal-based forms (#63408) | |
| consistent treatment of empty (#63456) |
| Commit | Description |
|---|---|
| Add reponseType property to HttpResponse and HttpErrorResponse (#63043) |
| Commit | Description |
|---|---|
remove deprecated ApplicationConfig export (#63529) |
| Commit | Description |
|---|---|
| prevent false warning for duplicate state serialization (#63525) |
| Commit | Description |
|---|---|
| Update recognize stage to use internally async/await (#62994) |
| Commit | Description |
|---|---|
| Remove deprecated UpgradeAdapter (#61659) |
TestBed now provides a fake PlatformLocation
implementation that supports the Navigation API. This may break some
tests, though we have not observed any failures internally. You can revert to the
old default for TestBed by providing the MockPlatformLocation from
@angular/common/testing in your providers:
{provide: PlatformLocation, useClass: MockPlatformLocation}provideZoneChangeDetection in the
TestBed providers would previously prevent TestBed from rethrowing
errors as it should. Errors in the test will now be rethrown, regardless
of the usage of provideZoneChangeDetection. Tests should be adjusted to
prevent or account for these errors. As in previous major versions,
this behavior can be disabled with rethrowApplicationErrors: false in
configureTestingModule as a last resort.ignoreChangesOutsideZone is no longer available as an
option for configuring ZoneJS change detection behavior.ApplicationConfig export from @angular/platform-browser has been removed.
Please import ApplicationConfig from @angular/core instead.UpgradeAdapter is no longer available. Use
upgrade/static instead|  | removengModuleFactory input of NgComp
| Commit | Description |
|---|---|
removengModuleFactory input of NgComponentOutlet (#62838) |
| Commit | Description |
|---|---|
| fixes animations on elements with structural directives (#63390) | |
| Keep paraenthesis in Nullish + Boolean expression. (#63292) |
| Commit | Description |
|---|---|
Ensures @for loop animations never get cancelled (#63328) |
|
| fix memory leak with leaving nodes tracking (#63328) | |
Fixes animate.leave binding to a string with spaces (#63366) |
| Commit | Description |
|---|---|
| Add FormArrayDirective (#55880) |
| Commit | Description |
|---|---|
| add migration to convert ngClass to use class (#62983) |
|  | disallow compiling with the emitDeclaratio
| Commit | Description |
|---|---|
disallow compiling with the emitDeclarationOnly TS compiler option enabled (#61609) |
| Commit | Description |
|---|---|
| Provide http services in root (#56212) |
| Commit | Description |
|---|---|
convert lastSuccessfulNavigation to signal (#63057) |
emitDeclarationOnly TS compiler option is enabled as this mode is
not supported.lastSuccessfulNavigation is now a signal and needs to be invokedupdate domino to latest version
| Commit | Type | Description |
|---|---|---|
| 3db26e2544 | fix | update domino to latest version |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.23"></a>
avoid stripping unicode whitespace during url resolution
| Commit | Type | Description |
|---|---|---|
| 9339a7a2de | fix | avoid stripping unicode whitespace during url resolution |
| 89b20568df | fix | update domino to latest version |
<!-- CHANGELOG SPLIT MARKER -->
<a name="22.2.0-next.3"></a>
Your coding agent can read these notes before it upgrades. Set up the MCP server →