Skip to content

chore(deps): update angular to v20 (major) #4127

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 27, 2025
Merged

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Jun 1, 2025

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
@angular-devkit/build-angular ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/animations (source) ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/build ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/cli ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/common (source) ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/compiler (source) ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/compiler-cli (source) ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/core (source) ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/forms (source) ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/platform-browser (source) ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/platform-browser-dynamic (source) ^19.0.0 -> ^20.0.0 age adoption passing confidence
@angular/router (source) ^19.0.0 -> ^20.0.0 age adoption passing confidence

Release Notes

angular/angular-cli (@​angular-devkit/build-angular)

v20.0.3

Compare Source

@​schematics/angular
Commit Type Description
e90a808c0 fix include main.server.ts in tsconfig.files when present
5c48b8e0a fix reset module typeSeparator when generating applications
@​angular/build
Commit Type Description
56f426e25 fix include custom bundle name scripts with karma
dfe3a8b73 fix increase worker idle timeout
e6d27bd5e fix set scripts option output as classic script for karma

v20.0.2

Compare Source

@​schematics/angular
Commit Type Description
bf64a0f2d fix add less as a devDependency when selected as the style preprocessor
cb258a3e1 fix correctly detect modules using new file extension format
@​angular/build
Commit Type Description
424f1cbbf fix do not consider internal Angular files as external imports

v20.0.1

Compare Source

@​angular/cli
Commit Type Description
0883248cb fix improve Node.js version check and error messages
@​schematics/angular
Commit Type Description
525ddcbd2 fix only overwrite JSON file if actually changed
83c820e5a fix remove karma config devkit package usages during application migration
87266b38a fix skip zone.js dependency for zoneless applications
@​angular/build
Commit Type Description
e5efdc577 fix also disable outputMode in vitest unit-tests
5814393db fix resolve junit karma reporter output to workspace root

v20.0.0

Compare Source

Breaking Changes

@​angular/cli
  • Node.js v18 is no longer supported with Angular.

    Before updating a project to Angular v20, the Node.js version must be
    at least 20.11.1. For the full list of supported Node.js versions,
    see https://angular.dev/reference/versions.

  • Node.js versions from 22.0 to 22.10 are no longer supported

@​schematics/angular
  • --server-routing option has been removed from several schematics. Server routing will be used when using the application builder.
@​angular-devkit/schematics
  • The NodePackageLinkTask has been removed without a replacement. Create a custom task if needed.

    Note: This does not affect application developers.

@​angular/build
  • TypeScript versions less than 5.8 are no longer supported.
