21.0.0 (2025-11-19)

November 19, 2025 · View on GitHub

21.0.0 (2025-11-19)

Blog post "Announcing Angular v21".

Breaking Changes

common

  • (test only) - TestBed now provides a fake PlatformLocation implementation that supports the Navigation API. This may break some tests, though we have not observed any failures internally. You can revert to the old default for TestBed by providing the MockPlatformLocation from @angular/common/testing in your providers: {provide: PlatformLocation, useClass: MockPlatformLocation}
  • ngComponentOutletContent is now of type Node[][] | undefined instead of any[][] | undefined.
  • NgModuleFactory has been removed, use NgModule instead.

compiler-cli

    • Previously hidden type issues in host bindings may show up in your builds. Either resolve the type issues or set "typeCheckHostBindings": false in the angularCompilerOptions section of your tsconfig.
  • The Angular compiler now produces an error when the the emitDeclarationOnly TS compiler option is enabled as this mode is not supported.

core

  • The server-side bootstrapping process has been changed to eliminate the reliance on a global platform injector.

    Before:

    const bootstrap = () => bootstrapApplication(AppComponent, config);
    

    After:

    const bootstrap = (context: BootstrapContext) =>
      bootstrapApplication(AppComponent, config, context);
    

    A schematic is provided to automatically update main.server.ts files to pass the BootstrapContext to the bootstrapApplication call.

    In addition, getPlatform() and destroyPlatform() will now return null and be a no-op respectively when running in a server environment.

  • Using a combination of provideZoneChangeDetection while also removing ZoneJS polyfills will no longer result in the internal scheduler being disabled. All Angular applications now consistenly use the same scheduler, and those with the Zone change detection provider include additional automatic scheduling behaviors based on NgZone stabilization.

    • TypeScript versions less than 5.9 are no longer supported.
  • (test only) - Using provideZoneChangeDetection in the TestBed providers would previously prevent TestBed from rethrowing errors as it should. Errors in the test will now be rethrown, regardless of the usage of provideZoneChangeDetection. Tests should be adjusted to prevent or account for these errors. As in previous major versions, this behavior can be disabled with rethrowApplicationErrors: false in configureTestingModule as a last resort.

  • ignoreChangesOutsideZone is no longer available as an option for configuring ZoneJS change detection behavior.

  • Angular no longer provides a change detection scheduler for ZoneJS-based change detection by default. Add provideZoneChangeDetection to the providers of your bootstrapApplication function or your AppModule (if using bootstrapModule). This provider addition will be covered by an automated migration.

  • moduleId was removed from Component metadata.

  • The interpolation option on Components has been removed. Only the default {{ ... }} is now supported.

elements

  • Fix signal input getter behavior in custom elements.

    Before this change, signal inputs in custom elements required function calls to access their values (elementRef.newInput()), while decorator inputs were accessed directly (elementRef.oldInput). This inconsistency caused confusion and typing difficulties.

    The getter behavior has been standardized so signal inputs can now be accessed directly, matching the behavior of decorator inputs:

    Before:

    • Decorator Input: elementRef.oldInput
    • Signal Input: elementRef.newInput()

    After:

    • Decorator Input: elementRef.oldInput
    • Signal Input: elementRef.newInput

forms

  • This new directive will conflict with existing FormArray directives or formArray inputs on the same element.

platform-browser

  • The deprecated ApplicationConfig export from @angular/platform-browser has been removed. Please import ApplicationConfig from @angular/core instead.

router

  • lastSuccessfulNavigation is now a signal and needs to be invoked
  • Router navigations may take several additional microtasks to complete. Tests have been found to often be highly dependent on the exact timing of navigation completions with respect to the microtask queue. The most common fix for tests is to ensure all navigations have been completed before making assertions. On rare occasions, this can also affect production applications. This can be caused by multiple subscriptions to router state throughout the application, both of which trigger navigations that happened to not conflict with the previous timing.

upgrade

  • UpgradeAdapter is no longer available. Use upgrade/static instead

zone.js

  • IE/Non-Chromium Edge are not supported anymore.

Deprecations

http

  • HttpResponseBase.statusText is deprecated

common

