What changed in Angular from 21 to 22
9 releases numbered after v21.2.22 up to and including v22.1.5, stable releases only. v21.2.22 and v22.1.5 are the newest stable releases of 21 and 22 we track; this page follows them as new ones ship.
- 1 removes or deprecates something
- 1 release carries a version number we could not place against this range and is not shown; the full changelog has it.
105 changes across 9 releases
Added 6
- add an error for --global-foo cases
- namespace CSS variables to the app
- support css var namespacing in properties
- add custom set option to linkedSignal
- add deep linking from Performance panel to DevTools
- add options to allow caching of credentialed and non-cacheable HTTP requests
Fixed 98
- Check uninvoked signal aliases in extended diagnostic
- Cancel stale debounce timers to prevent timer leaks
- Don't fail NgModule checks for a pipe that extends a base class
- Validate SVG animation attributes outside the SVG namespace
- Avoid writing to name input on ControlValueAccessor
- Skip tsconfig files of non-Angular projects
- Resolve HTTP(S) URLs without authority as relative during SSR
- Avoid view transitions when the user agent provides one
- avoid prototype member collisions in common
- use locale NaN symbol in number formatting
- scope animations declared in minified nested rules
- default template diagnostic related message source file to template
- produce correct tcb expression for optional chaining
- retain metadata for strict standalone errors
- avoid prototype member collisions in core
- explicitly reject foreign components in JIT mode
- preserve namespace for dynamic component hosts
- prevent TransferState prototype pollution
- throw coded RuntimeErrors instead of crashing when hydration/rendering cannot find an expected DOM node
- use dot-access for readonly rule configuration
- honor quote style preference when generating imports
- preserve registerLocaleData calls in standalone bootstrap migration
- avoid stripping unicode whitespace during url resolution
- Detect object trigger values with Object.hasOwn in animations
- Preserve literal key union in KeyValuePipe.transform()
- Preserve &ngsp; between sibling control flow blocks in compiler
- Accept readonly arrays for setClassMetadata decorators
- Allow readonly arrays in RawScopeInfoFromDecorator
- Expose debuggableFn for non-computed signal graph nodes
- Prevent orphaned requestIdleCallback handle from re-entrant scheduling
- Replace all hasOwnProperty usages with Object.hasOwn
- Stop running further effects once one destroys the view mid-flush
- Throw a descriptive error instead of crashing when a hydration node is missing
- Throw NG0500 instead of a raw TypeError on element hydration mismatch
- Report forbidden 2way bindings on when FormField is applied
- Warn in dev mode when ngModel cannot reach parent NgForm across component boundary
- Cancel oversized fetch response bodies
- Recover project for external templates in solution-style workspaces
- Disallow event handler attributes in Meta
- Throw a descriptive error when insertBefore reference node is missing
- Pass correct component to canDeactivate for named outlets in componentless parent routes
- Generate correct expression for optional chaining
- Remove namespaced MathML script elements
- Correctly resolve symbol for SafePropertyRead in chained optional navigation
- Record class extends clause references in DeferredSymbolTracker
- Ensure i18n_util hasOwnProperty checks are safe for property renaming
- Fix incorrect loop in defer blocks
- Reject prefixed SVG script hosts
- Keep radio inputs in sync when values change
- Always decode JSON responses as UTF-8
- Limit protocol-relative URL handling to serialization
- Initialize hydration triggers after late runtime activation
- Warn when style property bindings receive invalid values
- Avoid aborting completed requests in FetchBackend
- Respect content-type charset in fetch backend text decoder
- Run root interceptors in the terminal request chain
- Strip RFC 6265 DQUOTE characters and handle URIError in parseCookieValue
- skip transfer cache for uncacheable HTTP traffic
- permissive whitespace parsing in default never blocks
- support foreign components defined outside top-level scope
- support foreign components inside control flow blocks
- allow passing uninvoked signals as foreign component props
- support import aliases in foreignImports
- account for namespaces in host binding sanitization
- correct container anchor collection order to match DOM layout
- introduce disposal mechanism for Angular views in foreign @content
- introduce logical-only containers for foreign content
- sanitize host bindings on concrete hosts
- set current tnode in foreign component instruction on reuse
- enable xsrf for root-provided HttpClient
- match header values exactly when deleting
- Preserve crossorigin on image preloads
- Ensure SVG animation attributeName is checked case-insensitively
- Ensure pending status propagates to the root form in signal forms
- Prevent transfer cache key collisions
- Correctly migrate ngClass with mixed space-separated keys
- Preserve NgClass import on partial migration
- avoid prototype lookups in date format caches
- parsing of an empty template literal interpolation
- re-tag SourceFiles after TsCreateProgramDriver.updateFiles()
- allow static attributes for explicit input transforms
- ignore processing instruction syntax in templates
- preserve explicit input transform write type
- allow multiple async validators
- preserve intermediate number values in signal forms
- prevent stale CVA writeback during debounce
- prevent interceptor signal reads from leaking into calling reactive contexts
- build runtime translations map with a null prototype
- use Object.hasOwn for placeholder lookup in translate
- prevent ReDoS in SOURCEMAP_URL_REGEXP
- Use regular optional chaining expression for safe function calls in template checking blocks
- Apply debugName transform to required signal queries
- Detect uninvoked signals in bound expressions using ternary
- Make extractValue reactive for compat AbstractControl values
- Preserve transitive NgModule references when pruning
- Remove stale model import in model-output migration
- Handle outlet named __proto__ in segment group maps
- Use safe hasOwnProperty when parsing query params
Deprecated 1
- deprecate jsonp support
Original release notes, newest first
The list above is our reading of these notes; the originals from Google are here, one fold per release.
v22.1.522.1.5
compiler-cli
| Commit | Description |
|---|---|
| fix - d90698dae7 | check uninvoked signal aliases in extended diagnostic |
core
| Commit | Description |
|---|---|
| fix - 2ceeb27078 | cancel stale debounce timers to prevent timer leaks |
| fix - ed2e401d2d | don't fail NgModule checks for a pipe that extends a base class |
| fix - c65d378bb4 | validate SVG animation attributes outside the SVG namespace |
forms
| Commit | Description |
|---|---|
| fix - 43aaeaec29 | avoid writing to name input on ControlValueAccessor |
migrations
| Commit | Description |
|---|---|
| fix - d85288d75f | skip tsconfig files of non-Angular projects |
platform-server
| Commit | Description |
|---|---|
| fix - 3b8723ce3d | resolve HTTP(S) URLs without authority as relative during SSR |
router
| Commit | Description |
|---|---|
| fix - 4340a63c52 | avoid view transitions when the user agent provides one |
v22.1.422.1.4
common
| Commit | Description |
|---|---|
| fix - 60a874c3fb | avoid prototype member collisions |
| fix - e8378dfeab | use locale NaN symbol in number formatting |
compiler
| Commit | Description |
|---|---|
| fix - 05c7c725a5 | scope animations declared in minified nested rules |
compiler-cli
| Commit | Description |
|---|---|
| fix - afe8499a14 | default template diagnostic related message source file to template |
| fix - 079a846263 | Produce correct tcb expression for optional chaining |
| fix - 55eeb46418 | retain metadata for strict standalone errors |
core
| Commit | Description |
|---|---|
| fix - 3da35cbab9 | avoid prototype member collisions |
| fix - b199bdfa2a | explicitly reject foreign components in JIT mode |
| fix - 9a8e4826b9 | preserve namespace for dynamic component hosts |
| fix - 7c752d4815 | prevent TransferState prototype pollution |
| fix - 7546b7a805 | throw coded RuntimeErrors instead of crashing when hydration/rendering can't find an expected DOM node |
forms
| Commit | Description |
|---|---|
| fix - c8eb7f0056 | use dot-access for readonly rule configuration |
language-service
| Commit | Description |
|---|---|
| fix - 93d7f718d2 | honor quote style preference when generating imports |
migrations
| Commit | Description |
|---|---|
| fix - 85c8829ac1 | preserve registerLocaleData calls in standalone bootstrap migration |
platform-server
| Commit | Description |
|---|---|
| fix - 71e52d1396 | avoid stripping unicode whitespace during url resolution |
v22.1.322.1.3
animations
| Commit | Description |
|---|---|
| fix - d9620e0f1b | detect object trigger values with Object.hasOwn |
common
| Commit | Description |
|---|---|
| fix - b3c78a5081 | preserve literal key union in KeyValuePipe.transform() |
compiler
| Commit | Description |
|---|---|
| fix - 94f0b9a371 | preserve &ngsp; between sibling control flow blocks |
core
| Commit | Description |
|---|---|
| fix - afe529cb2d | accept readonly arrays for setClassMetadata decorators |
| fix - 2c72fe3797 | allow readonly arrays in RawScopeInfoFromDecorator |
| fix - ef2ce9a098 | expose debuggableFn for non-computed signal graph nodes |
| fix - 7bcce260f5 | prevent orphaned requestIdleCallback handle from re-entrant scheduling |
| fix - 44137117b3 | replace all hasOwnProperty usages with Object.hasOwn |
| fix - 85f12a5a13 | stop running further effects once one destroys the view mid-flush |
| fix - c04931c88b | throw a descriptive error instead of crashing when a hydration node is missing |
| fix - 601d1f6576 | throw NG0500 instead of a raw TypeError on element hydration mismatch |
forms
| Commit | Description |
|---|---|
| fix - 83450d2924 | report forbidden 2way bindings on when FormField is applied |
| fix - 5cb4ea7e35 | warn in dev mode when ngModel cannot reach parent NgForm across component boundary |
http
| Commit | Description |
|---|---|
| fix - 0cd635e9e2 | cancel oversized fetch response bodies |
language-server
| Commit | Description |
|---|---|
| fix - 14fbe04612 | recover project for external templates in solution-style workspaces |
platform-browser
| Commit | Description |
|---|---|
| fix - 3ddcb1a101 | disallow event handler attributes in Meta |
| fix - 640460d606 | throw a descriptive error when insertBefore reference node is missing |
router
| Commit | Description |
|---|---|
| fix - abe019d505 | pass correct component to canDeactivate for named outlets in componentless parent routes |
v22.1.222.1.2
compiler
| Commit | Description |
|---|---|
| fix - 76dff307b4 | Generate correct expression for optional chaning. |
| fix - 6f9a64e6f5 | remove namespaced MathML script elements |
compiler-cli
| Commit | Description |
|---|---|
| fix - e9660b1801 | correctly resolve symbol for SafePropertyRead in chained optional navigation |
| fix - ec6deea513 | record class extends clause references in DeferredSymbolTracker |
core
| Commit | Description |
|---|---|
| fix - 0df9d5eb65 | ensure i18n_util hasOwnProperty checks are safe for property renaming |
| fix - 4d985a179e | incorrect loop in defer blocks |
| fix - 7b40456792 | reject prefixed SVG script hosts |
forms
| Commit | Description |
|---|---|
| fix - 3b5c798072 | keep radio inputs in sync when values change |
http
| Commit | Description |
|---|---|
| fix - 4f7e9987fa | always decode JSON responses as UTF-8 |
router
| Commit | Description |
|---|---|
| fix - 2f82601662 | limit protocol-relative URL handling to serialization |
v22.1.122.1.1
core
| Commit | Description |
|---|---|
| fix - aa6d3189c1 | initialize hydration triggers after late runtime activation |
| fix - deecb301c8 | warn when style property bindings receive invalid values |
http
| Commit | Description |
|---|---|
| fix - ac3728e79f | avoid aborting completed requests in FetchBackend |
| fix - 688a0a7118 | respect content-type charset in fetch backend text decoder |
| fix - a13b968451 | run root interceptors in the terminal request chain |
| fix - 32af9b525e | strip RFC 6265 DQUOTE characters and handle URIError in parseCookieValue |
v22.1.022.1.0
common
| Commit | Description |
|---|---|
| fix - 1ad6824d0d | skip transfer cache for uncacheable HTTP traffic (#69017) |
compiler
| Commit | Description |
|---|---|
| feat - af5e4e1131 | Add an error for --global-foo cases (#68846) |
| feat - d579ecaf73 | Disable '--global-' error outside of g3 (#68846) |
| feat - f98547675c | Namespace CSS variables to the app (#68846) |
| feat - 8c8b2f7783 | Support css var namespacing in properties (#68846) |
| fix - 292199aa4d | permissive whitespace parsing in default never blocks |
| fix - 25c744c4d0 | support foreign components defined outside top-level scope |
| fix - 5bd00add07 | support foreign components inside control flow blocks (#69674) |
| perf - 2e442f7876 | do not emit tag name when control flow root is foreign component (#69674) |
compiler-cli
| Commit | Description |
|---|---|
| fix - aeb55c8bc1 | allow passing uninvoked signals as foreign component props |
| fix - 7c60a98b3c | support import aliases in foreignImports (#68674) |
core
| Commit | Description |
|---|---|
| feat - 124ba10ead | add custom set option to linkedSignal |
| feat - eab4847a8b | Adds deep linking from Performance panel to DevTools |
| fix - 091456a214 | account for namespaces in host binding sanitization (#69558) |
| fix - b3748e9fe4 | correct container anchor collection order to match DOM layout |
| fix - 11b206b919 | introduce disposal mechanism for Angular views in foreign @content |
| fix - 56607967db | introduce logical-only containers for foreign content |
| fix - 23cf1a828b | sanitize host bindings on concrete hosts (#69558) |
| fix - 0c07356c5c | set current tnode in foreign component instruction on reuse |
forms
| Commit | Description |
|---|---|
| fix - bbbd357bd2 | add utility to assert that value is a field tree |
http
| Commit | Description |
|---|---|
| feat - e3630c23c5 | add options to allow caching of credentialed and non-cacheable HTTP requests |
| fix - ec16a3d6c6 | enable xsrf for root-provided HttpClient |
| fix - 39e362eea5 | match header values exactly when deleting |
| fix - be46ca8696 | preserve immutability of materialized clones |
| fix - c0cbd46bd7 | skip transfer cache for fetch credentialed requests (#69017) |
| refactor - af04e266cc | deprecate jsonp support |
language-service
| Commit | Description |
|---|---|
| feat - 7f0265e43a | compile non-exported classes if standalone (#68454) |
| feat - 4f9c824dd9 | Typecheck templates which would require inline typecheck blocks (#68454) |
| fix - a99fb915c0 | account for strictTemplates being enabled by default |
migrations
| Commit | Description |
|---|---|
| feat - c75ff0255c | add migration from injectable to service |
| fix - 5d5b2ea72d | correctly detect then/else keywords in control flow migration |
platform-server
| Commit | Description |
|---|---|
| fix - cf9d7fa0f8 | harden platform location origin validation during SSR (#69184) |
router
| Commit | Description |
|---|---|
| feat - 97a3fd6a55 | handle null and undefined inputs in RouterLinkActive |
Deprecations
http
HttpClient.jsonp,HttpClientJsonpModule, and related JSONP classes/functions are deprecated. Use standard HTTP requests instead.
v22.0.822.0.8
common
| Commit | Description |
|---|---|
| fix - c0368f2278 | preserve crossorigin on image preloads |
core
| Commit | Description |
|---|---|
| fix - 8616ba9db6 | ensure SVG animation attributeName is checked case-insensitively |
forms
| Commit | Description |
|---|---|
| fix - d302c7ab83 | ensure pending status propagates to the root form in signal forms |
http
| Commit | Description |
|---|---|
| fix - 9d40f8aefe | prevent transfer cache key collisions |
migrations
| Commit | Description |
|---|---|
| fix - 388daea2fc | correctly migrate ngClass with mixed space-separated keys |
| fix - bb39cda648 | preserve NgClass import on partial migration |
v22.0.722.0.7
common
| Commit | Description |
|---|---|
| fix - 91e33aa1de | avoid prototype lookups in date format caches |
compiler
| Commit | Description |
|---|---|
| fix - 5b516e3a58 | parsing of an empty template literal interpolation |
compiler-cli
| Commit | Description |
|---|---|
| fix - c88ddde1c9 | re-tag SourceFiles after TsCreateProgramDriver.updateFiles() |
core
| Commit | Description |
|---|---|
| fix - 94d9591b51 | allow static attributes for explicit input transforms |
| fix - c89f71a74c | ignore processing instruction syntax in templates |
| fix - 70500e4067 | preserve explicit input transform write type |
forms
| Commit | Description |
|---|---|
| fix - 1b9964675f | allow multiple async validators |
| fix - 64d6d47a0c | preserve intermediate number values in signal forms |
| fix - 6cf7446afa | prevent stale CVA writeback during debounce |
http
| Commit | Description |
|---|---|
| fix - 20b7dc3023 | prevent interceptor signal reads from leaking into calling reactive contexts |
localize
| Commit | Description |
|---|---|
| fix - 22d5a091d1 | build runtime translations map with a null prototype |
| fix - 8ce1fcf7fa | use Object.hasOwn for placeholder lookup in translate |
platform-browser
| Commit | Description |
|---|---|
| fix - b34bf0dce8 | prevent ReDoS in SOURCEMAP_URL_REGEXP |
v22.0.622.0.6
compiler
| Commit | Description |
|---|---|
| fix - fd4ddcafed | use regular optional chaining expression for safe function calls in TCBs |
compiler-cli
| Commit | Description |
|---|---|
| fix - 534fe81a89 | apply debugName transform to required signal queries |
| fix - 3b08201bfb | detect uninvoked signals in bound expressions using ternary |
forms/signals
| Commit | Description |
|---|---|
| fix - 171669f7b2 | make extractValue reactive for compat AbstractControl values |
migrations
| Commit | Description |
|---|---|
| fix - 0a6af1496b | preserve transitive NgModule references when pruning |
| fix - d4a926a762 | remove stale model import in model-output migration |
router
| Commit | Description |
|---|---|
| fix - c238bd2ad7 | handle outlet named proto in segment group maps |
| fix - 8e6d7f7190 | use safe hasOwnProperty when parsing query params |