@​schematics/angular
Commit Type Description
e03f2b899 feat Add global error listeners to new app generation
1e137ca84 feat add migration to update moduleResolution to bundler
26fd4ea73 feat add migrations for server rendering updates
5876577af feat Add prompt for new apps to be zoneless
fdc6291dd feat add update migration to keep previous style guide generation behavior
093c5a315 feat directly use @angular/build in new projects
d6f594fe0 feat generate applications using TypeScript project references
0ab1ddf63 feat generate libraries using TypeScript project references
18e13e2ce feat remove --server-routing option
03180fe03 feat use TypeScript module preserve option for new projects
86d241629 fix add @angular/ssr dependency only when provideServerRendering import has been updated
9e6b9b537 fix add type checking of host bindings to strict config
8654b3fea fix application migration should migrate karma builder package
c557a19ef fix avoid empty polyfill option for new zoneless application
90615a88b fix default component templates to not use .ng.html extension
672ae14cd fix drop composite in tsconfig
da6ef626f fix ensure app-shell schematic consistently uses withAppShell
f126f8d34 fix ensure module discovery checks for an NgModule decorator
dc2f65999 fix generate component templates with a .ng.html file extension
23fc8e1e1 fix generate components without a .component extension/type
8d715fa94 fix generate directives without a .directive extension/type
5fc595144 fix generate guards with a dash type separator
040282d8f fix generate interceptors with a dash type separator
070d60fb3 fix generate modules with a dash type separator
e6083b57b fix generate pipes with a dash type separator
92e193c0b fix generate resolvers with a dash type separator
bc0f07b48 fix generate services without a .service extension/type
ea1143ddd fix infer app component name and path in server schematic
bcc0892a6 fix migrate provideServerRoutesConfig to provideServerRendering
5e8c6494d fix relative tsconfig paths in references
381d35fe4 fix remove empty scripts option value from new applications
148498c2b fix Remove experimental from zoneless
a910fe9ae fix remove explicit outputPath option value from generated applications
901ab60d9 fix remove explicit index option from new applications
be6f13ec1 fix remove setting files tsconfig field with SSR/Server generation
661609e3e fix set explicit type in library schematic
0f7dc2cd8 fix skip spec project reference for minimal ng new
3cf6ab0f7 fix support using default browser option when not present
b13805a77 fix use protected for class member
@​angular/cli
Commit Type Description
e513cd4aa fix add Node.js 24 as supported version
5e90c1b4e fix remove Node.js v18 support
787e510dc fix update min Node.js support to 20.19, 22.12, and 24.0
64732534e fix update minimum supported Node.js 22 version to 22.11.0
@​angular-devkit/build-angular
Commit Type Description
a42e045ba fix respect i18nDuplicateTranslation option when duplicates exist
@​angular-devkit/schematics
Commit Type Description
e6be37601 refactor remove deprecated NodePackageLinkTask
@​angular/build
Commit Type Description
d6ea6b09f feat add experimental vitest browser support to unit-testing
12def3a2e feat add experimental vitest unit-testing support
c1de63300 feat allow control of source map sources content for application builds
31c81e9c6 feat drop support for TypeScript older than 5.8
e80963036 feat expand browser support policy to widely available Baseline
3c9172159 feat integrate Chrome automatic workspace folders
9b682e625 feat support a default outputPath option for applications
d067cedf0 feat support custom resolution conditions with applications
f4be83119 feat Support Sass package importers
f36a27272 fix allow a default application browser option
f42f5c14c fix allow component HMR for templates with i18n
e36bf964a fix allow TestBed provider configuration with vitest unit-testing
769961e4a fix allow vitest-based unit testing to use watch option
3e24a59a9 fix disable TypeScript composite option with Angular compiler
b155ba1dc fix enable unit-test builder watch outside CI
7bb1f8747 fix enable unit-test reporters option
05485ede7 fix ensure com.chrome.devtools.json is consistently served after initial run
7877d9a97 fix ensure disabled vitest config loading
c8c73185a fix ensure matching coverage excludes with karma on Windows
aec95042b fix exclude only source test files with unit-test vitest support
5bea3de4c fix invalidate com.chrome.devtools.json if project is moved
1cd65a08d fix perform testing module cleanup when using Vitest
c51a540ce fix provide direct debugging support for unit test builder
c7f2cb596 fix provide vitest globals in unit-test builder
d2bfc6bd4 fix revert setup unit-test polyfills before TestBed init
0d40cdecd fix setup unit-test polyfills before TestBed init
fa3dc6387 fix show unit-test error for missing vitest browser package
247cd3352 fix show unit-test error for missing vitest package
eee816f79 fix use global unit-test hooks during TestBed init
566de64cb fix use virtual module for Karma TestBed initialization
52fbffcd7 fix warn and remove jsdom launcher when used with karma
5ff6188c4 perf directly check code for Angular partial linking
@​angular/pwa
Commit Type Description
fa0a06f9f fix support using default index option when not present
@​angular/ssr
Commit Type Description
33b9de3eb feat expose provideServerRendering and remove provideServerRouting
cdfc50c29 feat stabilize AngularNodeAppEngine, AngularAppEngine, and provideServerRouting APIs
319b8e0c2 fix manage unhandled errors in zoneless applications
2d11e8e45 fix return 302 when redirectTo is a function
059c10eb4 fix SSR should work without @angular/router
63428f3f1 perf flush headers prior to start rendering the HTML
280693231 perf optimize response times by introducing header flushing
6bd7b9b4a perf optimized request handling performance
@​ngtools/webpack
Commit Type Description
427bd846f fix disable TypeScript composite option with Angular compiler
angular/angular (@​angular/animations)

v20.0.4

Compare Source