CommitTypeDescription
c795960adafeatAdd experimental support for the Navigation API (#63406)
9eac43cf46featSupport of optional keys for the KeyValue pipe (#48814)
a1868c9d13featupdate to cldr 47 (#64032)
196fa500a3fixproperly type ngComponentOutlet (#64561)
7a4b225c57refactorimprove typing of ngComponentOutletContent (#63674)
25f593ce2arefactorremovengModuleFactory input of NgComponentOutlet (#62838)

compiler

CommitTypeDescription
ecea909bccfixdon't choke on unbalanced parens in declaration block
04dd75ba94fixsupport arbitrary nesting in :host-context()
f54cc4f28afixsupport commas in :host() argument
814b2713f5fixsupport complex selectors in :nth-child()
aad6ced0effixsupport one additional level of nesting in :host()

compiler-cli

CommitTypeDescription
563dbd998cfeatAdds diagnostic for misconfigured @defer triggers (#64069)
0571b335b9featenable type checking of host bindings by default (#63654)
5b55200edffixallow value to be set on radio fields
ab98b2425ffixcapture metadata for undecorated fields (#63957)
be7110342bfixdisallow compiling with the emitDeclarationOnly TS compiler option enabled (#61609)
bd322ca410fixdo not flag custom control required inputs as missing when field is present
471da8a311fixinfer type of custom field controls
96cb0cffdafixinfer types of signal forms set on native inputs
71ab11ccf0fixmake field detection logic more robust
1f389b8b97fixmissingStructuralDirective diagnostic produces false negatives (#64579)
7fd3db0423fixremove internal syntax-related flags (#63787)
c371251e4cfixreport invalid bindings on form controls
01290ab275fixuse any when checking field interface conformance

core

CommitTypeDescription
809a4ed8c1featAdd migration for zoneless by default. (#63042)
2a7a5de53ffeatAllow passing application providers in bootstrapModule options (#64354)
28926ba92cfeatintroduce BootstrapContext for improved server bootstrapping (#63562)
c2d376b85afeatmake SimpleChanges generic (#64535)
ad2376435bfeatsupport IntersectionObserver options in viewport triggers (#64130)
539717f58afeatsupport regular expressions in templates (#63887)
ab415f3d7ffixcontrol not recognized when input has directive injecting ViewContainerRef (#64368)
f008045dedfixdo not rename ARIA property bindings to attributes (#63925)
1352fbdbf2fixDrop special-case disables automatic change detection scheduling (#63846)
c0791e1887fixdrop support for TypeScript 5.8 (#63589)
aa389a691bfixensure @for iteration over field is reactive (#64113)
fec7c288e9fixError on invalid APP_ID (#63252)
d399d7d02bfixExplicit Zone CD in TestBed providers should not override TestBed error handler (#63404)
92e09adc0afixRemove ignoreChangesOutsideZone option (#62700)
45fed3d201fixRemove Zone-based change provider from internals by default (#63382)
c9f977833efixskip Angular formatting when formatting signals recursively
67fbd5ff1efixSSR error in signal forms
c241038111fixupdate symbols (#64481)
a5e5dbbc16refactorremove moduleId from Component metadata (#63482)
9a16718b13refactorremove deprecated interpolation option on Components. (#63474)

elements

CommitTypeDescription
be0455addafixreturn value on signal input getter (#62113)

forms

CommitTypeDescription
a278ee358cfeatadd debounce() rule for signal forms
b8314bd340featadd experimental signal-based forms (#63408)
0dd95c503ffeatAdd FormArrayDirective (#55880)
d201cd2c2bfeatPrevents marking fields as touched/dirty when state is hidden/readonly/disabled (#63633)
9c5e969f51fixbind invalid input in custom controls (#64526)
10ef96adb3fixconsistent treatment of empty (#63456)
d89e522a1ffixdebounce updates from interop controls
c0d88c37c9fixEmit FormResetEvent when resetting control (#64024)
94b0afec00fiximplement interoperability between signal forms and reactive forms (#64471)
a1ac9a6415fixinterop supports CVAs with signals (#64618)
505bde1fedfixmark field as dirty when value is changed by ControlValueAccessor (#64471)
3529877772fixmark field as dirty when value is changed by a bound control (#64483)
fd9af2afaffixonly propagate schema defined properties from field to control (#64446)
91d8d55a80fixSet error message of a schema error.
f4d1017c25fixtest that common field states are propagated to controls (#63884)
acd7c83597fixtest that min/max properties are propagated to controls (#63884)
71e8672837fixtest that minLength/maxLength properties are propagated to controls (#63884)
507b3466eeperfimplement change detection for field control bindings
781a3299f9perfonly update interop controls when bound field changes
32f86d35f7perfoptimize [field] binding instructions (#64351)

http

CommitTypeDescription
2739b7975bfeatadd referrerPolicy option to HttpResource (#64283)
07e678872ffeatAdd reponseType property to HttpResponse and HttpErrorResponse (#63043)
5cbdefcf11featadd support for fetch referrerPolicy option in HttpClient (#64116)
4bed062bc9featProvide http services in root (#56212)
0e4e17cd97refactorHttpResponseBase.statusText (#64176)

language-server

CommitTypeDescription
3f7111a9c3fixfix directory renaming on Windows

language-service

CommitTypeDescription
89095946cffixaddress potential memory leak during project creation
80e00ff4e5fixprevent interpolation from superseding block braces (#64392)

migrations

CommitTypeDescription
6ddb250391featadd migration to convert ngClass to use class (#62983)
8dc8914c8afeatadd migration to convert ngStyle to use style (#63517)
861cee34e0featAdds migration for deprecated router testing module (#64217)
75fc16b261featAdds support for CommonModule to standalone migration (#64138)
655a99d0c6fixfix bug in ngclass-to-class migration (#63617)
62bbce63b7fixremove error for no matching files in control flow migration (#64253)

platform-browser

CommitTypeDescription
ce8db665f9refactorremove deprecated ApplicationConfig export (#63529)

router

CommitTypeDescription
4e0fc81491featconvert lastSuccessfulNavigation to signal (#63057)
5e61e8d3c3fixFix memory leak through Navigation.abort and canDeactivate guards (#64141)
f6a73f1913fixRespect custom UrlSerializer handling of query parameters (#64449)
5b53535dd1fixUpdate recognize stage to use internally async/await (#62994)

upgrade

CommitTypeDescription
f86846555bfixRemove deprecated UpgradeAdapter (#61659)

20.3.13 (2025-11-19)

20.3.12 (2025-11-14)

20.3.11 (2025-11-12)

common

CommitTypeDescription
5047849a4afixremove placeholder image listeners once view is removed

compiler

CommitTypeDescription
f9d0818087fixsupport arbitrary nesting in :host-context()
106b9040dffixsupport commas in :host() argument
9419ea348afixsupport complex selectors in :nth-child()
036c5d2a07fixsupport one additional level of nesting in :host()

core

CommitTypeDescription
dcdd1bcdbbfixskip leave animations on view swaps

20.3.10 (2025-11-05)

compiler-cli

CommitTypeDescription
840db59dc1fixmake required inputs diagnostic less noisy

migrations

CommitTypeDescription
a45e6b2b66fixPrevent removal of templates referenced with preceding whitespace characters

20.3.9 (2025-10-29)

20.3.7 (2025-10-22)

animations

CommitTypeDescription
bd38cd45a5fixaccount for Element.animate exceptions (#64506)

compiler

CommitTypeDescription
891f180262fixcorrectly compile long numeric HTML entities (#64297)

compiler-cli

CommitTypeDescription
371274bfc6fixmissingStructuralDirective diagnostic produces false negatives (#64470)

core

CommitTypeDescription
4c89a267c3fixpass element removal property through in all locations (#64565)
2fad4d4ab6fixprevent duplicate nodes from being retained with fast `animate.leave`` calls (#64592)

router

CommitTypeDescription
cfd8ed3ffffixFix outlet serialization and parsing with no primary children (#64505)
182fe78f91fixSurface parse errors in Router.parseUrl (#64503)

20.3.6 (2025-10-16)

core

CommitTypeDescription
911d6822cbfixupdate animation scheduling (#64441)

platform-browser

CommitTypeDescription
2ece42866dfixDomEventsPlugin should always be the last plugin to be called for supports(). (#50394)

20.3.5 (2025-10-15)

compiler-cli

CommitTypeDescription
8dec92ff9ffixcapture metadata for undecorated fields (#63957) (#64317)
c2e817b0efperffix performance of "interpolated signal not invoked" check (#64410)

core

CommitTypeDescription
f15cfa4cc4fixfixes regression in animate.leave function bindings (#64413)
d54dd674cafixPrevents early style pruning with leave animations (#64335)

migrations

CommitTypeDescription
554573e524fixmigrating input with more than 1 usage in a method (#64367)
2c79ca0b57fixremove error for no matching files in control flow migration (#64253) (#64314)

router

CommitTypeDescription
6e4bcc7d22fixScroll restoration should use instant scroll behavior for traversals (#64299)

20.3.4 (2025-10-08)

core

CommitTypeDescription
853ed169a8fixensure missing leave animations don't queue leave animations (#64226)
6fed986b7afixFixes animations in conjunction with content projection (#63776)
76fe5599fefixhandle undefined CSS time values in parseCssTimeUnitsToMs function (#64181)
3b959105befixprevent early exit from leave animations when multiple transitions are present (#64225)

migrations

CommitTypeDescription
65884895fffixpreserve component imports when pruning NgModules in standalone migration (#64186)

20.3.3 (2025-10-02)

compiler

CommitTypeDescription
f51ab32fb3fixrecover template literals with broken expressions (#64150)

core

CommitTypeDescription
542cd0019afixdo not rename ARIA property bindings to attributes (#64089)
0e928fbc4afixFixes animations in conjunction with content projection (#63776)
e5157bd933fixprevents unintended early termination of leave animations and hoisting (#64088)

migrations

CommitTypeDescription
1710cbd7d4fixhandle shorthand property declarations in NgModule (#64160)
77b6305a4bfixskip migration for inputs with 'this' references (#64142)

20.3.2 (2025-09-24)

compiler-cli

CommitTypeDescription
ba40153ac0fixcapture metadata for undecorated fields (#63904)
1d4f81c8eefixresolve import alias in defer blocks (#63966)

core

CommitTypeDescription
9515a70933fixfix narrowing of Resource.hasValue() (#63994)
e78451cf8afixprevent animations renderer from impacting animate.leave (#63921)

forms

CommitTypeDescription
1fd8d5d446fixEmit FormResetEvent when resetting control (#64034)

migrations

CommitTypeDescription
16d0d43ad4fixhandle import aliases to the same module name (#63934)
3ebaeccb46fixhandle reused templates in control flow migration (#63996)

20.3.1 (2025-09-17)

compiler

CommitTypeDescription
7fb5a8087efixAdd support for aria-invalid (#63748)

compiler-cli

CommitTypeDescription
8843707919fixonly bind inputs that are part of microsyntax to a structural directive (#52453)
38c9921ff3fixsignal not invoked diagnostic not raised when input has same name in template (#63754)

core

CommitTypeDescription
802dbcc2a0fixprevent animation events from being cleaned up on destroy (#63414)
3ec8a5c753fixPrevent leave animations on a move operation (#63745)

migrations

CommitTypeDescription
6e54bdfdcbfixfix route-lazy-loading migration (#63818)

18.2.14 (2025-09-10)

Breaking Changes

core

  • The server-side bootstrapping process has been changed to eliminate the reliance on a global platform injector.

    Before:

    const bootstrap = () => bootstrapApplication(AppComponent, config);
    

    After:

    const bootstrap = (context: BootstrapContext) =>
      bootstrapApplication(AppComponent, config, context);
    

    A schematic is provided to automatically update main.server.ts files to pass the BootstrapContext to the bootstrapApplication call.

    In addition, getPlatform() and destroyPlatform() will now return null and be a no-op respectively when running in a server environment.

    (cherry picked from commit 8bf80c9d2314b4f2bcf3df83ae01552a6fc49834)

core

CommitTypeDescription
9d1fb33f5efixintroduce BootstrapContext for improved server bootstrapping (#63640)

19.2.15 (2025-09-10)

Breaking Changes

core

  • The server-side bootstrapping process has been changed to eliminate the reliance on a global platform injector.

    Before:

    const bootstrap = () => bootstrapApplication(AppComponent, config);
    

    After:

    const bootstrap = (context: BootstrapContext) =>
      bootstrapApplication(AppComponent, config, context);
    

    A schematic is provided to automatically update main.server.ts files to pass the BootstrapContext to the bootstrapApplication call.

    In addition, getPlatform() and destroyPlatform() will now return null and be a no-op respectively when running in a server environment.

core

CommitTypeDescription
70d0639bc1fixintroduce BootstrapContext for improved server bootstrapping (#63639)

20.3.0 (2025-09-10)

Breaking Changes

core

  • The server-side bootstrapping process has been changed to eliminate the reliance on a global platform injector.

    Before:

    const bootstrap = () => bootstrapApplication(AppComponent, config);
    

    After:

    const bootstrap = (context: BootstrapContext) =>
      bootstrapApplication(AppComponent, config, context);
    

    A schematic is provided to automatically update main.server.ts files to pass the BootstrapContext to the bootstrapApplication call.

    In addition, getPlatform() and destroyPlatform() will now return null and be a no-op respectively when running in a server environment.

    (cherry picked from commit 8bf80c9d2314b4f2bcf3df83ae01552a6fc49834)

CommitTypeDescription
a3f808d7c8fixremove refresh button from transfer state tab (#63592)

core

CommitTypeDescription
6117ccee2efeatintroduce BootstrapContext for improved server bootstrapping (#63636)

20.2.4 (2025-09-03)

core

CommitTypeDescription
dc64f3e478fixFixed inject migration schematics for migrate destructured properties (#62832)

platform-server

CommitTypeDescription
d1d32db972fixprevent false warning for duplicate state serialization (#63525)

20.2.3 (2025-08-29)

compiler

CommitTypeDescription
479a919f42fixfixes regression with event parsing and animate prefix (#63470)

core

CommitTypeDescription
f87fad3ffffixavoid injecting internal error handler from a destroyed injector (#62275)
114906d2d6fixFix cancellation of animation enter classes (#63442)
596b545130fixPrevent an error on cleanup when an rxResource stream threw before returning an Observable (#63342)

20.2.2 (2025-08-27)

compiler

CommitTypeDescription
d7b6045d61fixfixes animations on elements with structural directives (#63390)

core

CommitTypeDescription
6c421ed65dfixEnsures @for loop animations never get cancelled (#63328)
9093e0e132fixfix memory leak with leaving nodes tracking (#63328)
c8f07daf8ffixFixes animate.leave binding to a string with spaces (#63366)

20.2.1 (2025-08-21)

compiler

CommitTypeDescription
a28672fb70fixKeep paraenthesis in Nullish + Boolean expression. (#63292)

20.2.0 (2025-08-20)

Deprecations

animations

  • @angular/animations

core

  • @angular/animations

router

  • The Router.getCurrentNavigation method is deprecated. Use the Router.currentNavigation signal instead.
  • The Router.getCurrentNavigation method is deprecated. Use the Router.currentNavigation signal instead.

animations

CommitTypeDescription
9766116cearefactordeprecate the animations package (#62795)

compiler

CommitTypeDescription
7767aa640cfixallow more characters in square-bracketed attribute names (#62742)
7b51728813fixfixes animation event host bindings not firing (#63217)

compiler-cli

CommitTypeDescription
5abfe4a899featadd diagnostic for uninvoked functions in text interpolation (#59191)
c4917074f1fixdisplay proper function in NG8117 message (#62842)
812463c563fixIgnore diagnostics on ngTemplateContextGuard lines in TCB (#63054)
45b030b5cefixprevent dom event assertion in TCB generation on older angular versions (#63053)

core

CommitTypeDescription
6b1f4b9e8bfeatadd enter and leave animation instructions (#62682)
cec91c0035featadd option to infer the tag names of components in tests (#62283)
141bb75ff2featPromote zoneless to stable (#62699)
4138aca91ffeatrender ARIA property bindings as attributes (#62630)
a409534d6cfeatsupport as aliases on else if blocks (#63047)
745ea44394featsupport TypeScript 5.9 (#62541)
593cc8a368fixchecks if body exists before continuing (#62768)
bdc31675b7fixensure animate events do not have duplicate elements (#63216)
de3a0c5cf3fixFix animate.enter class removal when composing classes (#62981)
6597ac0af7fixfix support for space separated strings in leave animations (#62979)
ebd622b344fixfixes empty animations when recalculating styles (#63007)
455b147488fixfixes timing issues with enter animations (#62925)
f9d73cc687fixhandle cases where classes added have no animations (#63242)
6a1184600cfixprevents duplicate nodes when @if toggles with leave animations (#63048)
063b5e166ffixswitch check to documentElement with chaining (#62773)
320de4e96drefactordeprecate animations field on component interface (#62895)

forms

CommitTypeDescription
c353497a01featadd support for pushing an array of controls to formarray (#57102)

http

CommitTypeDescription
0984b30388featAdd redirected property to HttpResponse and HttpErrorResponse (#62675)
be811fee79featadd referrer & integrity support for fetch requests in httpResource (#62461)
1cf9d9064cfeatAdd support for fetch referrer & integrity options in HttpClient (#62417)
1408baff45fixAdd missing timeout and transferCache options to HttpClient (#62586)

language-service

CommitTypeDescription
c81e345e72featsupport auto-import for attribute completions (#62797)
d64dd27a02featsupport to report the deprecated API in the template (#62054)
591c7e2ec8fixSupport to resolve the re-export component. (#62585)

platform-browser

CommitTypeDescription
52b8e07d6efeatWarns on conflicting hydration and blocking navigation (#62963)

router

CommitTypeDescription
d00b3fed58featadd a currentNavigation signal to the Router service. (#62971)
687c374826featadd a currentNavigation signal to the Router service. (#63011)
9c45c322d1fixensure preloaded components are properly activated (#62502)

service-worker

CommitTypeDescription
8255e0cf15featadd messageerror event handling and logging (#62834)
5220b51e75featAdds for type in provideServiceWorker (#62831)
4ac6171b09featAdds support for updateViaCache in provideServiceWorker (#62721)
b65c3d5e19featImproves storage full detection in data caching (#62737)
3b214d2040featLogs unhandled promise rejections in service worker (#63059)
6d011687ecfeatnotify clients about version failures (#62718)

20.1.8 (2025-08-20)

compiler

CommitTypeDescription
691f5ed033fixerror when ng-content fallback has translated children (#63156)
b1dec9bc50fixincorrect source span for expression AST inside template attribute (#63175)

compiler-cli

CommitTypeDescription
cda402f1d8fixaccount for expression with type arguments during HMR extraction (#63261)

20.1.7 (2025-08-13)

compiler

CommitTypeDescription
d9e37908a5fixincorrect spans for AST inside input value with leading space (#63082)

compiler-cli

CommitTypeDescription
4aa120ac00fixerror when type checking host bindings of generic directive (#63061)

core

CommitTypeDescription
322042c5b3fixdestroying the effect on afterRenderEffect (#63001)

router

CommitTypeDescription
5fd79424e3fixattempt to resolve component resources in JIT mode (#63062)

20.1.6 (2025-08-06)

20.1.5 (2025-08-06)

compiler-cli

CommitTypeDescription
3b2e8efcacfixcorrectly type check host listeners to own outputs (#62965)

core

CommitTypeDescription
c9f3976ebafixproperly recognize failed fetch responses when loading external resources in JIT (#62992)

http

CommitTypeDescription
ae443f8eb0fixReset headers, progress, and statusCode when using set() in HttpResource (#62873)

migrations

CommitTypeDescription
7a5851e4b0fixincorrect filtering in inject migration (#62913)

20.1.4 (2025-07-31)

compiler

CommitTypeDescription
db3c5826eefixexclude more safe reads expression from 2way-binding (#62852)

core

CommitTypeDescription
c633b63e56fixupdate symbols for new signals api (#62284)

http

CommitTypeDescription
ab6033979afixadd missing http options allowed in fetch API (#62881)
15670d8417fixpropagate plain errors when parsing fails (#62765)

20.1.3 (2025-07-23)

core

CommitTypeDescription
2c522efbe5fixfix change tracking for Resource#hasValue (#62595)

platform-browser

CommitTypeDescription
2fd1f7beb5fixresolve component resources before bootstrapping in JIT mode (#62758)

20.1.2 (2025-07-17)

compiler

CommitTypeDescription
8ad10fd63bfixfix detection of directive deps in JIT (#62666)

20.1.1 (2025-07-16)

compiler

CommitTypeDescription
75d2a349b4fixincorrect spans for left side of binary operation (#62641)
70c8780c54fixmore permissive parsing of @ characters (#62644)

compiler-cli

CommitTypeDescription
9506cdfaadfixinfer type of event target for void elements (#62648)

core

CommitTypeDescription
26ade4a337fixEnsure application remains unstable during bootstrap (#62631)
a81f0faa1afixInputBinding marks component a dirty. (#62613)

http

CommitTypeDescription
276836ee73fixdo not display warnings Angular detected that a HttpClientrequest with thekeepalive option was sent using XHR when option is not true (#62536)

router

CommitTypeDescription
5949373692fixhandle errors from view transition readiness (#62535)

20.1.0 (2025-07-09)

common

CommitTypeDescription
58aedc37d1featadd support for a custom EnvironmentInjector to NgComponentOutlet directive (#54764)
ef10aa4005featsupport decoding in NgOptimizedImage (#61905)

compiler

CommitTypeDescription
0dcf230d52featadd support for new binary assignment operators (#62064)
5a76826d26fixonly report parser errors on invalid expression (#61793)
089ad0ee15fixproduce more accurate errors for interpolations (#62258)
e9fcbb8af1fixremove TypeScript from linker (#61618)

compiler-cli

CommitTypeDescription
e62fb359d6featadd experimental support for fast type declaration emission (#61334)
0cf1001715featsupport host directives with direct external references in fast type declaration emission (#61469)
b7ab5fa256fixadd signal checks to handle negated calls (#59970)
77fa204ad1fixrename flag for enabling fast type declaration emission (#61353)
c439d6938dfixsymbol builder duplicating host directives (#61240)
3e1baa5a95fixtypo in NG2026 message (#61325)

core

CommitTypeDescription
8163a8995efeatAdd destroyed property on DestroyRef (#61849)
737b35b684featAdd destroyed property to EnvironmentInjector (#61951)
2e0c98bd3ffeatsupport bindings in TestBed (#62040)
4356e85456fixfakeAsync should not depend on module import order (#61375)
8424b3bcd5fixFixes template outlet hydration (#61989)
583b9a7be5fixmissing useExisting providers throwing for optional calls (#61137)
8f65223bd8fixupdate min Node.js support to 20.19, 22.12, and 24.0 (#61499)
b785256b9eperfavoid intermediate arrays in definition (#61445)
56769de4d8perfmove property remapping for dom properties to compiler (#62421)

forms

CommitTypeDescription
610bebfce9fixAllow ControlState as reset arguments for FormGroup/FormRecord (#55860)
4f0221e193fiximprove select performance (#61949)

http

CommitTypeDescription
55fa38a1e5featadd cache & priority support for fetch requests in httpResource (#62301)
b6ef42843cfeatadd credentials support for fetch requests in httpResource (#62390)
73269cf5cefeatadd keepalive support for fetch requests in httpResource (#61833)
27b7ec0a62featadd mode & redirect for fetch request in httpResource (#62337)
f0965c7acdfeatAdd support for fetch credentials options in HttpClient (#62354)
87322449a3featadd support for fetch mode and redirect options in HttpClient (#62315)
9791ab1b6ffeatAdd support for fetch request cache and priority options (#61766)
aa861c42fffeatadd timeout option on httpResource. (#62326)
c4cffe2063featAdd timeout option to HTTP requests (#57194)
cfbbb08437featadd warning when withCredentials overrides explicit credentials (#62383)

language-service

CommitTypeDescription
20c1f991e6featadd semantic tokens for templates (#60260)
cf55d1bdd4featSupport importing the external module's export about the angular metadata. (#61122)
5d2e85920efeatsupport to fix missing required inputs diagnostic (#50911)

router

CommitTypeDescription
9833d9ea47featRun loadComponent and loadChildren functions in the route's injection context (#62133)

service-worker

CommitTypeDescription
c67dbda8fffeatsupport notification closes (#61442)
6e1df54799featsupport push subscription changes (#61856)

20.0.6 (2025-07-01)

20.0.5 (2025-06-25)

compiler-cli

CommitTypeDescription
de0d525ad7fixadd suggestion when pipe is missing (#62146)
3eb5a79a83fixhandle initializer APIs wrapped in type casts (#62203)

core

CommitTypeDescription
a2e6f317a7fixallow to set a resource in an error state (#62253)
4c00238a69fixavoid injecting ErrorHandler from a destroyed injector (#61886)
369f03ad7ffixunable to retrieve defer blocks in tests when component injects ViewContainerRef (#62156)

router

CommitTypeDescription
65c59dd796fixhandle scrollRestoration error in restricted environments (#62186)

upgrade

CommitTypeDescription
144c429230fixMake zoneless work with hybrid apps (#61660)

20.0.4 (2025-06-18)

core

CommitTypeDescription
e343cdfb86fixFixes template outlet hydration (#62012)
67f657e4a3fixinject APP_ID before injector is destroyed (#61885)
ae212b51eefixWrap ErrorEvent with no error property (#62081)

migrations

CommitTypeDescription
82bf9848a1fixmore robust trailing comma removal in unused imports migration (#62118)

20.0.3 (2025-06-11)

20.0.2 (2025-06-06)

core

CommitTypeDescription
1e8158baeefixcomponents marked for traversal resets reactive context (#61663)
1cd23be57efixunregister onDestroy in outputToObservable (#61882)

20.0.1 (2025-06-04)

compiler

CommitTypeDescription
66a0ec6510fixmove defer trigger assertions out of parser (#61747)
8ecb1ba027fixrecover invalid parenthesized expressions (#61815)

core

CommitTypeDescription
8c60cbfd1cfixtakeUntilDestroyed completes immediately if DestroyRef already destroyed (#61847)
b1d960d082fixproduce an error when incremental hydration is expected, but not configured (#61741)
b4ed62ddf6fixproperly handle the case where getSignalGraph is called on a componentless NodeInjector (#60772)
ddd22bea48fixunregister onDestroy in ResourceImpl when destroy() is called (#61870)
5c31e7e28dfixunregister onDestroy when observable errors in toSignal (#61596)

migrations

CommitTypeDescription
e9820a6d48fixavoid trailing whitespaces in unused imports migration (#61698)

service-worker

CommitTypeDescription
b93fa22f25fixprevent duplicate fetches during concurrent update checks (#61443)
9743bd1317fixupdate service worker to handle seeking better for videos (#60029)

20.0.0 (2025-05-28)

Blog post: https://blog.angular.dev/announcing-angular-v20-b5c9c06cf301

Breaking Changes

common

  • Using the Y formatter (week-numbering year) without also including w (week number) is now detected as suspicious date pattern, as y is typically intended.
  • AsyncPipe now directly catches unhandled errors in subscriptions and promises and reports them to the application's ErrorHandler. For Zone-based applications, these errors would have been caught by ZoneJS and reported to ErrorHandler so the result is generally the same. The change to the exact mechanism for reporting can result in differences in test environments that will require test updates.

compiler

  • 'in' in an expression now refers to the operator

  • void in an expression now refers to the operator

    Previously an expression in the template like {{void}} referred to a property on the component class. After this change it now refers to the void operator, which would make the above example invalid. If you have existing expressions that need to refer to a property named void, change the expression to use this.void instead: {{this.void}}.

  • Parenthesis are always respected.

    This can lead to runtime breakages when a nullish coalescing operator is nested within parentheses. eg. {{ (foo?.bar).baz }} will throw if foo is nullish. This is the same behavior as native JavaScript.

core

  • TypeScript versions less than 5.8 are no longer supported.

  • the TestBed.flushEffects() was removed - use the TestBed.tick() instead.

  • provideExperimentalCheckNoChangesForDebug has several breaking changes:

    • It is renamed to provideCheckNoChangesConfig
    • The behavior applies to all checkNoChanges runs
    • The useNgZoneOnStable option is removed. This wasn't found to be generally more useful than interval
  • provideExperimentalZonelessChangeDetection is renamed to provideZonelessChangeDetection as it is now "Developer Preview" rather than "Experimental".

    • InjectFlags has been removed.
    • inject no longer accepts InjectFlags.
    • Injector.get no longer accepts InjectFlags.
    • EnvironmentInjector.get no longer accepts InjectFlags.
    • TestBed.get no longer accepts InjectFlags.
    • TestBed.inject no longer accepts InjectFlags.
    • TestBed.get has been removed. Use TestBed.inject instead.
  • afterRender was renamed to afterEveryRender.

    • Angular no longer supports Node.js v18.
    • Node.js versions 22.0 to 22.10 are also no longer supported.

    Before upgrading to Angular v20, ensure the Node.js version is at least 20.11.1. For the full list of supported versions, visit: https://angular.dev/reference/versions

  • PendingTasks.run no longer returns the result of the async function. If this behavior is desired, it can be re-implemented manually with the PendingTasks.add. Be aware, however, that promise rejections will need to be handled or they can cause the node process to shut down when using SSR.

  • Uncaught errors in listeners which were previously only reported to ErrorHandler are now also reported to Angular's internal error handling machinery. For tests, this means that the error will be rethrown by default rather than only logging the error. Developers should fix these errors, catch them in the test if the test is intentionally covering an error case, or use rethrowApplicationErrors: false in configureTestingModule as a last resort.

  • The any overload has been removed from injector.get. It now only supports ProviderToken<T> and (deprecated since v4) string.

  • Animations are guaranteed to be flushed when Angular runs automatic change detection or manual calls to ApplicationRef.tick. Prior to this change, animations would not be flushed in some situations if change detection did not run on any views attached to the application. This change can affect tests which may rely on the old behavior, often by making assertions on DOM elements that should have been removed but weren't because DOM removal is delayed until animations are flushed.

  • ApplicationRef.tick will no longer catch and report errors to the appplication ErrorHandler. Errors will instead be thrown out of the method and will allow callers to determine how to handle these errors, such as aborting follow-up work or reporting the error and continuing.

  • This commit deprecates ng-reflect-* attributes and updates the runtime to stop producing them by default. Please refactor application and test code to avoid relying on ng-reflect-* attributes.

    To enable a more seamless upgrade to v20, we've added the provideNgReflectAttributes() function (can be imported from the @angular/core package), which enables the mode in which Angular would be producing those attribites (in dev mode only). You can add the provideNgReflectAttributes() function to the list of providers within the bootstrap call.

router

  • The RedirectFn can now return Observable or Promise. Any code that directly calls functions returning this type may need to be adjusted to account for this.
  • Several methods in the public API of the Router which required writable arrays have now been updated to accept readonly arrays when no mutations are done.
  • The guards arrays on Route no longer include any in the type union. The union includes functions for the functional guards as well as a type matching Injector.get: ProviderToken<T>|string. Note that string is still deprecated on both the route guards and Injector.get.

Deprecations

core

  • ngIf/ngFor/ngSwitch are deprecated. Use the control flow blocks instead (@for/@if/@switch).

platform-browser

  • All entries of the @angular/platform-browser-dynamic
  • HammerJS support is deprecated and will be removed in a future major version.

platform-server

  • @angular/platform-server/testing

    Use e2e tests to verify SSR behavior instead.

common

CommitTypeDescription
2e5362a469feataccept undefined inputs in NgTemplateOutlet (#61404)
b7d3f3dbfcfeatAllow passing ScrollOptions to ViewportScroller (#61002)
74cceba587featthrow error for suspicious date patterns (#59798)
255c79e048fixcleanup updateLatestValue if view is destroyed before promise resolves (#58041)
739cadae62fixHandle errors in async pipe subscriptions (#60057)
cbbea70fa3fixissue a warning instead of an error when NgOptimizedImage exceeds the preload limit (#60879)
fc4a56d5c5fixrename httpResource function in factory (#60022)
785a1110e6fixresolve host binding type issues (#60481)

compiler

CommitTypeDescription
7a971766dcfeatadd extended diagnostic for uninvoked track function on @for blocks (#60495)
f2d5cf7eddfeatsupport exponentiation operator in templates (#59894)
51b8ff23cefeatsupport tagged template literals in expressions (#59947)
1b8e7ab9fefeatsupport the in keyword in Binary expression (#58432)
0361c2d81ffeatsupport void operator in templates (#59894)
8b990a31c3fixerror if rawText isn't estimated correctly (#60529)
4fe489f1b4fixexponentiation should be right-to-left associative (#60101)
ef1fd137a9fixincorrect spans for template literals (#60323)
e0d378d20efixincorrectly handling let declarations inside i18n (#60512)
b70ad3c4e6fixproper handling of typeof, void in RecursiveAstVisitor (#60101)
e25e6c95a2fixremove TypeScript from linker (#61635)
768239a89cperfreduce allocations for let declarations only used in the same view (#60512)

compiler-cli

CommitTypeDescription
bec1610da2featadd extended diagnostic for invalid nullish coalescing (#60279)
c889382a20featdetect missing structural directive imports (#59443)
1971e57a45featsupport type checking of host bindings (#60267)
9ec9c7e1b8fixavoid fatal diagnostics for invalid module schemas (#61220)
a1cacc5b17fixavoid fatal diagnostics for missing template files (#58673)
1e6faad479fixcorrectly parse event name in HostListener (#60561)
ffb19e64f1fixpreserve required parens for nullish coalescing (#60060)
7c9b4892e9fixpreserve required parens in exponentiation expressions (#60101)
7e03af898efixset correct target when type checking events (#60561)
2d51a203dcfixwrong event name for host listener decorators (#60460)

core

CommitTypeDescription
22d3f0562cfeatadd hook for producer creation side effects (#60333)
fe57332fc5featadd input binding support to dynamically-created components (#60137)
65adb3024dfeatAdd provider which reports unhandled errors on window to ErrorHandler (#60704)
b154fb3911featadd support for two-way bindings on dynamically-created components (#60342)
82aa2c1a52featadd the ability to apply directives to dynamically-created components (#60137)
326d48afb4featdrop support for TypeScript older than 5.8 (#60197)
d260ca3091featemit template function for template related profiler hooks (#60174)
a4bad8d361featexport signalGetFn from signal primitives (#60497)
4812215a7bfeatExpose Injector.destroy on Injector created with Injector.create (#60054)
c1bcae91ddfeatexpose performance data in Chrome DevTools (#60789)
809b5b4596featintroduce new DI profiling event (#60158)
d5fd7349fbfeatintroduce TestBed.tick() (#60993)
4e88e18a8efeatmark toObservable as stable (#60449)
727cda3856featmark linkedSignal API as public (#60865)
644d9f3bbdfeatmark the toSignal API as stable (#60442)
e711f99d81featmove provideExperimentalCheckNoChangesForDebug to provideCheckNoChangesConfig (#60906)
7ccec1494ffeatmove DOCUMENT token into core (#60663)
953c4b2580featMove zoneless change detection to dev preview (#60748)
611baaf069featremove InjectFlags from public API (#60318)
5e209cb560featremove TestBed.get (#60414)
d8fbb909cefeatrename afterRender to afterEveryRender and stabilize (#60999)
567522398ffeatstabilize incremental hydration api (#60888)
8d050b5bfcfeatstabilize linkedSignal API (#60741)
866cea9a05featStabilize PendingTasks Injectable (#60716)
bf8492b871featstabilize withI18nSupport() api (#60889)
be44cc8f40featsupport listening to outputs on dynamically-created components (#60137)
fe9b79b615featupdate Node.js version support (#60545)
e170d24240fixadd migration away from InjectFlags (#60318)
7eb59d3887fixadded @angular/compiler as a peer dependency (#55610)
7232ce5b17fixCatch and report rejections in async function of PendingTasks.run (#60044)
fd12220a35fixdefer block render failures should report to application error handler (#60149)
3459faadbffixdo not allow setInput to be used with inputBinding (#60137)
0ac949c266fixdo not run change detection on global error events (#60944)
4fe34f4cfefixenable stashing only when withEventReplay() is invoked (#61077)
962b59b14efixEnsure ComponentFixture does not duplicate error reporting from FakeAsync (#60104)
7b819be83ffixEnsure errors in listeners report to the application error handler (#60251)
ff772d7800fixfix typing on injector.get to omit 'any' (#60202)
13d1c8ab38fixfixes timing of hydration cleanup on control flow (#60425)
0b69b61929fixFlush animations when no component has been checked (#58089)
3ba39bc28ffixgetting resource value throws an error instead of returning undefined (#61441)
ca6295e90bfixhandle different DI token types in Chrome DevTools integration (#61333)
0162ceb427fixinject migration should treat @Attribute as optional (#60916)
ea5eb28865fixinput targeting not checking if input exists on host (#60137)
c8951159acfixmark zone.js as an optional peer dependency (#61616)
d62379bb13fixmove reload method from Resource to WritableResource (#61441)
a89f1cff24fixnarrow error type for resources API (#61441)
624be2ef0cfixprevent stash listener conflicts (#59635)
017cc0a37cfixproperly handle app stabilization with defer blocks (#61040)
6e79eaf739fixreading resource value after reload in the error state (#61441)
3d85d9363cfixreduce total memory usage of various migration schematics (#60774)
1c7b356625fixrelease hasPendingTasks observers (#59723)
43cbc58254fixremove forceRoot flag for effects (#60535)
48974c3cf8fixremove rejectErrors option encourages uncaught exceptions (#60397)
491b0a4eadfixRemove duplicate reporting of errors in CDR.detectChanges (#60056)
04d963c0a5fixremove unused parameter from listener instruction (#60406)
0ae1889560fixrun ApplicationRef.prototype.bootstrap in NgZone (#60720)
a611b234d7fixrun root effects in creation order (#60534)
338818ce89fixSurface errors from ApplicationRef.tick to callsite (#60102)
350776b412fixTestBed.tick should ensure test components are synchronized (#61382)
3d4ddd2247fixTesting should not throw when Zone does not patch test FW APIs (#61628)
30e081287dfixupdate min Node.js support to 20.19, 22.12, and 24.0 (#61500)
b407157ee8refactorDeprecate the structural directives ngIf/ngFor/ngSwitch. (#60492)
c2987d8402refactorstop producing ng-reflect attributes by default (#60973)

forms

CommitTypeDescription
a07ee60989featadd markAllAsDirty to AbstractControl (#58663)
bdfbd54932featAllow to reset a form without emitting events (#60354)
81fe0536fdfixMake sure statusChanges is emitted (#57098)
bdd5e20423fixresolve host binding type issues (#60481)

http

CommitTypeDescription
ccc5cc068ffeatadd keepalive support for fetch requests (#60621)
5795e03cdffixDelay stabilization until next app synchronization (#60656)

platform-browser

CommitTypeDescription
bc2cab747frefactorDeprecate the platform-browser-dynamic package (#61043)
a980ac9a6arefactorDeprecate the HammerJS integration (#60257)

platform-server

CommitTypeDescription
2240a21c97refactordeprecate the testing entry point (#60915)

router

CommitTypeDescription
0bb4bd661efeatAdd ability to directly abort a navigation (#60380)
62de7d930afeatadd asynchronous redirects (#60863)
7c12cb1df9featAllow resolvers to read resolved data from ancestors (#59860)
ff98ccb193featsupport custom elements for RouterLink (#60290)
219f41d049fixPrevent dangling promise rejections from internal navigations (#60162)
2419060feffixrelax required types on router commands to readonly array (#60345)
c57951d58ffixRemove 'any' type from route guards (#60378)
db2f2d99c8fixScroller should scroll as soon as change detection completes (#60086)

19.2.14 (2025-05-28)

compiler

CommitTypeDescription
24bab55f0cfixlexer support for template literals in object literals (#61601)

migrations

CommitTypeDescription
9e1cd49662fixpreserve comments when removing unused imports (#61674)

19.2.13 (2025-05-23)

common

CommitTypeDescription
2c876b4fc5fixavoid injecting ApplicationRef in FetchBackend (#61649)

service-worker

CommitTypeDescription
b15bddfa04fixdo not register service worker if app is destroyed before it is ready to register (#61101)

19.2.12 (2025-05-21)

common

CommitTypeDescription
126efc9972fixcancel reader when app is destroyed (#61528)
efda872453fixprevent reading chunks if app is destroyed (#61354)

compiler

CommitTypeDescription
44bb328eaefixavoid conflicts between HMR code and local symbols (#61550)

compiler-cli

CommitTypeDescription
107180260ffixAlways retain prior results for all files (#61487)
1191e62d70fixavoid ECMAScript private field metadata emit (#61227)

core

CommitTypeDescription
2b1b14f4d3fixcleanup rxResource abort listener (#58306)
8f9b05eaaafixcleanup testability subscriptions (#61261)
eb53bda470fixenable stashing only when withEventReplay() is invoked (#61352)
94f5a4b4d6fixTesting should not throw when Zone does not patch test FW APIs (#61376)
c0c69a5abcfixunregister onDestroy in toSignal. (#61514)

platform-server

CommitTypeDescription
8edafd0559perfspeed up resolution of base (#61392)

19.2.11 (2025-05-15)

19.2.10 (2025-05-07)

common

CommitTypeDescription
89056a0356fixcleanup updateLatestValue if view is destroyed before promise resolves (#61064)

core

CommitTypeDescription
4623b61448fixmissing useExisting providers throwing for optional calls (#61152)
400dbc5b89fixproperly handle app stabilization with defer blocks (#61056)

platform-server

CommitTypeDescription
a6f0d5bc20fixless aggressive ngServerMode cleanup (#61106)

19.2.9 (2025-04-30)

core

CommitTypeDescription
946b844e0dfixasync EventEmitter error should not prevent stability (#61028)
dbb87026cafixcall DestroyRef on destroy callback if view is destroyed [patch] (#61061)
2e140a136afixprevent stash listener conflicts [patch] (#61063)

19.2.8 (2025-04-23)

forms

CommitTypeDescription
ea4a211216fixmake NgForm emit FormSubmittedEvent and FormResetEvent (#60887)

19.2.7 (2025-04-16)

common

CommitTypeDescription
37ab6814f5fixissue a warning instead of an error when NgOptimizedImage exceeds the preload limit (#60883)

core

CommitTypeDescription
b144126612fixinject migration: replace param with this. (#60713)

http

CommitTypeDescription
d39e09da41fixInclude HTTP status code and headers when HTTP requests errored in httpResource (#60802)

19.2.6 (2025-04-09)

compiler

CommitTypeDescription
3441f7b914fixerror if rawText isn't estimated correctly (#60529) (#60753)

compiler-cli

CommitTypeDescription
fc946c5f72fixensure HMR works with different output module type (#60797)

core

CommitTypeDescription
00bbd9b382fixfix docs for output migration (#60764)
f2bfa3151efixfix ng generate @angular/core:output-migration. Fixes angular#58650 (#60763)
9241615ad0fixreduce total memory usage of various migration schematics (#60776)

language-service

CommitTypeDescription
0e82d42774fixDo not provide element completions in end tag (#60616)
fcdef1019ffixEnsure dollar signs are escaped in completions (#60597)

19.2.5 (2025-04-02)

CommitTypeDescription
e61d06afb5fixstep 6 tutorial docs (#60630)

animations

CommitTypeDescription
fa48f98d9ffixadd missing peer dependency on @angular/common (#60660)

compiler

CommitTypeDescription
ca5aa4d55bfixthrow for invalid "as" expression in if block (#60580)

compiler-cli

CommitTypeDescription
f4c4b10ea8fixProduce fatal diagnostic on duplicate decorated properties (#60376)
22a0e54ac4fixsupport relative imports to symbols outside rootDir (#60555)

core

CommitTypeDescription
64da69f7b6fixcheck ngDevMode for undefined (#60565)
8f68d1bec3fixfix ng generate @angular/core:output-migration (#60626)
bc79985c65fixfix regexp for event types (#60592)
006ac7f22ffixfixes #592882 ng generate @angular/core:signal-queries-migration (#60688)
da6e93f434fixpreserve comments in internal inject migration (#60588)
dbbddd1617fixprevent omission of deferred pipes in full compilation (#60571)

language-service

CommitTypeDescription
0e9e0348ddfixUpdate adapter to log instead of throw errors (#60651)

migrations

CommitTypeDescription
15f53f035bfixhandle shorthand assignments in super call (#60602)
4b161e6234fixinject migration not handling super parameter referenced via this (#60602)

router

CommitTypeDescription
958e98e4f7fixAdd missing types to transition (#60307)

service-worker

CommitTypeDescription
7cd89ad2c6fixassign initializing client's app version, when a request is for worker script (#58131)

19.2.4 (2025-03-26)

core

CommitTypeDescription
081f5f5a83ffixfix used templates are not deleted (#60459)

localize

CommitTypeDescription
a2f622d82d6fixhandle @angular/build:karma in ng add (#60513)

platform-browser

CommitTypeDescription
8e8ccc79279fixensure platformBrowserTesting includes platformBrowser providers (#60480)

19.2.3 (2025-03-19)

compiler-cli

CommitTypeDescription
aa8ea7a5b2fixreport more accurate diagnostic for invalid import (#60455)

core

CommitTypeDescription
13a8709b2bfixcatch hydration marker with implicit body tag (#60429)
296aded9dafixexecute timer trigger outside zone (#60392)
0615ffb4f7fixinclude input name in error message (#60404)

platform-browser-dynamic

CommitTypeDescription
1e06c8e8b6fixensure compiler is loaded before @angular/common (#60458)

upgrade

CommitTypeDescription
9e1a1030c8fixhandle output emitters when downgrading a component (#60369)

19.2.2 (2025-03-12)

common

CommitTypeDescription
90a16a1088fixsupport equality function in httpResource (#60026)

compiler

CommitTypeDescription
56b551d273fixincorrect spans for template literals (#60323) (#60331)

compiler-cli

CommitTypeDescription
23ca88522bfixhandle transformed classes when generating HMR code (#60298)

core

CommitTypeDescription
6dc41265fdfixcheck whether application is destroyed before initializing event replay (#59789)
bb12b30d52fixensures immediate trigger fires properly with lazy loaded routes (#60203)
b144dd946efixfix removal of a container reference used in the component file (#60210)

platform-server

CommitTypeDescription
15c42969fcfixadd missing peer dependency for rxjs (#60308)

router

CommitTypeDescription
7bcdf7c143fixupdate symbols (#60233)

19.2.1 (2025-03-05)

common

CommitTypeDescription
c2de5f68b3fixclean up onUrlChange listener when root scope is destroyed (#60004)

compiler-cli

CommitTypeDescription
1dd94476b3fixensure template IDs are not reused if a source file changes (#60152)

core

CommitTypeDescription
1b3b05bf72fixcache ComponentRef inputs and outputs (#60156)
330c24aed9fixprevent invoking replay listeners on disconnected nodes (#60103)
cfad089cc3fixprevents event replay from being called on comment nodes (#60130)

language-service

CommitTypeDescription
3f0116607dfixForward the tags for quick info from the type definition (#59524)

19.2.0 (2025-02-26)

common

CommitTypeDescription
3e39da593afeatintroduce experimental httpResource (#59876)

compiler

CommitTypeDescription
5b20bab96dfeatAdd Skip Hydration diagnostic. (#59576)
fe8a68329bfeatsupport untagged template literals in expressions (#59230)

core

CommitTypeDescription
2588985f43featpass signal node to throwInvalidWriteToSignalErrorFn (#59600)
168516462afeatsupport default value in resource() (#59655)
bc2ad7bfd3featsupport streaming resources (#59573)
146ab9a76efeatsupport TypeScript 5.8 (#59830)
6c92d65349fixadd hasValue narrowing to ResourceRef (#59708)
96e602ebe9fixcancel in-progress request when same value is assigned (#59280)
6789c7ef94fixDefer afterRender until after first CD (#59455) (#59551)
c87e581dd9fixDon't run effects in check no changes pass (#59455) (#59551)
127fc0dc84fixfix resource()'s previous.state (#59708)
b592b1b051fixfix race condition in resource() (#59851)
a299e02e91fixpreserve tracing snapshot until tick finishes (#59796)

forms

CommitTypeDescription
fa0c3e3210featsupport type set in form validators (#45793)

migrations

CommitTypeDescription
1cd3a7db83featadd migration to convert templates to use self-closing tags (#57342)

platform-browser

CommitTypeDescription
e6cb411e43fixautomatically disable animations on the server (#59762)

platform-server

CommitTypeDescription
fc5d187da5fixdecouple server from animations module (#59762)

19.1.8 (2025-02-26)

benchpress

CommitTypeDescription
f0990c67e6fixEnsure future-proof correct initialization order (#60025)

common

CommitTypeDescription
1fbaeab37dfixmake types for HttpClient more readable (#59901)

core

CommitTypeDescription
c611c8d212fixcapture stack for HMR errors (#60067)

language-service

CommitTypeDescription
4c9d09c643fixprovide correct rename info for elements (#60088)

19.1.7 (2025-02-19)

common

CommitTypeDescription
e9f10eb4c9fixclean up urlChanges subscribers when root scope is destroyed (#59703)

compiler-cli

CommitTypeDescription
16fc074689fixavoid crash in isolated transform operations (#59869)

forms

CommitTypeDescription
ec1e4c3d94fixFix typing on FormRecord. (#59993)

19.1.6 (2025-02-12)

compiler

CommitTypeDescription
01f669a274fixhandle tracking expressions requiring temporary variables (#58520)

compiler-cli

CommitTypeDescription
dcfb9f1959fixhandle deferred blocks with shared dependencies correctly (#59926)

core

CommitTypeDescription
cab7a9b69cfixinvalidate HMR component if replacement throws an error (#59854)

migrations

CommitTypeDescription
710759ddccfixaccount for let declarations in control flow migration (#59861)
46f36a58bffixcount used dependencies inside existing control flow (#59861)

19.1.5 (2025-02-06)

compiler-cli

CommitTypeDescription
d7b5c597ffcfixgracefully fall back if const enum cannot be passed through (#59815)
53a4668b58bfixhandle const enums used inside HMR data (#59815)
976125e0b4cfixhandle enum members without initializers in partial evaluator (#59815)

19.1.4 (2025-01-29)

core

CommitTypeDescription
544b9ee7ca0fixcheck whether application is destroyed before printing hydration stats (#59716)
d6e78c072dcfixensure type is preserved during HMR (#59700)
c2436702df9fixfixes test timer-based test flakiness in CI (#59674)

elements

CommitTypeDescription
44180645992fixnot setting initial value on signal-based input (#59773)

platform-browser

CommitTypeDescription
1828a840620fixprepend baseHref to sourceMappingURL in CSS content (#59730)
1c84cbca30efixUpdate pseudoevent created by createMouseSpecialEvent to populate _originalEvent property (#59690)
12256574626fixUpdate pseudoevent created by createMouseSpecialEvent to populate _originalEvent property (#59690)
3f4d5f636aafixUpdate pseudoevent created by createMouseSpecialEvent to populate _originalEvent property (#59690)

router

CommitTypeDescription
e3da35ec749fixprevent error handling when injector is destroyed (#59457)

service-worker

CommitTypeDescription
522acbf3d7efixadd missing rxjs peer dependency (#59747)

19.1.3 (2025-01-22)

compiler

CommitTypeDescription
ecfb74d287fixhandle :host-context with comma-separated child selector (#59276)

compiler-cli

CommitTypeDescription
53160e504dfixextract parenthesized dependencies during HMR (#59644)
39690969affixhandle conditional expressions when extracting dependencies (#59637)
78af7a5059fixhandle new expressions when extracting dependencies (#59637)

core

CommitTypeDescription
408af24ff3fixcapture self-referencing component during HMR (#59644)
d7575c201cfixreplace metadata in place during HMR (#59644)
26f6d4c485fixskip component ID collision warning during SSR (#59625)

migrations

CommitTypeDescription
a62c84bc18fixavoid applying the same replacements twice when cleaning up unused imports (#59656)

platform-browser

CommitTypeDescription
b2b3816cb1fixclear renderer cache during HMR when using async animations (#59644)

19.1.2 (2025-01-20)

compiler

CommitTypeDescription
8dcd889987fixupdate @ng/component URL to be relative (#59620)

compiler-cli

CommitTypeDescription
95a05bb202fixdisable tree shaking during HMR (#59595)

core

CommitTypeDescription
a4eb74c79cfixanimation sometimes renderer not being destroyed during HMR (#59574)
906413aba3fixchange Resource to use explicit undefined in its typings (#59024)
4eb541837cfixcleanup _ejsa when app is destroyed (#59492)
5497102769fixcleanup stash listener when app is destroyed (#59598)
266a8f2f2efixhandle shadow DOM encapsulated component with HMR (#59597)
6f7716268afixHMR not matching component that injects ViewContainerRef (#59596)
d12a186d53fixtreat exceptions in equal as part of computation (#55818)

19.1.1 (2025-01-16)

core

CommitTypeDescription
357795cb96fixrun HMR replacement in the zone (#59562)

platform-browser

CommitTypeDescription
eb0b1851f4fixroll back HMR fix (#59557)

19.1.0 (2025-01-15)

common

CommitTypeDescription
e4c50b3beafeatexpose component instance in NgComponentOutlet (#58698)

compiler

CommitTypeDescription
ceadd28ea1fixallow $any in two-way bindings (#59362)
aed49ddaaafixuse chunk origin in template HMR request URL (#59459)

compiler-cli

CommitTypeDescription
c5c20e9d86fixcheck event side of two-way bindings (#59002)

core

CommitTypeDescription
d010e11b73featadd event listener options to renderer (#59092)
57f3550219featadd utility for resolving defer block information to ng global (#59184)
22f191f763featextend the set of profiler events (#59183)
e894a5daeafeatset kind field on template and effect nodes (#58865)
bd1f1294aefeatsupport TypeScript 5.7 (#58609)
9870b643bffixDefer afterRender until after first CD (#58250)
a5fc962094fixDon't run effects in check no changes pass (#58250)

migrations

CommitTypeDescription
d298d25426featadd schematic to clean up unused imports (#59353)
14fb8ce4c0fixresolve text replacement issue (#59452)

platform-browser

CommitTypeDescription
8c5db3cfb7fixavoid circular DI error in async renderer (#59256)

router

CommitTypeDescription
52a6710f54fixcomplete router events on dispose (#59327)

19.0.7 (2025-01-15)

compiler-cli

CommitTypeDescription
2b4b7c3ebffixhandle more node types when extracting dependencies (#59445)

core

CommitTypeDescription
f893d07232fixdestroy renderer when replacing styles during HMR (#59514)

migrations

CommitTypeDescription
eb2fcd1896fixincorrect stats when migrating queries with best effort mode (#59463)

19.0.6 (2025-01-08)

compiler-cli

CommitTypeDescription
06a55e9817fixaccount for more expression types when determining HMR dependencies (#59323)
17fb20f85dfixpreserve defer block dependencies during HMR when class metadata is disabled (#59313)

core

CommitTypeDescription
07afce81b8fixEnsure that a destroyed effect never run. (#59415)

platform-browser

CommitTypeDescription
dbb8980d03fixavoid circular DI error in async renderer (#59271)
6d00efde95fixstyles not replaced during HMR when using animations renderer (#59393)

router

CommitTypeDescription
144bccb687fixavoid component ID collisions with user code (#59300)

19.0.5 (2024-12-18)

core

CommitTypeDescription
3793218e77fixavoid triggering on timer and on idle on the server (#59177)
cfc96ed82cfixFix nested timer serialization (#59173)

platform-server

CommitTypeDescription
9085a8fbd8fixWarn user when transfer state happens more than once (#58935)

19.0.4 (2024-12-12)

compiler-cli

CommitTypeDescription
7e612171709fixconsider pre-release versions when detecting feature support (#59061)
cd764a31152fixerror in unused standalone imports diagnostic (#59064)

core

CommitTypeDescription
34ded10fa60fixFix a bug where snapshotted functions are being run twice if they return a nullish/falsey value. (#59073)

platform-browser

CommitTypeDescription
ae0802d63c5fixcollect external component styles from server rendering (#59031)

19.0.3 (2024-12-04)

19.0.2 (2024-12-04)

compiler-cli

CommitTypeDescription
9f99196d23fixaccount for multiple generated namespace imports in HMR (#58924)

core

CommitTypeDescription
4792db9a6dfixExplicitly manage TracingSnapshot lifecycle and dispose of it once it's been used. (#58929)

migrations

CommitTypeDescription
7b5bacc228fixclass content being deleted in some edge cases (#58959)
d1cbdd6acbfixcorrectly strip away parameters surrounded by comments in inject migration (#58959)
e17ff71c31fixdon't migrate classes with parameters that can't be injected (#58959)
7c5f990001fixinject migration aggressively removing imports (#58959)
4392ccedf9fixinject migration dropping code if everything except super is removed (#58959)
9cbebc6ddafixpreserve type literals and tuples in inject migrations (#58959)

platform-server

CommitTypeDescription
f3c388ecdafixremove peer dependency on animations (#58997)

18.2.13 (2024-11-26)

migrations

CommitTypeDescription
06d70a25eafixtake care of tests that import both HttpClientModule & HttpClientTestingModule. (#58777)

19.0.1 (2024-11-26)

compiler-cli

CommitTypeDescription
fb1fa8b0fcfixmore accurate diagnostics for host binding parser errors (#58870)

core

CommitTypeDescription
502ee0e722fixcorrectly clear template HMR internal renderer cache (#58724)
99715104a1fixcorrectly perform lazy routes migration for components with additional decorators (#58796)
118803035ffixEnsure _tick is always run within the TracingSnapshot. (#58881)
08b9452f01fixEnsure resource sets an error (#58855)
84f45ea3fffixmake component id generation more stable between client and server builds (#58813)
d3491c7ceefixPrevents race condition of cleanup for incremental hydration (#58722)

forms

CommitTypeDescription
4dfe5b6ceffixwork around TypeScript 5.7 issue (#58731)

language-service

CommitTypeDescription
a983865bfffixadd fix for individual unused imports (#58719)
e6e7a4e22bfixallow fixes to run without template info (#58719)

migrations

CommitTypeDescription
5ce10264a4fixfix provide-initializer migration when using useFactory (#58518)
d4f5c85f60fixhandle parameters with initializers in inject migration (#58769)
a6d2d2dc10fixMark hoisted properties as removed in inject migration (#58804)

19.0.0 (2024-11-19)

Blog post: https://blog.angular.dev/meet-angular-v19-7b29dfd05b84

Breaking Changes

compiler

  • this.foo property reads no longer refer to template context variables. If you intended to read the template variable, do not use this..
  • changes to CSS selectors parsing where introduced, mainly to: pseudo selectors :where() and :is(), parsing of :host and host-context, parsing selectors within pseudo selector arguments (for instance comma separated selectors). These changes could lead to a different specificity of the resulting selectors and/or previously broken selectors being applied now, for example :where(:host) used to transform to :where()[ng-host] and is being :where([ng-host]) now. Unlike the previous outcome, the new result can target elements and therefore could lead to breakages.

core

  • Angular directives, components and pipes are now standalone by default.

    • Specify standalone: false for declarations that are currently declared in @NgModules.
    • ng update for v19 will take care of this automatically.
  • TypeScript versions less than 5.5 are no longer supported.

  • Timing changes for effect API (in developer preview):

    • effects which are triggered outside of change detection run as part of the change detection process instead of as a microtask. Depending on the specifics of application/test setup, this can result in them executing earlier or later (or requiring additional test steps to trigger; see below examples).

    • effects which are triggered during change detection (e.g. by input signals) run earlier, before the component's template.

  • ExperimentalPendingTasks has been renamed to PendingTasks.

  • The autoDetect feature of ComponentFixture will now attach the fixture to the ApplicationRef. As a result, errors during automatic change detection of the fixture be reported to the ErrorHandler. This change may cause custom error handlers to observe new failures that were previously unreported.

  • createComponent will now render default fallback with empty projectableNodes.

    • When passing an empty array to projectableNodes in the createComponent API, the default fallback content of the ng-content will be rendered if present. To prevent rendering the default content, pass document.createTextNode('') as a projectableNode.
    // The first ng-content will render the default fallback content if present
    createComponent(MyComponent. { projectableNodes: [[], [secondNode]] });
    
    // To prevent projecting the default fallback content:
    createComponent(MyComponent. { projectableNodes: [[document.createTextNode('')], [secondNode]] });
    
    
  • Errors that are thrown during ApplicationRef.tick will now be rethrown when using TestBed. These errors should be resolved by ensuring the test environment is set up correctly to complete change detection successfully. There are two alternatives to catch the errors:

    • Instead of waiting for automatic change detection to happen, trigger it synchronously and expect the error. For example, a jasmine test could write expect(() => TestBed.inject(ApplicationRef).tick()).toThrow()
    • TestBed will reject any outstanding ComponentFixture.whenStable promises. A jasmine test, for example, could write expectAsync(fixture.whenStable()).toBeRejected().

    As a last resort, you can configure errors to not be rethrown by setting rethrowApplicationErrors to false in TestBed.configureTestingModule.

  • The timers that are used for zone coalescing and hybrid mode scheduling (which schedules an application state synchronization when changes happen outside the Angular zone) will now run in the zone above Angular rather than the root zone. This will mostly affect tests which use fakeAsync: these timers will now be visible to fakeAsync and can be affected by tick or flush.

  • The deprecated factories property in KeyValueDiffers has been removed.

elements

  • as part of switching away from custom CD behavior to the hybrid scheduler, timing of change detection around custom elements has changed subtly. These changes make elements more efficient, but can cause tests which encoded assumptions about how or when elements would be checked to require updating.

localize

  • The name option in the ng add @localize``schematic has been removed in favor of theproject option.

platform-browser

  • The deprecated BrowserModule.withServerTransition method has been removed. Please use the APP_ID DI token to set the application id instead.

router

  • The Router.errorHandler property has been removed. Adding an error handler should be configured in either withNavigationErrorHandler with provideRouter or the errorHandler property in the extra options of RouterModule.forRoot. In addition, the error handler cannot be used to change the return value of the router navigation promise or prevent it from rejecting. Instead, if you want to prevent the promise from rejecting, use resolveNavigationPromiseOnError.
  • The return type of the Resolve interface now includes RedirectCommand.

common

CommitTypeDescription
24c6373820featadd optional rounded transform support in cloudinary image loader (#55364)
50f08e6c4bfeatautomatically use sizes auto in NgOptimizedImage (#57479)
13c13067bcfeatdisable keyvalue sorting using null compareFn (#57487)

compiler

CommitTypeDescription
a2e4ee0cb3featadd diagnostic for unused standalone imports (#57605)
0c9d721ac1featadd support for the typeof keyword in template expressions. (#58183)
09f589f000fixthis.a should always refer to class property a (#55183)
98804fd4befixadd more specific matcher for hydrate never block (#58360)
b25121ee4afixavoid having to duplicate core environment (#58444)
560282aa9bfixcontrol flow nodes with root at the end projected incorrectly (#58607)
2be161d015fixfix :host parsing in pseudo-selectors (#58681)
806a61b5a6fixfix multiline selectors (#58681)
a3cb530d84fixhandle typeof expressions in serializer (#58217)
ba4340875afixignore placeholder-only i18n messages (#58154)
e5d3abb298fixresolve :host:host-context(.foo) (#58681)
80f56954cefixtransform chained pseudo-selectors (#58681)

compiler-cli

CommitTypeDescription
d9687f43ddfeat'strictStandalone' flag enforces standalone (#57935)
9e87593055featensure template style elements are preprocessed as inline styles (#57429)
231e6ff6cafeatgenerate the HMR replacement module (#58205)
dbe612f2cdfixdisable standalone by default on older versions of Angular (#58405)
d4d76ead80fixdo not fail fatal when references to non-existent module are discovered (#58515)
33fe252c58fixdo not report unused declarations coming from an imported array (#57940)
fb44323c51fixincorrectly generating relative file paths on case-insensitive platforms (#58150)
22cd6869effixmake the unused imports diagnostic easier to read (#58468)
9bbb01c85efixreport individual diagnostics for unused imports (#58589)
4716c3b966perfreduce duplicate component style resolution (#57502)

core

CommitTypeDescription
6ea8e1e9aafeatAdd a schematics to migrate to standalone: false. (#57643)
3ebe6b4ad4featAdd async run method on ExperimentalPendingTasks (#56546)
69fc5ae922featAdd incremental hydration public api (#58249)
8ebbae88cafeatAdd rxjs operator prevent app stability until an event (#56533)
19edf2c057featadd syntactic sugar for initializers (#53152)
c93b510f9bfeatallow passing undefined without needing to include it in the type argument of input (#57621)
ab25a192bafeatallow running output migration on a subset of paths (#58299)
fc59e2a7b7featchange effect() execution timing & no-op allowSignalWrites (#57874)
8bcc663a53featdrop support for TypeScript 5.4 (#57577)
18d8d44b1ffeatexperimental resource() API for async dependencies (#58255)
9762b24b5efeatexperimental impl of rxResource() (#58255)
6b8c494d05featflipping the default value for standalone to true (#58169)
e6e5d29e83featinitial version of the output migration (#57604)
be2e49639bfeatintroduce afterRenderEffect (#57549)
ec386e7f12featintroduce debugName optional arg to framework signal functions (#57073)
8311f00faafeatintroduce the reactive linkedSignal (#58189)
1b1519224dfeatmark input, output and model APIs as stable (#57804)
a7eff3ffaafeatmark signal-based query APIs as stable (#57921)
a1f229850afeatmigrate ExperimentalPendingTasks to PendingTasks (#57533)
3f1e7ab6aefeatpromote outputFromObservable & outputToObservable to stable. (#58214)
97c44a1d6cfeatPromote takeUntilDestroyed to stable. (#58200)
e5adf92965featstabilize @let syntax (#57813)
b063468027featsupport TypeScript 5.6 (#57424)
819ff034cefeattreat directives, pipes, components as by default (#58229)
ee426c62f0fixallow signal write error (#57973)
c095679f92fixavoid breaking change with apps using rxjs 6.x (#58341)
71ee81af2cfixclean up event contract once hydration is done (#58174)
f03d274e87fixComponentFixture autoDetect feature works like production (#55228)
950a5540f1fixEnsure the ViewContext is retained after closure minification (#57903)
7b1e5be20bfixfallback to default ng-content with empty projectable nodes. (#57480)
0300dd2e18fixFix fixture.detectChanges with autoDetect disabled and zoneless (#57416)
5fe57d4fbbfixfixes issues with control flow and incremental hydration (#58644)
51933ef5a6fixprevent errors on contract cleanup (#58614)
fd7716440bfixPrevents trying to trigger incremental hydration on CSR (#58366)
656b5d3e78fixRe-assign error codes to be within core bounds (<1000) (#53455)
6e0af6dbbbfixresolve forward-referenced host directives during directive matching (#58492)
468d3fb9b1fixrethrow errors during ApplicationRef.tick in TestBed (#57200)
226a67dabbfixSchedulers run in zone above Angular rather than root (#57553)
97fb86d331perfset encapsulation to None for empty component styles (#57130)
c15ec36bd1refactorremove deprecated factories Property in KeyValueDiffers (#58064)

elements

CommitTypeDescription
fe5c4e086afixsupport output()-shaped outputs (#57535)
0cebfd7462fixswitch to ComponentRef.setInput & remove custom scheduler (#56728)

forms

CommitTypeDescription
3e7d724037featadd ability to clear a FormRecord (#50750)
18b6f3339ffixfix FormRecord type inference (#50750)

http

CommitTypeDescription
4b9accdf16featpromote withRequestsMadeViaParent to stable. (#58221)
057cf7fb6bfixpreserve all headers from Headers object (#57802)

language-service

CommitTypeDescription
8da9fb49b5featadd code fix for unused standalone imports (#57605)
1f067f4507featadd code reactoring action to migrate @Input to signal-input (#57214)
56ee47f2ecfeatallow code refactorings to compute edits asynchronously (#57214)
bc83fc1e2efeatsupport converting to signal queries in VSCode extension (#58106)
5c4305f024featsupport migrating full classes to signal inputs in VSCode (#57975)
6342befff8featsupport migrating full classes to signal queries (#58263)
7ecfd89592fixThe suppress diagnostics option should work for external templates (#57873)

localize

CommitTypeDescription
9c3bd1b5d1refactorremove deprecated name option. (#58063)

migrations

CommitTypeDescription
dff4de0f75featadd a combined migration for all signals APIs (#58259)
b6bc93803cfeatadd schematic to migrate to signal queries (#58032)
2bfc64daf1featexpose output as function migration (#58299)
59fe9bc772featintroduce signal input migration as ng generate schematic (#57805)
90c7ec39a0fixinject migration always inserting generated variables before super call (#58393)
7a65cdd911fixinject migration not inserting generated code after super call in some cases (#58393)
c1aa411cf1fixproperly resolve tsconfig paths on windows (#58137)
e26797b38efixreplace removed NgModules in tests with their exports (#58627)

platform-browser

CommitTypeDescription
c36a1c023bfixcorrectly add external stylesheets to ShadowDOM components (#58482)
5c61f46409refactorremove deprecated BrowserModule.withServerTransition method (#58062)

platform-server

CommitTypeDescription
9e82559de4fixdestroy PlatformRef when error happens during the bootstrap() phase (#58112)

router

CommitTypeDescription
f271021e19featAdd routerOutletData input to RouterOutlet directive (#57051)
b2790813a6fixAlign RouterModule.forRoot errorHandler with provider error handler (#57050)
a49c35ec76fixremove setter for injector on OutletContext (#58343)
7436d3180efixUpdate Resolve interface to include RedirectCommand like ResolveFn (#57309)

service-worker

CommitTypeDescription
8ddce80a0bfeatallow specifying maxAge for entire application (#49601)
1479af978cfeatfinish implementation of refreshAhead feature (#53356)

18.2.12 (2024-11-14)

compiler-cli

CommitTypeDescription
4c38160853fixcorrect extraction of generics from type aliases (#58548)

18.2.11 (2024-11-06)

core

CommitTypeDescription
5f2d98a1b1fixavoid slow stringification when checking for duplicates in dev mode (#58521)
3aa45a2fa1fixresolve forward-referenced host directives during directive matching (#58492) (#58500)

18.2.10 (2024-10-30)

compiler

CommitTypeDescription
69dce38e778fixtransform pseudo selectors correctly for the encapsulated view. (#58417)

localize

CommitTypeDescription
3b989ac5bd9fixAdding arb format to the list of valid formats in the localization extractor cli (#58287)

18.2.9 (2024-10-23)

compiler-cli

CommitTypeDescription
b0ab653965fixreport when NgModule imports or exports itself (#58231)

18.2.8 (2024-10-10)

compiler

CommitTypeDescription
11692c8dabfixadd multiple :host and nested selectors support (#57796)
66dcc691f5fixallow combinators inside pseudo selectors (#57796)
48a1437e77fixfix comment typo (#57796)
d325f9b55ffixfix parsing of the :host-context with pseudo selectors (#57796)
aea747ab3bfixpreserve attributes attached to :host selector (#57796)
21be258be6fixscope :host-context inside pseudo selectors, do not decrease specificity (#57796)
7a6fd427d5fixtransform pseudo selectors correctly for the encapsulated view (#57796)

compiler-cli

CommitTypeDescription
f187c3abf8fixdefer symbols only used in types (#58104)

core

CommitTypeDescription
46bafb0b0afixclean up afterRender after it is executed (#58119)

platform-server

CommitTypeDescription
b40875a2ccfixdestroy PlatformRef when error happens during the bootstrap() phase (#58112) (#58135)

18.2.7 (2024-10-02)

common

CommitTypeDescription
249d0260f9fixexecute checks and remove placeholder when image is already loaded (#55444)
46a2ad39f5fixprevent warning about oversize image twice (#58021)
8f2b0ede59fixskip checking whether SVGs are oversized (#57966)

compiler-cli

CommitTypeDescription
901c1e1a7ffixcorrectly get the type of nested function call expressions (#57010)

core

CommitTypeDescription
2f347ef8fcfixprovide flag to opt into manual cleanup for after render hooks (#57917)

http

CommitTypeDescription
ca637fe6a9fixcleanup JSONP script listeners once loading completed (#57877)

migrations

CommitTypeDescription
b9d846dad7fixdelete constructor if it only has super call (#58013)

upgrade

CommitTypeDescription
e40a4fa3c7fixsupport input signal bindings (#57020)

18.2.6 (2024-09-25)

18.2.5 (2024-09-18)

compiler-cli

CommitTypeDescription
e685ed883afixextended diagnostics not validating ICUs (#57845)

core

CommitTypeDescription
76709d5d6efixHandle @let declaration with array when preparingForHydration (#57816)

migrations

CommitTypeDescription
5c866942a1fixaccount for explicit standalone: false in migration (#57803)

18.2.4 (2024-09-11)

compiler

CommitTypeDescription
b619d6987efixproduce less noisy errors when parsing control flow (#57711)

migrations

CommitTypeDescription
9895e4492ffixreplace leftover modules with their exports during pruning (#57684)

18.2.3 (2024-09-04)

http

CommitTypeDescription
de68e049e4fixDynamicaly call the global fetch implementation (#57531)

18.2.2 (2024-08-28)

core

CommitTypeDescription
106917af878fixavoid leaking memory if component throws during creation (#57546)
6d3a2af146afixDo not bubble capture events. (#57476)

http

CommitTypeDescription
5d2e243c76afixDynamicaly call the global fetch implementation (#57531)

router

CommitTypeDescription
804925b1149fixDo not unnecessarily run matcher twice on route matching (#57530)

upgrade

CommitTypeDescription
03ec620e31afixAddress Trusted Types violations in @angular/upgrade (#57454)

18.2.1 (2024-08-22)

core

CommitTypeDescription
9de30a7b1cfixAllow zoneless scheduler to run inside fakeAsync (#56932)
286012fb89fixhandle hydration of components that project content conditionally (#57383)

migrations

CommitTypeDescription
0bb649b8fafixaccount for members with doc strings and no modifiers (#57389)
3b63082384fixavoid migrating route component in tests (#57317)
6b4357fae4fixpreserve type when using inject decorator (#57389)

18.2.0 (2024-08-14)

compiler

CommitTypeDescription
c8e2885136featAdd extended diagnostic to warn when there are uncalled functions in event bindings (#56295) (#56295)

compiler-cli

CommitTypeDescription
98ed5b609efeatrun JIT transform on classes with jit: true opt-out (#56892)
c76b440ac0fixadd warning for unused let declarations (#57033)
0f0a1f2836fixemitting references to ngtypecheck files (#57138)
6c2fbda694fixextended diagnostic visitor not visiting template attributes (#57033)
e11c0c42d2fixrun JIT transforms on @NgModule classes with jit: true (#57212)

core

CommitTypeDescription
f7918f5272featAdd 'flush' parameter option to fakeAsync to flush after the test (#57239)
fab673a1ddfeatadd ng generate schematic to convert to inject (#57056)
7919982063featAdd whenStable helper on ApplicationRef (#57190)
3459289ef0featbootstrapModule can configure NgZone in providers (#57060)
296216cbe1fixAllow hybrid CD scheduling to support multiple "Angular zones" (#57267)
8718abce90fixDeprecate ignoreChangesOutsideZone option (#57029)
827070e331fixDo not run image performance warning checks on server (#57234)
ca89ef9141fixhandle shorthand assignment in the inject migration (#57134)
5dcdbfcba9fixrename the equality function option in toSignal (#56769)
2a4f488a6cfixwarnings for oversized images and lazy-lcp present with bootstrapModule (#57060)

language-service

CommitTypeDescription
4bb558ab0cfeatsupport writing code refactorings (#56895)
7663debce1perfquick exit if no code fixes can exist (#57000)

migrations

CommitTypeDescription
147eee4253featadd migration to convert standalone component routes to be lazy loaded (#56428)
cb442a0ce7fixaccount for parameters with union types (#57127)
166166d79efixadd alias to inject migration (#57127)
b1a9d0f4defixavoid duplicating comments when generating properties (#57367)
5d76401ff5fixpreserve optional parameters (#57367)
1cf616f671fixremove generic arguments from the injected type reference (#57127)
ba0df30ef6fixremove unused imports in inject migration (#57179)
aae9646a1bfixunwrap injected forwardRef (#57127)
604270619aperfspeed up signal input migration by combining two analyze phases (#57318)

router

CommitTypeDescription
6c76c91e15featAdd defaultQueryParamsHandling to router configuration (#57198)

18.1.5 (2024-08-14)

compiler-cli

CommitTypeDescription
5401332b0efixgenerate valid TS 5.6 type checking code (#57303)

core

CommitTypeDescription
e39b22a932fixAccount for addEventListener to be passed a Window or Document. (#57282)
db65bc25cafixAccount for addEventListener to be passed a Window or Document. (#57354)
0e024ecc27fixcomplete post-hydration cleanup in components that use ViewContainerRef (#57300)
822db64b93fixskip hydration for i18n nodes that were not projected (#57356)
810f76f574fixtake skip hydration flag into account while hydrating i18n blocks (#57299)

18.1.4 (2024-08-07)

compiler

CommitTypeDescription
6a99f83659fixreduce chance of conflicts between generated factory and local variables (#57181)

compiler-cli

CommitTypeDescription
afb05ff1cbfixsupport JIT transforms before other transforms modifying classes (#57262)
bae54a1621perfimprove performance of interpolatedSignalNotInvoked extended diagnostic (#57291)

language-service

CommitTypeDescription
6ac209c24ffixavoid generating TS suggestion diagnostics for templates (#56241)

18.1.3 (2024-07-31)

compiler

CommitTypeDescription
31dea066d6fixreduce chance of conflicts between generated factory and local variables (#57181)

compiler-cli

CommitTypeDescription
1f9e090910fixemitting references to ngtypecheck files (#57138) (#57202)

core

CommitTypeDescription
f7ab04018efixerrors during ApplicationRef.tick should be rethrown for zoneless tests (#56993)
eaa83f9d27fixhydration error in some let declaration setups (#57173)

18.1.2 (2024-07-24)

compiler

CommitTypeDescription
463945003dfixlimit the number of chained instructions (#57069)

compiler-cli

CommitTypeDescription
e904f34020fixadd warning for unused let declarations (#57033)

core

CommitTypeDescription
9e52c1c840fixafterNextRender hooks return that callback value. (#57031)
b9fb98c67cfixtree shake dev mode error message (#57035)

18.1.1 (2024-07-17)

common

CommitTypeDescription
a1cb9dfc0dfixDon't run preconnect assertion on the server. (#56213)

compiler

CommitTypeDescription
daf0317bdcfixJIT mode incorrectly interpreting host directive configuration in partial compilation (#57002)
d7dca6dbb6fixuse strict equality for 'code' comparison (#56944)

compiler-cli

CommitTypeDescription
c94a897248fixavoid emitting references to typecheck files in TS 5.4 (#56961)

core

CommitTypeDescription
5682527d94fixnot all callbacks running when registered at the same time (#56981)

migrations

CommitTypeDescription
b666d2c20ffixfix common module removal (#56968)

17.3.12 (2024-07-17)

compiler

CommitTypeDescription
327bae473bfixJIT mode incorrectly interpreting host directive configuration in partial compilation (#57002) (#57003)

18.1.0 (2024-07-10)

common

CommitTypeDescription
f25653e231fixtypo in NgOptimizedImage warning (#56756)
9b35726e42fixtypo in warning for NgOptimizedDirective (#56817)

compiler

CommitTypeDescription
fd6cd0422dfeatAdd extended diagnostic to warn when there are uncalled functions in event bindings (#56295)
341a116d61fixallow more characters in let declaration name (#56764)
2a1291e942fixgive precedence to local let declarations over parent ones (#56752)

compiler-cli

CommitTypeDescription
66e582551efixavoid duplicate diagnostics for let declarations read before definition (#56843)
4d18c5bfd5fixflag all conflicts between let declarations and local symbols (#56752)
9e21582456fixShow template syntax errors in local compilation modified (#55855)
5996502921fixtype check let declarations nested inside nodes (#56752)
cdebf751e4fixused before declared diagnostic not firing for control flow blocks (#56843)

core

CommitTypeDescription
ea3c802056featAdd a schematic to migrate afterRender phase flag (#55648)
5df3e78c99featadd equality function to rxjs-interop toSignal (#56447)
0a48d584f2featadd support for let syntax (#56715)
352e0782ecfeatexpose signal input metadata in ComponentMirror (#56402)
a655e46447featRedesign the afterRender & afterNextRender phases API (#55648)
e5a6f91722featsupport TypeScript 5.5 (#56096)
38effcc63efixAdd back phase flag option as a deprecated API (#55648)
86bcfd3e49fiximprove docs on afterRender hooks (#56522)
b2445a0953fixlink errors to ADEV (#55554) (#56038)
03a2acd2a3fixproperly remove imports in the afterRender phase migration (#56524)
4d87b9e899fixrename the equality function option in toSignal (#56769) (#56922)
8bd4c074affixtoSignal equal option should be passed to inner computed (#56903)

forms

CommitTypeDescription
00bde8b1c2fixMake NgControlStatus host bindings OnPush compatible (#55720)

http

CommitTypeDescription
cc21989132fixMake Content-Type header case insensitive (#56541)

language-service

CommitTypeDescription
b400e2e4d4featautocompletion for the component not imported (#55595)
67b2c336bcfiximport the default exported component correctly (#56432)

router

CommitTypeDescription
a13f5da773featAllow UrlTree as an input to routerLink (#56265)
1d3a7529b4featSet a different browser URL from the one for route matching (#53318)

18.0.7 (2024-07-10)

compiler

CommitTypeDescription
85f77b5cdafixfix CSS animation rule scope (#56800)

http

CommitTypeDescription
95d7076d1aperfexecute fetch outside of Angular zone (#56820)

migrations

CommitTypeDescription
d6fff45e73fixFix cf migration let condition semicolon order (#56913)

18.0.6 (2024-07-03)

common

CommitTypeDescription
a55719f55efixDon't run preconnect assertion on the server. (#56213)

core

CommitTypeDescription
4909844805fixestablish proper defer injector hierarchy for components attached to ApplicationRef (#56763)
fec5b80aaffixsupport injection of object with null constructor. (#56553)

router

CommitTypeDescription
b7d3ecc873fixroutes should not get stale providers (#56798)

18.0.5 (2024-06-26)

core

CommitTypeDescription
2f73281dfdfiximprove docs on afterRender hooks (#56525)
be9e4892f9fiximprove support for i18n hydration of projected content (#56192)
5f9bd5521efixprevent calling devMode only function on @defer error. (#56559)

18.0.4 (2024-06-20)

compiler-cli

CommitTypeDescription
ec0d1bf6f3fixinsert constant statements after the first group of imports (#56431)

core

CommitTypeDescription
83ffa94783fixdo not activate event replay when no events are registered (#56509)

router

CommitTypeDescription
5578681da2fixDelay the view transition to ensure renders in microtasks complete (#56494)

18.0.3 (2024-06-12)

benchpress

CommitTypeDescription
ebf00aa0659fixadjust supported browser names for headless chrome (#56360)

core

CommitTypeDescription
dbd0fa00f8cfixasync EventEmitter should contribute to app stability (#56308)
625ca3e2b3ffixsignals should be tracked when embeddedViewRef.detectChanges is called (#55719)

localize

CommitTypeDescription
d6dd3dbdb09fixadd @angular/localize/init as polyfill in angular.json (#56300)

migrations

CommitTypeDescription
c07e1b33569fixresolve error in standalone migration (#56302)

18.0.2 (2024-06-05)

core

CommitTypeDescription
78cf9bfc0efixDo not migrate HttpClientModule imports on components. (#56067)
616cdef474fixdon't coerce all producers to consumers on liveness change (#56140)
2a440e1064fixFix shouldPreventDefaultBeforeDispatching bug (#56188)
290a47d842fixhandle missing withI18nSupport() call for components that use i18n blocks (#56175)

migrations

CommitTypeDescription
b70b80ba55fixdo not generate aliased variables with the same name (#56154)

18.0.1 (2024-05-29)

compiler

CommitTypeDescription
419ffa2026fixoptimize track function that only passes $index (#55872)

compiler-cli

CommitTypeDescription
4c7efc005afixinterpolatedSignalNotInvoked diagnostic for class, style, attribute and animation bindings (#55969)

core

CommitTypeDescription
4e6ea0e19cfixhandle elements with local refs in event replay serialization logic (#56076)
d73a0175cbfixlink errors to ADEV (#55554)
985a215b10fixtypo in zoneless warning (#55974)

migrations

CommitTypeDescription
ba85d08158fixhandle empty ngSwitchCase (#56105)

17.3.10 (2024-05-22)

18.0.0 (2024-05-22)

Blog post "Angular v18 is now available".

Breaking Changes

animations

  • Deprecated matchesElement method has been removed from AnimationDriver as it is unused.

common

  • The deprecated isPlatformWorkerUi and isPlatformWorkerApp have been removed without replacement, as they serve no purpose since the removal of the WebWorker platform.

compiler

  • Angular only supports writable expressions inside of two-way bindings.

compiler-cli

    • Angular no longer supports TypeScript versions older than 5.4.

core

  • OnPush views at the root of the application need to be marked dirty for their host bindings to refresh. Previously, the host bindings were refreshed for all root views without respecting the OnPush change detection strategy.

  • The ComponentFixture autoDetect feature will no longer refresh the component's host view when the component is OnPush and not marked dirty. This exposes existing issues in components which claim to be OnPush but do not correctly call markForCheck when they need to be refreshed. If this change causes test failures, the easiest fix is to change the component to ChangeDetectionStrategy.Default.

  • ComponentFixture.whenStable now matches the ApplicationRef.isStable observable. Prior to this change, stability of the fixture did not include everything that was considered in ApplicationRef. whenStable of the fixture will now include unfinished router navigations and unfinished HttpClient requests. This will cause tests that await the whenStable promise to time out when there are incomplete requests. To fix this, remove the whenStable, instead wait for another condition, or ensure HttpTestingController mocks responses for all requests. Try adding HttpTestingController.verify() before your await fixture.whenStable to identify the open requests. Also, make sure your tests wait for the stability promise. We found many examples of tests that did not, meaning the expectations did not execute within the test body.

    In addition, ComponentFixture.isStable would synchronously switch to true in some scenarios but will now always be asynchronous.

  • Angular will ensure change detection runs, even when the state update originates from outside the zone, tests may observe additional rounds of change detection compared to the previous behavior.

    This change will be more likely to impact existing unit tests. This should usually be seen as more correct and the test should be updated, but in cases where it is too much effort to debug, the test can revert to the old behavior by adding provideZoneChangeDetection({schedulingMode: NgZoneSchedulingMode.NgZoneOnly}) to the TestBed providers.

    Similarly, applications which may want to update state outside the zone and not trigger change detection can add provideZoneChangeDetection({schedulingMode: NgZoneSchedulingMode.NgZoneOnly}) to the providers in bootstrapApplication or add schedulingMode: NgZoneSchedulingMode.NgZoneOnly to the BootstrapOptions of bootstrapModule.

  • When Angular runs change detection, it will continue to refresh any views attached to ApplicationRef that are still marked for check after one round completes. In rare cases, this can result in infinite loops when certain patterns continue to mark views for check using ChangeDetectorRef.detectChanges. This will be surfaced as a runtime error with the NG0103 code.

  • async has been removed, use waitForAsync instead.

  • The ComponentFixture.autoDetect feature now executes change detection for the fixture within ApplicationRef.tick. This more closely matches the behavior of how a component would refresh in production. The order of component refresh in tests may be slightly affected as a result, especially when dealing with additional components attached to the application, such as dialogs. Tests sensitive to this type of change (such as screenshot tests) may need to be updated. Concretely, this change means that the component will refresh before additional views attached to ApplicationRef (i.e. dialog components). Prior to this change, the fixture component would refresh after other views attached to the application.

  • The exact timing of change detection execution when using event or run coalescing with NgZone is now the first of either setTimeout or requestAnimationFrame. Code which relies on this timing (usually by accident) will need to be adjusted. If a callback needs to execute after change detection, we recommend afterNextRender instead of something like setTimeout.

  • Newly created and views marked for check and reattached during change detection are now guaranteed to be refreshed in that same change detection cycle. Previously, if they were attached at a location in the view tree that was already checked, they would either throw ExpressionChangedAfterItHasBeenCheckedError or not be refreshed until some future round of change detection. In rare circumstances, this correction can cause issues. We identified one instance that relied on the previous behavior by reading a value on initialization which was queued to be updated in a microtask instead of being available in the current change detection round. The component only read this value during initialization and did not read it again after the microtask updated it.

  • Testability methods increasePendingRequestCount, decreasePendingRequestCount and getPendingRequestCount have been removed. This information is tracked with zones.

http

  • By default we now prevent caching of HTTP requests that require authorization . To opt-out from this behaviour use the includeRequestsWithAuthHeaders option in withHttpTransferCache.

    Example:

    withHttpTransferCache({
      includeRequestsWithAuthHeaders: true,
    })
    

platform-browser

  • Deprecated StateKey, TransferState and makeStateKey have been removed from @angular/platform-browser, use the same APIs from @angular/core.

platform-browser-dynamic

  • No longer used RESOURCE_CACHE_PROVIDER APIs have been removed.

platform-server

  • deprecated platformDynamicServer has been removed. Add an import @angular/compiler and replace the usage with platformServer

  • deprecated ServerTransferStateModule has been removed. TransferState can be use without providing this module.

  • deprecated useAbsoluteUrl and baseUrl been removed from PlatformConfig. Provide and absolute url instead.

  • Legacy handling or Node.js URL parsing has been removed from ServerPlatformLocation.

    The main differences are;

    • pathname is always suffixed with a /.
    • port is empty when http: protocol and port in url is 80
    • port is empty when https: protocol and port in url is 443

router

  • Guards can now return RedirectCommand for redirects in addition to UrlTree. Code which expects only boolean or UrlTree values in Route types will need to be adjusted.
  • This change allows Route.redirectTo to be a function in addition to the previous string. Code which expects redirectTo to only be a string on Route objects will need to be adjusted.
  • When a a guard returns a UrlTree as a redirect, the redirecting navigation will now use replaceUrl if the initial navigation was also using the replaceUrl option. If this is not desirable, the redirect can configure new NavigationBehaviorOptions by returning a RedirectCommand with the desired options instead of UrlTree.
  • Providers available to the routed components always come from the injector heirarchy of the routes and never inherit from the RouterOutlet. This means that providers available only to the component that defines the RouterOutlet will no longer be available to route components in any circumstances. This was already the case whenever routes defined providers, either through lazy loading an NgModule or through explicit providers on the route config.
  • Providers available to the routed components always come from the injector heirarchy of the routes and never inherit from the RouterOutlet. This means that providers available only to the component that defines the RouterOutlet will no longer be available to route components in any circumstances. This was already the case whenever routes defined providers, either through lazy loading an NgModule or through explicit providers on the route config.

Deprecations

common

  • getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits

core

  • @Component.interpolation is deprecated. Use Angular's delimiters instead.

http

  • HttpClientModule, HttpClientXsrfModule and HttpClientJsonpModule

    As mentionned, those modules can be replaced by provider function only.

animations

CommitTypeDescription
bcce85af72refactorremove deprecated matchesElement from AnimationDriver (#55479)

common

CommitTypeDescription
d34c033902refactorDeprecate Local Data API functions (#54483)
3b0de30b37refactorremove deprecated isPlatformWorkerApp and isPlatformWorkerUi API (#55302)

compiler

CommitTypeDescription
91b007e58ffixadd math elements to schema (#55631)
33d0102304fixallow comments between connected blocks (#55966)
7fc7f3f05ffixcapture all control flow branches for content projection in if blocks (#54921)
a369f43fbdfixcapture switch block cases for content projection (#54921)
eb625d3783fixdeclare for loop aliases in addition to new name (#54942)
f824911510fixFor FatalDiagnosticError, hide the message field without affecting the emit (#55160)
a040fb720afixmaintain multiline CSS selectors during CSS scoping (#55509)
39624c6b12fixoutput input flags as a literal (#55215)
eba92cfa55fixprevent usage of reserved control flow symbol in custom interpolation context. (#55809)
7d5bc1c628fixremove container index from conditional instruction (#55190)
4eb0165750fixremove support for unassignable expressions in two-way bindings (#55342)
e1650e3b13fixthrow error if item name and context variables conflict (#55045)

compiler-cli

CommitTypeDescription
5bd188a394featadd partial compilation support for deferred blocks (#54908)
b02b31a915featdrop support for TypeScript older than 5.4 (#54961)
78188e877afixadd diagnostic if initializer API is used outside of an initializer (#54993)
69a83993b3fixdo not throw when retrieving TCB symbol for signal input with restricted access (#55774)
4f4f41016efixdom property binding check in signal extended diagnostic (#54324)
7a16d7e969fixdon't type check the bodies of control flow nodes in basic mode (#55360)
8d93597a82fixfix type narrowing of @if with aliases (#55835)
9b424d7224fixpreserve original reference to non-deferrable dependency (#54759)
694ba79cbffixreport cases where initializer APIs are used in a non-directive class (#54993)
6219341d26fixreport errors when initializer APIs are used on private fields (#54981)
c04ffb1fa6fixuse switch statements to narrow Angular switch blocks (#55168)

core

CommitTypeDescription
a730f09ae9featAdd a public API to establish events to be replayed and an attribute to mark an element with an event handler. (#55356)
fdd560ea14featAdd ability to configure zone change detection to use zoneless scheduler (#55252)
bce5e2344ffeatAdd build target for jsaction contract binary. (#55319)
666d646575featAdd event delegation library to queue up events and replay them when the application is ready (#55121)
5f06ca8f55featadd HOST_TAG_NAME token (#54751)
a600a39d0cfeatadd support for fallback content in ng-content (#54854)
146306a141featadd support for i18n hydration (#54823)
f09c5a7bc4featAdd zoneless change detection provider as experimental (#55329)
d28614b90efeatModify EventType from an enum to an object. (#55323)
ac863ded48featprovide ExperimentalPendingTasks API (#55487)
1ee9f32621featSynchronize changes from internal JSAction codebase. (#55182)
d888da4606fixApplicationRef.tick should respect OnPush for host bindings (#53718)
64f870c12bfixApplicationRef.tick should respect OnPush for host bindings (#53718) (#53718)
8cad4e8cbefixComponentFixture autoDetect respects OnPush flag of host view (#54824)
658cf8c384fixComponentFixture stability should match ApplicationRef (#54949)
2fc11eae9efixaccount for re-projected ng-content elements with fallback content (#54854)
0cbd73c6e9fixadd warning when using zoneless but zone.js is still loaded (#55769)
d5edfde6eefixafterRender hooks registered outside change detection can mark views dirty (#55623)
de7447d15efixAngular should not ignore changes that happen outside the zone (#55102)
ba8e465974fixChange Detection will continue to refresh views while marked for check (#54734)
5a10f405d3fixcomplete the removal of deprecation async function (#55491)
24bc0ed4f2fixComponentFixture autodetect should detect changes within ApplicationRef.tick (#54733)
1c0ec56c46fixcorrectly project single-root content inside control flow (#54921)
840c375255fixdo not save point-in-time setTimeout and rAF references (#55124)
10c5cdb49cfixensure change detection runs in a reasonable timeframe with zone coalescing (#54578)
ad045efd4bfixEnsure views marked for check are refreshed during change detection (#54735)
69085ea26efixerror about provideExperimentalCheckNoChangesForDebug uses wrong name (#55824)
0147e0b85afixexhaustive checkNoChanges should only do a single pass (#55839)
e02bcf89cffixFix clearing of pending task in zoneless cleanup implementation (#55074)
0cec9e4f9afixFix null dereference error addEvent (#55353)
44c0ed83a6fixhide implementation details of ExperimentalPendingTasks (#55516)
314112de99fixPrevent markForCheck during change detection from causing infinite loops (#54900)
a5fa279b6efixprevent i18n hydration from cleaning projected nodes (#54823)
6534c035c0fixRemove deprecated Testability methods (#53768)
a5c57c7484fixresolve error for multiple component instances that use fallback content (#55478)
f44a5e4604fixsupport content projection and VCRs in i18n (#54823)
0510930a25fixTestBed should not override NgZone from initTestEnvironment (#55226)
e9a0c86766fixTestBed should not override NgZone from initTestEnvironment (#55226)
700c0520bbfixUpdate ApplicationRef.tick loop to only throw in dev mode (#54848)
a99cb7ce5bfixzoneless scheduler should check if Zone is defined before accessing it (#55118)
1fd63e9cffrefactordeprecate @Component.interpolation (#55778)

forms

CommitTypeDescription
1c736dc3b2featUnified Control State Change Events (#54579)
61007dced0fixAdd event for forms submitted & reset (#55667)
2e27ca9ddffixAllow canceled async validators to emit. (#55134)

http

CommitTypeDescription
6f88d80758featallow caching requests with different origins between server and client (#55274)
8eacb6e4b9featexclude caching for authenticated HTTP requests (#55034)
d9b339fdbcfixresolve withRequestsMadeViaParent behavior with withFetch (#55652)
ef665a40a5refactorDeprecate HttpClientModule & related modules (#54020)

language-service

CommitTypeDescription
6d1b82df32fixallow external projects to use provided compiler options (#55035)
a48afe0d94fixavoid generating TS syntactic diagnostics for templates (#55091)
bd236cc150fiximplement getDefinitionAtPosition for Angular templates (#55269)
4166dfc1b6fixprevent underlying TS Service from handling template files (#55003)
b7f2fd4739fixuse type-only import in plugin factory (#55996)

migrations

CommitTypeDescription
f914f6a362featMigration schematics for HttpClientModule (#54020)
8459ee46cbfixhandle more cases in HttpClientModule migration (#55640)
c4b2f18709fixmigrate HttpClientTestingModule in test modules (#55803)
bb4a4016a9fixpreserve existing properties in HttpClientModule migration (#55777)
f93e5180befixresolve multiple structural issues with HttpClient migration (#55557)

platform-browser

CommitTypeDescription
45ae7a6b60featadd withI18nSupport() in developer preview (#55130)
23f914f101fixUse the right namespace for mathML. (#55622)
cba336d4f1refactorremove deprecated transfer state APIs (#55474)

platform-browser-dynamic

CommitTypeDescription
eb20c1a8b1refactorunused RESOURCE_CACHE_PROVIDER API has been removed (#54875)

platform-server

CommitTypeDescription
5674c644abfixadd nonce attribute to event record script (#55495)
e71e869112fixremove event dispatch script from HTML when hydration is disabled (#55681)
07ac017731refactorremove deprecated platformDynamicServer API (#54874)
e8b588d8b7refactorremove deprecated ServerTransferStateModule API (#54874)
3b1967ca64refactorremove deprecated useAbsoluteUrl and baseUrl from PlatformConfig (#54874)
2357d3566crefactorremove legacy URL handling logic (#54874)

router

CommitTypeDescription
4a42961393featwithNavigationErrorHandler can convert errors to redirects (#55370)
8735af08b9featAdd ability to return UrlTree with NavigationBehaviorOptions from guards (#45023)
87f3f27f90featAllow resolvers to return RedirectCommand (#54556)
2b802587f2featAllow Route.redirectTo to be a function which returns a string or UrlTree (#52606)
60f1d681e0fixpreserve replaceUrl when returning a urlTree from CanActivate (#54042)
3839cfbb18fixRouted components never inherit RouterOutlet EnvironmentInjector (#54265)
da906fdafcfixRouted components never inherit RouterOutlet EnvironmentInjector (#54265)

service-worker

CommitTypeDescription
3bc63eaaf3fixavoid running CDs on controllerchange (#54222)
e598634c10fixremove controllerchange listener when app is destroyed (#55365)

17.3.9 (2024-05-15)

17.3.8 (2024-05-08)

compiler

CommitTypeDescription
c21b459ba6fixadd math elements to schema (#55631) (#55645)

core

CommitTypeDescription
3818436ebcfixdon't schedule timer triggers on the server (#55605)

17.3.7 (2024-05-01)

compiler-cli

CommitTypeDescription
51ac883167fixdon't type check the bodies of control flow nodes in basic mode (#55558)

core

CommitTypeDescription
af0eb846a5fixrender hooks should not specifically run outside the Angular zone (#55399)

router

CommitTypeDescription
3eea50da64fixScroller should scroll as soon as change detection completes (#55105)

17.3.6 (2024-04-25)

core

CommitTypeDescription
826861b1fafixDeferBlockFixture.render should not wait for stability (#55271)
5cf14da35cfixmake ActivatedRoute inject correct instance inside @defer blocks (#55374)
8979fba2c5fixskip defer timers on the server (#55480)

17.3.5 (2024-04-17)

17.3.4 (2024-04-10)

common

CommitTypeDescription
53427d875dfixinvalid ImageKit quality parameter (#55193)
766548c3ecfixskip transfer cache on client (#55012)

17.3.2 (2024-03-28)

compiler

CommitTypeDescription
2b7bad5151fixinvoke method-based tracking function with context (#54960)

compiler-cli

CommitTypeDescription
b478dfbfdafixreport errors when initializer APIs are used on private fields (#55070)

core

CommitTypeDescription
708ba8115ffixestablish proper injector resolution order for @defer blocks (#55079)

http

CommitTypeDescription
cb433af0e1fixinclude transferCache when cloning HttpRequest (#54939)
64f202cab9fixmanage different body types for caching POST requests (#54980)

migrations

CommitTypeDescription
2f9d94bc4afixaccount for variables in imports initializer (#55081)

router

CommitTypeDescription
365fd50407fixRouterLinkActive will always remove active classes when links are not active (#54982)

17.3.1 (2024-03-20)

compiler

CommitTypeDescription
c0788200e2fixcapture data bindings for content projection purposes in blocks (#54876)

compiler-cli

CommitTypeDescription
99e9474aa2fixsymbol feature detection for the compiler (#54711)

17.3.0 (2024-03-13)

compiler

CommitTypeDescription
1a6beae8a2featEnable template pipeline by default. (#54571)
f386a04c9dfixhandle two-way bindings to signal-based template variables in instruction generation (#54714)
1f129f114efixnot catching for loop empty tracking expressions (#54772)

compiler-cli

CommitTypeDescription
12dc4d074efixaccount for as expression in docs extraction (#54414)
da7fbb40f0fixdetect when the linker is working in unpublished angular and widen supported versions (#54439)
492e03f699fixflag two-way bindings to non-signal values in templates (#54714)
5afa4f0ec1fixsupport ModuleWithProviders literal detection with typeof (#54650)

core

CommitTypeDescription
331b16efd2featadd API to inject attributes on the host node (#54604)
fb540e169afeatadd migration for invalid two-way bindings (#54630)
c687b8f453featexpose new output() API (#54650)
c809069f21featintroduce outputFromObservable() interop function (#54650)
aff65fd1f4featintroduce outputToObservable interop helper (#54650)
974958913cfeatsupport TypeScript 5.4 (#54414)
39a50f9a8dfixensure all initializer functions run in an injection context (#54761)
243ccce624fixexclude class attribute intended for projection matching from directive matching (#54800)
2909e9817dfixprevent infinite loops in clobbered elements check (#54425)
7243c704cffixreturn a readonly signal on asReadonly. (#54706)
bb35414a38perfspeed up retrieval of DestroyRef in EventEmitter (#54748)

http

CommitTypeDescription
8d37ed035cfixexclude caching for authenticated HTTP requests (#54746)

router

CommitTypeDescription
c1c7384e02featAdd reusable types for router guards (#54580)
7225485311fixNavigations triggered by cancellation events should cancel previous navigation (#54710)

17.2.4 (2024-03-06)

compiler-cli

CommitTypeDescription
917b9bdd2efixunwrap expressions with type parameters in query read property (#54647)

core

CommitTypeDescription
586cc24a10fixapply TestBed provider overrides to @defer dependencies (#54667)
b558a01c84fixgeneric inference for signal inputs may break with --strictFunctionTypes (#54652)
443e5f1591fixreturn a readonly signal on asReadonly. (#54719)
ffbafc7d4afixuntrack various core operations (#54614)

17.2.3 (2024-02-27)

common

CommitTypeDescription
1a526f2881perfAsyncPipe should not call markForCheck on subscription (#54554)

compiler-cli

CommitTypeDescription
2aefed8763fixcatch function instance properties in interpolated signal diagnostic (#54325)
48aec63ee4fixidentify aliased initializer functions (#54480)
daf7c611b2fixidentify aliased initializer functions (#54609)

core

CommitTypeDescription
57123524a2fixcollect providers from NgModules while rendering @defer block (#52881)
79a32816dcfixfix typo in injectors.svg file (#54596)

migrations

CommitTypeDescription
dbe673b027fixresolve infinite loop for a single line element with a long tag name and angle bracket on a new line (#54588)

17.2.2 (2024-02-21)

common

CommitTypeDescription
d34e3298dbfiximage placeholder not removed in OnPush component (#54515)

compiler

CommitTypeDescription
6447c0eeccfixadding the inert property to the "SCHEMA" array (#53148)

compiler-cli

CommitTypeDescription
0a3edfb543fixcorrectly detect deferred dependencies across scoped nodes (#54499)
790f4f7c26fixuse correct symbol name for default imported symbols in defer blocks (#54495)

core

CommitTypeDescription
3bd5860c74fixproperly execute content queries for root components (#54457)

migrations

CommitTypeDescription
bb57d34110fixFix cf migration regular expression to include underscores (#54533)

router

CommitTypeDescription
3e31f1a34efixClear internal transition when navigation finalizes (#54261)

17.2.1 (2024-02-14)

compiler-cli

CommitTypeDescription
7234824228fixfix broken version detection condition (#54443)

17.2.0 (2024-02-14)

common

CommitTypeDescription
03c3b3eb79featadd Netlify image loader (#54311)
f5c520b836featadd placeholder to NgOptimizedImage (#53783)

compiler

CommitTypeDescription
47e6e84101featAdd a TSConfig option useTemplatePipeline (#54057)
66e940aebffeatscope selectors in @starting-style (#53943)
7b4d275f49fixFix the template pipeline option (#54148)

compiler-cli

CommitTypeDescription
7e861c640efeatgenerate extra imports for component local dependencies in local mode (#53543)
3263df23f2featgenerate global imports in local compilation mode (#53543)
b774e22d8efeatmake it configurable to generate alias reexports (#53937)
3e1384048efeatsupport host directives for local compilation mode (#53877)
a592904c69fixallow custom/duplicate decorators for @Injectable classes in local compilation mode (#54139)
4b1d948b36fixconsider the case of duplicate Angular decorators in local compilation diagnostics (#54139)
96bcf4fb12fixforbid custom/duplicate decorator when option forbidOrphanComponents is set (#54139)
64fa5715c6fixgenerating extra imports in local compilation mode when cycle is introduced (#53543)
6c8b09468afixhighlight the unresolved element in the @Component.styles array for the error LOCAL_COMPILATION_UNRESOLVED_CONST (#54230)
0970129e20fixshow proper error for custom decorators in local compilation mode (#53983)
f39cb06418fixshow specific error for unresolved @Directive.exportAs in local compilation mode (#54230)
f3851b5945fixshow specific error for unresolved @HostBinding's argument in local compilation mode (#54230)
39ddd884e8fixshow specific error for unresolved @HostListener's event name in local compilation mode (#54230)
5d633240fdfixshow the correct message for the error LOCAL_COMPILATION_UNRESOLVED_CONST when an unresolved symbol used for @Component.styles (#54230)
58b8a232d6fixsupport jumping to definitions of signal-based inputs (#54053)

core

CommitTypeDescription
702ab28b4cfeatadd support for model inputs (#54252)
e95ef2cbc6featexpose queries as signals (#54283)
656bc282e3fixadd toString implementation to signals (#54002)
62b87b4551fixdo not crash for signal query that does not have any matches (#54353)
4b96f370eefixexpose model signal subcribe for type checking purposes (#54357)
744cb1e561fixreturn the same children query results if there are no changes (#54392)
6d00115bf4fixshow placeholder block on the server with immediate trigger (#54394)

http

CommitTypeDescription
1c536250b6fixUse string body to generate transfer cache key. (#54379)

17.1.3 (2024-02-08)

compiler-cli

CommitTypeDescription
bc4a6a9715fixdo not error due to multiple components named equally (#54273)
a997e08c6ffixhandle default imports in defer blocks (#53695)
63a9027720fixinterpolatedSignalNotInvoked diagnostic for model signals (#54338)
40e1edc977fixproperly catch fatal diagnostics in type checking (#54309)
9f6605d11bfixsupport jumping to definitions of signal-based inputs (#54233)

core

CommitTypeDescription
7df133dcc2fixafterRender hooks should allow updating state (#54074)
744e20641afixFix possible infinite loop with markForCheck by partially reverting #54074 (#54329)
0fb114274cfixupdate imports to be compatible with rxjs 6 (#54193)

router

CommitTypeDescription
238f2a8bc9fixClear internal transition when navigation finalizes (#54261)

17.1.2 (2024-01-31)

CommitTypeDescription
ccddacf11dfixcta clickability issue in adev homepage. (#52905)

animations

CommitTypeDescription
98d545fafafixcleanup DOM elements when root view is removed with async animations (#53033)

common

CommitTypeDescription
cdc5e39532fixThe date pipe should return ISO format for week and week-year as intended in the unit test. (#53879)

compiler

CommitTypeDescription
f12b01ec88fixUpdate type check block to fix control flow source mappings (#53980)

core

CommitTypeDescription
c477e876e3fixchange defer block fixture default behavior to playthrough (#54088)

migrations

CommitTypeDescription
8264382a6bfixerror in standalone migration when non-array value is used as declarations in TestBed (#54122)

17.1.1 (2024-01-24)

router

CommitTypeDescription
f222bee8fafixrevert commit that replaced last helper with native Array.at(-1) (#54021)

17.1.0 (2024-01-17)

compiler

CommitTypeDescription
79ff91a813fixallow TS jsDocParsingMode host option to be programmatically set (#53126)
5613051a8bfixallow TS jsDocParsingMode host option to be programmatically set again (#53292)
df8a825910fixproject empty block root node (#53620)
478d622265fixproject empty block root node in template pipeline (#53620)

compiler-cli

CommitTypeDescription
abdc7e4578featsupport type-checking for generic signal inputs (#53521)
e620b3a724fixadd compiler option to disable control flow content projection diagnostic (#53311)
4c1d69e288fixadd diagnostic for control flow that prevents content projection (#53190)
76ceebad04fixdo not throw fatal error if extended type check fails (#53896)
1a6eaa0feafixinput transform in local compilation mode (#53645)
56a76d73e0fixmodify getConstructorDependencies helper to work with reflection host after the previous change (#52215)

core

CommitTypeDescription
863be4b698featexpose new input API for signal-based inputs (#53872)
94096c6edefeatsupport TypeScript 5.3 (#52572)
69b384c0d1fixSignalNode reactive node incorrectly exposing unset field (#53571)
6f79507ea7fixChange defer block fixture default behavior to playthrough (#53956)
32f908ab70fixdo not accidentally inherit input transforms when overridden (#53571)
bdd61c768afixreplace assertion with more intentional error (#52234)
0daca457bbfixTestBed should still use the microtask queue to schedule effects (#53843)

router

CommitTypeDescription
5c1d441029featAdd info property to NavigationExtras (#53303)
50d7916278featAdd router configuration to resolve navigation promise on error (#48910)
a5a9b408e2featAdd transient info to RouterLink input (#53784)
726530a9affeatAllow onSameUrlNavigation: 'ignore' in navigateByUrl (#52265)

17.0.9 (2024-01-10)

common

CommitTypeDescription
c22b513b3ffixremove unused parameters from the ngClass constructor (#53831)
bd9f89d1c8fixserver-side rendering error when using in-memory scrolling (#53683)

compiler

CommitTypeDescription
92fd6cc42efixgenerate less code for advance instructions (#53845)
6a41961fbdfixignore empty switch blocks (#53776)

compiler-cli

CommitTypeDescription
7309463697fixinterpolatedSignalNotInvoked diagnostic (#53585)

core

CommitTypeDescription
441db5123ffixafterRender hooks now only run on ApplicationRef.tick (#52455)
f9120d79cbfixallow effect to be used inside an ErrorHandler (#53713)

migrations

CommitTypeDescription
e92c86b77ffixFix empty switch case offset bug in cf migration (#53839)

platform-server

CommitTypeDescription
91cb16fde9fixDo not delete global Event (#53659)

17.0.8 (2023-12-21)

compiler

CommitTypeDescription
de5c9ca8e9fixcorrectly intercept index in loop tracking function (#53604)

core

CommitTypeDescription
d79489255afixavoid repeated work when parsing version (#53598)
513fee871efixtree shake version class (#53598)

migrations

CommitTypeDescription
eb7c29c7b6fixcf migration - detect and error when result is invalid i18n nesting (#53638)
ed936ba0e9fixcf migration - detect and error when result is invalid i18n nesting (#53638) (#53639)
5c2f2539e2fixcf migration - ensure full check runs for all imports (#53637)
817dc1b27ffixcf migration - fix bug in attribute formatting (#53636)
7ac60bab9afixcf migration - improve import declaration handling (#53622)
c3f85e51a9fixcf migration - preserve indentation on attribute strings (#53625)
e73205ff5afixcf migration - stop removing empty newlines from i18n blocks (#53578)
886aa7b2a9fixFix cf migration bug with parsing for loop conditions properly (#53558)

router

CommitTypeDescription
0696ab6a5bfixShould not freeze original object used for route data (#53635)

17.0.7 (2023-12-13)

compiler

CommitTypeDescription
4fd5409090fixhandle ambient types in input transform function (#51474)

compiler-cli

CommitTypeDescription
a603338fe8fixgenerate less type checking code in for loops (#53515)

core

CommitTypeDescription
58ed76be93fixAvoid refreshing a host view twice when using transplanted views (#53021)
c16b5e8290fixMultiple subscribers to ApplicationRef.isStable should all see values (#53541)
17dbf8b8e2fixremove signal equality check short-circuit (#53446)
5b4add27b6fixupdate feature usage marker (#53542)
68d111c841perfavoid changes Observable creation on QueryList (#53498)
044cb553b4perfoptimize memory allocation when reconcilling lists (#52245)

migrations

CommitTypeDescription
96ab999698fixCF Migration - ensure bound ngIfElse cases ignore line breaks (#53435)
c9a1c6f1c7fixcf migration - undo changes when html fails to parse post migration (#53530)
b75aca1d74fixCF migration only remove newlines of changed template content (#53508)
e88a12d5b3fixcf migration validate structure of ngswitch before migrating (#53530)
543df3dca5fixensure we do not overwrite prior template replacements in migration (#53393)
d232ea143ffixfix cf migration import removal when errors occur (#53502)

platform-browser

CommitTypeDescription
d5c631bf36fixGet correct base path when using "." as base href when serving from the file:// protocol. (#53547)

router

CommitTypeDescription
e750e4edcffixprovide more actionable error message when route is not matched in production mode (#53523)

17.0.6 (2023-12-06)

compiler

CommitTypeDescription
a2e5f483f5fixgenerate proper code for nullish coalescing in styling host bindings (#53305)

compiler-cli

CommitTypeDescription
66ecf4c274fixadd compiler option to disable control flow content projection diagnostic (#53387)
74e6ce5d23fixadd diagnostic for control flow that prevents content projection (#53387)
6ec7a42b95fixavoid conflicts with built-in global variables in for loop blocks (#53319)

core

CommitTypeDescription
0a53f96094fixcleanup signal consumers for all views (#53351)
4fc1581bbcfixhandle hydration of multiple nodes projected in a single slot (#53270)
14e66533ecfixsupport hydration for cases when content is re-projected using ng-template (#53304)
8e366e8911fixsupport swapping hydrated views in @for loops (#53274)

migrations

CommitTypeDescription
45064f1ae1fixCF migration - ensure NgIfElse attributes are properly removed (#53298)
a6275cfa54fixCF Migration - Fix case of aliases on i18n ng-templates preventing removal (#53299)
58a96e0f50fixCF Migration add support for ngIf with just a then (#53297)
26e40c7f89fixCF Migration fix missing alias for bound ngifs (#53296)
836aeba01dfixChange CF Migration ng-template placeholder generation and handling (#53394)
72d22ba7eefixfix regexp for else and then in cf migration (#53257)
7a2facae8afixhandle aliases on bound ngIf migrations (#53261)
5104a89b30fixhandle nested ng-template replacement safely in CF migration (#53368)
2a4e3f5373fixhandle templates outside of component in cf migration (#53368)
0db75ab5b1fixremove setting that removes comments in CF migration (#53350)

router

CommitTypeDescription
13ade13a15fixEnsure canMatch guards run on wildcard routes (#53239)

17.0.5 (2023-11-29)

core

CommitTypeDescription
6be88040d1fixavoid stale provider info when TestBed.overrideProvider is used (#52918)
dee50f1d78fixinherit host directives (#52992)
07920d96d4fixReattached views that are dirty from a signal update should refresh (#53001)

migrations

CommitTypeDescription
aab7fb8654fixAdd ngForTemplate support to control flow migration (#53076)
dbd6f386eafixallows colons in ngIf else cases to migrate (#53076)
5b9f896009fixcf migration fix migrating empty switch default (#53237)
2b3d3b0fe1fixCF migration log warning when collection aliasing detected in @for (#53238)
dffeac8386fixcf migration removes unnecessary bound ngifelse attribute (#53236)
00cb3339bafixcontrol flow migration formatting fixes (#53076)
c22af72f75fixfix off by one issue with template removal in CF migration (#53255)
ba6d7fe018fixfixes CF migration i18n ng-template offsets (#53212)
8f6affdd64fixfixes control flow migration common module removal (#53076)
6ae408847cfixproperly handle ngIfThen cases in CF migration (#53256)
0fcef65ceafixUpdate CF migration to skip templates with duplicate ng-template names (#53204)

router

CommitTypeDescription
91486aaf07fixResolvers in different parts of the route tree should be able to execute together (#52934)

17.0.4 (2023-11-20)

common

CommitTypeDescription
7f1c55755dfixremove load on image once it fails to load (#52990)
fafcb0d23ffixscan images once page is loaded (#52991)

compiler

CommitTypeDescription
98376f2c09fixchanged after checked error in for loops (#52935)
291deac663fixgenerate i18n instructions for blocks (#52958)
49dca36880fixnested for loops incorrectly calculating computed variables (#52931)
f01b7183d2fixproduce placeholder for blocks in i18n bundles (#52958)

compiler-cli

CommitTypeDescription
f671f86ac2fixadd diagnostic for control flow that prevents content projection (#52726)

core

CommitTypeDescription
db1a8ebdb4fixcleanup loading promise when no dependencies are defined (#53031)
31a1575334fixhandle local refs when getDeferBlocks is invoked in tests (#52973)

migrations

CommitTypeDescription
ac9cd6108ffixcontrol flow migration fails for async pipe with unboxing of observable (#52756) (#52972)
13bf5b7007fixFixes control flow migration if then else case (#53006)
492ad4698afixfixes migrations of nested switches in control flow (#53010)
0fad36eff2fixtweaks to formatting in control flow migration (#53058)

17.0.3 (2023-11-15)

animations

CommitTypeDescription
f5872c9921fixprevent the AsyncAnimationRenderer from calling the delegate when there is no element. (#52570)

core

CommitTypeDescription
6a1d4ed667fixhandle non-container environment injector cases (#52774)
5de7575be8fixreset cached scope for components that were overridden using TestBed (#52916)

http

CommitTypeDescription
7c066a4af4fixUse the response content-type to set the blob type. (#52840)

migrations

CommitTypeDescription
4e200bf13bfixAdd missing support for ngForOf (#52903)
d033540d0ffixAdd support for bound versions of NgIfElse and NgIfThenElse (#52869)
aa2d815648fixAdd support for removing imports post migration (#52763)
3831942771fixFixes issue with multiple if elses with same template (#52863)
e1f84a31dcfixpassed in paths will be respected in nx workspaces (#52796)

17.0.2 (2023-11-09)

compiler-cli

CommitTypeDescription
7a95cccf50fixadd interpolatedSignalNotInvoked to diagnostics (#52687)
a548c0333efixincorrect inferred type of for loop implicit variables (#52732)

core

CommitTypeDescription
2cea80c6e2fixerror code in image performance warning (#52727)
b16fc2610afixlimit rate of markers invocations (#52742)
44c48a4835fixproperly update collection with repeated keys in @for (#52697)

17.0.1 (2023-11-08)

http

CommitTypeDescription
5c6f3f8ec0fixDon't override the backend when using the InMemoryWebAPI (#52425)

migrations

CommitTypeDescription
70d30c28e0fixAdd support for ng-templates with i18n attributes (#52597)
4f125c5f9afixSwitches to multiple passes to fix several reported bugs (#52592)

Web Frameworks: the internet frontier.
These are the voyages of the framework Angular.
Its continuing mission:
To explore strange, new technologies.
To seek out new users and new applications.
To boldly go where no web framework has gone before.

In honor of v17.0.1

                                                  ______
                                     ___.--------'------`---------.____
                               _.---'----------------------------------`---.__
                             .'___=]===========================================
,-----------------------..__/.'         >--.______        _______.---'
]====================<==||(__)        .'          `------'
`-----------------------`' ----.___--/
     /       /---'                 `/
    /_______(______________________/
    `-------------.--------------.'
                   \________|_.-'

Live long and prosper 🖖🏻

17.0.0 (2023-11-08)

Blog post "Angular v17 is now available".

Breaking Changes

  • Node.js v16 support has been removed and the minimum support version has been bumped to 18.13.0.

    Node.js v16 is planned to be End-of-Life on 2023-09-11. Angular will stop supporting Node.js v16 in Angular v17. For Node.js release schedule details, please see: https://github.com/nodejs/release#release-schedule

common

  • the NgSwitch directive now defaults to the === equality operator, migrating from the previously used == operator. NgSwitch expressions and / or individual condition values need adjusting to this stricter equality check. The added warning message should help pin-pointing NgSwitch usages where adjustments are needed.

core

  • Angular now requires zone.js version ~0.14.0

  • Versions of TypeScript older than 5.2 are no longer supported.

  • The mutate method was removed from the WritableSignal interface and completely dropped from the public API surface. As an alternative, please use the update method and make immutable changes to the object.

    Example before:

    items.mutate(itemsArray => itemsArray.push(newItem));
    

    Example after:

    items.update(itemsArray => [itemsArray, …newItem]);
    
  • OnPush components that are created dynamically now only have their host bindings refreshed and ngDoCheck run during change detection if they are dirty. Previously, a bug in the change detection would result in the OnPush configuration of dynamically created components to be ignored when executing host bindings and the ngDoCheck function. This is rarely encountered but can happen if code has a handle on the ComponentRef instance and updates values read in the OnPush component template without then calling either markForCheck or detectChanges on that component's ChangeDetectorRef.

platform-browser

  • REMOVE_STYLES_ON_COMPONENT_DESTROY default value is now true. This causes CSS of components to be removed from the DOM when destroyed. You retain the previous behaviour by providing the REMOVE_STYLES_ON_COMPONENT_DESTROY injection token.

    import {REMOVE_STYLES_ON_COMPONENT_DESTROY} from '@angular/platform-browser';
    ...
    providers: [{
      provide: REMOVE_STYLES_ON_COMPONENT_DESTROY,
      useValue: false,
    }]
    
  • The withNoDomReuse() function was removed from the public API. If you need to disable hydration, you can exclude the provideClientHydration() call from provider list in your application (which would disable hydration features for the entire application) or use ngSkipHydration attribute to disable hydration for particular components. See this guide for additional information: https://angular.io/guide/hydration#how-to-skip-hydration-for-particular-components.

router

  • Absolute redirects no longer prevent further redirects. Route configurations may need to be adjusted to prevent infinite redirects where additional redirects were previously ignored after an absolute redirect occurred.

  • Routes with loadComponent would incorrectly cause child routes to inherit their data by default. The default paramsInheritanceStrategy is emptyOnly. If parent data should be inherited in child routes, this should be manually set to always.

  • urlHandlingStrategy has been removed from the Router public API. This should instead be configured through the provideRouter or RouterModule.forRoot APIs.

  • The following Router properties have been removed from the public API:

    • canceledNavigationResolution
    • paramsInheritanceStrategy
    • titleStrategy
    • urlUpdateStrategy
    • malformedUriErrorHandler

    These should instead be configured through the provideRouter or RouterModule.forRoot APIs.

  • The setupTestingRouter function has been removed. Use RouterModule.forRoot or provideRouter to setup the Router for tests instead.

  • malformedUriErrorHandler is no longer available in the RouterModule.forRoot options. URL parsing errors should instead be handled in the UrlSerializer.parse method.

zone.js

  • Deep and legacy dist/ imports like zone.js/bundles/zone-testing.js and zone.js/dist/zone are no longer allowed. zone-testing-bundle and zone-testing-node-bundle are also no longer part of the package.

    The proper way to import zone.js and zone.js/testing is:

    import 'zone.js';
    import 'zone.js/testing';
    

Deprecations

animations

  • The AnimationDriver.NOOP symbol is deprecated, use NoopAnimationDriver instead.

core

  • ChangeDetectorRef.checkNoChanges is deprecated.

    Test code should use ComponentFixture instead of ChangeDetectorRef. Application code should not call ChangeDetectorRef.checkNoChanges directly.

  • Swapping out the context object for EmbeddedViewRef is no longer supported. Support for this was introduced with v12.0.0, but this pattern is rarely used. There is no replacement, but you can use simple assignments in most cases, or Object.assign , or alternatively still replace the full object by using a Proxy (see NgTemplateOutlet as an example).

    Also adds a warning if the deprecated

  • NgProbeToken

    The NgProbeToken is not used internally since the transition from View Engine to Ivy. The token has no utility and can be removed from applications and libraries.

CommitTypeDescription
59aa0634f4buildremove support for Node.js v16 (#51755)

animations

CommitTypeDescription
e753278faafeatAdd the possibility of lazy loading animations code. (#50738)
698c058e1cfixremove code duplication between entry-points (#51500)
0598613950refactordeprecation of AnimationDriver.NOOP (#51843)

benchpress

CommitTypeDescription
2da3551a70featreport gc and render time spent in script (#50771)

common

CommitTypeDescription
fe2fd7e1a8featmake the warning for lazy-loaded lcp image an error (#51748)
dde3fdabbdfeatupgrade warning to logged error for lazy-loaded LCP images using NgOptimizedImage (#52004)
da056a1fe2fixadd missing types field for @angular/common/locales of exports in package.json (#52080)
85843e8212fixallow to specify only some properties of DatePipeConfig (#51287)
3bd85fb7b0fixapply fixed_srcset_width value only to fixed srcsets (#52459)
65b460448efixmissing space in ngSwitch equality warning (#52180)
86c5e34601fixremove code duplication between entry-points (#51500)
28a5925f53fixuse === operator to match NgSwitch cases (#51504)

compiler

CommitTypeDescription
1934524a0cfeatadd docs extraction for type aliases (#52118)
7f6d9a73abfeatexpand class api doc extraction (#51733)
a7fa25306ffeatextract api docs for interfaces (#52006)
7bfe20707ffeatextract api for fn overloads and abtract classes (#52040)
c7daf7ea16featextract directive docs info (#51733)
e0b1bb33d7featextract doc info for JsDoc (#51733)
b9c70158abfeatextract docs for accessors, rest params, and types (#51733)
a24ae994a0featextract docs for top level functions and consts (#51733)
2e41488296featextract docs info for enums, pipes, and NgModules (#51733)
34495b3533featextract docs via exports (#51828)
7e82df45c5featinitial skeleton for API doc extraction (#51733)
6795cccbbbfixaccount for type-only imports in defer blocks (#52343)
23bfa10ac8fixadd diagnostic for inaccessible deferred trigger (#51922)
31295a3cf9fixallocating unnecessary slots in conditional instruction (#51913)
2aaddd3f64fixallow comments between switch cases (#52449)
ddd9df68bbfixallow decimals in defer block time values (#52433)
7dbd47fb30fixallow newlines in track and let expressions (#52137)
0eae992c4efixallow nullable values in for loop block (#51997)
073ebfe09efixapply style on :host attributes in prod builds. (#49118)
81a287a79afixavoid error in template parser for tag names that can occur in object prototype (#52225)
6c58252521fixcompilation error when for loop block expression contains new line (#52447)
9d19c8e317fixdon't allocate variable to for loop expression (#52158)
9acd2ac98bfixenable block syntax in the linker (#51979)
1d871c03a5fixforward referenced dependencies not identified as deferrable (#52017)
16ff08ec70fixnarrow the type of expressions in event listeners inside if blocks (#52069)
ac0d5dcfd6fixnarrow the type of expressions in event listeners inside switch blocks (#52069)
02edb43067fixnarrow the type of the aliased if block expression (#51952)
83067b3ef2fixng-template directive invoke twice at the root of control flow (#52515)
17078a3fe1fixpipes used inside defer triggers not being picked up (#52071)
861ce3a7c5fixpipes using DI not working in blocks (#52112)
1f5039bbd6fixproject control flow root elements into correct slot (#52414)
81c315ec6efixtemplate type checking not reporting diagnostics for incompatible type comparisons (#52322)
1beef49d80fixupdate the minVersion if component uses block syntax (#51979)
386e1e9500fixwork around TypeScript bug when narrowing switch statements (#52110)
e5bca43224perffurther reduce bundle size using arrow functions (#52010)

compiler-cli

CommitTypeDescription
5b66330329fixallow non-array imports for standalone component in local compilation mode (#51819)
377a7abfdafixbypass static resolving of the component's changeDetection field in local compilation mode (#51848)
19c3dc18d3fixfix NgModule injector def in local compilation mode when imports/exports are non-array expressions (#51819)
11bb19cafcfixhandle nested qualified names in ctor injection in local compilation mode (#51947)
f91f222b55fixresolve component encapsulation enum in local compilation mode (#51848)

core

CommitTypeDescription
59b6ec6be8docsDeprecate ChangeDetectorRef.checkNoChanges (#52431)
4f04d1cdabfeatadd new list reconcilation algorithm (#51980)
c7127b98b5featadd schematic to escape block syntax characters (#51905)
50275e58b8featAdd schematic to migrate control flow syntax (#52035)
81b67aa987featadd support for zone.js 0.14.0 (#51774)
048f400efcfeatadd warnings for oversized images and lazy-lcp (#51846)
93675dc797featconditional built-in control flow (#51346)
4427e1ebc2featcreate function to assert not running inside reactive context (#52049)
e23aaa7d75featdrop support for older TypeScript versions (#51792)
43e6fb0606featenable block syntax (#51994)
3cbb2a8ecffeatimplement deferred block interaction triggers (#51830)
8be2c48b7cfeatimplement new block syntax (#51891)
a54713c831featimplement ɵgetInjectorMetadata debug API (#51900)
5b88d136affeatmark core signal APIs as stable (#51821)
8eef694deffeatProvide a diagnostic for missing Signal invocation in template interpolation. (#49660)
40113f653cfeatRemove deprecated CompilerOptions.useJit andCompilerOptions.missingTranslation. (#49672)
68ba798ae3featrevamp the runtime error message for orphan components to include full component info (#51919)
1a4aee7e49featshow runtime error for orphan component rendering (#52061)
687b96186cfeatsupport deferred hover triggers (#51874)
e2e3d69a27featsupport deferred triggers with implicit triggers (#51922)
16f5fc40a4featsupport deferred viewport triggers (#51874)
59387ee476featsupport styles and styleUrl as strings (#51715)
9cc52b9b85featsupport TypeScript 5.2 (#51334)
7d42dc3c02featthe new list reconciliation algorithm for built-in for (#51980)
935c1816fdfixadd rejectErrors option to toSignal (#52474)
5411864c2efixadjust toSignal types to handle more common cases (#51991)
dcf18dc74cfixallow toSignal calls in reactive context (#51831)
dbffdc09c2fixavoid duplicated code between entry-points (primary, testing, rxjs-interop) (#51500)
4f69d620d9fixdeferred blocks not removing content immediately when animations are enabled (#51971)
df58c0b714fixdisallow afterRender in reactive contexts (#52138)
5d61221ed7fixdisallow using effect inside reactive contexts (#52138)
99e7629159fixdo not remove used ng-template nodes in control flow migration (#52186)
c7ff9dff2cfixdrop mutate function from the signals public API (#51821)
00128e3853fixdrop mutate function from the signals public API (#51821) (#51986)
ddef3ac9a4fixeffects wait for ngOnInit for their first run (#52473)
5ead7d412dfixensure a consumer drops all its stale producers (#51722)
1dd8558f82fixEnsure backwards-referenced transplanted views are refreshed (#51854)
50ad074505fixframework debug APIs getDependenciesForTokenInInjector and getInjectorMetadata (#51719)
80e7a0f8fafixguard usages of performance.mark (#52505)
b9ea2d6900fixhandle aliased index with no space in control flow migration (#52444)
ffe9b1fcc2fixhandle for alias with as in control flow migration (#52183)
e5720edb46fixhandle if alias in control flow migration (#52181)
4461cefa4ffixhandle trackBy and aliased index in control flow migration (#52423)
7368b8aaebfixhost directive validation not picking up duplicate directives on component node (#52073)
696f003553fixmutation bug in getDependenciesFromInjectable (#52450)
d487014785fixRemove no longer needed build rule related to removed migration (#52143)
4da08dc2effixremove unnecessary migration (#52141)
384d7aacd0fixreplace assertion with more intentional error (#52427)
40bb45f329fixRespect OnPush change detection strategy for dynamically created components (#51356)
3a19d6b743fixrun afterRender callbacks outside of the Angular zone (#51385)
a2ba5482c3fixuse TNode instead of LView for mapping injector providers (#52436)
d5dad3eb4cfixviewport trigger deregistering callbacks multiple times (#52115)
8e4a7ab52bperfavoid repeated access to LContainer and trackBy calculation (#52227)
1dc14d9853perfavoid unnecessary callbacks in after render hooks (#52292)
e90694259eperfbuild-in for should update indexes only when views were added / removed (#52051)
1032c1e1a5perfcache LiveCollectionLContainerImpl (#52227)
685d01e106perfchain template instructions (#51546)
88a0af64fdperfgenerate arrow functions for pure function calls (#51668)
37d627dbd4perfminimze trackBy calculations (#52227)
3861a73135perfUpdate LView consumer to only mark component for check (#52302)
9b9e11fcafrefactordeprecate allowing full context object to be replaced in EmbeddedViewRef (#51887)
ba9fc2419erefactordeprecate the NgProbeToken (#51396)

http

CommitTypeDescription
7dde42a5dffeatallow customization of the HttpTransferCache. (#52029)
8156b3d4ecfixDon't override the backend when using the InMemoryWebAPI (#52425)
bd9e91ecf7perfreduce data transfer when using HTTP caching (#52347)

language-service

CommitTypeDescription
449830f24efeatComplete inside @switch (#52153)
e2416a284ffeatEnable go to definition of styleUrl (#51746)
023a181ba5featImplement outlining spans for control flow blocks (#52062)
7c052bb6effeatSupport autocompletion for blocks (#52121)
9d565cd6d6fixAutocomplete block keywords in more cases (#52198)

localize

CommitTypeDescription
5a20a44c64fixng-add schematics for application builder (#51777)

migrations

CommitTypeDescription
f0da7c2e44featschematic to remove deprecated CompilerOptions properties (#49672)
965ce5a8c5featSchematics for TransferState, StateKey and makeStateKey migration. (#49594)
09e905ad67fixaccount for separator characters inside strings (#52525)
4c878f90d2fixAdd support for nested structures inside a switch statement (#52358)
d7397fb29bfixEnsure control flow migration ignores new block syntax (#52402)
6a01d62b9dfixfix broken migration when no control flow is present (#52399)
9c2be715a3fixFixes a bug in the ngFor pre-v5 alias translation (#52531)
54fed68bbffixFixes the root level template offset in control flow migration (#52355)
57404d4723fixhandle comma-separated syntax in ngFor (#52525)
54bc384661fixhandle nested classes in block entities migration (#52309)
c9b1ddff4dfixhandle nested classes in control flow migration (#52309)
6988a0070efixhandle ngIf else condition with no whitespaces (#52504)
e40e55d902fixRemove unhelpful parsing errors from the log (#52401)
c267f54bc3fixUpdate regex to better match ng-templates (#52529)

platform-browser

CommitTypeDescription
c340d6e044featenable removal of styles on component destroy by default (#51571)
c5daa6ce77featexpose EventManagerPlugin in the public API. (#49969)
5b375d106ffixFire Animations events when using async animations. (#52087)
65786b2b96fixprevent duplicate stylesheets from being created (#52019)
75d610d420fixset animation properties when using async animations. (#52087)
3c0577f991perfdisable styles of removed components instead of removing (#51808)
c9cde3ab10perfonly append style element on creation (#52237)
dbc14eb41drefactorremove withNoDomReuse function (#52057)

platform-server

CommitTypeDescription
0c66e2424cfixresolve relative requests URL (#52326)

router

CommitTypeDescription
1da28f4825featAdd callback to execute when a view transition is created (#52002)
73e4bf2ed2featAdd feature to support the View Transitions API (#51314)
86e91463affeatAdd option to skip the first view transition (#51825)
ce1b915868fixAllow redirects after an absolute redirect (#51731)
37df395be0fixchildren of routes with loadComponent should not inherit parent data by default (#52114)
4dce8766f8fixEnsure newly resolved data is inherited by child routes (#52167)
f464e39364fixEnsure title observable gets latest values (#51561)
b2aff43621fixRemove urlHandlingStrategy from public Router properties (#51631)
c62e680098fixRemove deprecated Router properties (#51502)
3c6258c85bfixRemove deprecated setupTestingRouter function (#51826)
0b3e6a41d0fixRemove malformedUriErrorHandler from ExtraOptions (#51745)
c03baed854fixuse DOCUMENT token instead of document directly in view transitions (#51814)

16.2.12 (2023-11-02)

animations

CommitTypeDescription
03f4050636fixremove finish listener once player is destroyed (#51136)

common

CommitTypeDescription
e092184a5cfixapply fixed_srcset_width values only to fixed srcsets (#52486)

compiler-cli

CommitTypeDescription
b3b4ae4c3afixproperly emit literal types in input coercion function arguments (#52437)
873c4f2454fixuse originally used module specifier for transform functions (#52437)

16.2.11 (2023-10-25)

core

CommitTypeDescription
54ea3b65c3fixemit provider configured event when a service is configured with providedIn (#52365)
78533324dcfixget root and platform injector providers in special cases (#52365)
019a0f4c22fixload global utils before creating platform injector in the standalone case (#52365)

router

CommitTypeDescription
b79b4aca91fixRouterTestingHarness should throw if a component is expected but navigation fails (#52357)

16.2.10 (2023-10-18)

16.2.9 (2023-10-11)

forms

CommitTypeDescription
51a5baace3fixreset() call with null values on nested group (#48830)

16.2.8 (2023-10-04)

language-service

CommitTypeDescription
b732961fc3fixRetain correct language service when ts.Project reloads (#51912)

service-worker

CommitTypeDescription
966ce9790afixthrow a critical error when handleFetch fails (#51960)

15.2.10 (2023-10-04)

service-worker

CommitTypeDescription
9fe08968b8fixthrow a critical error when handleFetch fail (#51989)

16.2.7 (2023-09-27)

core

CommitTypeDescription
39a3e34e03fixallow toSignal calls in reactive context (#51831) (#51892)

service-worker

CommitTypeDescription
c3d901eacffixthrow a critical error when handleFetch fails (#51885)

16.2.6 (2023-09-20)

core

CommitTypeDescription
82712f80dffixensure a consumer drops all its stale producers (#51722) (#51772)

16.2.5 (2023-09-13)

16.2.4 (2023-09-06)

16.2.3 (2023-08-30)

animations

CommitTypeDescription
04c6574280fixremove unnecessary escaping in regex expressions (#51554)

compiler-cli

CommitTypeDescription
dbd761f528fixcorrect incomplete escaping (#51557)
5c36fc784ffixremove unnecessary escaping in regex expressions (#51554)

core

CommitTypeDescription
dcd1add06ffixcorrect incomplete escaping (#51557)
20d62603c2fixhandle hydration of view containers that use component hosts as anchors (#51456)
e6b301caa2fixremove unnecessary escaping in regex expressions (#51554)
0c7c852ee7fixrun afterRender callbacks outside of the Angular zone (#51551)

language-service

CommitTypeDescription
8081fdd22dfixcorrect incomplete escaping (#51557)

16.2.2 (2023-08-23)

common

CommitTypeDescription
a43c0772eafixAllow safeUrl for ngSrc in NgOptimizedImage (#51351)

compiler-cli

CommitTypeDescription
39ace8664bfixenforce a minimum version to be used when a library uses input transform (#51413)

core

CommitTypeDescription
36f434e49dfixguard the jasmine hooks (#51394)

router

CommitTypeDescription
b0396e7164fixEnsure canceledNavigationResolution: 'computed' works on first page (#51441)

16.2.1 (2023-08-16)

router

CommitTypeDescription
232a8c1b8dfixApply named outlets to children empty paths not appearing in the URL (#51292)

16.2.0 (2023-08-09)

benchpress

CommitTypeDescription
dd850b2ab7fixcorrectly report GC memory amounts (#50760)

common

CommitTypeDescription
29d358170bfeatadd component input binding support for NgComponentOutlet (#51148)
1837efb9dafeatAllow ngSrc to be changed post-init (#50683)

compiler

CommitTypeDescription
c27a1e61d6featscope selectors in @scope queries (#50747)

compiler-cli

CommitTypeDescription
12bad6576dfixlibraries compiled with v16.1+ breaking with Angular framework v16.0.x (#50714)

core

CommitTypeDescription
e53d4ecf4cfeatadd afterRender and afterNextRender (#50607)
98d262fd27featcreate injector debugging APIs (#48639)
cdaa2a8a9efeatsupport Provider type in Injector.create (#49587)
9f490da7e2fixhandle hydration of view containers for root components (#51247)

router

CommitTypeDescription
0b14e4ef74featexposes the fixture of the RouterTestingHarness (#50280)

16.1.9 (2023-08-09)

16.1.8 (2023-08-02)

compiler

CommitTypeDescription
cc722ea1f5fixreturn full spans for Comment nodes (#50855)

16.1.7 (2023-07-26)

http

CommitTypeDescription
916916d835fixcheck whether Zone is defined (#51119)

16.1.6 (2023-07-19)

http

CommitTypeDescription
dea8dc0378fixRun fetch request out the angular zone (#50981)

16.1.5 (2023-07-13)

animations

CommitTypeDescription
f920fcbd94fixEnsure elements are removed from the cache after leave animation. (#50929)

core

CommitTypeDescription
499fb5c772fixensure that standalone components get correct injector instances (#50954)
c65913ecb7fixhandle deref returning null on RefactiveNode. (#50992)

platform-browser

CommitTypeDescription
31419f6a3bperfdo not remove renderer from cache when REMOVE_STYLES_ON_COMPONENT_DESTROY is enabled. (#51005)

upgrade

CommitTypeDescription
3efb577cf3fixUse takeUntil on leaky subscription. (#50901)

16.1.4 (2023-07-06)

core

CommitTypeDescription
4ba5850ba6fixuse setTimeout when coalescing tasks in Node.js (#50820)

upgrade

CommitTypeDescription
a4348355cefixallow for downgraded components to work with component-router (#50871)

16.1.3 (2023-06-28)

core

CommitTypeDescription
dd6fc5785ffixexpose input transform function on ComponentFactory and ComponentMirror (#50713)

elements

CommitTypeDescription
e1bbe47c23fixsupport input transform functions (#50713)

platform-browser

CommitTypeDescription
79dd6a847afixwait until animation completion before destroying renderer (#50677)
a797f41d1bfixwait until animation completion before destroying renderer (#50860)

16.1.2 (2023-06-21)

http

CommitTypeDescription
9488a3fd46fixSend query params on fetch request (#50740)
5ae001829cfixuse serializeBody to support JSON payload in FetchBackend (#50776)

16.1.1 (2023-06-14)

compiler-cli

CommitTypeDescription
71360b3a3efixlibraries compiled with v16.1+ breaking with Angular framework v16.0.x (#50715)

core

CommitTypeDescription
d9bed48eb5fixextend toSignal to accept any Subscribable (#50162)

migrations

CommitTypeDescription
5e1d8444aefixPrevent a component from importing itself. (#50554)

16.1.0 (2023-06-13)

compiler

CommitTypeDescription
4e663297c5fixerror when reading compiled input transforms metadata in JIT mode (#50600)
721bc72649fixresolve deprecation warning with TypeScript 5.1 (#50460)

core

CommitTypeDescription
68017d4e75featadd ability to transform input values (#50420)
69dadd2502featsupport TypeScript 5.1 (#50156)
c0ebe34cbdfixadd additional component metadata to component ID generation (#50336)

http

CommitTypeDescription
85c5427582featIntroduction of the fetch Backend for the HttpClient (#50247)

16.0.6 (2023-06-13)

core

CommitTypeDescription
05ac0868c9fixavoid duplicated content during hydration while processing a component with i18n (#50644)

16.0.5 (2023-06-08)

compiler

CommitTypeDescription
703b8fcac1fixdo not remove comments in component styles (#50346)

core

CommitTypeDescription
2b6da93e19fixincorrectly throwing error for self-referencing component (#50559)
c992109d6cfixwait for HTTP in ngOnInit correctly before server render (#50573)

platform-server

CommitTypeDescription
c0d4086c6efixsurface errors during rendering (#50587)

16.0.4 (2023-06-01)

animations

CommitTypeDescription
df65c4fc8ffixTrigger leave animation when ViewContainerRef is injected (#48705)

common

CommitTypeDescription
7e1bc513defixuntrack subscription and unsubscription in async pipe (#50522)

core

CommitTypeDescription
9970b29acefixupdate ApplicationRef.isStable to account for rendering pending tasks (#50425)

16.0.3 (2023-05-24)

core

CommitTypeDescription
c11041e372fixadds missing symbols for animation standalone bundling test (#50434)
98e8fdf40efixfix Self flag inside embedded views with custom injectors (#50270)
199ff4fe7ffixhost directives incorrectly validating aliased bindings (#50364)

http

CommitTypeDescription
080bbd2137fixcreate macrotask during request handling instead of load start (#50406)

16.0.2 (2023-05-17)

core

CommitTypeDescription
c1016d4e57fixadd additional component metadata to component ID generation (#50340)
cc41758b59fixallow onDestroy unregistration while destroying (#50237)
7d679bdb59fixallow passing value of any type to isSignal function (#50035)

16.0.1 (2023-05-10)

core

CommitTypeDescription
52c74d3b4afixadd additional component metadata to component ID generation (#50203)
048b6b1e0dfixbootstrapApplication call not rejected when error is thrown in importProvidersFrom module (#50120)
d68796782ffixhandle hydration of root components with injected ViewContainerRef (#50136)
f751ce6445fixhandle projection of hydrated containters into components that skip hydration (#50199)
346ab73dd9fixonly try to retrieve transferred state on the browser (#50144)

16.0.0 (2023-05-03)

Blog post "Angular v16 is now available".

Breaking Changes

  • Angular Compatibility Compiler (ngcc) has been removed and as a result Angular View Engine libraries will no longer work
  • Deprecated EventManager method addGlobalEventListener has been removed as it is not used by Ivy.

bazel

  • Several changes to the Angular Package Format (APF)
    • Removal of FESM2015
    • Replacing ES2020 with ES2022
    • Replacing FESM2020 with FESM2022
  • Several changes to the Angular Package Format (APF)
    • Removal of FESM2015
    • Replacing ES2020 with ES2022
    • Replacing FESM2020 with FESM2022

common

  • MockPlatformLocation is now provided by default in tests. Existing tests may have behaviors which rely on BrowserPlatformLocation instead. For example, direct access to the window.history in either the test or the component rather than going through the Angular APIs (Location.getState()). The quickest fix is to update the providers in the test suite to override the provider again TestBed.configureTestingModule({providers: [{provide: PlatformLocation, useClass: BrowserPlatformLocation}]}). The ideal fix would be to update the code to instead be compatible with MockPlatformLocation instead.
  • If the 'ngTemplateOutletContext' is different from the context, it will result in a compile-time error.

Before the change, the following template was compiling:

interface MyContext {
  $implicit: string;
}

@Component({
  standalone: true,
  imports: [NgTemplateOutlet],
  selector: 'person',
  template: `
    <ng-container
      *ngTemplateOutlet="
        myTemplateRef;
        context: { $implicit: 'test', xxx: 'xxx' }
      "></ng-container>
  `,
})
export class PersonComponent {
  myTemplateRef!: TemplateRef<MyContext>;
}

However, it does not compile now because the 'xxx' property does not exist in 'MyContext', resulting in the error: 'Type '{ $implicit: string; xxx: string; }' is not assignable to type 'MyContext'.'

The solution is either:

  • add the 'xxx' property to 'MyContext' with the correct type or
  • add 'any(...)insidethetemplatetomaketheerrordisappear.However,addingany(...)' inside the template to make the error disappear. However, adding 'any(...)' does not correct the error but only preserves the previous behavior of the code.
  • Deprecated XhrFactory export from @angular/common/http has been removed. Use XhrFactory from @angular/common instead.

compiler

    • TypeScript 4.8 is no longer supported.

core

  • QueryList.filter now supports type guard functions, which will result in type narrowing. Previously if you used type guard functions, it resulted in no changes to the return type. Now the type would be narrowed, which might require updates to the application code that relied on the old behavior.

  • zone.js versions 0.11.x and 0.12.x are not longer supported.

    • entryComponents has been deleted from the @NgModule and @Component public APIs. Any usages can be removed since they weren't doing anyting.
    • ANALYZE_FOR_ENTRY_COMPONENTS injection token has been deleted. Any references can be removed.
  • ComponentRef.setInput will only set the input on the component if it is different from the previous value (based on Object.is equality). If code relies on the input always being set, it should be updated to copy objects or wrap primitives in order to ensure the input value differs from the previous call to setInput.

  • RendererType2.styles no longer accepts a nested arrays.

  • The APP_ID token value is no longer randomly generated. If you are bootstrapping multiple application on the same page you will need to set to provide the APP_ID yourself.

    bootstrapApplication(ComponentA, {
      providers: [
       { provide: APP_ID, useValue: 'app-a' },
       // ... other providers ...
      ]
    });
    
  • The ReflectiveInjector and related symbols were removed. Please update the code to avoid references to the ReflectiveInjector symbol. Use Injector.create as a replacement to create an injector instead.

  • Node.js v14 support has been removed

    Node.js v14 is planned to be End-of-Life on 2023-04-30. Angular will stop supporting Node.js v14 in Angular v16. Angular v16 will continue to officially support Node.js versions v16 and v18.

platform-browser

  • The deprecated BrowserTransferStateModule was removed, since it's no longer needed. The TransferState class can be injected without providing the module. The BrowserTransferStateModule was empty starting from v14 and you can just remove the reference to that module from your applications.

platform-server

  • Users that are using SSR with JIT mode will now need to add import to @angular/compiler before bootstrapping the application.

    NOTE: this does not effect users using the Angular CLI.

  • renderApplication method no longer accepts a root component as first argument. Instead, provide a bootstrapping function that returns a Promise<ApplicationRef>.

    Before

    const output: string = await renderApplication(RootComponent, options);
    

    Now

    const bootstrap = () => bootstrapApplication(RootComponent, appConfig);
    const output: string = await renderApplication(bootstrap, options);
    
  • renderModuleFactory has been removed. Use renderModule instead.

router

  • The Scroll event's routerEvent property may also be a NavigationSkipped event. Previously, it was only a NavigationEnd event.
  • ComponentFactoryResolver has been removed from Router APIs. Component factories are not required to create an instance of a component dynamically. Passing a factory resolver via resolver argument is no longer needed and code can instead use ViewContainerRef.createComponent without the factory resolver.
  • The RouterEvent type is no longer present in the Event union type representing all router event types. If you have code using something like filter((e: Event): e is RouterEvent => e instanceof RouterEvent), you'll need to update it to filter((e: Event|RouterEvent): e is RouterEvent => e instanceof RouterEvent).
  • Tests which mock ActivatedRoute instances may need to be adjusted because Router.createUrlTree now does the right thing in more scenarios. This means that tests with invalid/incomplete ActivatedRoute mocks may behave differently than before. Additionally, tests may now navigate to a real URL where before they would navigate to the root. Ensure that tests provide expected routes to match. There is rarely production impact, but it has been found that relative navigations when using an ActivatedRoute that does not appear in the current router state were effectively ignored in the past. By creating the correct URLs, this sometimes resulted in different navigation behavior in the application. Most often, this happens when attempting to create a navigation that only updates query params using an empty command array, for example router.navigate([], {relativeTo: route, queryParams: newQueryParams}). In this case, the relativeTo property should be removed.

Deprecations

core

  • makeStateKey, StateKey and TransferState exports have been moved from @angular/platform-browser to @angular/core. Please update the imports.
- import {makeStateKey, StateKey, TransferState} from '@angular/platform-browser';
+ import {makeStateKey, StateKey, TransferState} from '@angular/core';
  • EnvironmentInjector.runInContext is now deprecated, with runInInjectionContext functioning as a direct replacement:

    // Previous method version (deprecated):
    envInjector.runInContext(fn);
    // New standalone function:
    runInInjectionContext(envInjector, fn);
    
  • The @Directive/@Component moduleId property is now deprecated. It did not have any effect for multiple major versions and will be removed in v17.

platform-browser

  • BrowserModule.withServerTransition has been deprecated. APP_ID should be used instead to set the application ID. NB: Unless, you render multiple Angular applications on the same page, setting an application ID is not necessary.

    Before:

    imports: [
      BrowserModule.withServerTransition({ appId: 'serverApp' }),
      ...
    ]
    

    After:

    imports: [
      BrowserModule,
      { provide: APP_ID, useValue: 'serverApp' },
      ...
    ],
    
  • ApplicationConfig has moved, please import ApplicationConfig from @angular/core instead.

platform-server

  • PlatformConfig.baseUrl and PlatformConfig.useAbsoluteUrl platform-server config options are deprecated as these were not used.

CommitTypeDescription
48aa96ea13refactorremove Angular Compatibility Compiler (ngcc) (#49101)
2703fd6260refactorremove deprecated EventManager method addGlobalEventListener (#49645)

common

CommitTypeDescription
5dce2a5a3afeatProvide MockPlatformLocation by default in BrowserTestingModule (#49137)
d47fef72cbfixstrict type checking for ngtemplateoutlet (#48374)
c41a21658crefactorremove deprecated XhrFactory export from http entrypoint (#49251)

compiler

CommitTypeDescription
1a6ca68154featadd support for compile-time required inputs (#49304)
13dd614cd1featadd support for compile-time required inputs (#49453)
8f539c11f4featadd support for compile-time required inputs (#49468)
79cdfeb392featdrop support for TypeScript 4.8 (#49155)
1407a9aeaffeatsupport multiple configuration files in extends (#49125)
9de1e9da8ffixincorrectly matching directives on attribute bindings (#49713)
6623810e4dfixProduce diagnositc if directive used in host binding is not exported (#49527)

compiler-cli

CommitTypeDescription
03d1d00ad9featAdd an extended diagnostic for nSkipHydration (#49512)
ed817e32fefixCatch FatalDiagnosticError during template type checking (#49527)
49fe974501perfoptimize NgModule emit for standalone components (#49837)

core

CommitTypeDescription
89d291c367featadd assertInInjectionContext (#49529)
4e9531f777featadd mergeApplicationConfig method (#49253)
d7d6514addfeatAdd ability to configure NgZone in bootstrapApplication (#49557)
bc5ddabdcbfeatadd Angular Signals to the public API (#49150)
17e9862653featadd API to provide CSP nonce for inline stylesheets (#49444)
605c536420featadd migration to remove moduleId references (#49496)
99d874fe3bfeatadd support for TypeScript 5.0 (#49126)
d1617c449dfeatallow removal of previously registered DestroyRef callbacks (#49493)
b2327f4df1featAllow typeguards on QueryList.filter (#48042)
061f3d1086featDrop public factories property for IterableDiffers : Breaking change (#49598)
fdf61974d1featdrop support for zone.js versions <=0.12.0 (#49331)
9c5fd50de4feateffects can optionally return a cleanup function (#49625)
c024574f46featexpose makeStateKey, StateKey and TransferState (#49563)
a5f1737d1cfeatexpose onDestroy on ApplicationRef (#49677)
e883198460featimplement takeUntilDestroyed in rxjs-interop (#49154)
0814f20594featintroduce runInInjectionContext and deprecate prior version (#49396)
0f5c8003ccfeatintroduce concept of DestroyRef (#49158)
9b65b84cb9featMark components for check if they read a signal (#49153)
8997bdc03bfeatprototype implementation of @angular/core/rxjs-interop (#49154)
585e34bf6cfeatremove entryComponents (#49484)
aad05ebeb4featsupport usage of non-experimental decorators with TypeScript 5.0 (#49492)
6d7be42da7fixadd newline to hydration mismatch error (#49965)
f8e25864e8fixallow async functions in effects (#49783)
84216dabfcfixcatch errors from source signals outside of .next (#49769)
be23b7ce65fixComponentRef.setInput only sets input when not equal to previous (#49607)
316c91b1a4fixdeprecate moduleId @Component property (#49496)
fd9dcd36cdfixEnsure effects can be created when Zone is not defined (#49890)
9180f98f0efixensure takeUntilDestroyed unregisters onDestroy listener on unsubscribe (#49901)
4721c48a24fixerror if document body is null (#49818)
2650f1afc1fixexecute input setters in non-reactive context (#49906)
f8b95b9da6fixexecute query setters in non-reactive context (#49906)
ef91a2e0fefixexecute template creation in non-reactive context (#49883)
87549af73cfixFix capitalization of toObservableOptions (#49832)
0e5f9ba6f4fixgenerate consistent component IDs (#48253)
fedc75624cfixinclude inner ViewContainerRef anchor nodes into ViewRef.rootNodes output (#49867)
df1dfc4c17fixmake sure that lifecycle hooks are not tracked (#49701)
c34d7e0822fixonDestroy should be registered only on valid DestroyRef (#49804)
2f2ef14f9efixresolve InitialRenderPendingTasks promise on complete (#49784)
c7d8d3ee37fixtoObservable should allow writes to signals in the effect (#49769)
b4531f1d82fixtyping of TestBed Common token. (#49997)
a4e749ffcafixWhen using setInput, mark view dirty in same was as markForCheck (#49711)
9b9c818f99perfchange RendererType2.styles to accept a only a flat array (#49072)
82d6fbb109refactorgenerate a static application ID (#49422)
3b863ddc1erefactorRemove ReflectiveInjector symbol (#48103)
f594725951refactorremove Node.js v14 support (#49255)

forms

CommitTypeDescription
07a1aa3004featImprove typings form (async)Validators (#48679)

http

CommitTypeDescription
aff1512950featallow HttpClient to cache requests (#49509)
15c91a53aefixdelay accessing pendingTasks.whenAllTasksComplete (#49784)
9f0c6d1ed1fixensure new cache state is returned on each request (#49749)
45a6ac09fdfixforce macro task creation during HTTP request (#49546)
2a580b6f0bfixHTTP cache was being disabled prematurely (#49826)
2eb9b8b402fixwait for all XHR requests to finish before stabilizing application (#49776)

migrations

CommitTypeDescription
5e5dac278dfeatMigration to remove Router guard and resolver interfaces (#49337)

platform-browser

CommitTypeDescription
761e02d912featadd a public API function to enable non-destructive hydration (#49666)
630af63faefeatdeprecate withServerTransition call (#49422)
81e7d15ef6featenable HTTP request caching when using provideClientHydration (#49699)
74c925c19cfixexport deprecated TransferState as type (#50015)
2312eb53effixKeyEventsPlugin should keep the same behavior (#49330)
c934a8e72bfixonly add ng-app-id to style on server side (#49465)
9165ff2517fixreuse server generated component styles (#48253)
e8e36811d5fixset nonce attribute in a platform compatible way (#49624)
3aa85a8087refactormove ApplicationConfig to core (#49253)
9bd9a11f4erefactorremove deprecated BrowserTransferStateModule symbol (#49718)

platform-server

CommitTypeDescription
b5278cc115featrenderApplication now accepts a bootstrapping method (#49248)
056d68002ffeatadd provideServerSupport function to provide server capabilities to an application (#49380)
7870fb07fefeatrename provideServerSupport to provideServerRendering (#49678)
a08a8ff108fixbundle @angular/domino in via esbuild (#49229)
5ea624f313fixremove dependency on @angular/platform-browser-dynamic (#50064)
e99460865erefactordeprecate useAbsoluteUrl and baseUrl (#49546)
41f27ad086refactorremove renderApplication overload that accepts a component (#49463)
17abe6dc96refactorremove deprecated renderModuleFactory (#49247)

router

CommitTypeDescription
ea32c3289afeatExpose information about the last successful Navigation (#49235)
455c728525feathelper functions to convert class guards to functional (#48709)
f982a3f965featOpt-in for binding Router information to component inputs (#49633)
1f055b90b6fixEnsure anchor scrolling happens on ignored same URL navigations (#48025)
6193a3d406fixfix = not parsed in router segment name (#47332)
c0b1b7becffixRemove deprecated ComponentFactoryResolver from APIs (#49239)
1e32709e0efixremove RouterEvent from Event union type (#46061)
3c7e637374fixRoute matching should only happen once when navigating (#49163)
1600687fe5fixRoute matching should only happen once when navigating (#49163)
31f210bf2cfixRouter.createUrlTree should work with any ActivatedRoute (#48508)

service-worker

CommitTypeDescription
5e7fc259eafeatadd function to provide service worker (#48247)

15.2.9 (2023-05-03)

common

CommitTypeDescription
9107e931cafixfix incorrectly reported distortion for padded images (#49889)

compiler-cli

CommitTypeDescription
7c58885797fixcatch fatal diagnostic when getting diagnostics for components (#50046)

15.2.8 (2023-04-19)

core

CommitTypeDescription
2fff8fadbefixhandle invalid classes in class array bindings (#49924)

http

CommitTypeDescription
05a0225debfixprevent headers from throwing an error when initializing numerical values (#49379)

router

CommitTypeDescription
09a42d988efixcanceledNavigationResolution: 'computed' with redirects to the current URL (#49793)

15.2.7 (2023-04-12)

compiler

CommitTypeDescription
b0c1a90f55fixProduce diagnositc if directive used in host binding is not exported (#49792)

compiler-cli

CommitTypeDescription
a40529af2efixCatch FatalDiagnosticError during template type checking (#49792)

core

CommitTypeDescription
702ec90110fixWhen using setInput, mark view dirty in same way as markForCheck (#49747)

Special Thanks

Alan Agius, Andrew Kushnir, Andrew Scott, Kristiyan Kostadinov, Matthieu Riegler and Nikola Kološnjaji

13.4.0 (2023-04-06)

common

CommitTypeDescription
ae34dbca1bfeatBackport NgOptimizedImage to v13

Special Thanks

Alex Castle and Paul Gschwendtner

15.2.6 (2023-04-05)

core

CommitTypeDescription
d9efa1b0d7featchange the URL sanitization to only block javascript: URLs (#49659)

router

CommitTypeDescription
cad7274ef9fixcreate correct URL relative to path with empty child (#49691)
9b61379096fixEnsure initial navigation clears current navigation when blocking (#49572)

Special Thanks

Andrew Scott, Guillaume Weghsteen, John Manners, Johnny Gérard, Matthieu Riegler, Robin Richtsfeld, Sandra Limacher, Sarthak Thakkar, Vinit Neogi and vikram menon

15.2.5 (2023-03-29)

common

CommitTypeDescription
ca5acadb78fixinvalid ImageKit transformation (#49201)

compiler

CommitTypeDescription
077f6b4674fixdo not unquote CSS values (#49460)
c3cff35869fixhandle trailing comma in object literal (#49535)

core

CommitTypeDescription
d201fc2decfixset style property value to empty string instead of an invalid value (#49460)

router

CommitTypeDescription
978d37f324fixEnsure Router preloading works with lazy component and static children (#49571)
a844435514fixfix #49457 outlet activating with old info (#49459)

Special Thanks

Alan Agius, Andrew Scott, Asaf Malin, Jan Cabadaj, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Sid and Tano Abeleyra

15.2.4 (2023-03-22)

core

CommitTypeDescription
bae6b5ceb1fixAllow TestBed.configureTestingModule to work with recursive cycle of standalone components. (#49473)
087f4412affixmore accurate matching of classes during content projection (#48888)

Special Thanks

Aditya Srinivasan, Alex Rickabaugh, Andrew Scott, Kristiyan Kostadinov, Masaoki Kobayashi, Matthieu Riegler, Paul Gschwendtner, Peter Götz, Thomas Pischke, Virginia Dooley and avmaxim

15.2.3 (2023-03-16)

Special Thanks

Alan Agius, Esteban Gehring, Matthieu Riegler and Virginia Dooley

14.3.0 (2023-03-13)

common

CommitTypeDescription
37bbc61cfefeatBackport NgOptimizedImage to Angular 14.

Special Thanks

Alex Castle, Joey Perrott and Paul Gschwendtner

15.2.2 (2023-03-08)

migrations

CommitTypeDescription
6207d6f1f0fixadd protractor support if protractor imports are detected (#49274)

Special Thanks

Alan Agius, Andrew Kushnir, Andrew Scott, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Sai Kartheek Bommisetty and Vinit Neogi

15.2.1 (2023-03-01)

common

CommitTypeDescription
f0e926074dfixmake Location.normalize() return the correct path when the base path contains characters that interfere with regex syntax. (#49181)

compiler-cli

CommitTypeDescription
04d8b6c61afixdo not persist component analysis if template/styles are missing (#49184)

core

CommitTypeDescription
d60ea6ab5afixupdate zone.js peerDependencies ranges (#49244)

migrations

CommitTypeDescription
44d095a61cfixavoid migrating the same class multiple times in standalone migration (#49245)
92b0bda9e4fixdelete barrel exports in standalone migration (#49176)

router

CommitTypeDescription
3062442728fixadd error message when using loadComponent with a NgModule (#49164)

Special Thanks

Alan Agius, Andrew Kushnir, Aristeidis Bampakos, Craig Spence, Doug Parker, Iván Navarro, Joey Perrott, Kristiyan Kostadinov, Matthieu Riegler, Michael Ziluck, Paul Gschwendtner, Stephanie Tuerk, Vincent and Virginia Dooley

15.2.0 (2023-02-22)

Deprecations

  • Class and InjectionToken guards and resolvers are deprecated. Instead, write guards as plain JavaScript functions and inject dependencies with inject from @angular/core.

CommitTypeDescription
926c35f4acdocsDeprecate class and InjectionToken and resolvers (#47924)

common

CommitTypeDescription
54b24eb40ffeatAdd loaderParams attribute to NgOptimizedImage (#48907)

compiler-cli

CommitTypeDescription
0cf11167f1fixincorrectly detecting forward refs when symbol already exists in file (#48988)

core

CommitTypeDescription
a154db8a81featadd ng generate schematic to convert declarations to standalone (#48790)
345e737daafeatadd ng generate schematic to convert to standalone bootstrapping APIs (#48848)
e7318fc758featadd ng generate schematic to remove unnecessary modules (#48832)

language-service

CommitTypeDescription
4ae384fd61featAllow auto-imports of a pipe via quick fix when its selector is used, both directly and via reexports. (#48354)
141333411efeatIntroduce a new NgModuleIndex, and use it to suggest re-exports. (#48354)
d0145033bdfixgenerate forwardRef for same file imports (#48898)

migrations

CommitTypeDescription
2796230e95fixadd enum in mode option in standalone schema (#48851)
816e76a578fixautomatically prune root module after bootstrap step (#49030)
bdbf21d04bfixavoid generating imports with forward slashes (#48993)
32cf4e5cb9fixavoid internal modules when generating imports (#48958)
521ccfbe6cfixavoid interrupting the migration if language service lookup fails (#49010)
a40cd47aa7fixavoid modifying testing modules without declarations (#48921)
1afa6ed322fixdon't add ModuleWithProviders to standalone test components (#48987)
c98c6a8452fixdon't copy animations modules into the imports of test components (#49147)
8389557848fixdon't copy unmigrated declarations into imports array (#48882)
f82bdc4b01fixdon't delete classes that may provide dependencies transitively (#48866)
759db12e0bfixduplicated comments on migrated classes (#48966)
ba38178d19fixgenerate forwardRef for same file imports (#48898)
03fcb36cfdfixmigrate HttpClientModule to provideHttpClient() (#48949)
2de6dae16dfixmigrate RouterModule.forRoot with a config object to use features (#48935)
770191cf1ffixmigrate tests when switching to standalone bootstrap API (#48987)
c7926b5773fixmove standalone migrations into imports (#48987)
65c74ed93efixnormalize paths to posix (#48850)
6377487b1afixonly exclude bootstrapped declarations from initial standalone migration (#48987)
e9e4449a43fixpreserve tsconfig in standalone migration (#48987)
ffad1b49d9fixreduce number of files that need to be checked (#48987)
ba7a757cc5fixreturn correct alias when conflicting import exists (#49139)
49a7c9f94afixstandalone migration incorrectly throwing path error for multi app projects (#48958)
584976e6c8fixsupport --defaults in standalone migration (#48921)
03f47ac901fixuse consistent quotes in generated imports (#48876)
ebae506d89fixuse import remapper in root component (#49046)
40c976c909fixuse NgForOf instead of NgFor (#49022)
4ac25b2affperfavoid re-traversing nodes when resolving bootstrap call dependencies (#49010)
26cb7ab2e6perfspeed up language service lookups (#49010)

platform-browser

CommitTypeDescription
bf4ad38117fixremove styles from DOM of destroyed components (#48298)

platform-server

CommitTypeDescription
25e220a23afixavoid duplicate TransferState info after renderApplication call (#49094)

router

CommitTypeDescription
31b94c762ffeatAdd a withNavigationErrorHandler feature to provideRouter (#48551)
dedac8d3f7featAdd test helper for trigger navigations in tests (#48552)

Special Thanks

Alan Agius, Alex Castle, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Dylan Hunn, Ikko Eltociear Ashimine, Ilyass, Jessica Janiuk, Joey Perrott, John Manners, Kalbarczyk, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Virginia Dooley, Walid Bouguima, cexbrayat and mgechev

15.1.5 (2023-02-15)

forms

CommitTypeDescription
5f2a3edcf2fixMake radio buttons respect [attr.disabled] (#48864)

Special Thanks

AleksanderBodurri, Alvaro Junqueira, Dylan Hunn, Joey Perrott, Matthieu Riegler, PaloMiklo and Paul Gschwendtner

15.1.4 (2023-02-08)

Special Thanks

Jessica Janiuk, Kian Yang Lee, Matthieu Riegler, Redouane Bekkouche and Simona Cotin

15.1.3 (2023-02-02)

animations

CommitTypeDescription
d36dfd4b62fixfix non-animatable warnings for easing (#48583)

common

CommitTypeDescription
a334e4efbefixwarn if using ngSrcset without a configured image loader (#48804)

compiler

CommitTypeDescription
171b4d4640fixincorrect code when non-null assertion is used after a safe access (#48801)

migrations

CommitTypeDescription
9e86dd231bfixFixed file format issue with lint (#48859)
af31f98b00fixmigration host incorrectly reading empty files (#48849)

platform-server

CommitTypeDescription
73972c684efixinsert transfer state script before other script tags (#48868)

router

CommitTypeDescription
d5b2c249a3fixHandle routerLink directive on svg anchors. (#48857)

Special Thanks

Alan Agius, Besim Gürbüz, Brecht Billiet, Dario Piotrowicz, Dylan Hunn, Iván Navarro, Jessica Janiuk, Kristiyan Kostadinov, Matthieu Riegler, Onkar Ruikar, Payam Valadkhan, Santosh Yadav, Virginia Dooley and Walid Bouguima

15.1.2 (2023-01-25)

compiler

CommitTypeDescription
98ccb57117fixhandle css selectors with space after an escaped character. (#48558)

compiler-cli

CommitTypeDescription
145f848a10fixresolve deprecation warning (#48812)

router

CommitTypeDescription
a6b10f6e59fix'createUrlTreeFromSnapshot' with empty paths and named outlets (#48734)

Special Thanks

Alan Agius, AleksanderBodurri, Andrew Kushnir, Andrew Scott, Charles Lyding, Dylan Hunn, JoostK, Matthieu Riegler, Paul Gschwendtner, Payam Valadkhan, Virginia Dooley, Yann Thomas LE MOIGNE and dario-piotrowicz

15.1.1 (2023-01-18)

common

CommitTypeDescription
68ce4f6ab4fixUpdate Location to get a normalized URL valid in case a represented URL starts with the substring equals APP_BASE_HREF (#48489)
032b2bd689perfavoid excessive DOM mutation in NgClass (#48433)

core

CommitTypeDescription
dd54f6bd96fixmakeEnvironmentProviders should accept EnvironmentProviders (#48720)

Special Thanks

Alan Agius, Alex Rickabaugh, Andrew Scott, Aristeidis Bampakos, Bob Watson, Jens, Konstantin Kharitonov, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Vladyslav Slipchenko, ced, dario-piotrowicz, mgechev and ノウラ

15.1.0 (2023-01-10)

Deprecations

router

  • CanLoad guards in the Router are deprecated. Use CanMatch instead.

  • router writable properties

    The following strategies are meant to be configured by registering the application strategy in DI via the providers in the root NgModule or bootstrapApplication:

    • routeReuseStrategy
    • titleStrategy
    • urlHandlingStrategy

    The following options are meant to be configured using the options available in RouterModule.forRoot or provideRouter.

    • onSameUrlNavigation
    • paramsInheritanceStrategy
    • urlUpdateStrategy
    • canceledNavigationResolution

    The following options are available in RouterModule.forRoot but not available in provideRouter:

    • malformedUriErrorHandler - This was found to not be used anywhere internally.
    • errorHandler - Developers can instead subscribe to Router.events and filter for NavigationError.

common

CommitTypeDescription
fe50813664featAdd BrowserPlatformLocation to the public API (#48488)
2f4f0638c7fixAdd data attribtue to NgOptimizedImage (#48497)

compiler

CommitTypeDescription
a532d71975featallow self-closing tags on custom elements (#48535)
caf7228f8afixresolve deprecation warning (#48652)
33f35b04effixtype-only symbols incorrectly retained when downlevelling custom decorators (#48638)

compiler-cli

CommitTypeDescription
caedef0f5bfixupdate @babel/core dependency and lock version (#48634)

core

CommitTypeDescription
6acae1477afeatAdd TestBed.runInInjectionContext to help test functions which use inject (#47955)
38421578a2featMake the isStandalone() function available in public API (#48114)
dd42974b07featsupport TypeScript 4.9 (#48005)

forms

CommitTypeDescription
8aa8b4b77cfixForm provider FormsModule.withConfig return a FormsModule (#48526)

language-service

CommitTypeDescription
5f0b53c735featAllow auto-imports to suggest multiple possible imports. (#47787)
6a8ea29a04fixexpose package.json for vscode extension resolution (#48678)
ce8160ecb2fixPrevent crashes on unemitable references (#47938)
e615b598bafixship /api entry-point (#48670)
6ce7d76a0efixupdate packages/language-service/build.sh script to work with vscode-ng-language-service's new Bazel build (#48663)

localize

CommitTypeDescription
a1a8e91ecafixadd triple slash type reference on @angular/localize on `ng add (#48502)

migrations

CommitTypeDescription
cc284afbbcfixcombine newly-added imports in import manager (#48620)

router

CommitTypeDescription
228e992db7docsDeprecate canLoad guards in favor of canMatch (#48180)
0a8b8a66cddocsDeprecate public members of Router that are meant to be configured elsewhere (#48006)
332461bd0cfeatAdd ability to override onSameUrlNavigation default per-navigation (#48050)
f58ad86e51featAdd feature provider for enabling hash navigation (#48301)
73f03ad2d2featAdd new NavigationSkipped event for ignored navigations (#48024)
3fe75710d9fixpage refresh should not destroy history state (#48540)

Special Thanks

Alan Agius, Alex Castle, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Bob Watson, Charles Lyding, Derek Cormier, Doug Parker, Dylan Hunn, George Kalpakas, Greg Magolan, Jessica Janiuk, JiaLiPassion, Joey Perrott, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Renan Ferro, Tim Gates, Vadim, Virginia Dooley, ced, mgechev, piyush132000, robertIsaac and sr5434

15.0.4 (2022-12-14)

animations

CommitTypeDescription
6c1064c72ffixfix incorrect handling of camel-case css properties (#48436)

common

CommitTypeDescription
f30d18a942fixFix TestBed.overrideProvider type to include multi (#48424)

compiler-cli

CommitTypeDescription
b55d2dab5dfixevaluate const tuple types statically (#48091)

Special Thanks

Alan Agius, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, BrowserPerson, Jens, Jessica Janiuk, Joey Perrott, JoostK, Konstantin Kharitonov, Lukas Matta, Piotr Kowalski, Virginia Dooley, Yannick Baron, dario-piotrowicz, lsst25, piyush132000 and why520crazy

15.0.3 (2022-12-07)

common

CommitTypeDescription
50b1c2bf52fixDon't generate srcsets with very large sources (#47997)
bf44dc234afixUpdate Location to support base href containing origin (#48327)

compiler

CommitTypeDescription
9a5d84249afixmake sure selectors inside container queries are correctly scoped (#48353)

compiler-cli

CommitTypeDescription
167bc0d163fixProduce diagnostic rather than crash when using invalid hostDirective (#48314)

core

CommitTypeDescription
e4dcaa513efixunable to inject ChangeDetectorRef inside host directives (#48355)

Special Thanks

Alan Agius, Alex Castle, Andrew Kushnir, Andrew Scott, Bob Watson, Derek Cormier, Joey Perrott, Konstantin Kharitonov, Kristiyan Kostadinov, Paul Gschwendtner, Pawel Kozlowski, dario-piotrowicz and piyush132000

15.0.2 (2022-11-30)

compiler-cli

CommitTypeDescription
86a21f5569fixaccept inheriting the constructor from a class in a library (#48156)

Special Thanks

Alan Agius, Andrew Scott, Aristeidis Bampakos, Bob Watson, Derek Cormier, JoostK, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Rokas Brazdžionis, mgechev and piyush132000

15.0.1 (2022-11-22)

common

CommitTypeDescription
930af9dd26fixFix MockPlatformLocation events and missing onPopState implementation (#48113)

forms

CommitTypeDescription
b342e55509fixdon't mutate validators array (#47830)
a12a120272fixFormBuilder.group return right type with shorthand parameters. (#48084)

language-service

CommitTypeDescription
cc8b76ef7cfixcorrectly handle host directive inputs/outputs (#48147)
a8c33bf931fixupdate packages/language-service/build.sh script to work with vscode-ng-language-service's new Bazel build (#48120)

router

CommitTypeDescription
e4309d57d8fixcorrect type of nextState parameter in canDeactivate (#48038)
9baefd085ffixEnsure renavigating in component init works with enabledBlocking (#48063)
fa5528fb5ffixrestore 'history.state' on popstate even if navigationId missing (#48033)

Special Thanks

Alan Agius, Andrew Scott, Bjarki, Bob Watson, Brooke, Derek Cormier, Dylan Hunn, George Kalpakas, Greg Magolan, Ikko Ashimine, Ivan Rodriguez, Jessica Janiuk, Joe Roxbury, Joey Perrott, Kristiyan Kostadinov, Matthieu Riegler, Mikhail Savchuk, Nebojsa Cvetkovic, Pawel Kozlowski, Volodymyr and Wooshaah

12.2.17 (2022-11-22)

Breaking Changes

core

  • Existing iframe usages may have security-sensitive attributes applied as an attribute or property binding in a template or via host bindings in a directive. Such usages would require an update to ensure compliance with the new stricter rules around iframe bindings.

core

CommitTypeDescription
b871db57dafixhardening attribute and property binding rules for )

Special Thanks

Andrew Kushnir, Andrew Scott, George Looshch, Joey Perrott and Paul Gschwendtner

13.3.12 (2022-11-21)

Breaking Changes

core

  • Existing iframe usages may have security-sensitive attributes applied as an attribute or property binding in a template or via host bindings in a directive. Such usages would require an update to ensure compliance with the new stricter rules around iframe bindings.

core

CommitTypeDescription
b1d7b79ff4fixhardening attribute and property binding rules for )

Special Thanks

Andrew Kushnir, Andrew Scott, George Looshch, Joey Perrott and Paul Gschwendtner

14.2.12 (2022-11-21)

Breaking Changes

core

  • Existing iframe usages may have security-sensitive attributes applied as an attribute or property binding in a template or via host bindings in a directive. Such usages would require an update to ensure compliance with the new stricter rules around iframe bindings.

core

CommitTypeDescription
54814c8e9bfixhardening attribute and property binding rules for )

Special Thanks

Andrew Kushnir

15.0.0 (2022-11-16)

Blog post "Angular v15 is now available".

Breaking Changes

compiler

  • Keyframes names are now prefixed with the component's "scope name". For example, the following keyframes rule in a component definition, whose "scope name" is host-my-cmp:

    @keyframes foo { ... }

    will become:

    @keyframes host-my-cmp_foo { ... }

    Any TypeScript/JavaScript code which relied on the names of keyframes rules will no longer match.

    The recommended solutions in this case are to either:

    • change the component's view encapsulation to the None or ShadowDom
    • define keyframes rules in global stylesheets (e.g styles.css)
    • define keyframes rules programmatically in code.

compiler-cli

  • Invalid constructors for DI may now report compilation errors

    When a class inherits its constructor from a base class, the compiler may now report an error when that constructor cannot be used for DI purposes. This may either be because the base class is missing an Angular decorator such as @Injectable() or @Directive(), or because the constructor contains parameters which do not have an associated token (such as primitive types like string). These situations used to behave unexpectedly at runtime, where the class may be constructed without any of its constructor parameters, so this is now reported as an error during compilation.

    Any new errors that may be reported because of this change can be resolved either by decorating the base class from which the constructor is inherited, or by adding an explicit constructor to the class for which the error is reported.

  • Angular compiler option enableIvy has been removed as Ivy is the only rendering engine.

core

  • Angular no longer supports Node.js versions 14.[15-19].x and 16.[10-12].x. Current supported versions of Node.js are 14.20.x, 16.13.x and 18.10.x.
  • TypeScript versions older than 4.8 are no longer supported.
  • Existing iframe usages may have security-sensitive attributes applied as an attribute or property binding in a template or via host bindings in a directive. Such usages would require an update to ensure compliance with the new stricter rules around iframe bindings.
  • Existing iframe usages may have src or srcdoc preceding other attributes. Such usages may need to be updated to ensure compliance with the new stricter rules around iframe bindings.

forms

  • setDisabledState will always be called when a ControlValueAccessor is attached. You can opt-out with FormsModule.withConfig or ReactiveFormsModule.withConfig.

localize

    • canParse method has been removed from all translation parsers in @angular/localize/tools. analyze should be used instead.
    • the hint parameter in theparse methods is now mandatory.

router

  • Previously, the RouterOutlet would immediately instantiate the component being activated during navigation. Now the component is not instantiated until the change detection runs. This could affect tests which do not trigger change detection after a router navigation. In rarer cases, this can affect production code that relies on the exact timing of component availability.
  • The title property is now required on ActivatedRouteSnapshot
  • relativeLinkResolution is no longer configurable in the Router. This option was used as a means to opt out of a bug fix.

Deprecations

common

  • The DATE_PIPE_DEFAULT_TIMEZONE token is now deprecated in favor of the DATE_PIPE_DEFAULT_OPTIONS token, which accepts an object as a value and the timezone can be defined as a field (called timezone) on that object.

core

    • The ability to pass an NgModule to the providedIn option for @Injectable and InjectionToken is now deprecated.

    providedIn: NgModule was intended to be a tree-shakable alternative to NgModule providers. It does not have wide usage, and in most cases is used incorrectly, in circumstances where providedIn: 'root' should be preferred. If providers should truly be scoped to a specific NgModule, use NgModule.providers instead.

    • The ability to set providedIn: 'any' for an @Injectable or InjectionToken is now deprecated.

    providedIn: 'any' is an option with confusing semantics and is almost never used apart from a handful of esoteric cases internal to the framework.

  • The bit field signature of Injector.get() has been deprecated, in favor of the new options object.

  • The bit field signature of TestBed.inject() has been deprecated, in favor of the new options object.

router

  • The RouterLinkWithHref directive is deprecated, use the RouterLink directive instead. The RouterLink contains the code from the RouterLinkWithHref to handle elements with href attributes.

common

CommitTypeDescription
c0c7efaf7cfeatadd provideLocationMocks() function to provide Location mocks (#47674)
75e6297f09featadd preload tag on server for priority img (#47343)
4fde292bb5featAdd automatic srcset generation to ngOptimizedImage (#47547)
9483343ebffeatAdd fill mode to NgOptimizedImage (#47738)
bdb5371033featadd injection token for default DatePipe configuration (#47157)
449d29b701fixAdd fetchpriority to ngOptimizedImage preloads (#48010)
4f52d4e474fixdon't generate srcset if noopImageLoader is used (#47804)
3a18398d83fixDon't warn about image distortion is fill mode is enabled (#47824)
edea15f2c6fixexport the IMAGE_CONFIG token (#48051)
8abf1c844cfixfix formatting on oversized image error (#47188)
ca7bf65933fixrename rawSrc -> ngSrc in NgOptimizedImage directive (#47362)
b3879dbf14fixsupport density descriptors with 2+ decimals (#47197)
fa4798095efixupdate size error to mention 'fill' mode (#47797)
23f210c0abfixwarn if using supported CDN but not built-in loader (#47330)
945432e3fafixWarn on fill ngOptimizedImage without height (#48036)

compiler

CommitTypeDescription
051f75648dfixscope css keyframes in emulated view encapsulation (#42608)
39b72e208bfixupdate element schema (#47552)
48b354a83efixupdate element schema (#47552)

compiler-cli

CommitTypeDescription
bc54687c7bfixexclude abstract classes from strictInjectionParameters requirement (#44615)
309b2cde51fiximplement more host directive validations as diagnostics (#47768)
2e1dddec45fixsupport hasInvalidatedResolutions. (#47585)
19ad4987f9fixuse @ts-ignore. (#47636)
8fcadaad48perfcache source file for reporting type-checking diagnostics (#47471)
16f96eeabfrefactorremove enableIvy options (#47346)

core

CommitTypeDescription
e3cef4a784docsdeprecate providedIn: NgModule and providedIn: 'any' (#47616)
1b9fd46d14featadd support for Node.js version 18 (#47730)
ed11a13c3cfeatdrop support for TypeScript 4.6 and 4.7 (#47690)
db28badfe6featenable the new directive composition API (#47642)
7de1469be6featintroduce EnvironmentProviders wrapper type (#47669)
841c8e5138featsupport object-based DI flags in Injector.get() (#46761)
120555a626featsupport object-based DI flags in TestBed.inject() (#46761)
96c0e42e61fixallow readonly arrays for standalone imports (#47851)
28f289b825fixhardening attribute and property binding rules for )
d4b3c0b47cfixhardening rules related to the attribute order on iframe elements (#47935)
85330f3fd9fixupdate isDevMode to rely on ngDevMode (#47475)

forms

CommitTypeDescription
a8569e3802featexport forms utility functions: isFormArray, isFormGroup… (#47718)
96b7fe93affixcall setDisabledState on ControlValueAcessor when control is enabled (#47576)
a99d9d67f3fixdon't mutate validators array (#47830)
2625dc1312fixImprove a very commonly viewed error message by adding a guide. (#47969)
ae29f98c20fixRuntime error pages must begin with leading zero (#47991)

http

CommitTypeDescription
3ba99e286afeatallow for child HttpClients to request via parents (#47502)
84d0d33c35featintroduce provideHttpClientTesting provider function (#47502)
62c7a7a16efeatintroduce functional interceptors (#47502)
e47b129070featintroduce the provideHttpClient() API (#47502)
ea16a98dfefixbetter handle unexpected undefined XSRF tokens (#47683)
e7b48da713fixrename withLegacyInterceptors to withInterceptorsFromDi (#47901)

language-service

CommitTypeDescription
bebef5fb43featQuick fix to import a component when its selector is used (#47088)
e7ee53c541featsupport to fix invalid banana in box (#47393)

localize

CommitTypeDescription
400a6b5e37fixadd polyfill in polyfills array instead of polyfills.ts (#47569)
b6fd814542fixupdate ng add schematic to support Angular CLI version 15 (#47763)
d36fd3d9e4refactorremove deprecated canParse method from TranslationParsers (#47275)

platform-server

CommitTypeDescription
2908eba59cfixalign server renderer interface with base renderer (#47868)

router

CommitTypeDescription
7bee28d037featadd a migration to remove relativeLinkResolution usages (#47604)
5163e3d876featAdd UrlTree constructor to public API (#47186)
da58801f95featauto-unwrap default exports when lazy loading (#47586)
c3f857975dfeatmake RouterOutlet name an Input so it can be set dynamically (#46569)
f73ef21442featmerge RouterLinkWithHref into RouterLink (#47630)
16c8f55663featmigrate RouterLinkWithHref references to RouterLink (#47599)
07017a7bd3featprevent provideRouter() from usage in @Component (#47669)
79e9e8ab77fixDelay router scroll event until navigated components have rendered (#47563)
6a88bad019fixEnsure ActivatedRouteSnapshot#title has correct value (#47481)
7b89d95c0efixRemove deprecated relativeLinkResolution (#47623)

Special Thanks

Alan Agius, AleksanderBodurri, Alex Castle, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Charles Lyding, Dylan Hunn, Ferdinand Malcher, George Kalpakas, Jeremy Elbourn, Jessica Janiuk, JiaLiPassion, Joey Perrott, JoostK, Kara Erickson, Kristiyan Kostadinov, Martin Probst, Matthias Weiß, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Sabareesh Kappagantu, WD Snoeijer, angular-robot[bot], arturovt, ced, dario-piotrowicz, ivanwonder and jaybell

14.2.11 (2022-11-16)

router

CommitTypeDescription
aef353c143fixEnsure renavigating in component init works with enabledBlocking (#48066)

Special Thanks

Alan Agius, Andrew Scott and Mujo Osmanovic

14.2.10 (2022-11-09)

core

CommitTypeDescription
a4312e1be5fixadd zone.js version 0.12.x as a valid peer dependency (#48002)

router

CommitTypeDescription
db867fee77fixfix redirectTo on named outlets - resolves #33783 (#47927)

Special Thanks

Alan Agius, Albert Szekely, Andrew Scott, Doug Parker, Kristiyan Kostadinov, Markus Eckstein, Peter Scriven and abergquist

14.2.9 (2022-11-03)

platform-browser

CommitTypeDescription
92d28bdd99perfresolve memory leak when using animations with shadow DOM (#47903)

platform-server

CommitTypeDescription
d2d9bbf5cefixcall onSerialize when state is empty (#47888)

Special Thanks

Alan Agius, Kristiyan Kostadinov, Virginia Dooley and mgechev

14.2.8 (2022-10-26)

Special Thanks

Andrew Scott, Balaji, Paul Gschwendtner, WD Snoeijer, onrails and vyom1611

14.2.7 (2022-10-19)

Special Thanks

Bob Watson, Charles Barnes, Joey Perrott, Virginia Dooley, WD Snoeijer, abergquist and urugator

14.2.6 (2022-10-12)

compiler-cli

CommitTypeDescription
3fd176a905fixadd missing period to error message (#47744)
c3821f5ab5perfminimize filesystem calls when generating shims (#47682)

Special Thanks

Alan Agius, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, Charles Lyding, Joey Perrott, Joshua Morony, Mathew Berg, Paul Gschwendtner, Peter Dickten, Renan Ferro, Sri Ram, WD Snoeijer, markostanimirovic and Álvaro Martínez

14.2.5 (2022-10-05)

This release contains various API docs improvements.

Special Thanks

Alexander Wiebe, Ciprian Sauliuc, Dmytro Mezhenskyi, George Kalpakas, Joe Martin (Crowdstaffing), Jordan, Ole M, Paul Gschwendtner, Pawel Kozlowski and mgechev

14.2.4 (2022-09-28)

compiler-cli

CommitTypeDescription
a4b66fe1e5perfcache source file for reporting type-checking diagnostics (#47508)

core

CommitTypeDescription
2c46b5ab24fixcorrectly check for typeof of undefined in ngDevMode check (#47480)

Special Thanks

Alan Agius, Ashley Hunter, Doug Parker, Jessica Janiuk, JoostK, Kristiyan Kostadinov, Rokas Brazdžionis and Simona Cotin

14.2.3 (2022-09-21)

animations

CommitTypeDescription
bba2dae812fixmake sure that the useAnimation function delay is applied (#47468)

Special Thanks

AleksanderBodurri, Andrew Kushnir, Andrew Scott, Bob Watson, George Kalpakas, Joey Perrott, Mauro Mattos, dario-piotrowicz, fabioemoutinho and famzila

14.2.2 (2022-09-14)

animations

CommitTypeDescription
937e6c5b3dfixmake sure that the animation function delay is applied (#47285)

common

CommitTypeDescription
c9bdf9bab1fixrename rawSrc -> ngSrc in NgOptimizedImage directive (#47362) (#47396)

core

CommitTypeDescription
a3e1303f04fiximply @Optional flag when a default value is provided (#47242)

forms

CommitTypeDescription
80c66a1e57fixdon't prevent default behavior for forms with method="dialog" (#47308)

Special Thanks

Abhishek Rawat, Andrew Kushnir, Benjamin Chanudet, Bob Watson, George Kalpakas, Ikko Ashimine, Kristiyan Kostadinov, Marc Wrobel, Mariia Subkov, Pawel Kozlowski, Sebastian, abergquist, dario-piotrowicz, onrails and vyom1611

14.2.1 (2022-09-07)

common

CommitTypeDescription
c0d7ac9ec2fiximprove formatting of image warnings (#47299)
1875ce520afixuse DOCUMENT token to query for preconnect links (#47353)

compiler

CommitTypeDescription
0e35829580fixavoid errors for inputs with Object-builtin names (#47220)

service-worker

CommitTypeDescription
6091786696fixinclude headers in requests for assets (#47260)
28d33505fdfixonly consider GET requests as navigation requests (#47263)

Special Thanks

Aristeidis Bampakos, Asaf M, Bingo's Code, Bob Watson, Daniel Ostrovsky, George Kalpakas, Giovanni Alberto Rivas, Jeremy Elbourn, Jobayer Hossain, Joe Martin (Crowdstaffing), Joey Perrott, JoostK, Kara Erickson, Kristiyan Kostadinov, Maina Wycliffe, Sabareesh Kappagantu, Simona Cotin, Sonu Sindhu, Yann Provoost, abergquist, jaybell and vyom1611

14.2.0 (2022-08-25)

animations

CommitTypeDescription
b96e571897fixfix stagger timing not handling params (#47208)

common

CommitTypeDescription
b380fdd59efeatadd a density cap for image srcsets (#47082)
7ce497e5bcfeatadd built-in Imgix loader (#47082)
bff870db61featadd cloudflare loader (#47082)
86e77a5d55featadd Image directive skeleton (#45627) (#47082)
0566205a02featAdd image lazy loading and fetchpriority (#47082)
4e952ba216featadd loaders for cloudinary & imagekit (#47082)
e854a8cddefeatadd loading attr to NgOptimizedImage (#47082)
8d3701cb4cfeatadd warnings re: image distortion (#47082)
d5f7da2120featdefine public API surface for NgOptimizedImage directive (#47082)
d3c3426aa4featdetect LCP images in NgOptimizedImage and assert if priority is set (#47082)
451b85ca17featexplain why width/height is required (#47082)
586274fe65featprovide an ability to exclude origins from preconnect checks in NgOptimizedImage (#47082)
57f3386e5bfeatsupport custom srcset attributes in NgOptimizedImage (#47082)
7baf9a46cdfeatverify that priority images have preconnect links (#47082)
f81765b333featwarn if rendered size is much smaller than intrinsic (#47082)
e2ab99b95efixallow null/undefined to be passed to ngClass input (#39280) (#46906)
bedf537951fixallow null/undefined to be passed to ngStyle input (#47069)
f9511bf6e8fixavoid interacting with a destroyed injector (#47243)
dc29e21b14fixconsider density descriptors with multiple digits as valid (#47230)
801daf82d1fixdetect data: and blob: inputs in NgOptimizedImage directive (#47082)
fff8056e7ffixfix formatting on oversized image error (#47188) (#47232)
1ca2ce19abfixremove default for image width (#47082)
c5db867ddcfixremove duplicate deepForEach (#47189)
1cf43deb18fixsanitize rawSrc and rawSrcset values in NgOptimizedImage directive (#47082)
d71dfe931ffixset bound width and height onto host element (#47082)
32caa8b669fixsupport density descriptors with 2+ decimals (#47197) (#47232)
ae4405f0bffixthrow if srcset is used with rawSrc (#47082)
0c8eb8bc82perfmonitor LCP only for images without priority attribute (#47082)

compiler-cli

CommitTypeDescription
ea89677c12featsupport more recent version of tsickle (#47018)

core

CommitTypeDescription
d1e83e1b30featadd createComponent function (#46685)
10becab70efeatadd reflectComponentType function (#46685)
4b377d3a6dfeatintroduce createApplication API (#46475)
31429eacccfeatsupport TypeScript 4.8 (#47038)
796840209cfixalign TestBed interfaces and implementation (#46635)

forms

CommitTypeDescription
426af91a42featadd FormBuilder.record() method (#46485)
b302797de4fixCorrectly infer FormBuilder types involving [value, validators] shorthand in more cases. (#47034)

language-service

CommitTypeDescription
598b72bd05featsupport fix the component missing member (#46764)

platform-browser

CommitTypeDescription
07606e3181featadd isEmpty method to the TransferState class (#46915)

platform-server

CommitTypeDescription
2b4d7f6733featsupport document reference in render functions (#47032)

router

CommitTypeDescription
0abb67af59featallow guards and resolvers to be plain functions (#46684)
75df404467featCreate APIs for using Router without RouterModule (#47010)
10289f1f6efeatexpose resolved route title (#46826)
8600732b09featExpose the default matcher for Routes used by the Router (#46913)
422323cee0featimprove typings for RouterLink boolean inputs (#47101)
26ea97688cfeatMake router directives standalone (#46758)
2a43beec15fixFix route recognition behavior with some versions of rxjs (#47098)

service-worker

CommitTypeDescription
383090858cfeatsupport sendRequest as a notificationclick action (#46912)
3f548610ddfixexport NoNewVersionDetectedEvent (#47044)
482b6119c2fixupdate golden index.md (#47044)

Special Thanks

Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Bob Watson, Cédric Exbrayat, Dylan Hunn, Emmanuel Roux, FatalMerlin, George Kalpakas, Ilia Mirkin, Jan Kuehle, Jeremy Elbourn, Jessica Janiuk, JiaLiPassion, Kalbarczyk, Kara Erickson, Katie Hempenius, Kristiyan Kostadinov, Merlin, Paul Gschwendtner, Pawel Kozlowski, Tristan Sprößer, Victor Porof, angular-robot[bot], dario-piotrowicz, ivanwonder and vyom

14.1.3 (2022-08-17)

compiler

CommitTypeDescription
0583227708fixinfinite loop in parser assignment expression with invalid left-hand expression (#47151)

Special Thanks

AlirezaEbrahimkhani, Alma Eyre, Andrew Scott, Bob Watson, George Kalpakas, Kalbarczyk, Kristiyan Kostadinov, Leosvel Pérez Espinosa, Roman Matusevich and Sonu Kapoor

14.1.2 (2022-08-10)

core

CommitTypeDescription
5ff715c549fixcheck if transplanted views are attached to change detector (#46974)

router

CommitTypeDescription
439d77e852fixFix route recognition behavior with some versions of rxjs (#47098) (#47112)

Special Thanks

4javier, Andrew Kushnir, Andrew Scott, AntonioCardenas, Bob Watson, Bruno Barbosa, Eduardo Speroni, Edward, George Kalpakas, Jan Melcher, Kristiyan Kostadinov, Mladen Jakovljević, Paul Gschwendtner, Pawel Kozlowski, Roman Matusevich, Vovch, ashide2729, ileil and onrails

14.1.1 (2022-08-03)

core

CommitTypeDescription
3606917732fiximprove the missing control flow directive message (#46903)

router

CommitTypeDescription
79825d3f10fixDo not call preload method when not necessary (#47007)
05f3f7445afixUse correct return type for provideRoutes function (#46941)

Special Thanks

Alan Agius, Andrew Kushnir, Andrew Quinn, Andrew Scott, Aristeidis Bampakos, Asaf M, Bob Watson, Cédric Exbrayat, Durairaj Subramaniam, George Kalpakas, Ivaylo Kirov, J Rob Gant, Kristiyan Kostadinov, Marek Hám, Paul Gschwendtner, Roman Matusevich and Simona Cotin

14.1.0 (2022-07-20)

Deprecations

core

  • The createNgModuleRef is deprecated in favor of newly added createNgModule one.
  • The bit field signature of inject() has been deprecated, in favor of the new options object. Correspondingly, InjectFlags is deprecated as well.

animations

CommitTypeDescription
55308f2df5featadd provideAnimations() and provideNoopAnimations() functions (#46793)

common

CommitTypeDescription
4a2e7335b1featmake the CommonModule pipes standalone (#46401)
a7597dd080featmake the CommonModule directives standalone (#46469)

compiler

CommitTypeDescription
33ce3883a5featAdd extended diagnostic to warn when missing let on ngForOf (#46683)
6f11a58040featAdd extended diagnostic to warn when text attributes are intended to be bindings (#46161)
9e836c232ffeatwarn when style suffixes are used with attribute bindings (#46651)

compiler-cli

CommitTypeDescription
93c65e7b14featadd extended diagnostic for non-nullable optional chains (#46686)
131d029da1featdetect missing control flow directive imports in standalone components (#46146)
6b8e60c06afiximprove the missingControlFlowDirective message (#46846)

core

CommitTypeDescription
e8e8e5f171featadd createComponent function
b5153814affeatadd reflectComponentType function
96c6139c9afeatadd ability to set inputs on ComponentRef (#46641)
a6d5fe202cfeatalias createNgModuleRef as createNgModule (#46789)
71e606d3c3featexpose EnvironmentInjector on ApplicationRef (#46665)
19e6d9ccd3featimport AsyncStackTaggingZone if available (#46693)
a7a14df5f8featintroduce EnvironmentInjector.runInContext API (#46653)
fa52b6e906featoptions object to supersede bit flags for inject() (#46649)
af20112222featsupport the descendants option for ContentChild queries (#46638)
945a3ad359fixFix runInContext for NgModuleRef injector (#46877)
bb7c80477bfixmake parent injector argument required in createEnvironmentInjector (#46397)

http

CommitTypeDescription
82acbf919bfeatimprove error message for nullish header (#46059)

router

CommitTypeDescription
53ca936366featAdd ability to create UrlTree from any ActivatedRouteSnapshot (#45877)
de058bba99featAdd CanMatch guard to control whether a Route should match (#46021)
6c1357dd7dfeatAdd stable cancelation code to NavigationCancel event (#46675)
a4ce273e50featAdd the target RouterStateSnapshot to NavigationError (#46731)
abe3759e24fixallow to return UrlTree from CanMatchFn (#46455)
e8c7dd10e9fixEnsure APP_INITIALIZER of enabledBlocking option completes (#46026)
ce20ed067ffixEnsure Route injector is created before running CanMatch guards (#46394)
6a7b818d94fixEnsure target RouterStateSnapshot is defined in NavigationError (#46842)
f94c6f433dfixExpose CanMatchFn as public API (#46394)
e8ae0fe3e9fixFix cancelation code for canLoad rejections (#46752)

upgrade

CommitTypeDescription
e9cb0454dcfeatmore closely align UpgradeModule#bootstrap() with angular.bootstrap() (#46214)

Special Thanks

AleksanderBodurri, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Cédric Exbrayat, Dmitrij Kuba, Dylan Hunn, George Kalpakas, Jessica Janiuk, JiaLiPassion, Joey Perrott, John Vandenberg, JoostK, Keith Li, Or'el Ben-Ya'ir, Paul Gschwendtner, Pawel Kozlowski, SyedAhm3r, arturovt, mariu, markostanimirovic and mgechev

14.0.7 (2022-07-20)

animations

CommitTypeDescription
5bdbb6285bfixmake sure falsy values are added to _globalTimelineStyles (#46863)

compiler

CommitTypeDescription
41253f9c46fixinputs/outputs incorrectly parsed in jit mode (#46813)

core

CommitTypeDescription
4e77c7fbf3fixdo not invoke jasmine done callback multiple times with waitForAsync

Special Thanks

Andrew Kushnir, Andrew Scott, Bob Watson, Cédric Exbrayat, Doug Parker, George Kalpakas, Jessica Janiuk, Kristiyan Kostadinov, Paul Gschwendtner, acvi, dario-piotrowicz, jnizet and piyush132000

14.0.6 (2022-07-13)

compiler-cli

CommitTypeDescription
99697dae66fixonly consider used pipes for inline type-check requirement (#46807)

forms

CommitTypeDescription
4f469cbef3fixexpose ControlConfig in public API (#46594)
e8c8b695f2fixMove all remaining errors in Forms to use RuntimeErrorCode. (#46654)

localize

CommitTypeDescription
14863acb1afixadd --project option to ng-add schematic (#46664)

Special Thanks

Alan Agius, Andrew Scott, Bob Watson, Dylan Hunn, George Kalpakas, Ivaylo Kirov, Jessica Janiuk, JoostK, Joshua VanAllen, Lukas Matta, Marcin Wosinek, Nicolas Molina Monroy, Paul Gschwendtner, SoulsMark, Uday Sony, dario-piotrowicz, markostanimirovic and zhysky

14.0.5 (2022-07-06)

router

CommitTypeDescription
a3bd65e2b8fixEnsure APP_INITIALIZER of enabledBlocking option completes (#46634)

Special Thanks

Alan Agius, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, George Kalpakas, Paul Gschwendtner and Pawel Kozlowski

14.0.4 (2022-06-29)

animations

CommitTypeDescription
51be9bbe29fixcleanup DOM elements when the root view is removed (#45143)
999aca86c8fixenable shadowElements to leave when their parent does (#46459)

common

CommitTypeDescription
42aed6b13efixhandle CSS custom properties in NgStyle (#46451)

core

CommitTypeDescription
1e7f22f00afixtrigger ApplicationRef.destroy when Platform is destroyed (#46497)
8bde2dbc71fixUpdate ngfor error code to be negative (#46555)
57e8fc00ebfixUpdates error to use RuntimeError code (#46526)

forms

CommitTypeDescription
74a26d870efixConvert existing reactive errors to use RuntimeErrorCode. (#46560)
747872212dfixUpdate a Forms validator error to use RuntimeError (#46537)

router

CommitTypeDescription
d6fac9e914fixEnsure that new RouterOutlet instances work after old ones are destroyed (#46554)

Special Thanks

Alan Agius, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Bezael, Chad Ramos, Chellappan, Cédric Exbrayat, Dylan Hunn, George Kalpakas, Jeremy Meiss, Jessica Janiuk, Joey Perrott, KMathy, Kristiyan Kostadinov, Paul Gschwendtner, Pawel Kozlowski, Ramesh Thiruchelvam, Vaibhav Kumar, arturovt, dario-piotrowicz and renovate[bot]

14.0.3 (2022-06-22)

animations

CommitTypeDescription
3dd7bb3f8ffixreset the start and done fns on player reset (#46364)

core

CommitTypeDescription
c086653655fixdeduplicate imports of standalone components in JIT compiler (#46439)
5d3b97e1f8fixhandle NgModules with standalone pipes in TestBed correctly (#46407)

platform-server

CommitTypeDescription
6ad7b40a6ffixinvalid style attribute being generated for null values (#46433)

Special Thanks

4javier, Aakash, Alan Agius, Andrew Kushnir, Aristeidis Bampakos, Dany Paredes, Derek Cormier, JoostK, Kristiyan Kostadinov, Paul Gschwendtner, Ramesh Thiruchelvam, behrooz bozorg chami, dario-piotrowicz, markostanimirovic, renovate[bot] and web-dave

14.0.2 (2022-06-15)

common

CommitTypeDescription
ef5cba3df7fixallow null in ngComponentOutlet (#46280)

compiler-cli

CommitTypeDescription
8ecfd71fd7fixdon't emit empty providers array (#46301)
b92c1a6adafixuse inline type-check blocks for components outside rootDir (#46096)

core

CommitTypeDescription
3fd8948b4afixResolve forwardRef declarations for jit (#46334)

Special Thanks

Alex Rickabaugh, Andrew Scott, Badawi7, Daniel Schmitz, Derek Cormier, JoostK, Kevin Davila, Kristiyan Kostadinov, Paul Draper, Paul Gschwendtner, Tom Eustace, Totati, Younes Jaaidi, alefra, dario-piotrowicz, markostanimirovic, mgechev, piyush132000, sten-bone and vivekkoya

14.0.1 (2022-06-08)

bazel

CommitTypeDescription
b00d237c0efixupdate API extractor version (#46259)
9a0a7bac21perfreduce input files for ng_package rollup and type bundle actions (#46187)

forms

CommitTypeDescription
dde0b7f4b3fixallow FormBuilder.group(...) to accept optional fields. (#46253)

Special Thanks

Adrien Crivelli, Alan Agius, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Dylan Hunn, Fabrizio Fallico, George Kalpakas, Jelle Bruisten, JoostK, Kristiyan Kostadinov, Krzysztof Platis, Paul Gschwendtner, Phalgun Vaddepalli, San Leen, dario-piotrowicz, mgechev and wellWINeo

14.0.0 (2022-06-02)

Blog post "Angular v14 is now available".

Breaking Changes

animations

  • The AnimationDriver.getParentElement method has become required, so any implementors of this interface are now required to provide an implementation for this method. This breakage is unlikely to affect application developers, as AnimationDriver is not expected to be implemented in user code.

common

  • Adds new required class member that any implementors of the LocationStrategy will need to satisfy. Location does not depend on PlatformLocation anymore.

compiler

  • Keyframes names are now prefixed with the component's "scope name". For example, the following keyframes rule in a component definition, whose "scope name" is host-my-cmp:

    @keyframes foo { ... }

    will become:

    @keyframes host-my-cmp_foo { ... }

    Any TypeScript/JavaScript code which relied on the names of keyframes rules will no longer match.

    The recommended solutions in this case are to either:

    • change the component's view encapsulation to the None or ShadowDom
    • define keyframes rules in global stylesheets (e.g styles.css)
    • define keyframes rules programmatically in code.

core

  • Support for Node.js v12 has been removed as it will become EOL on 2022-04-30. Please use Node.js v14.15 or later.

  • TypeScript versions older than 4.6 are no longer supported.

  • Forms [email] input coercion

    Forms [email] input value will be considered as true if it is defined with any value rather than false and 'false'.

  • Since Ivy, TestBed doesn't use AOT summaries. The aotSummaries fields in TestBed APIs were present, but unused. The fields were deprecated in previous major version and in v14 those fields are removed. The aotSummaries fields were completely unused, so you can just drop them from the TestBed APIs usage.

forms

  • Forms classes accept a generic.

    Forms model classes now accept a generic type parameter. Untyped versions of these classes are available to opt-out of the new, stricter behavior.

  • objects with a length key set to zero will no longer validate as empty.

    This is technically a breaking change, since objects with a key length and value 0 will no longer validate as empty. This is a very minor change, and any reliance on this behavior is probably a bug anyway.

http

  • Queries including + will now actually query for + instead of space. Most workarounds involving custom codecs will be unaffected. Possible server-side workarounds will need to be undone.

  • JSONP will throw an error when headers are set on a reques

    JSONP does not support headers being set on requests. Before when a request was sent to a JSONP backend that had headers set the headers were ignored. The JSONP backend will now throw an error if it receives a request that has any headers set. Any uses of JSONP on requests with headers set will need to remove the headers to avoid the error.

platform-browser

  • This change may cause a breaking change in unit tests that are implicitly depending on a specific number and sequence of change detections in order for their assertions to pass.

  • This may break invalid calls to TransferState methods.

    This tightens parameter types of TransferState usage, and is a minor breaking change which may reveal existing problematic calls.

router

  • The type of Route.pathMatch is now stricter. Places that use pathMatch will likely need to be updated to have an explicit Route/Routes type so that TypeScript does not infer the type as string.

  • When returning a Promise from the LoadChildrenCallback, the possible type is now restricted to Type<any>|NgModuleFactory<any> rather than any.

  • initialNavigation: 'enabled' was deprecated in v11 and is replaced by initialNavigation: 'enabledBlocking'.

  • The type of component on ActivatedRoute and ActivatedRouteSnapshot includes string. In reality, this is not the case. The component cannot be anything other than a component class.

    • The type of initialUrl is set to string|UrlTree but in reality, the Router only sets it to a value that will always be UrlTree
    • initialUrl is documented as "The target URL passed into the Router#navigateByUrl() call before navigation" but the value actually gets set to something completely different. It's set to the current internal UrlTree of the Router at the time navigation occurs.

    With this change, there is no exact replacement for the old value of initialUrl because it was never intended to be exposed. Router.url is likely the best replacement for this. In more specific use-cases, tracking the finalUrl between successful navigations can also be used as a replacement.

  • Lazy loaded configs are now also validated once loaded like the initial set of routes are. Lazy loaded modules which have invalid Route configs will now error. Note that this is only done in dev mode so there is no production impact of this change.

  • When a guard returns a UrlTree, the router would previously schedule the redirect navigation within a setTimeout. This timeout is now removed, which can result in test failures due to incorrectly written tests. Tests which perform navigations should ensure that all timeouts are flushed before making assertions. Tests should ensure they are capable of handling all redirects from the original navigation.

  • Previously, resolvers were waiting to be completed before proceeding with the navigation and the Router would take the last value emitted from the resolver. The router now takes only the first emitted value by the resolvers and then proceeds with navigation. This is now consistent with Observables returned by other guards: only the first value is used.

zone.js

  • in TaskTrackingZoneSpec track a periodic task until it is cancelled

    The breaking change is scoped only to the plugin zone.js/plugins/task-tracking. If you used TaskTrackingZoneSpec and checked the pending macroTasks e.g. using (this.ngZone as any)._inner ._parent._properties.TaskTrackingZone.getTasksFor('macroTask'), then its behavior slightly changed for periodic macrotasks. For example, previously the setInterval macrotask was no longer tracked after its callback was executed for the first time. Now it's tracked until the task is explicitly cancelled, e.g with clearInterval(id).

Deprecations

common

  • The ngModuleFactory input of the NgComponentOutlet directive is deprecated in favor of a newly added ngModule input. The ngModule input accepts references to the NgModule class directly, without the need to resolve module factory first.

forms

  • The initialValueIsDefault option has been deprecated and replaced with the otherwise-identical nonNullable option, for the sake of naming consistency.
  • It is now deprecated to provide both AbstractControlOptions and an async validators argument to a FormControl. Previously, the async validators would just be silently dropped, resulting in a probably buggy forms. Now, the constructor call is deprecated, and Angular will print a warning in devmode.

router

  • The resolver argument of the RouterOutletContract.activateWith function and the resolver field of the OutletContext class are deprecated. Passing component factory resolvers are no longer needed. The ComponentFactoryResolver-related symbols were deprecated in @angular/core package since v13.

animations

CommitTypeDescription
a6fa37bc6efeatmake validateStyleProperty check dev-mode only (#45570)
79d334b138featprovide warnings for non-animatable CSS properties (#45212)
f8dc660605fixallow animations with unsupported CSS properties (#44729)
2a75754ee8fixapply default params when resolved value is null or undefined (#45339)
e46b379204fiximplement missing transition delay (#44799)
5c7c56bc85perfimprove algorithm to balance animation namespaces (#45057)
4c778cdb28perfmade errors in the animations package tree shakeable (#45004)
7a81481fb2perfRemove generic objects in favor of Maps (#44482)
6642e3c8fdperfremove no longer needed CssKeyframes classes (#44903)
59559fdbacrefactormake AnimationDriver.getParentElement required (#45114)

common

CommitTypeDescription
31d7c3bd71featadd getState method to LocationStrategy interface (#45648)
c89cf63059featsupport NgModule as an input to the NgComponentOutlet (#44815)
38c03a2035featsupport years greater than 9999 (#43622)
bedb257afcfixcleanup URL change listeners when the root view is removed (#44901)
10691c626bfixproperly cast http param values to strings (#42643)
05d50b849bperfmake NgLocalization token tree-shakable (#45118)

compiler

CommitTypeDescription
bb8d7091c6fixexclude empty styles from emitted metadata (#45459)
4d6a1d6722fixscope css keyframes in emulated view encapsulation (#42608)
f03e313f24fixscope css keyframes in emulated view encapsulation (#42608)

compiler-cli

CommitTypeDescription
9cf14ff03dfeatexclude abstract classes from strictInjectionParameters requirement (#44615)
0072eb48bafeatinitial implementation of standalone components (#44812)
2142ffd295featpropagate standalone flag to runtime (#44973)
6f653e05f9featstandalone types imported into NgModule scopes (#44973)
752ddbc165featSupport template binding to protected component members (#45823)
3d13343975fixbetter error messages for NgModule structural issues (#44973)
046dad1a8dfixfix issue with incremental tracking of APIs for pipes (#45672)
27b4af7240fixfull side-effectful registration of NgModules with ids (#45024)
32c625d027fixhandle forwardRef in imports of standalone component (#45869)
06050ac2b4fixhandle inline type-check blocks in nullish coalescing extended check (#45454)
a524a50361fixhandle standalone components with cycles (#46029)
724e88e042fixpreserve forwardRef for component scopes (#46139)
9cfea3d522fixreport invalid imports in standalone components during resolve phase (#45827)
c0778b4dfcfixSupport resolve animation name from the DTS (#45107)
f2e5234e07fixupdate unknown tag error for aot standalone components (#45919)
35f20afcacfixuse existing imports for standalone dependencies (#46029)
8155428ba6perfignore the module.id anti-pattern for NgModule ids (#45024)

core

CommitTypeDescription
174ce7dd13featadd ApplicationRef.destroy method (#45624)
5771b18a98featadd the bootstrapApplication function (#45674)
69018c9f42featallow for injector to be specified when creating an embedded view (#45156)
94c949a60afeatallow for injector to be specified when creating an embedded view (#45156)
e702cafcf2featallow to throw on unknown elements in tests (#45479)
6662a97c61featallow to throw on unknown elements in tests (#45479)
a6675925b0featallow to throw on unknown properties in tests (#45853)
6eaaefd22efeatdrop support for Node.js 12 (#45286)
c9d566ce4bfeatdrop support for TypeScript 4.4 and 4.5 (#45394)
b568a5e708featimplement importProvidersFrom function (#45626)
d5a6cd1111featimplement EnvironmentInjector with adapter to NgModuleRef (#45626)
5a10fc4f82featimplement standalone directives, components, and pipes (#45687)
e461f716d4featmove ANIMATION_MODULE_TYPE injection token into core (#44970)
94bba76a4afeatsupport TypeScript 4.6 (#45190)
29039fcdbcfeatsupport TypeScript 4.7 (#45749)
225e4f2dbefeattriggerEventHandler accept optional eventObj (#45279)
401dec46ebfeatupdate TestBed to recognize Standalone Components (#45809)
35653ce337fixadd more details to the MISSING_INJECTION_CONTEXT error (#46166)
d36fa111ebfixavoid Closure Compiler error in restoreView (#45445)
0bc77f4cabfixbetter error message when unknown property is present (#46147)
f3eb7d9ecbfixEnsure the StandaloneService is retained after closure minification (#45783)
701405fa71fixhandle AOT-compiled standalone components in TestBed correctly (#46052)
ddce357d1dfiximprove TestBed declarations standalone error message (#45999)
ba9f30c9a6fixinclude component name into unknown element/property error message (#46160)
9fa6f5a552fixincorrectly inserting elements inside <template> element (#43429)
d5719c2e0ffixinput coercion (#42803)
be161bef79fixmemory leak in event listeners inside embedded views (#43075)
fa755b2a54fixprevent BrowserModule providers from being loaded twice (#45826)
3172b4cc99fixproduce proper error message for unknown props on <ng-template>s (#46068)
4f1a813596fixrestore NgModule state correctly after TestBed overrides (#46049)
3f7ecec59bfixset correct context for inject() for component ctors (#45991)
4e413d9240fixsupport nested arrays of providers in EnvironmentInjector (#45789)
fde4942cdffixthrow if standalone components are present in @NgModule.bootstrap (#45825)
560188bf12fixupdate unknown property error to account for standalone components in AOT (#46159)
df339d8abffixupdate unknown tag error for jit standalone components (#45920)
aafac7228ffixverify standalone component imports in JiT (#45777)
e9317aee71perfallow checkNoChanges mode to be tree-shaken in production (#45913)
071c8af8baperfavoid storing LView in __ngContext__ (#45051)
a96c4827c4perfmake Compiler, ApplicationRef and ApplicationInitStatus tree-shakable (#45102)
45d98e7ca5perfmake IterableDiffers and KeyValueDiffers tree-shakable (#45094)
1e60fe0a3eperfmake LOCALE_ID and other tokens from ApplicationModule tree-shakable (#45102)
88f1168506perfonly track LViews that are referenced in __ngContext__ (#45172)
9add714b13refactorremove deprecated aotSummaries fields in TestBed config (#45487)

devtools tabs

CommitTypeDescription
6c284ef32efixstop scroll occuring at tabs level

forms

CommitTypeDescription
2dbdebc646featAdd FormBuilder.nonNullable. (#45852)
e0a2248b32featAdd a FormRecord type. (#45607)
7ee121f595featAdd untyped versions of the model classes for use in migration. (#45205)
89d299105afeatImplement strict types for the Angular Forms package. (#43834)
f490c2de4efeatsupport negative indices in FormArray methods. (#44848)
39be06037dfixAdd a nonNullable option to FormControl for consistency.
4332897baafixAdd UntypedFormBuilder (#45268)
5d13e58aedfixAllow NonNullableFormBuilder to be injected. (#45904)
8dd3f82f94fixCorrect empty validator to handle objects with a property length: 0. (#33729)
ff3f5a8d12fixFix a typing bug in FormBuilder. (#45684)
fe0e42a996fixMake UntypedFormBuilder assignable to FormBuilder, and vice versa. (#45421)
b36dec6b5bfixnot picking up disabled state if group is swapped out and disabled (#43499)
9f6fa5b746fixPrevent FormBuilder from distributing unions to control types. (#45942)
aa7b857be8fixProperty renaming safe code (#45271)
cae1e44608fixUpdate the typed forms migration to use FormArray<T> instead of FormArray<T[]>. (#44933)
d336ba96d9fixUpdate the typed forms migration. (#45281)
018550ed50fixValue and RawValue should be part of the public API. (#45978)
2e96cede3efixWarn on FormControls that are constructed with both options and asyncValidators.

http

CommitTypeDescription
76a9a24cdcfixencode + signs in query params as %2B (angular#11058) (#45111)
d43c0e973ffixThrow error when headers are supplied in JSONP request (#45210)

language-service

CommitTypeDescription
9d4af65e34featProvide plugin to delegate rename requests to Angular (#44696)
3ae133c69efixFix detection of Angular for v14+ projects (#45998)

localize

CommitTypeDescription
a50e2da64afixensure transitively loaded compiler code is tree-shakable (#45405)

migrations

CommitTypeDescription
d56a537196featAdd migration to add explicit Route/Routes type (#45084)

ngcc

CommitTypeDescription
74a2e2e2ecfixcope with packages following APF v14+ (#45833)

platform-browser

CommitTypeDescription
a01bcb8e7efixdo not run change detection when loading Hammer (#44921)
b32647dc68fixMake transfer state key typesafe. (#23020)
c7bf75dd5efixremove obsolete shim for Map comparison in Jasmine (#45521)
23c4c9601eperfavoid including Testability by default in bootstrapApplication (#45885)

platform-server

CommitTypeDescription
dff5586d52featimplement renderApplication function (#45785)
22c71be94cfixupdate renderApplication to move appId to options (#45844)

router

CommitTypeDescription
f4fd1a8262featAdd EnvironmentInjector to RouterOutlet.activateWith (#45597)
910de8bc33featAdd Route.title with a configurable TitleStrategy (#43307)
4e0957a4e1featAdd ability to specify providers on a Route (#45673)
dea8c86cd5featadd ariaCurrentWhenActive input to RouterLinkActive directive (#45167)
41e2a68e30featadd type properties to all router events (#44189)
4962a4a332featAllow loadChildren to return a Route array (#45700)
791bd31424featset stricter type for Route.title (#44939)
50004c143bfeatSupport lazy loading standalone components with loadComponent (#45705)
7fd416d060fixFix type of Route.pathMatch to be more accurate (#45176)
1c11a57155fixmerge interited resolved data and static data (#45276)
f8f3ab377bfixRemove any from LoadChildrenCallback type (#45524)
d4fc12fa19fixRemove deprecated initialNavigation option (#45729)
989e840ccefixRemove unused string type for ActivatedRoute.component (#45625)
64f837d2c0fixUpdate Navigation#initialUrl to match documentation and reality (#43863)
96fd29c6d2fixvalidate lazy loaded configs (#45526)
f13295f3a3perfcancel the navigation instantly if at least one resolver doesn't emit any value (#45621)
1d2f5c1101refactordeprecate no longer needed resolver fields (#45597)
7b367d9d90refactorRemove unnecessary setTimeout in UrlTree redirects (#45735)
c9679760b2refactortake only the first emitted value of every resolver to make it consistent with guards (#44573)

service-worker

CommitTypeDescription
ec0a0e0669featadd cacheOpaqueResponses option for data-groups (#44723)
bd04fbc05bfeatemit a notification when the service worker is already up-to-date after check (#45216)

Special Thanks

Adrian Kunz, Alan Agius, AleksanderBodurri, Alex Rickabaugh, AlirezaEbrahimkhani, Amir Rustamzadeh, Andrew Kushnir, Andrew Scott, Chabbey François, Charles Lyding, Cédric Exbrayat, Daan De Smedt, David Schmidt, Derek Cormier, Dmitrij Kuba, Doug Parker, Dylan Hunn, Emma Twersky, George Kalpakas, George Looshch, Jan Kuehle, Jessica Janiuk, JiaLiPassion, JimMorrison723, Joe Martin (Crowdstaffing), Joey Perrott, JoostK, Kristiyan Kostadinov, Krzysztof Platis, Leosvel Pérez Espinosa, Maddie Klein, Mark Whitfeld, Martin Sikora, Michael-Doner, Michal Materowski, Minko Gechev, Paul Gschwendtner, Pawel Kozlowski, Payam Shahidi, Pusztai Tibor, Ricardo Mattiazzi Baumgartner, Roy Dorombozi, Ruslan Lekhman, Samuel Littley, Sergej Grilborzer, Sumit Arora, Tobias Speicher, Virginia Dooley, Zack Elliott, alirezaghey, ananyahs96, arturovt, cexbrayat, dario-piotrowicz, ivanwonder, kamikopi, markostanimirovic, markwhitfeld, mgechev, renovate[bot], twerske and zverbeta

Earlier changelog entries can be found in CHANGELOG_ARCHIVE.md file.