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 projectto 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/clipackage update duringnx 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 & Angularunit test runner when bundler is notesbuildin 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/typescriptplugin entries for non-buildable libs (#34021, #33981) - linter: honor
setParserOptionsProjectin 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
- AgentEnder @AgentEnder
- Andrey Chalkin @L2jLiga
- Bendegúz Hajnal @hbendev
- Caleb Ukle
- Claude Opus 4.5
- Colum Ferry @Coly010
- Coly010 @Coly010
- Copilot @Copilot
- Craigory Coppola @AgentEnder
- David Antoon @davidantoon
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Kasper Christensen
- Leosvel Pérez Espinosa @leosvelperez
- leosvelperez @leosvelperez
- Louie Weng @lourw
- Max Kless
- MaxKless @MaxKless
- meeroslav @meeroslav
- Miroslav Jonaš @meeroslav
- Nicolas Beaussart @beaussan
- QING LIN
- Rafayel Hovhannisyan @hosembafer
- Steven Nance
- Tomas Ptacek @faileon