core
Commit Type Description
e343cdfb86 fix Fixes template outlet hydration (#​62012)
67f657e4a3 fix inject APP_ID before injector is destroyed (#​61885)
ae212b51ee fix Wrap ErrorEvent with no error property (#​62081)
migrations
Commit Type Description
82bf9848a1 fix more robust trailing comma removal in unused imports migration (#​62118)

v20.0.3

Compare Source

v20.0.2

Compare Source

core
Commit Type Description
1e8158baee fix components marked for traversal resets reactive context (#​61663)
1cd23be57e fix unregister onDestroy in outputToObservable (#​61882)

v20.0.1

Compare Source

compiler
Commit Type Description
66a0ec6510 fix move defer trigger assertions out of parser (#​61747)
8ecb1ba027 fix recover invalid parenthesized expressions (#​61815)
core
Commit Type Description
8c60cbfd1c fix takeUntilDestroyed completes immediately if DestroyRef already destroyed (#​61847)
b1d960d082 fix produce an error when incremental hydration is expected, but not configured (#​61741)
b4ed62ddf6 fix properly handle the case where getSignalGraph is called on a componentless NodeInjector (#​60772)
ddd22bea48 fix unregister onDestroy in ResourceImpl when destroy() is called (#​61870)
5c31e7e28d fix unregister onDestroy when observable errors in toSignal (#​61596)
migrations
Commit Type Description
e9820a6d48 fix avoid trailing whitespaces in unused imports migration (#​61698)
service-worker
Commit Type Description
b93fa22f25 fix prevent duplicate fetches during concurrent update checks (#​61443)
9743bd1317 fix update service worker to handle seeking better for videos (#​60029)

v20.0.0

Compare Source

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}}.

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
Commit Type Description
2e5362a469 feat accept undefined inputs in NgTemplateOutlet (#​61404)
b7d3f3dbfc feat Allow passing ScrollOptions to ViewportScroller (#​61002)
74cceba587 feat throw error for suspicious date patterns (#​59798)
255c79e048 fix cleanup updateLatestValue if view is destroyed before promise resolves (#​58041)
739cadae62 fix Handle errors in async pipe subscriptions (#​60057)
cbbea70fa3 fix issue a warning instead of an error when NgOptimizedImage exceeds the preload limit (#​60879)
fc4a56d5c5 fix rename httpResource function in factory (#​60022)
785a1110e6 fix resolve host binding type issues (#​60481)
compiler
Commit Type Description
7a971766dc feat add extended diagnostic for uninvoked track function on @for blocks (#​60495)
f2d5cf7edd feat support exponentiation operator in templates (#​59894)
51b8ff23ce feat support tagged template literals in expressions (#​59947)
1b8e7ab9fe feat support the in keyword in Binary expression (#​58432)
0361c2d81f feat support void operator in templates (#​59894)
8b990a31c3 fix error if rawText isn't estimated correctly (#​60529)
4fe489f1b4 fix exponentiation should be right-to-left associative (#​60101)
ef1fd137a9 fix incorrect spans for template literals (#​60323)
e0d378d20e fix incorrectly handling let declarations inside i18n (#​60512)
b70ad3c4e6 fix proper handling of typeof, void in RecursiveAstVisitor (#​60101)
e25e6c95a2 fix remove TypeScript from linker (#​61635)
768239a89c perf reduce allocations for let declarations only used in the same view (#​60512)
compiler-cli
Commit Type Description
bec1610da2 feat add extended diagnostic for invalid nullish coalescing (#​60279)
c889382a20 feat detect missing structural directive imports (#​59443)
1971e57a45 feat support type checking of host bindings (#​60267)
9ec9c7e1b8 fix avoid fatal diagnostics for invalid module schemas (#​61220)
a1cacc5b17 fix avoid fatal diagnostics for missing template files (#​58673)
1e6faad479 fix correctly parse event name in HostListener (#​60561)
ffb19e64f1 fix preserve required parens for nullish coalescing (#​60060)
7c9b4892e9 fix preserve required parens in exponentiation expressions (#​60101)
7e03af898e fix set correct target when type checking events (#​60561)
2d51a203dc fix wrong event name for host listener decorators (#​60460)
core
Commit Type Description
22d3f0562c feat add hook for producer creation side effects (#​60333)
fe57332fc5 feat add input binding support to dynamically-created components (#​60137)
65adb3024d feat Add provider which reports unhandled errors on window to ErrorHandler (#​60704)
b154fb3911 feat add support for two-way bindings on dynamically-created components ([#​60342](https://r

Configuration

📅 Schedule: Branch creation - "on the first day of the month" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Never, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot requested a review from a team as a code owner June 1, 2025 01:26
@renovate renovate bot requested a review from christian-bromann June 1, 2025 01:26
Copy link

vercel bot commented Jun 1, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
ionic-docs ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jun 27, 2025 7:38pm

@ShaneK
Copy link
Member

ShaneK commented Jun 2, 2025

Probably gonna hold off on this until we verify Angular 20 support in Framework

Copy link
Contributor Author

renovate bot commented Jun 27, 2025

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

"@angular/build": "^20.0.0",
"@angular/cli": "^20.0.0",
"@angular/compiler-cli": "^20.0.0",
"typescript": "^5.8.0"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"TypeScript versions less than 5.8 are no longer supported."

"@angular/build": "^20.0.0",
"@angular/cli": "^20.0.0",
"@angular/compiler-cli": "^20.0.0",
"typescript": "^5.8.0"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TypeScript versions less than 5.8 are no longer supported.

Copy link
Contributor

@thetaPC thetaPC left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@thetaPC thetaPC merged commit 562a909 into main Jun 27, 2025
4 checks passed
@thetaPC thetaPC deleted the renovate/major-angular branch June 27, 2025 20:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants