# Angular changelog > The web development framework for building modern apps. - Vendor: Google - Category: Frameworks & Libraries - License: MIT - Language: TypeScript - Official site: https://angular.dev - Tracked by: What's New (https://whatsnew.fyi/product/angular) - Harvested from: GitHub (angular/angular) - Entries below: 25 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: release facts (products, versions, dates, links, CVE ids and flags) are open data under CC BY 4.0, from the API at https://whatsnew.fyi/api/v1 or the nightly dataset at https://github.com/whatsnew-fyi/dataset. The summaries, labels and curation are © What's New: quote freely with attribution and a link back; wholesale republication of them is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### v22.2.3 — 22.2.3 - Date: 2026-10-14 - Version: v22.2.3 - Original notes: https://github.com/angular/angular/releases/tag/v22.2.3 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.2.3 - **security** — Harden param encoding against prototype pollution - **security** — Harden JIT against prototype pollution - **fixed** — Check @boundary blocks in the control flow content projection diagnostic - **fixed** — Compare the operand in ReadTemporaryExpr.isEquivalent - **fixed** — Do not scope comments placed inside of a selector - **fixed** — Support dots in class binding names - **fixed** — Support popover property bindings - **fixed** — Inline tcb when depending on local directive - **fixed** — Avoid deleting idle bucket created during another bucket's drain - **fixed** — Do not swallow compilation errors in computeStandaloneComponentScope - **fixed** — Don't crash initEventReplay when two apps share an APP_ID - **fixed** — Error when destroying embedded view with animations - **fixed** — Keep activeConsumer and currentInjector constant using Store helper - **fixed** — Skip nested tick from onMicrotaskEmpty while a tick is running - **changed** — Use addEventListener to avoid unconditional CD scheduling on blur - **fixed** — Normalize .d.ts paths in output migration field IDs - **fixed** — Check abort signal state on subscribe ###### common | Commit | Description | | -- | -- | | [![fix - fafec77b5d](https://img.shields.io/badge/fafec77b5d-fix-green)](https://github.com/angular/angular/commit/fafec77b5d4e6dfc89aad72db9c132d3dfe46ba6) | harden param encoding against prototype pollution | ###### compiler | Commit | Description | | -- | -- | | [![fix - 54f3de517c](https://img.shields.io/badge/54f3de517c-fix-green)](https://github.com/angular/angular/commit/54f3de517c2e4cda264eca5f2d143a1f6967c7a9) | check `@boundary` blocks in the control flow content projection diagnostic | | [![fix - 5e50658fd2](https://img.shields.io/badge/5e50658fd2-fix-green)](https://github.com/angular/angular/commit/5e50658fd23983dd27ef89a67cea26910af6fd79) | compare the operand in ReadTemporaryExpr.isEquivalent | | [![fix - b6f9cc5d70](https://img.shields.io/badge/b6f9cc5d70-fix-green)](https://github.com/angular/angular/commit/b6f9cc5d7013f8f136b38cccfe486264200f04f5) | do not scope comments placed inside of a selector | | [![fix - 35a02f8097](https://img.shields.io/badge/35a02f8097-fix-green)](https://github.com/angular/angular/commit/35a02f8097724f4b6e83e1c9c008da8f1fc7f127) | harden JIT against prototype pollution | | [![fix - 08075e8aa0](https://img.shields.io/badge/08075e8aa0-fix-green)](https://github.com/angular/angular/commit/08075e8aa03800bc1b8ae793fb3d52761cdd28b6) | support dots in class binding names | | [![fix - c7a72c2bf2](https://img.shields.io/badge/c7a72c2bf2-fix-green)](https://github.com/angular/angular/commit/c7a72c2bf2213d881496e70933fc61bdaaa00621) | support popover property bindings | ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - fa21d083fe](https://img.shields.io/badge/fa21d083fe-fix-green)](https://github.com/angular/angular/commit/fa21d083fe92e67a2a070059b850b9a32a08cef9) | inline tcb when depending on local directive | ###### core | Commit | Description | | -- | -- | | [![fix - b5208f9fc3](https://img.shields.io/badge/b5208f9fc3-fix-green)](https://github.com/angular/angular/commit/b5208f9fc3a77a9631c2f38c30c38c777a642839) | avoid deleting idle bucket created during another bucket's drain | | [![fix - 90af679c3b](https://img.shields.io/badge/90af679c3b-fix-green)](https://github.com/angular/angular/commit/90af679c3b585515651b138667b8eaf3df652968) | do not swallow compilation errors in computeStandaloneComponentScope | | [![fix - eca5fa4665](https://img.shields.io/badge/eca5fa4665-fix-green)](https://github.com/angular/angular/commit/eca5fa466508ef68014cbebb0cafd63947f9eda7) | don't crash initEventReplay when two apps share an APP_ID | | [![fix - e59a2303df](https://img.shields.io/badge/e59a2303df-fix-green)](https://github.com/angular/angular/commit/e59a2303dfb4f3242552d382bbeebf6a38446856) | error when destroying embedded view with animations | | [![fix - a23941fe75](https://img.shields.io/badge/a23941fe75-fix-green)](https://github.com/angular/angular/commit/a23941fe7547634c9f1160541b3a2265e284f624) | keep activeConsumer and currentInjector constant using Store helper | | [![fix - 913ae7421f](https://img.shields.io/badge/913ae7421f-fix-green)](https://github.com/angular/angular/commit/913ae7421f609c6ad375219045e9ab3f3b0eba73) | skip nested tick from onMicrotaskEmpty while a tick is running | ###### forms | Commit | Description | | -- | -- | | [![perf - cc515b8b23](https://img.shields.io/badge/cc515b8b23-perf-orange)](https://github.com/angular/angular/commit/cc515b8b2331df643e7ff80915efc402bc97d3bb) | use addEventListener to avoid unconditional CD scheduling on blur | ###### migrations | Commit | Description | | -- | -- | | [![fix - d04f214d04](https://img.shields.io/badge/d04f214d04-fix-green)](https://github.com/angular/angular/commit/d04f214d04678f0dbb0b769a53d1f15ece09c4a2) | normalize .d.ts paths in output migration field IDs | ###### router | Commit | Description | | -- | -- | | [![fix - f9a4f751f0](https://img.shields.io/badge/f9a4f751f0-fix-green)](https://github.com/angular/angular/commit/f9a4f751f0ad0f3f22d4 _[Truncated at 4000 characters — full notes: https://github.com/angular/angular/releases/tag/v22.2.3]_ ### v22.3.0-next.2 — 22.3.0-next.2 - Date: 2026-10-14 - Version: v22.3.0-next.2 - Original notes: https://github.com/angular/angular/releases/tag/v22.3.0-next.2 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.3.0-next.2 - Labels: Pre-release - **security** — Harden param encoding against prototype pollution in common - **security** — Harden JIT against prototype pollution in compiler - **fixed** — Check @boundary blocks in the control flow content projection diagnostic - **fixed** — Compare the operand in ReadTemporaryExpr.isEquivalent - **fixed** — Do not scope comments placed inside of a selector - **fixed** — Support dots in class binding names - **fixed** — Support popover property bindings - **added** — Port preprocessor serve tool in compiler-cli - **added** — Support synchronous WASM execution in preprocessor - **fixed** — Capture public methods in preprocessor - **fixed** — Correctly attach pure comments - **fixed** — Do not type check getter host bindings in preprocessor - **fixed** — Fetch data asynchronously in hybrid indexer - **fixed** — Handle imported templateUrl in preprocessor - **fixed** — Handle imports arrays with some dynamic entries - **fixed** — Implement core handling in the preprocessor - **fixed** — Implement HMR in preprocessor - **fixed** — Inline tcb when depending on local directive - **fixed** — Propagate hasNgFieldDirective in preprocessor - **fixed** — Resolve imported classes in declaration-only NgModule types ###### common | Commit | Description | | -- | -- | | [![fix - 01c883e2b6](https://img.shields.io/badge/01c883e2b6-fix-green)](https://github.com/angular/angular/commit/01c883e2b6fb92a61c0759978f53846f84a23367) | harden param encoding against prototype pollution | ###### compiler | Commit | Description | | -- | -- | | [![fix - d9bd68258d](https://img.shields.io/badge/d9bd68258d-fix-green)](https://github.com/angular/angular/commit/d9bd68258dcb0192487837ed53ce393ca51c6ed6) | check `@boundary` blocks in the control flow content projection diagnostic | | [![fix - 3aaf026486](https://img.shields.io/badge/3aaf026486-fix-green)](https://github.com/angular/angular/commit/3aaf0264867b712eae6c78a6f9632bcb78b5a38c) | compare the operand in ReadTemporaryExpr.isEquivalent | | [![fix - 8acf703db6](https://img.shields.io/badge/8acf703db6-fix-green)](https://github.com/angular/angular/commit/8acf703db6b30305905dba59ad304f0a52e5e790) | do not scope comments placed inside of a selector | | [![fix - f2b1c1d3d7](https://img.shields.io/badge/f2b1c1d3d7-fix-green)](https://github.com/angular/angular/commit/f2b1c1d3d7d2c2816c79bb26a5128ecea2d1ff50) | harden JIT against prototype pollution | | [![fix - f1d1953fa8](https://img.shields.io/badge/f1d1953fa8-fix-green)](https://github.com/angular/angular/commit/f1d1953fa8d6c201f08d2433d83fe5fe65c93b1d) | support dots in class binding names | | [![fix - 9a2c9f1b20](https://img.shields.io/badge/9a2c9f1b20-fix-green)](https://github.com/angular/angular/commit/9a2c9f1b20edccf3478e45b3c22715f6c370f8b0) | support popover property bindings | ###### compiler-cli | Commit | Description | | -- | -- | | [![feat - d23ead8d51](https://img.shields.io/badge/d23ead8d51-feat-blue)](https://github.com/angular/angular/commit/d23ead8d512bd68bd11f5457f2a12b1842ecd1e6) | port preprocessor serve tool | | [![feat - 4b6788f1fe](https://img.shields.io/badge/4b6788f1fe-feat-blue)](https://github.com/angular/angular/commit/4b6788f1fefa8aa97a61386a840edfab9e8595cf) | support synchronous WASM execution in preprocessor (#71313) | | [![fix - 0e49d96fe6](https://img.shields.io/badge/0e49d96fe6-fix-green)](https://github.com/angular/angular/commit/0e49d96fe65dd1b9ddf43fc17ae53f2aef9a4183) | capture public methods in preprocessor | | [![fix - 3e45f7b51b](https://img.shields.io/badge/3e45f7b51b-fix-green)](https://github.com/angular/angular/commit/3e45f7b51b8396f3d2b6b6c2a7d1bce1f345252c) | correctly attach pure comments | | [![fix - 69f705cf2d](https://img.shields.io/badge/69f705cf2d-fix-green)](https://github.com/angular/angular/commit/69f705cf2dea3c5d3f1cb69deea93ddbcdbe4d04) | do not type check getter host bindings in preprocessor | | [![fix - 389db18cdd](https://img.shields.io/badge/389db18cdd-fix-green)](https://github.com/angular/angular/commit/389db18cdd92c0ba4fc0d91dcfb073954f95b3fb) | fetch data asynchronously in hybrid indexer | | [![fix - ea3528fcdb](https://img.shields.io/badge/ea3528fcdb-fix-green)](https://github.com/angular/angular/commit/ea3528fcdbed280669a7eebd5d3d00e21f348d68) | handle imported templateUrl in preprocessor | | [![fix - 8374641bcd](https://img.shields.io/badge/8374641bcd-fix-green)](https://github.com/angular/angular/commit/8374641bcdaed05151ce05cf66ba750f3ab6ed75) | handle imports arrays with some dynamic entries | | [![fix - b26f09f9f1](https://img.shields.io/badge/b26f09f9f1-fix-green)](https://github.com/angular/angular/commit/b26f09f9f1024114411f4ddbd8bca9230c598b30) | implement core handling in the preprocessor | | [![fix - d348fd884a](https://img.shields.io/badge/d348fd884a-fix-green)](https://github.com/angular/angular/commit/d348fd884a2b71aa76eaedac315723094e29aaf3) | implement HMR in preprocessor | | [![fix - 0a77018368](https://img.shields.io/badge/0a77018368-fix-green)](https://github.com/angular/angular/commit/0a770183680c81cda04f35ed2d04216dd39fc877) | inline tcb when depending on local directive | | [![fix - 30e3b9ee72](https://img.shields.io/badge/30e3b9ee72-fix-green)](https://github.com/an _[Truncated at 4000 characters — full notes: https://github.com/angular/angular/releases/tag/v22.3.0-next.2]_ ### v20.3.34 — 20.3.34 - Date: 2026-10-14 - Version: v20.3.34 - Original notes: https://github.com/angular/angular/releases/tag/v20.3.34 - Permalink: https://whatsnew.fyi/product/angular/releases/v20.3.34 - **fixed** — i18n flags leaking on errors - **security** — Enable XSRF protection for same-origin absolute URLs ###### core | Commit | Description | | -- | -- | | [![fix - fc0e50a2d2](https://img.shields.io/badge/fc0e50a2d2-fix-green)](https://github.com/angular/angular/commit/fc0e50a2d2441941de359c623621d8d530ee46ef) | i18n flags leaking on errors | ###### http | Commit | Description | | -- | -- | | [![fix - 933ce817d5](https://img.shields.io/badge/933ce817d5-fix-green)](https://github.com/angular/angular/commit/933ce817d53e25926844fa56af8230816763d08e) | enable XSRF protection for same-origin absolute URLs | ### v22.3.0-next.1 — 22.3.0-next.1 - Date: 2026-10-08 - Version: v22.3.0-next.1 - Original notes: https://github.com/angular/angular/releases/tag/v22.3.0-next.1 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.3.0-next.1 - Labels: Pre-release - **fixed** — Avoid leaking ::ng-deep detection state between rules - **fixed** — Avoid prototype lookups when resolving entities - **fixed** — Correctly match directives on ng-template nested in various namespaces - **fixed** — Ignore @let declarations in the control flow content projection diagnostic - **fixed** — Match namespaced root nodes of control flow blocks against ng-content tag selectors - **fixed** — Strip script elements regardless of namespace - **fixed** — Don't mark constructor parameter properties as inherited - **changed** — Optimize missing directive extended checks - **added** — Add scrollMargin to @defer viewport options - **fixed** — Defer afterRenderEffect sequences registered while hooks run - **fixed** — Strip reserved character from translations - **fixed** — Untrack onError handler to prevent signal write exceptions - **fixed** — Don't crash when control is missing in setUpValidators - **fixed** — Skip class bindings for orphaned fields - **fixed** — Use Object.is when comparing control bindings in signal forms - **fixed** — Write a pending debounced value when its control is destroyed - **added** — Add smart selection ranges for templates - **fixed** — Add missing options to angularCompilerOptions schema - **fixed** — Fall back when serializing protocol-relative URLs - **fixed** — Remove the navigate event abort listener once it fires - **fixed** — Reset internal state on error handler redirect after state commit ###### compiler | Commit | Description | | -- | -- | | [![fix - ff0dbf1cd4](https://img.shields.io/badge/ff0dbf1cd4-fix-green)](https://github.com/angular/angular/commit/ff0dbf1cd47bb2a252ae87719dd193a8fbb064e2) | avoid leaking ::ng-deep detection state between rules | | [![fix - 0bd78b80b9](https://img.shields.io/badge/0bd78b80b9-fix-green)](https://github.com/angular/angular/commit/0bd78b80b9682d8db54d66620158f820c21f0796) | avoid prototype lookups when resolving entities | | [![fix - a9d6b2fff9](https://img.shields.io/badge/a9d6b2fff9-fix-green)](https://github.com/angular/angular/commit/a9d6b2fff90827338127710d513760e1f4ee1b42) | correctly match directives on `<ng-template>` nested in various namespaces | | [![fix - 439d495aaa](https://img.shields.io/badge/439d495aaa-fix-green)](https://github.com/angular/angular/commit/439d495aaa53ebce35e46464a08b5fb10a5ecd61) | ignore `@let` declarations in the control flow content projection diagnostic | | [![fix - 0244a1cb31](https://img.shields.io/badge/0244a1cb31-fix-green)](https://github.com/angular/angular/commit/0244a1cb312835e500ea6003f54ead9b2347dc28) | match namespaced root nodes of control flow blocks against ng-content tag selectors | | [![fix - 97e6aa4a55](https://img.shields.io/badge/97e6aa4a55-fix-green)](https://github.com/angular/angular/commit/97e6aa4a5579e7c968231b0864a3b3890c348863) | strip script elements regardless of namespace | ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - 8dd33e726b](https://img.shields.io/badge/8dd33e726b-fix-green)](https://github.com/angular/angular/commit/8dd33e726b465167f5c5bc455267b0e7b133a1ad) | don't mark constructor parameter properties as inherited | | [![perf - b9f7c1fe82](https://img.shields.io/badge/b9f7c1fe82-perf-orange)](https://github.com/angular/angular/commit/b9f7c1fe827e1fe79499a051e9f3722aa9c23dde) | optimize missing directive extended checks | ###### core | Commit | Description | | -- | -- | | [![feat - 61fd731e6a](https://img.shields.io/badge/61fd731e6a-feat-blue)](https://github.com/angular/angular/commit/61fd731e6a524a0568e99a5b5ea49f8786825895) | add `scrollMargin` to `@defer` viewport options | | [![fix - e332260d73](https://img.shields.io/badge/e332260d73-fix-green)](https://github.com/angular/angular/commit/e332260d73e6e8672694ded25439ef95b1c91070) | defer afterRenderEffect sequences registered while hooks run | | [![fix - 17f689bf58](https://img.shields.io/badge/17f689bf58-fix-green)](https://github.com/angular/angular/commit/17f689bf58283e4721df6e206062c110f54e8b5e) | strip reserved character from translations | | [![fix - 3be586f930](https://img.shields.io/badge/3be586f930-fix-green)](https://github.com/angular/angular/commit/3be586f930dd8d0fc2a544de82604670c18f28f9) | untrack `onError` handler to prevent signal write exceptions | ###### forms | Commit | Description | | -- | -- | | [![fix - fc3dc890aa](https://img.shields.io/badge/fc3dc890aa-fix-green)](https://github.com/angular/angular/commit/fc3dc890aadca8ad4bfa109343c144b5f4530598) | don't crash when control is missing in setUpValidators | | [![fix - c0dc8c4bbe](https://img.shields.io/badge/c0dc8c4bbe-fix-green)](https://github.com/angular/angular/commit/c0dc8c4bbeea70879aef54e9fcc7888359dfd1a5) | skip class bindings for orphaned fields | | [![fix - e118e15527](https://img.shields.io/badge/e118e15527-fix-green)](https://github.com/angular/angular/commit/e118e155271b8c8b94cd08cb471635a461faf592) | use `Object.is` when comparing control bindings in signal forms | | [![fix - c58464d13e](https://img.shields.io/badge/c58464d13e-fix-green)](https://github.com/angular/angular/commit/c58464d13edc71cfbe00f1853fb0c23e6eca4e9f) | write a pending debounced value when its control is destroyed | ###### language-service | Commit | Description | | -- | -- | | [![feat - a7381e14b5](https://img.shields.io/badge/a7381e14b5-feat-blue)](https://github.com/angular/angular/commit/a7381e14b5616b423be4b6a28257cc4b1a561db2) | add smart selection ra _[Truncated at 4000 characters — full notes: https://github.com/angular/angular/releases/tag/v22.3.0-next.1]_ ### v22.2.2 — 22.2.2 - Date: 2026-10-08 - Version: v22.2.2 - Original notes: https://github.com/angular/angular/releases/tag/v22.2.2 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.2.2 - **fixed** — Avoid leaking ::ng-deep detection state between rules - **fixed** — Avoid prototype lookups when resolving entities - **fixed** — Correctly match directives on nested in various namespaces - **fixed** — Ignore @let declarations in the control flow content projection diagnostic - **fixed** — Match namespaced root nodes of control flow blocks against ng-content tag selectors - **fixed** — Strip script elements regardless of namespace - **fixed** — Don't mark constructor parameter properties as inherited - **changed** — Optimize missing directive extended checks - **fixed** — Defer afterRenderEffect sequences registered while hooks run - **fixed** — Strip reserved character from translations - **fixed** — Untrack onError handler to prevent signal write exceptions - **fixed** — Don't crash when control is missing in setUpValidators - **fixed** — Skip class bindings for orphaned fields - **fixed** — Use Object.is when comparing control bindings in signal forms - **fixed** — Write a pending debounced value when its control is destroyed - **added** — Add strictUnclaimedEventNames to angularCompilerOptions schema - **fixed** — Fall back when serializing protocol-relative URLs - **fixed** — Remove the navigate event abort listener once it fires - **fixed** — Reset internal state on error handler redirect after state commit ###### compiler | Commit | Description | | -- | -- | | [![fix - fa63bfad14](https://img.shields.io/badge/fa63bfad14-fix-green)](https://github.com/angular/angular/commit/fa63bfad14dfb94d2985d7e486c8b0b98c231e52) | avoid leaking ::ng-deep detection state between rules | | [![fix - 5744e7575c](https://img.shields.io/badge/5744e7575c-fix-green)](https://github.com/angular/angular/commit/5744e7575ccdcc1363ad65d0626baf0ccc3c62ae) | avoid prototype lookups when resolving entities | | [![fix - 97e57157e4](https://img.shields.io/badge/97e57157e4-fix-green)](https://github.com/angular/angular/commit/97e57157e46d8bd0edb9ef5b1d92985b1276c4e6) | correctly match directives on `<ng-template>` nested in various namespaces | | [![fix - 0474258a5a](https://img.shields.io/badge/0474258a5a-fix-green)](https://github.com/angular/angular/commit/0474258a5a0a01fd866b242863d8ef57e2d4c9b5) | ignore `@let` declarations in the control flow content projection diagnostic | | [![fix - 725ffcf4fa](https://img.shields.io/badge/725ffcf4fa-fix-green)](https://github.com/angular/angular/commit/725ffcf4fa6e1105d7e7f092ef4bb4865d568011) | match namespaced root nodes of control flow blocks against ng-content tag selectors | | [![fix - 5ff83c11fe](https://img.shields.io/badge/5ff83c11fe-fix-green)](https://github.com/angular/angular/commit/5ff83c11fe38587b6bf484b4b7435bb57874e41a) | strip script elements regardless of namespace | ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - 01949c53a6](https://img.shields.io/badge/01949c53a6-fix-green)](https://github.com/angular/angular/commit/01949c53a611a08b2096f0ef382dc290895ecd0e) | don't mark constructor parameter properties as inherited | | [![perf - f43c63f70c](https://img.shields.io/badge/f43c63f70c-perf-orange)](https://github.com/angular/angular/commit/f43c63f70cfd3cd407807e50ea309d142dfd8c73) | optimize missing directive extended checks | ###### core | Commit | Description | | -- | -- | | [![fix - 095644168e](https://img.shields.io/badge/095644168e-fix-green)](https://github.com/angular/angular/commit/095644168e856a643c44074555103c645ed28e24) | defer afterRenderEffect sequences registered while hooks run | | [![fix - a312520447](https://img.shields.io/badge/a312520447-fix-green)](https://github.com/angular/angular/commit/a312520447a51744044e8177f8600607629fb034) | strip reserved character from translations | | [![fix - 74bc86d8b2](https://img.shields.io/badge/74bc86d8b2-fix-green)](https://github.com/angular/angular/commit/74bc86d8b21c9b48e22adf36923a83c254e00de0) | untrack `onError` handler to prevent signal write exceptions | ###### forms | Commit | Description | | -- | -- | | [![fix - b0710b8db6](https://img.shields.io/badge/b0710b8db6-fix-green)](https://github.com/angular/angular/commit/b0710b8db6fc86b8cc1f901ffe2d45787c2ab944) | don't crash when control is missing in setUpValidators | | [![fix - ef0359676c](https://img.shields.io/badge/ef0359676c-fix-green)](https://github.com/angular/angular/commit/ef0359676c8e25e363ee39e8060cf13933cfe1d9) | skip class bindings for orphaned fields | | [![fix - c91a8c429d](https://img.shields.io/badge/c91a8c429d-fix-green)](https://github.com/angular/angular/commit/c91a8c429db610df790d5ad8168087b0f726a34d) | use `Object.is` when comparing control bindings in signal forms | | [![fix - 6cd3a8a929](https://img.shields.io/badge/6cd3a8a929-fix-green)](https://github.com/angular/angular/commit/6cd3a8a9292ba48ac5b63472e3d2d47e2c3779b6) | write a pending debounced value when its control is destroyed | ###### language-service | Commit | Description | | -- | -- | | [![fix - 6c44a9ecc5](https://img.shields.io/badge/6c44a9ecc5-fix-green)](https://github.com/angular/angular/commit/6c44a9ecc57d5474f4fd793458b9b38249090cdb) | add strictUnclaimedEventNames to angularCompilerOptions schema | ###### router | Commit | Description | | -- | -- | | [![fix - 576df28471](https://img.shields.io/badge/576df28471-fix-green)](https://github.com/angular/angular/commit/57 _[Truncated at 4000 characters — full notes: https://github.com/angular/angular/releases/tag/v22.2.2]_ ### v22.3.0-next.0 — 22.3.0-next.0 - Date: 2026-09-30 - Version: v22.3.0-next.0 - Original notes: https://github.com/angular/angular/releases/tag/v22.3.0-next.0 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.3.0-next.0 - Labels: Pre-release - **fixed** — stop suppressing non-iterable values in @for expression - **fixed** — resolve base class defined via intermediate variable in dts - **fixed** — validate unknown element tags even when matched by attribute directives - **added** — support increment/decrement operators in expressions ###### compiler | Commit | Description | | -- | -- | | [![fix - 0ee0a16c4a](https://img.shields.io/badge/0ee0a16c4a-fix-green)](https://github.com/angular/angular/commit/0ee0a16c4ae92458757f79afbbfc1e3aa000eae6) | stop suppressing non-iterable values in `@for` expression | ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - a614bd23cd](https://img.shields.io/badge/a614bd23cd-fix-green)](https://github.com/angular/angular/commit/a614bd23cd9b0b4c0b8676bf72eadafa7a30e785) | resolve base class defined via intermediate variable in dts | | [![fix - 91b8391b3d](https://img.shields.io/badge/91b8391b3d-fix-green)](https://github.com/angular/angular/commit/91b8391b3d3fb23767834a373b68ab604f2f1655) | validate unknown element tags even when matched by attribute directives | ###### core | Commit | Description | | -- | -- | | [![feat - 6ea13efc20](https://img.shields.io/badge/6ea13efc20-feat-blue)](https://github.com/angular/angular/commit/6ea13efc20c9509237062b1aaa77dad8942b9b25) | support increment/decrement operators in expressions | ### v22.2.1 — 22.2.1 - Date: 2026-09-30 - Version: v22.2.1 - Original notes: https://github.com/angular/angular/releases/tag/v22.2.1 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.2.1 - **fixed** — let NgOptimizedImage pass a [srcset] binding through when srcset optimization is disabled - **fixed** — add explicit return types to generated functions - **fixed** — avoid incorrectly stripping parentheses in template pipeline - **fixed** — avoid stripping parentheses from some expressions - **fixed** — support extendedConfigCache in readConfiguration - **fixed** — add debugName on afterRenderEffect - **fixed** — block dangerous data: and vbscript: URLs in URL sanitizer - **fixed** — extend data: URL allowlist for non-executable MIME types - **fixed** — include signal and component name in NG0600 error message - **fixed** — render error boundary fallbacks after HMR - **fixed** — forward reportProgress of httpResource as reportDownloadProgress - **fixed** — reject protocol-relative paths in resolveUrl - **fixed** — do not copy URL-sized objects into every route snapshot - **fixed** — fall back when serializing protocol-relative URLs - **fixed** — limit absolute redirects from redirect functions - **fixed** — reject duplicate outlets in production builds - **fixed** — require outlets to match a route before processing child segments - **fixed** — set initial blocking resource input synchronously on activation - **changed** — do not retain UrlTree instances in RouterLink ###### common | Commit | Description | | -- | -- | | [![fix - ad2f291ba0](https://img.shields.io/badge/ad2f291ba0-fix-green)](https://github.com/angular/angular/commit/ad2f291ba06a7d6807f1fde6641502f455f248e5) | let NgOptimizedImage pass a [srcset] binding through when srcset optimization is disabled | ###### compiler | Commit | Description | | -- | -- | | [![fix - 0ecaf8e7ab](https://img.shields.io/badge/0ecaf8e7ab-fix-green)](https://github.com/angular/angular/commit/0ecaf8e7ab8d52957dc314a09d52b4e6da500f11) | add explicit return types to generated functions | | [![fix - c451a3b98d](https://img.shields.io/badge/c451a3b98d-fix-green)](https://github.com/angular/angular/commit/c451a3b98d405521bf3a4970e20d20bd5b578415) | avoid incorrectly stripping parentheses in template pipeline | | [![fix - bbc556daa9](https://img.shields.io/badge/bbc556daa9-fix-green)](https://github.com/angular/angular/commit/bbc556daa9d83b6bf1bfa88f6239ae8210ac6a00) | avoid stripping parentheses from some expressions | ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - fe9ebf5bf5](https://img.shields.io/badge/fe9ebf5bf5-fix-green)](https://github.com/angular/angular/commit/fe9ebf5bf5ef8a56bc20b2de8115d4b1a1ed299a) | support extendedConfigCache in readConfiguration | ###### core | Commit | Description | | -- | -- | | [![fix - 21851fc3a3](https://img.shields.io/badge/21851fc3a3-fix-green)](https://github.com/angular/angular/commit/21851fc3a38258a68d62d966bf5202d6f4e23df1) | add debugName on afterRenderEffect | | [![fix - 7c634ecec4](https://img.shields.io/badge/7c634ecec4-fix-green)](https://github.com/angular/angular/commit/7c634ecec442d71e023ad8ec1976c2791d547bf8) | block dangerous data: and vbscript: URLs in URL sanitizer | | [![fix - 9aeef8df6f](https://img.shields.io/badge/9aeef8df6f-fix-green)](https://github.com/angular/angular/commit/9aeef8df6f8c49270ff67aa7656419b65d4df993) | extend data: URL allowlist for non-executable MIME types | | [![fix - f5e8edc5a6](https://img.shields.io/badge/f5e8edc5a6-fix-green)](https://github.com/angular/angular/commit/f5e8edc5a6faa798a958548e90f91aaefeee9484) | include signal and component name in NG0600 error message | | [![fix - 88614a5407](https://img.shields.io/badge/88614a5407-fix-green)](https://github.com/angular/angular/commit/88614a54070c194a281ccc116a54d2b7e7546f92) | render error boundary fallbacks after HMR | ###### http | Commit | Description | | -- | -- | | [![fix - 6dee7fe91c](https://img.shields.io/badge/6dee7fe91c-fix-green)](https://github.com/angular/angular/commit/6dee7fe91c95fc0de80bde547f5c904c4bb3391b) | forward `reportProgress` of `httpResource` as `reportDownloadProgress` | ###### platform-server | Commit | Description | | -- | -- | | [![fix - 928dcfd258](https://img.shields.io/badge/928dcfd258-fix-green)](https://github.com/angular/angular/commit/928dcfd2582152655b5559509d057bf6a5a19521) | reject protocol-relative paths in resolveUrl | ###### router | Commit | Description | | -- | -- | | [![fix - 568d6a83a2](https://img.shields.io/badge/568d6a83a2-fix-green)](https://github.com/angular/angular/commit/568d6a83a23b37f519ba564f79f7a03bbdfb6893) | do not copy URL-sized objects into every route snapshot | | [![fix - a6e6097b3d](https://img.shields.io/badge/a6e6097b3d-fix-green)](https://github.com/angular/angular/commit/a6e6097b3d0d60f2d7057bfb261c9e4776b2b0b1) | fall back when serializing protocol-relative URLs | | [![fix - 8b6dd5e947](https://img.shields.io/badge/8b6dd5e947-fix-green)](https://github.com/angular/angular/commit/8b6dd5e947d74af79d50f1bace38b3229b451bab) | limit absolute redirects from redirect functions | | [![fix - 3b6796f1ab](https://img.shields.io/badge/3b6796f1ab-fix-green)](https://github.com/angular/angular/commit/3b6796f1ab279ab26b33d4e29e576d3b1762ccf5) | reject duplicate outlets in production builds | | [![fix - e9bf52aa03](https://img.shields.io/badge/e9bf52aa03-fix-green)](https://github.com/angular/angular/commit/e9bf52aa03a3b9b302c33ffbc967ef0e1de5fb7 _[Truncated at 4000 characters — full notes: https://github.com/angular/angular/releases/tag/v22.2.1]_ ### v21.2.25 — 21.2.25 - Date: 2026-09-30 - Version: v21.2.25 - Original notes: https://github.com/angular/angular/releases/tag/v21.2.25 - Permalink: https://whatsnew.fyi/product/angular/releases/v21.2.25 - **fixed** — Reject protocol-relative paths in resolveUrl - **fixed** — Do not copy URL-sized objects into every route snapshot - **fixed** — Reject duplicate outlets in production builds - **fixed** — Require outlets to match a route before processing child segments - **changed** — Do not retain UrlTree instances in RouterLink ###### platform-server | Commit | Description | | -- | -- | | [![fix - 450af9c813](https://img.shields.io/badge/450af9c813-fix-green)](https://github.com/angular/angular/commit/450af9c813c7660b9bd91e5635f705ee3ed7b32a) | reject protocol-relative paths in resolveUrl | ###### router | Commit | Description | | -- | -- | | [![fix - 4bc11a546b](https://img.shields.io/badge/4bc11a546b-fix-green)](https://github.com/angular/angular/commit/4bc11a546be9e66ee5c40b48d7a8a5d014609987) | do not copy URL-sized objects into every route snapshot | | [![fix - 6489ca5d84](https://img.shields.io/badge/6489ca5d84-fix-green)](https://github.com/angular/angular/commit/6489ca5d8460a9ed8ae4daf7b0c24ec052f20398) | reject duplicate outlets in production builds | | [![fix - a83f8119ac](https://img.shields.io/badge/a83f8119ac-fix-green)](https://github.com/angular/angular/commit/a83f8119acd466b524ae0113096ed188358d6d6c) | require outlets to match a route before processing child segments | | [![perf - a131f77d92](https://img.shields.io/badge/a131f77d92-perf-orange)](https://github.com/angular/angular/commit/a131f77d92808ad5c2f3fa4dc6fde36825f12c5a) | do not retain UrlTree instances in RouterLink | ### v20.3.33 — 20.3.33 - Date: 2026-09-30 - Version: v20.3.33 - Original notes: https://github.com/angular/angular/releases/tag/v20.3.33 - Permalink: https://whatsnew.fyi/product/angular/releases/v20.3.33 - **fixed** — Reject protocol-relative paths in resolveUrl - **fixed** — Do not copy URL-sized objects into every route snapshot - **fixed** — Reject duplicate outlets in production builds - **fixed** — Require outlets to match a route before processing child segments ###### platform-server | Commit | Description | | -- | -- | | [![fix - 83944fc8c5](https://img.shields.io/badge/83944fc8c5-fix-green)](https://github.com/angular/angular/commit/83944fc8c50e86be90e8ec4184cd15002b5af262) | reject protocol-relative paths in resolveUrl | ###### router | Commit | Description | | -- | -- | | [![fix - 142f187b3c](https://img.shields.io/badge/142f187b3c-fix-green)](https://github.com/angular/angular/commit/142f187b3c8e956aade5457f7f9c8ed73754979b) | do not copy URL-sized objects into every route snapshot | | [![fix - cd8efcb924](https://img.shields.io/badge/cd8efcb924-fix-green)](https://github.com/angular/angular/commit/cd8efcb924d26464bc42ee436d39e10784cfc240) | reject duplicate outlets in production builds | | [![fix - b0d2ba0f54](https://img.shields.io/badge/b0d2ba0f54-fix-green)](https://github.com/angular/angular/commit/b0d2ba0f54e21cb57ea5a0ca0d8e6065f28e23a0) | require outlets to match a route before processing child segments | ### vsix-22.2.0 — VSCode Extension: 22.2.0 - Date: 2026-09-25 - Version: vsix-22.2.0 - Original notes: https://github.com/angular/angular/releases/tag/vsix-22.2.0 - Permalink: https://whatsnew.fyi/product/angular/releases/vsix-22.2.0 - **fixed** — Support inlay hint in inline templates - **fixed** — Provide folding ranges for templates with interpolated strings - **fixed** — Handle template literals when detecting supported decorator fields - **added** — Add support for @boundary blocks - fix(vscode-extension): Support inlay hint in inline templates ([c11920da48](https://github.com/angular/angular/commit/c11920da485169419c372b9d38d4bd6f874959c1)) - fix(vscode-extension): provide folding ranges for templates with interpolated strings ([5c927fba0d](https://github.com/angular/angular/commit/5c927fba0d36c3953e27a60d2a7f161a956f1add)) - fix(vscode-extension): handle template literals when detecting supported decorator fields ([f2cf65a898](https://github.com/angular/angular/commit/f2cf65a8988598e3ab76045055bcaaa840e29117)) - feat(language-service): add support for @boundary blocks (#70463) ([f4a5650ed9](https://github.com/angular/angular/commit/f4a5650ed9c71a8ee1dbd3003e13900464827757)) ### v22.2.0 — 22.2.0 - Date: 2026-09-23 - Version: v22.2.0 - Original notes: https://github.com/angular/angular/releases/tag/v22.2.0 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.2.0 - **added** — Allow templates to access private properties - **added** — Add strictUnclaimedEventNames option to catch misspelled output bindings - **added** — Add scope type-checking of keyed defer blocks - **added** — Add ErrorBoundary programmatic APIs - **added** — Add utility for testing directives - **added** — Allow reading Injector from a view or content query - **added** — Support annotations in WebMCP tool declarations - **added** — Allow permanent hidden fields in signal forms - **added** — Hard-code readOnlyHint and untrustedContentHint for WebMCP implicit signal forms - **added** — Add support for @boundary blocks - **added** — Add containsTree as public API - **added** — Allow throwing RedirectCommand to trigger redirects - **added** — Expose router resources in public API - **added** — Stabilize auto cleanup injectors feature - **fixed** — Do not encapsulate nested selectors if parent contains ::ng-deep - **fixed** — Scope nested CSS rules - **fixed** — Deduplicate deferred imports across multiple blocks - **fixed** — Cancel leave animations in nested views during list reordering - **fixed** — Support function and signal bindings in animate.enter and animate.leave - **fixed** — Update FakeNavigation to match WHATWG HTML spec ###### compiler | Commit | Description | | -- | -- | | [![feat - 48a0fd6e8a](https://img.shields.io/badge/48a0fd6e8a-feat-blue)](https://github.com/angular/angular/commit/48a0fd6e8a8d14bdc1d901ee5615f4b0ab698fe8) | allow template to access private props | | [![fix - a4f1a94948](https://img.shields.io/badge/a4f1a94948-fix-green)](https://github.com/angular/angular/commit/a4f1a949486d20ce2bf9add427eea6629228b28b) | do not encapsulate nested selectors if parent contains ::ng-deep | | [![fix - d0d7f57e08](https://img.shields.io/badge/d0d7f57e08-fix-green)](https://github.com/angular/angular/commit/d0d7f57e0810a24ba16dbb1f2ab9f079a096fa3d) | scope nested CSS rules | ###### compiler-cli | Commit | Description | | -- | -- | | [![feat - 312e1d8089](https://img.shields.io/badge/312e1d8089-feat-blue)](https://github.com/angular/angular/commit/312e1d808902116fb8cd4e02d936260113453999) | add strictUnclaimedEventNames option to catch misspelled output bindings | | [![feat - 7d9f55da11](https://img.shields.io/badge/7d9f55da11-feat-blue)](https://github.com/angular/angular/commit/7d9f55da11319da8f273d9edcd38ff2983bdbb0c) | scope type-checking of keyed defer blocks | | [![fix - 2e2c426e76](https://img.shields.io/badge/2e2c426e76-fix-green)](https://github.com/angular/angular/commit/2e2c426e7609de551dafb6360e6373333a278c4e) | deduplicate deferred imports across multiple blocks | ###### core | Commit | Description | | -- | -- | | [![feat - f6afb807c1](https://img.shields.io/badge/f6afb807c1-feat-blue)](https://github.com/angular/angular/commit/f6afb807c1e62d26b8b665f2b4a9a52c2433a673) | add ErrorBoundary programmatic APIs (#70463) | | [![feat - 05c4d5a835](https://img.shields.io/badge/05c4d5a835-feat-blue)](https://github.com/angular/angular/commit/05c4d5a8354228100b51176f295ed5dee4f3febc) | add utility for testing directives | | [![feat - bd9b45b5cc](https://img.shields.io/badge/bd9b45b5cc-feat-blue)](https://github.com/angular/angular/commit/bd9b45b5cc1dd904cc4a5de45f6de8e1564b70b6) | allow reading `Injector` from a view or content query | | [![feat - 91a2bf8425](https://img.shields.io/badge/91a2bf8425-feat-blue)](https://github.com/angular/angular/commit/91a2bf84250f9b0a28a8a68e1eded6e9506bc5e9) | support annotations in WebMCP tool declarations | | [![fix - af2c7e386d](https://img.shields.io/badge/af2c7e386d-fix-green)](https://github.com/angular/angular/commit/af2c7e386d8c88fe6c27b148bb84ee0e26662e5b) | cancel leave animations in nested views during list reordering | | [![fix - de5889ec4f](https://img.shields.io/badge/de5889ec4f-fix-green)](https://github.com/angular/angular/commit/de5889ec4fab2b337e394eb994c8d428272d5ec9) | support function and signal bindings in animate.enter and animate.leave | | [![fix - a8233232f5](https://img.shields.io/badge/a8233232f5-fix-green)](https://github.com/angular/angular/commit/a8233232f5ade21a15a6645135accd21cf041b1e) | update FakeNavigation to match WHATWG HTML spec | ###### forms | Commit | Description | | -- | -- | | [![feat - d5e8b1ef7a](https://img.shields.io/badge/d5e8b1ef7a-feat-blue)](https://github.com/angular/angular/commit/d5e8b1ef7a02c84d4fd70a6b4d748ead9ff815bf) | allow permanent hidden fields in signal forms | | [![feat - 6e299da8cf](https://img.shields.io/badge/6e299da8cf-feat-blue)](https://github.com/angular/angular/commit/6e299da8cfc7df49029d5d8bb7d5739560e1aaa4) | hard-code `readOnlyHint` and `untrustedContentHint` for WebMCP implicit signal forms | ###### language-service | Commit | Description | | -- | -- | | [![feat - f4a5650ed9](https://img.shields.io/badge/f4a5650ed9-feat-blue)](https://github.com/angular/angular/commit/f4a5650ed9c71a8ee1dbd3003e13900464827757) | add support for `@boundary` blocks (#70463) | ###### router | Commit | Description | | -- | -- | | [![feat - 2720362818](https://img.shields.io/badge/2720362818-feat-blue)](https://github.com/angular/angular/commit/2720362818cdeb2a940171e4ab6f21cf78c6a302) | add containsTree as public API | | [![feat - b65dea4f03](https:// _[Truncated at 4000 characters — full notes: https://github.com/angular/angular/releases/tag/v22.2.0]_ ### v21.2.24 — 21.2.24 - Date: 2026-09-23 - Version: v21.2.24 - Original notes: https://github.com/angular/angular/releases/tag/v21.2.24 - Permalink: https://whatsnew.fyi/product/angular/releases/v21.2.24 - **fixed** — avoid dense elements allocation for numeric URL keys in router ###### router | Commit | Description | | -- | -- | | [![fix - 03872a80bc](https://img.shields.io/badge/03872a80bc-fix-green)](https://github.com/angular/angular/commit/03872a80bcf1c89b2b04cdd3f444b2ee954da583) | avoid dense elements allocation for numeric URL keys | ### v20.3.32 — 20.3.32 - Date: 2026-09-23 - Version: v20.3.32 - Original notes: https://github.com/angular/angular/releases/tag/v20.3.32 - Permalink: https://whatsnew.fyi/product/angular/releases/v20.3.32 - **fixed** — avoid dense elements allocation for numeric URL keys in router ###### router | Commit | Description | | -- | -- | | [![fix - ddfe21072b](https://img.shields.io/badge/ddfe21072b-fix-green)](https://github.com/angular/angular/commit/ddfe21072ba32ca4cd9d7d3c6b7df66af81d58c4) | avoid dense elements allocation for numeric URL keys | ### v22.1.8 — 22.1.8 - Date: 2026-09-23 - Version: v22.1.8 - Original notes: https://github.com/angular/angular/releases/tag/v22.1.8 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.1.8 - **fixed** — Remove abort listener on the abort path in httpResource - **fixed** — Add return type to pure functions in compiler - **fixed** — Avoid hitting TypeScript limits if template has many translations - **fixed** — Do not copy expression type into output AST variables - **fixed** — Guard unverified constructor parameter types in class metadata - **fixed** — Output function return types in linker - **fixed** — Don't use plain objects as maps for jsaction data - **fixed** — Ensure references are cleared from idle scheduler - **fixed** — Loosen return types for arrow functions in generated code - **fixed** — Wait for app stability before cleaning up dehydrated views - **fixed** — Create controls before listeners in forms - **fixed** — Preserve Unicode whitespace in ServerXhr URLs - **fixed** — Avoid dense elements allocation for numeric URL keys in router ###### common | Commit | Description | | -- | -- | | [![fix - 850db9d999](https://img.shields.io/badge/850db9d999-fix-green)](https://github.com/angular/angular/commit/850db9d9997d026542eb4626aff3e2bf02ab9290) | remove abort listener on the abort path too in httpResource | ###### compiler | Commit | Description | | -- | -- | | [![fix - 4e5f4c38a7](https://img.shields.io/badge/4e5f4c38a7-fix-green)](https://github.com/angular/angular/commit/4e5f4c38a7eae17262d32f26c06f62d0e5203df8) | add return type to pure functions | | [![fix - 02e83dc288](https://img.shields.io/badge/02e83dc288-fix-green)](https://github.com/angular/angular/commit/02e83dc28846c735744ab8769690dba0b62b5db2) | avoid hitting TypeScript limits if template has many translations | | [![fix - 024ebe668c](https://img.shields.io/badge/024ebe668c-fix-green)](https://github.com/angular/angular/commit/024ebe668c27668e3cc48023ba48ef24468bdfbb) | do not copy expression type into output AST variables | | [![fix - b3c5824bd6](https://img.shields.io/badge/b3c5824bd6-fix-green)](https://github.com/angular/angular/commit/b3c5824bd643f06e28fc298779fc31c3095ed092) | guard unverified ctor parameter types in class metadata | ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - fe671d9024](https://img.shields.io/badge/fe671d9024-fix-green)](https://github.com/angular/angular/commit/fe671d9024d737b0304cc66366450e6fa0560cd9) | output function return types in linker | ###### core | Commit | Description | | -- | -- | | [![fix - d7d5401cd5](https://img.shields.io/badge/d7d5401cd5-fix-green)](https://github.com/angular/angular/commit/d7d5401cd5e8ce23d8bb3f0e7ae08323b307d0d5) | don't use plain objects as maps for jsaction data | | [![fix - c3e8f29b3f](https://img.shields.io/badge/c3e8f29b3f-fix-green)](https://github.com/angular/angular/commit/c3e8f29b3f898ee5377b0110683fe9dc2808c116) | ensure references are cleared from idle scheduler | | [![fix - 9b854f6e76](https://img.shields.io/badge/9b854f6e76-fix-green)](https://github.com/angular/angular/commit/9b854f6e760b6b6a710f43ca9edafe9f79aed538) | loosen return types for arrow functions in generated code | | [![fix - cfa8967683](https://img.shields.io/badge/cfa8967683-fix-green)](https://github.com/angular/angular/commit/cfa896768301bf74c2e09e35d9a03cc6d2d2a885) | wait for app stability before cleaning up dehydrated views | ###### forms | Commit | Description | | -- | -- | | [![fix - 78c7ab3926](https://img.shields.io/badge/78c7ab3926-fix-green)](https://github.com/angular/angular/commit/78c7ab392627d87d76df3e28df5cda2449d93a68) | create controls before listeners | ###### platform-server | Commit | Description | | -- | -- | | [![fix - 330083f250](https://img.shields.io/badge/330083f250-fix-green)](https://github.com/angular/angular/commit/330083f250fe3be6b415be1ea7d6905e7511b5b9) | preserve Unicode whitespace in ServerXhr URLs | ###### router | Commit | Description | | -- | -- | | [![fix - 2cab6f5964](https://img.shields.io/badge/2cab6f5964-fix-green)](https://github.com/angular/angular/commit/2cab6f59649af47dd86e2fc7dd0dd269209c58bc) | avoid dense elements allocation for numeric URL keys | ### v22.2.0-rc.0 — 22.2.0-rc.0 - Date: 2026-09-16 - Version: v22.2.0-rc.0 - Original notes: https://github.com/angular/angular/releases/tag/v22.2.0-rc.0 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.2.0-rc.0 - Labels: Pre-release - **fixed** — wrap @for collection expression before appending non-null assertion - **added** — add strictUnclaimedEventNames option to catch misspelled output bindings - **fixed** — return null when getDirectiveMetadata is called with null or undefined - **fixed** — update FakeNavigation to match WHATWG HTML spec - **fixed** — mark control as dirty before setting its value in FVC interop - **fixed** — maintain frozen state on rollback until resource loading completes - **fixed** — mark router_resource module-level symbols as side-effect free ###### compiler | Commit | Description | | -- | -- | | [![fix - 14dbbf9b68](https://img.shields.io/badge/14dbbf9b68-fix-green)](https://github.com/angular/angular/commit/14dbbf9b68474a442a295ae165543c8923eae4b8) | wrap `@for` collection expression before appending non-null assertion | ###### compiler-cli | Commit | Description | | -- | -- | | [![feat - 312e1d8089](https://img.shields.io/badge/312e1d8089-feat-blue)](https://github.com/angular/angular/commit/312e1d808902116fb8cd4e02d936260113453999) | add strictUnclaimedEventNames option to catch misspelled output bindings | ###### core | Commit | Description | | -- | -- | | [![fix - cea6896a0f](https://img.shields.io/badge/cea6896a0f-fix-green)](https://github.com/angular/angular/commit/cea6896a0fef4fa4f37a4c7a43c7a880900eb21d) | return null when getDirectiveMetadata is called with null or undefined | | [![fix - a8233232f5](https://img.shields.io/badge/a8233232f5-fix-green)](https://github.com/angular/angular/commit/a8233232f5ade21a15a6645135accd21cf041b1e) | update FakeNavigation to match WHATWG HTML spec | ###### forms | Commit | Description | | -- | -- | | [![fix - 15bfc1a4be](https://img.shields.io/badge/15bfc1a4be-fix-green)](https://github.com/angular/angular/commit/15bfc1a4befdef22188c23a4d0313140595012fd) | mark control as dirty before setting its value in FVC interop | ###### router | Commit | Description | | -- | -- | | [![fix - 2c6c67bee6](https://img.shields.io/badge/2c6c67bee6-fix-green)](https://github.com/angular/angular/commit/2c6c67bee675a67eff2c2d219dcb88cc1c305190) | maintain frozen state on rollback until resource loading completes | | [![fix - 2dcdf9aae6](https://img.shields.io/badge/2dcdf9aae6-fix-green)](https://github.com/angular/angular/commit/2dcdf9aae637a247d1a9bdcf03c740d0b3036cd0) | mark router_resource module-level symbols as side-effect free | ### v22.1.7 — 22.1.7 - Date: 2026-09-16 - Version: v22.1.7 - Original notes: https://github.com/angular/angular/releases/tag/v22.1.7 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.1.7 - **fixed** — wrap @for collection expression before appending non-null assertion - **fixed** — return null when getDirectiveMetadata is called with null or undefined - **fixed** — mark control as dirty before setting its value in FVC interop ###### compiler | Commit | Description | | -- | -- | | [![fix - 5e632b639f](https://img.shields.io/badge/5e632b639f-fix-green)](https://github.com/angular/angular/commit/5e632b639f736de876823a596dd9e3a094b03e1b) | wrap `@for` collection expression before appending non-null assertion | ###### core | Commit | Description | | -- | -- | | [![fix - ec48c8305c](https://img.shields.io/badge/ec48c8305c-fix-green)](https://github.com/angular/angular/commit/ec48c8305c40fbafbab51801f93bb4e4b6a25ea0) | return null when getDirectiveMetadata is called with null or undefined | ###### forms | Commit | Description | | -- | -- | | [![fix - 6555c4ee1e](https://img.shields.io/badge/6555c4ee1e-fix-green)](https://github.com/angular/angular/commit/6555c4ee1ec2aea7eb541d558981b55eb751497c) | mark control as dirty before setting its value in FVC interop | ### v22.2.0-next.7 — 22.2.0-next.7 - Date: 2026-09-09 - Version: v22.2.0-next.7 - Original notes: https://github.com/angular/angular/releases/tag/v22.2.0-next.7 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.2.0-next.7 - Labels: Pre-release No user facing changes in this release ### v22.2.0-next.6 — 22.2.0-next.6 - Date: 2026-09-09 - Version: v22.2.0-next.6 - Original notes: https://github.com/angular/angular/releases/tag/v22.2.0-next.6 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.2.0-next.6 - Labels: Pre-release - **fixed** — namespace @property declarations - **fixed** — do not flag callable objects with zero parameters in uninvoked track function check - **added** — add ErrorBoundary programmatic APIs - **added** — allow reading Injector from a view or content query - **fixed** — apply SkipSelf to only the starting node in embedded views - **added** — add support for @boundary blocks - **fixed** — avoid sourcemap corruption during domino path substitution - **added** — expose router resources in public API - **fixed** — determine blocking state solely by resource loading status - **fixed** — keep detached route subtree contexts isolated and intact ###### compiler | Commit | Description | | -- | -- | | [![fix - 9b80d4ce9e](https://img.shields.io/badge/9b80d4ce9e-fix-green)](https://github.com/angular/angular/commit/9b80d4ce9e00d50d471c1a1a98ab67ec53fbce5f) | namespace `@property` declarations | ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - f0a271c7bd](https://img.shields.io/badge/f0a271c7bd-fix-green)](https://github.com/angular/angular/commit/f0a271c7bd4be000c52592034573cda9866f26bb) | do not flag callable objects with zero parameters in uninvoked track function check | ###### core | Commit | Description | | -- | -- | | [![feat - f6afb807c1](https://img.shields.io/badge/f6afb807c1-feat-blue)](https://github.com/angular/angular/commit/f6afb807c1e62d26b8b665f2b4a9a52c2433a673) | add ErrorBoundary programmatic APIs (#70463) | | [![feat - bd9b45b5cc](https://img.shields.io/badge/bd9b45b5cc-feat-blue)](https://github.com/angular/angular/commit/bd9b45b5cc1dd904cc4a5de45f6de8e1564b70b6) | allow reading `Injector` from a view or content query | | [![fix - 70756b506c](https://img.shields.io/badge/70756b506c-fix-green)](https://github.com/angular/angular/commit/70756b506c508faa908fe8917e1f6937bcd6df77) | apply SkipSelf to only the starting node in embedded views | ###### language-service | Commit | Description | | -- | -- | | [![feat - f4a5650ed9](https://img.shields.io/badge/f4a5650ed9-feat-blue)](https://github.com/angular/angular/commit/f4a5650ed9c71a8ee1dbd3003e13900464827757) | add support for `@boundary` blocks (#70463) | ###### platform-server | Commit | Description | | -- | -- | | [![fix - bc3a6cda5d](https://img.shields.io/badge/bc3a6cda5d-fix-green)](https://github.com/angular/angular/commit/bc3a6cda5d7c4ef9207ee6c6adbcd55b7bd7dcab) | avoid sourcemap corruption during domino path substitution | ###### router | Commit | Description | | -- | -- | | [![feat - 3064f3f1dc](https://img.shields.io/badge/3064f3f1dc-feat-blue)](https://github.com/angular/angular/commit/3064f3f1dccd78177bf3b86f8ea231102884f0d7) | expose router resources in public API | | [![fix - 094bce9e3d](https://img.shields.io/badge/094bce9e3d-fix-green)](https://github.com/angular/angular/commit/094bce9e3defe7e9fd56f951641f3bb74248d06a) | determine blocking state solely by resource loading status | | [![fix - 8227e5cf6d](https://img.shields.io/badge/8227e5cf6d-fix-green)](https://github.com/angular/angular/commit/8227e5cf6d157d6e472f963da68a804813ad26ed) | keep detached route subtree contexts isolated and intact | ### v22.1.6 — 22.1.6 - Date: 2026-09-09 - Version: v22.1.6 - Original notes: https://github.com/angular/angular/releases/tag/v22.1.6 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.1.6 - **fixed** — Namespace @property declarations in compiler - **fixed** — Do not flag callable objects with zero parameters in uninvoked track function check - **fixed** — Apply SkipSelf to only the starting node in embedded views - **fixed** — Avoid sourcemap corruption during domino path substitution - **fixed** — Keep detached route subtree contexts isolated and intact ###### compiler | Commit | Description | | -- | -- | | [![fix - cbb8702143](https://img.shields.io/badge/cbb8702143-fix-green)](https://github.com/angular/angular/commit/cbb8702143bd04b68253758dbc2c4a8fb49c0237) | namespace `@property` declarations | ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - aea121e532](https://img.shields.io/badge/aea121e532-fix-green)](https://github.com/angular/angular/commit/aea121e53217a7f74d2a8e4a7a6bf0f3a96b7c49) | do not flag callable objects with zero parameters in uninvoked track function check | ###### core | Commit | Description | | -- | -- | | [![fix - c19b948ef8](https://img.shields.io/badge/c19b948ef8-fix-green)](https://github.com/angular/angular/commit/c19b948ef8d34e5a15e41cd5a88cdd4bda848f8f) | apply SkipSelf to only the starting node in embedded views | ###### platform-server | Commit | Description | | -- | -- | | [![fix - d20a379583](https://img.shields.io/badge/d20a379583-fix-green)](https://github.com/angular/angular/commit/d20a37958318c898a72109480cee556e388cd78b) | avoid sourcemap corruption during domino path substitution | ###### router | Commit | Description | | -- | -- | | [![fix - 95c01e9cde](https://img.shields.io/badge/95c01e9cde-fix-green)](https://github.com/angular/angular/commit/95c01e9cdea251e09d321a01e9b982b2fe1b7873) | keep detached route subtree contexts isolated and intact | ### v20.3.31 — 20.3.31 - Date: 2026-09-09 - Version: v20.3.31 - Original notes: https://github.com/angular/angular/releases/tag/v20.3.31 - Permalink: https://whatsnew.fyi/product/angular/releases/v20.3.31 - **fixed** — update domino to latest version ###### platform-server | Commit | Description | | -- | -- | | [![fix - 3db26e2544](https://img.shields.io/badge/3db26e2544-fix-green)](https://github.com/angular/angular/commit/3db26e2544964d07a520836ad01f02f36ec88e25) | update domino to latest version | ### v21.2.23 — 21.2.23 - Date: 2026-09-09 - Version: v21.2.23 - Original notes: https://github.com/angular/angular/releases/tag/v21.2.23 - Permalink: https://whatsnew.fyi/product/angular/releases/v21.2.23 - **fixed** — Update domino to latest version in platform-server ###### platform-server | Commit | Description | | -- | -- | | [![fix - fc2e8fbc0b](https://img.shields.io/badge/fc2e8fbc0b-fix-green)](https://github.com/angular/angular/commit/fc2e8fbc0bda2f5c11585e8a0cbd88c074f5e567) | update domino to latest version | ### v22.2.0-next.5 — 22.2.0-next.5 - Date: 2026-09-03 - Version: v22.2.0-next.5 - Original notes: https://github.com/angular/angular/releases/tag/v22.2.0-next.5 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.2.0-next.5 - Labels: Pre-release - **fixed** — check uninvoked signal aliases in extended diagnostic - **added** — add utility for testing directives - **added** — support annotations in WebMCP tool declarations - **fixed** — cancel stale debounce timers to prevent timer leaks - **fixed** — don't fail NgModule checks for a pipe that extends a base class - **fixed** — validate SVG animation attributes outside the SVG namespace - **added** — hard-code readOnlyHint and untrustedContentHint for WebMCP implicit signal forms - **fixed** — avoid writing to name input on ControlValueAccessor - **fixed** — skip tsconfig files of non-Angular projects - **fixed** — resolve HTTP(S) URLs without authority as relative during SSR - **changed** — stabilize auto cleanup injectors feature - **fixed** — avoid view transitions when the user agent provides one ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - faafd18a4c](https://img.shields.io/badge/faafd18a4c-fix-green)](https://github.com/angular/angular/commit/faafd18a4c0c5db161e5d7056e9abfb8675904cb) | check uninvoked signal aliases in extended diagnostic | ###### core | Commit | Description | | -- | -- | | [![feat - 05c4d5a835](https://img.shields.io/badge/05c4d5a835-feat-blue)](https://github.com/angular/angular/commit/05c4d5a8354228100b51176f295ed5dee4f3febc) | add utility for testing directives | | [![feat - 91a2bf8425](https://img.shields.io/badge/91a2bf8425-feat-blue)](https://github.com/angular/angular/commit/91a2bf84250f9b0a28a8a68e1eded6e9506bc5e9) | support annotations in WebMCP tool declarations | | [![fix - 0904f90b13](https://img.shields.io/badge/0904f90b13-fix-green)](https://github.com/angular/angular/commit/0904f90b13ac2a1bad22a2b43fb232957dba44c3) | cancel stale debounce timers to prevent timer leaks | | [![fix - 58d536bc83](https://img.shields.io/badge/58d536bc83-fix-green)](https://github.com/angular/angular/commit/58d536bc8362f3942c929e58be551d871b00cea7) | don't fail NgModule checks for a pipe that extends a base class | | [![fix - 7168bed663](https://img.shields.io/badge/7168bed663-fix-green)](https://github.com/angular/angular/commit/7168bed663ba2a53f087a68a251e8ccfd938eb97) | validate SVG animation attributes outside the SVG namespace | ###### forms | Commit | Description | | -- | -- | | [![feat - 6e299da8cf](https://img.shields.io/badge/6e299da8cf-feat-blue)](https://github.com/angular/angular/commit/6e299da8cfc7df49029d5d8bb7d5739560e1aaa4) | hard-code `readOnlyHint` and `untrustedContentHint` for WebMCP implicit signal forms | | [![fix - 38861ac41b](https://img.shields.io/badge/38861ac41b-fix-green)](https://github.com/angular/angular/commit/38861ac41bb373870e961f41626de6b6b31120f1) | avoid writing to `name` input on ControlValueAccessor | ###### migrations | Commit | Description | | -- | -- | | [![fix - f72600eadd](https://img.shields.io/badge/f72600eadd-fix-green)](https://github.com/angular/angular/commit/f72600eaddfa6a299526e922eb9ad5356be821a6) | skip tsconfig files of non-Angular projects | ###### platform-server | Commit | Description | | -- | -- | | [![fix - b3bb36ad87](https://img.shields.io/badge/b3bb36ad87-fix-green)](https://github.com/angular/angular/commit/b3bb36ad87334f7a86908c1b2b4353c1cc514c2e) | resolve HTTP(S) URLs without authority as relative during SSR | ###### router | Commit | Description | | -- | -- | | [![feat - 7137a41223](https://img.shields.io/badge/7137a41223-feat-blue)](https://github.com/angular/angular/commit/7137a41223079b4b172aeccb5031347fcc947b79) | stabilize auto cleanup injectors feature | | [![fix - af26a8c521](https://img.shields.io/badge/af26a8c521-fix-green)](https://github.com/angular/angular/commit/af26a8c52178a0e972c2841051db44f9d04ac371) | avoid view transitions when the user agent provides one | ### v22.1.5 — 22.1.5 - Date: 2026-09-03 - Version: v22.1.5 - Original notes: https://github.com/angular/angular/releases/tag/v22.1.5 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.1.5 - **fixed** — Check uninvoked signal aliases in extended diagnostic - **fixed** — Cancel stale debounce timers to prevent timer leaks - **fixed** — Don't fail NgModule checks for a pipe that extends a base class - **fixed** — Validate SVG animation attributes outside the SVG namespace - **fixed** — Avoid writing to name input on ControlValueAccessor - **fixed** — Skip tsconfig files of non-Angular projects - **fixed** — Resolve HTTP(S) URLs without authority as relative during SSR - **fixed** — Avoid view transitions when the user agent provides one ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - d90698dae7](https://img.shields.io/badge/d90698dae7-fix-green)](https://github.com/angular/angular/commit/d90698dae759f21f29052e521ffaec6c3a79f6d1) | check uninvoked signal aliases in extended diagnostic | ###### core | Commit | Description | | -- | -- | | [![fix - 2ceeb27078](https://img.shields.io/badge/2ceeb27078-fix-green)](https://github.com/angular/angular/commit/2ceeb27078d890514a1e87b0d99f366d9a4a796f) | cancel stale debounce timers to prevent timer leaks | | [![fix - ed2e401d2d](https://img.shields.io/badge/ed2e401d2d-fix-green)](https://github.com/angular/angular/commit/ed2e401d2da9a6dd5c87006573a8e42934f58f62) | don't fail NgModule checks for a pipe that extends a base class | | [![fix - c65d378bb4](https://img.shields.io/badge/c65d378bb4-fix-green)](https://github.com/angular/angular/commit/c65d378bb4fded436f197aa7bc52c03f507b8bd4) | validate SVG animation attributes outside the SVG namespace | ###### forms | Commit | Description | | -- | -- | | [![fix - 43aaeaec29](https://img.shields.io/badge/43aaeaec29-fix-green)](https://github.com/angular/angular/commit/43aaeaec29e15d7b2504e8930c92c94b898ca200) | avoid writing to `name` input on ControlValueAccessor | ###### migrations | Commit | Description | | -- | -- | | [![fix - d85288d75f](https://img.shields.io/badge/d85288d75f-fix-green)](https://github.com/angular/angular/commit/d85288d75f3f85dc6b10bf813c805b1b7fed7329) | skip tsconfig files of non-Angular projects | ###### platform-server | Commit | Description | | -- | -- | | [![fix - 3b8723ce3d](https://img.shields.io/badge/3b8723ce3d-fix-green)](https://github.com/angular/angular/commit/3b8723ce3d88b2bf871185736bc33e3cf9a189f4) | resolve HTTP(S) URLs without authority as relative during SSR | ###### router | Commit | Description | | -- | -- | | [![fix - 4340a63c52](https://img.shields.io/badge/4340a63c52-fix-green)](https://github.com/angular/angular/commit/4340a63c52fca4d08ef258a3c053f50932eab27e) | avoid view transitions when the user agent provides one | ### v22.2.0-next.4 — 22.2.0-next.4 - Date: 2026-08-27 - Version: v22.2.0-next.4 - Original notes: https://github.com/angular/angular/releases/tag/v22.2.0-next.4 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.2.0-next.4 - Labels: Pre-release - **fixed** — Avoid prototype member collisions in common module - **fixed** — Use locale NaN symbol in number formatting - **fixed** — Scope animations declared in minified nested rules - **added** — Scope type-checking of keyed defer blocks - **fixed** — Deduplicate deferred imports across multiple blocks - **fixed** — Default template diagnostic related message source file to template - **fixed** — Produce correct tcb expression for optional chaining - **fixed** — Retain metadata for strict standalone errors - **fixed** — Avoid prototype member collisions in core module - **fixed** — Explicitly reject foreign components in JIT mode - **fixed** — Preserve namespace for dynamic component hosts - **security** — Prevent TransferState prototype pollution - **fixed** — Throw coded RuntimeErrors instead of crashing when hydration/rendering can't find an expected DOM node - **fixed** — Use dot-access for readonly rule configuration in forms - **fixed** — Honor quote style preference when generating imports in language-service - **fixed** — Preserve registerLocaleData calls in standalone bootstrap migration - **fixed** — Avoid stripping unicode whitespace during url resolution in platform-server ###### common | Commit | Description | | -- | -- | | [![fix - 862a0c8ab3](https://img.shields.io/badge/862a0c8ab3-fix-green)](https://github.com/angular/angular/commit/862a0c8ab3403242eeac3b2fb80f7cf63cf0c892) | avoid prototype member collisions | | [![fix - 7596548e9b](https://img.shields.io/badge/7596548e9b-fix-green)](https://github.com/angular/angular/commit/7596548e9b836a5d12e966bf296a4dbba044b78f) | use locale NaN symbol in number formatting | ###### compiler | Commit | Description | | -- | -- | | [![fix - 58b0cb4735](https://img.shields.io/badge/58b0cb4735-fix-green)](https://github.com/angular/angular/commit/58b0cb47358861de0a512711addb8e29f984a57e) | scope animations declared in minified nested rules | ###### compiler-cli | Commit | Description | | -- | -- | | [![feat - 7d9f55da11](https://img.shields.io/badge/7d9f55da11-feat-blue)](https://github.com/angular/angular/commit/7d9f55da11319da8f273d9edcd38ff2983bdbb0c) | scope type-checking of keyed defer blocks | | [![fix - 2e2c426e76](https://img.shields.io/badge/2e2c426e76-fix-green)](https://github.com/angular/angular/commit/2e2c426e7609de551dafb6360e6373333a278c4e) | deduplicate deferred imports across multiple blocks | | [![fix - a46292af26](https://img.shields.io/badge/a46292af26-fix-green)](https://github.com/angular/angular/commit/a46292af260f241da2f9f4e4cbb7d40b14a678f1) | default template diagnostic related message source file to template | | [![fix - e9ba39d671](https://img.shields.io/badge/e9ba39d671-fix-green)](https://github.com/angular/angular/commit/e9ba39d671a3645ef5ca8233c96bacc94f02d155) | Produce correct tcb expression for optional chaining | | [![fix - 74b294cd51](https://img.shields.io/badge/74b294cd51-fix-green)](https://github.com/angular/angular/commit/74b294cd51b0f73e3a71e0cd13a176b1d0f3a89f) | retain metadata for strict standalone errors | ###### core | Commit | Description | | -- | -- | | [![fix - 7ba082e08e](https://img.shields.io/badge/7ba082e08e-fix-green)](https://github.com/angular/angular/commit/7ba082e08e59eadec4594ad80661d5c1ec08cb2a) | avoid prototype member collisions | | [![fix - 915a03ae85](https://img.shields.io/badge/915a03ae85-fix-green)](https://github.com/angular/angular/commit/915a03ae856a595bd5fa0f364928869db8daec19) | explicitly reject foreign components in JIT mode | | [![fix - 2ab5ff56de](https://img.shields.io/badge/2ab5ff56de-fix-green)](https://github.com/angular/angular/commit/2ab5ff56ded8c6246c0035d9df62a0c7fc9e1308) | preserve namespace for dynamic component hosts | | [![fix - 168a324cce](https://img.shields.io/badge/168a324cce-fix-green)](https://github.com/angular/angular/commit/168a324cce0f133ed92953374c2510a75868b790) | prevent TransferState prototype pollution | | [![fix - 83f7695b2e](https://img.shields.io/badge/83f7695b2e-fix-green)](https://github.com/angular/angular/commit/83f7695b2e4e1cab347f7817da4ae4262dade415) | throw coded RuntimeErrors instead of crashing when hydration/rendering can't find an expected DOM node | ###### forms | Commit | Description | | -- | -- | | [![fix - 1e35de536d](https://img.shields.io/badge/1e35de536d-fix-green)](https://github.com/angular/angular/commit/1e35de536d8332dfcbb3d89d01ca84b50aa56bd2) | use dot-access for readonly rule configuration | ###### language-service | Commit | Description | | -- | -- | | [![fix - 0f0d52e9c1](https://img.shields.io/badge/0f0d52e9c1-fix-green)](https://github.com/angular/angular/commit/0f0d52e9c1154f8db9a4a8d9d0ff73f0afdc7031) | honor quote style preference when generating imports | ###### migrations | Commit | Description | | -- | -- | | [![fix - bdc09e8183](https://img.shields.io/badge/bdc09e8183-fix-green)](https://github.com/angular/angular/commit/bdc09e8183a3280d25bfc93b4d5ae4452cc551ec) | preserve registerLocaleData calls in standalone bootstrap migration | ###### platform-server | Commit | Description | | -- | -- | | [![fix - 3e924cc8db](https://img.shields.io/badge/3e924cc8db-fix-green)](https://github.com/angular/angular/commit/3e _[Truncated at 4000 characters — full notes: https://github.com/angular/angular/releases/tag/v22.2.0-next.4]_ ### v22.1.4 — 22.1.4 - Date: 2026-08-27 - Version: v22.1.4 - Original notes: https://github.com/angular/angular/releases/tag/v22.1.4 - Permalink: https://whatsnew.fyi/product/angular/releases/v22.1.4 - **fixed** — avoid prototype member collisions in common - **fixed** — use locale NaN symbol in number formatting - **fixed** — scope animations declared in minified nested rules - **fixed** — default template diagnostic related message source file to template - **fixed** — produce correct tcb expression for optional chaining - **fixed** — retain metadata for strict standalone errors - **fixed** — avoid prototype member collisions in core - **fixed** — explicitly reject foreign components in JIT mode - **fixed** — preserve namespace for dynamic component hosts - **fixed** — prevent TransferState prototype pollution - **fixed** — throw coded RuntimeErrors instead of crashing when hydration/rendering cannot find an expected DOM node - **fixed** — use dot-access for readonly rule configuration - **fixed** — honor quote style preference when generating imports - **fixed** — preserve registerLocaleData calls in standalone bootstrap migration - **fixed** — avoid stripping unicode whitespace during url resolution ###### common | Commit | Description | | -- | -- | | [![fix - 60a874c3fb](https://img.shields.io/badge/60a874c3fb-fix-green)](https://github.com/angular/angular/commit/60a874c3fbedc2ce216bcf783325f4e1291edcb0) | avoid prototype member collisions | | [![fix - e8378dfeab](https://img.shields.io/badge/e8378dfeab-fix-green)](https://github.com/angular/angular/commit/e8378dfeab39fca5bcdc47126b7859c8fdab7a28) | use locale NaN symbol in number formatting | ###### compiler | Commit | Description | | -- | -- | | [![fix - 05c7c725a5](https://img.shields.io/badge/05c7c725a5-fix-green)](https://github.com/angular/angular/commit/05c7c725a534f4ea14c718503966423133474bbf) | scope animations declared in minified nested rules | ###### compiler-cli | Commit | Description | | -- | -- | | [![fix - afe8499a14](https://img.shields.io/badge/afe8499a14-fix-green)](https://github.com/angular/angular/commit/afe8499a14c1bf8ab42e6e30b35917a873745540) | default template diagnostic related message source file to template | | [![fix - 079a846263](https://img.shields.io/badge/079a846263-fix-green)](https://github.com/angular/angular/commit/079a846263599daf38cc1903c46ccea99c5758f8) | Produce correct tcb expression for optional chaining | | [![fix - 55eeb46418](https://img.shields.io/badge/55eeb46418-fix-green)](https://github.com/angular/angular/commit/55eeb46418080e2faf64c84eac389c21abea6df8) | retain metadata for strict standalone errors | ###### core | Commit | Description | | -- | -- | | [![fix - 3da35cbab9](https://img.shields.io/badge/3da35cbab9-fix-green)](https://github.com/angular/angular/commit/3da35cbab94777230871a3e9289455089b80fe7f) | avoid prototype member collisions | | [![fix - b199bdfa2a](https://img.shields.io/badge/b199bdfa2a-fix-green)](https://github.com/angular/angular/commit/b199bdfa2ad8b3fe189e7b4cef9dbea600cd4732) | explicitly reject foreign components in JIT mode | | [![fix - 9a8e4826b9](https://img.shields.io/badge/9a8e4826b9-fix-green)](https://github.com/angular/angular/commit/9a8e4826b9db4359c3f0e7185e9582b7bd08a3ef) | preserve namespace for dynamic component hosts | | [![fix - 7c752d4815](https://img.shields.io/badge/7c752d4815-fix-green)](https://github.com/angular/angular/commit/7c752d4815db41ee04e43d38cc826dd63214432b) | prevent TransferState prototype pollution | | [![fix - 7546b7a805](https://img.shields.io/badge/7546b7a805-fix-green)](https://github.com/angular/angular/commit/7546b7a80549c9620d52692cb0f5cab4c69b546c) | throw coded RuntimeErrors instead of crashing when hydration/rendering can't find an expected DOM node | ###### forms | Commit | Description | | -- | -- | | [![fix - c8eb7f0056](https://img.shields.io/badge/c8eb7f0056-fix-green)](https://github.com/angular/angular/commit/c8eb7f00564beceb21445b1f0374c93854b513d1) | use dot-access for readonly rule configuration | ###### language-service | Commit | Description | | -- | -- | | [![fix - 93d7f718d2](https://img.shields.io/badge/93d7f718d2-fix-green)](https://github.com/angular/angular/commit/93d7f718d2e057e37deda42d197e46672fe7f7f5) | honor quote style preference when generating imports | ###### migrations | Commit | Description | | -- | -- | | [![fix - 85c8829ac1](https://img.shields.io/badge/85c8829ac1-fix-green)](https://github.com/angular/angular/commit/85c8829ac189b0f47b865b036dad98905e576dc9) | preserve registerLocaleData calls in standalone bootstrap migration | ###### platform-server | Commit | Description | | -- | -- | | [![fix - 71e52d1396](https://img.shields.io/badge/71e52d1396-fix-green)](https://github.com/angular/angular/commit/71e52d1396b9cef98652929b73e08c4cde645970) | avoid stripping unicode whitespace during url resolution |