github nrwl/nx 22.4.0

9 hours ago

22.4.0 (2026-01-21)

🚀 Features

  • angular: support ngrx v21 (#33940)
  • angular: support cypress component testing with zoneless projects (#33941)
  • angular: add support for angular v21.1 (#34057)
  • angular-rspack: add tailwind and postcss config to component stylesheet bundler (#34153)
  • bundling: replace rollup-plugin-postcss with inlined version (#34110)
  • core: add inline-tui view mode (#32718)
  • core: support cwd specific hashes (#33879, #33684)
  • core: allow nx show project to infer project from cwd (#33661, #31055, #43, #33503)
  • core: add OpenCode AI agent detection (#34072)
  • core: add PLUGIN.md files to testing-tools (#34125)
  • core: add A/B testing variant 1 to skip cloud prompt in CNW (#34106)
  • gradle: excludeDependsOn based on provider relationships (#33923)
  • gradle: add env vars to skip gradle and maven plugin computation (#34055)
  • linter: add bulk suppression support for ESLint v9.24.0+ (#32184)
  • linter: add peerDepsVersionStrategy option to dependency-checks (#33417)
  • maven: add batch executor for multi-task Maven execution (#33228)
  • nx-dev: add scroll depth tracking for marketing pages (#34105)
  • react: update react-router and remix versions to address CVEs (#34058)
  • release: add option to opt-out commit scope filter (#33382, #32915)
  • release: special-case 0.x versions for semver bumps (#34031)
  • rspack: add typeCheckOptions, runtimeDependencies, and cache options (#33931)

🩹 Fixes

  • angular: support @angular/cli package update during nx migrate (#33918)
  • angular: only throw "define" error when options.define has keys (#33969, #33964)
  • angular-rspack: handler accumulation and watchOptions for double rebuilds (#34154)
  • angular-rspack: stats serialization and configuration (#34155)
  • core: ensure no tui on single tasks (#33910)
  • core: daemon client reconnection on server restart (#33432)
  • core: fix vitest test runner options for angular in cnw (#33921)
  • core: improve package-json createNode performance (#33960)
  • core: convert filePath to an absolute path before typescript resolves the module (#34001, #33985)
  • core: set windowsHide:true in package installation (#34053)
  • core: display shared running tasks in the in progress section of the tui (#34059)
  • core: make process metrics registration in critical paths non-blocking (#34019)
  • core: disallow Vitest & Angular unit test runner when bundler is not esbuild in cnw (#34023, #34014)
  • core: allow dte to handle continuous tasks termination (#34018)
  • core: validate native file cache size before applying it (#33683, #30653, #31300)
  • core: pipe plugin stdout to avoid inconsistent terminal state (#33369)
  • core: show daemon status in nx report output (#34009)
  • core: prevent alias from overwriting root deps in pnpm parser (#34064)
  • core: only init inline view if able to run (#34094)
  • core: upgrade sysinfo to 0.37.2 and fix cpu measurement accuracy (#34101)
  • core: improve buildExplicitTypeScriptDependnecies performance (#33963)
  • core: ensure consistent yarn optional dependency hashing (#34104)
  • core: only run nx console background check if daemon is active (#33917)
  • core: prevent task hashing when project graph has errors (#34116)
  • core: drain stdin on exit to prevent escape sequence leakage (#34134)
  • core: avoid panic when inline tui can't init (#34135)
  • core: establish cpu baseline when possible to improve measurement accuracy (#34120)
  • core: prioritize nx installation path in getNxRequirePaths (#34158)
  • core: improve TUI task selection and pane focus behavior (#34175)
  • dotnet: fix dependency graph for multi-targeting and transitive deps (#33908, #33653, #33397)
  • gradle: force gradle executor to always rerun tasks (#34024)
  • gradle: resolve dependencies after capturing project tasks (#34045)
  • js: avoid duplicate @nx/js/typescript plugin entries for non-buildable libs (#34021, #33981)
  • linter: honor setParserOptionsProject in flat config (#33953, #33944)
  • linter: handle variable references in replaceOverride (#34026, #34010)
  • linter: delete override block when update returns undefined in replaceOverride (#34070)
  • maven: update Spring Boot to 4.0 and enable parent POM local install (#34081)
  • maven: fix Maven Central publishing for Maven 4 (#34084)
  • maven: include migrations.json in published package (#34086)
  • misc: remove auto CI Optimization card from AI page (#33955)
  • misc: remove CNW A/B testing flow branching (#33967)
  • misc: update banner validation to match Framer API format (#34076)
  • misc: deprecate setup-tailwind generators (#34097)
  • module-federation: use localhost as default host #33909 (#33947, #33909)
  • module-federation: skip non-npm external dependencies in getDependencies (#33951, #32819)
  • module-federation: pin rspack to 1.6.8 (#34022)
  • module-federation: dev server handler accumulation (#34152)
  • nx-dev: make sure only prod is indexed (#33922)
  • nx-dev: make sure canonical urls are always nx.dev (#33932)
  • react: set up module federation with webpack and ts soln correctly #31029 (#33920, #31029)
  • react: target 22.3.4 patch version to address Remix CVE (#34068)
  • testing: ensure jest v30 migration is run (#33916)
  • testing: set moduleResolution to node in Cypress tsconfig to prevent TS5095 error (#33726, #33607)
  • vitest: add guard rails for vitest llm migration (#33976)
  • vitest: skip target inference for root workspace configs with projects (#33977, #32471)
  • vitest: prevent config double-merge causing array duplication (#34113, #33591)

❤️ Thank You

Don't miss a new nx release

NewReleases is sending notifications on new releases.