Releases
23.0.0
Compare
Sorry, something went wrong.
No results found
23.0.0 (2026-06-16)
🚀 Features
⚠️ angular: remove deprecated @nx/angular/module-federation entry point (#35512 )
⚠️ angular: remove deprecated move generator (#35513 )
⚠️ angular: remove deprecated ngrx generator (#35567 )
angular: deprecate convert-to-with-mf generator (#35862 )
angular: deprecate SCAM generators (#35887 )
⚠️ bundling: drop legacy typescript plugin and align rollup buildLibsFromSource default (#35516 )
⚠️ bundling: remove SVGR option and provide withSvgr migration (#35611 )
bundling: add Vite 7 -> 8 migrations (#35614 )
core: add support for '...' as a spread token when merging target config (#34285 )
core: show target uses task graph + filter broken dependsOn during normalization (#35367 )
core: add --mode and --multi-major-mode flags to nx migrate (#35497 )
core: support prompt field in migration entries (#35638 )
core: rename nx watch --includeDependentProjects to --includeDependencies (#35699 )
core: support filtered array-shape targetDefaults with projects and source (#35340 )
core: enable native Node.js TypeScript stripping by default (#35608 )
core: add shell tab-completion (bash, zsh, fish, powershell) (#34951 )
core: add agentic mode to nx migrate --run-migrations (#35718 )
core: add a migrate configuration section to nx.json (#35831 )
core: feed migration docs to agents in nx migrate (#35835 )
core: avoid redundant rematch in findMatchingConfigFiles (#35793 , #35792 )
⚠️ core: rename CreateNodes V2 types to canonical OG names (#35386 , #32951 )
core: support prompt-only and hybrid migrations in Nx Console UI (#35822 , #35718 , #3153 )
core: add JSON schema for migrations.json files (#35888 )
core: add migrations for createNodesV2 -> createNodes rename (#35893 , #35386 )
core: extend nx migrate --include to any package that supports optional updates (#35905 )
core: report analytics events for the nx migrate flow (#35937 )
core: revert array-shape targetDefaults support pending redesign and reapplication (#36005 , #35340 , #35711 , #35752 , #35991 )
⚠️ detox: deprecate the @nx/detox build and test executors (#35529 )
devkit: migrate @nx/devkit/src/... deep imports (#35541 , #34946 )
⚠️ devkit: deprecate the standalone parameter of addProjectConfiguration (#35883 )
gradle: stream batch task results to nx as they finish (#35487 )
js: support pnpm 11.2.2 (#35772 )
linter: allow prompt-only entries in migration nx-plugin-checks (#35700 , #35638 )
linter: deprecate ESLint v8 support (#35819 )
⚠️ misc: remove Tailwind CSS setup-tailwind generators (#35049 )
⚠️ misc: remove deprecated stylesheet options from generators (#35103 )
misc: drop Node 20 support and bump @types/node (#35591 )
⚠️ misc: deprecate executors with inferred-plugin replacements (#35576 , #35517 )
⚠️ misc: remove deprecated js option from component generators (#35616 , #29111 )
misc: convert prompt generator migrations to use prompt field (#35688 )
⚠️ misc: drop deprecated webpack plugin re-exports + v23 polish (#35659 )
misc: add --trustThirdPartyPreset flag to skip confirmation prompt (#35827 , #35826 )
misc: remove migrations prior to v21 in preparation for v23 (#35909 , #30839 , #32904 , #35900 )
misc: multi-version support compliance for detox, expo, react-native, and remix (#35885 )
misc: prompt analytics earlier in init flow (#35922 )
module-federation: deprecate old generators and add new consumer/provider generators (#35825 )
⚠️ nextjs: deprecate withNx function (#35861 )
nx-dev: track docs analytics for code copy, LLM prompt, YouTube (#35526 )
nx-dev: add docs top banner for ai monorepos conference (#35956 )
nx-dev: support optional artwork in the promo banner card (#35992 )
⚠️ release: drop deprecated releaseTag* flat properties and update v23 defaults (#35694 )
⚠️ testing: deprecate the @nx/cypress:cypress executor (#35531 , #35529 )
testing: bump cypress to 15.14 + remove stale Vite 8 guard (#35613 )
testing: add migration for Jest 30 snapshot guide link (#35629 )
⚠️ testing: remove deprecated skipSetupFile and setupFile jest options (#35588 )
⚠️ vite: remove vitest support in favor of @nx/vitest (#35517 )
⚠️ vite: deprecate the nxViteTsPaths and nxCopyAssetsPlugin helpers (#35664 )
⚠️ webpack: deprecate webpack/rspack config compose helpers (#35867 )
🩹 Fixes
angular: disable vitest watch by default (#35493 )
angular: multi-version support compliance (#35587 )
angular: only add @oxc-project/runtime on the vitest-analog path (#35734 )
angular: bump zoneJsVersion to ~0.16.0 to align with Angular v21 (#35799 )
angular-rspack: keep root-scoped assets out of per-locale i18n emit (#35621 )
angular-rspack: exclude eslint config from tailwind v4 source scan (#35663 )
angular-rspack: apply multi-version compliance to @nx/angular-rspack(-compiler) (#35806 )
angular-rspack: dispose stylesheet bundler so one-shot builds exit (#35869 )
bundling: include tsconfig solution input for rollup (#35476 )
bundling: include tsconfig solution input for webpack (#35477 , #35476 )
bundling: multi-version support compliance for @nx/esbuild (#35768 )
core: remove redundant allWorkspaceFiles from the project graph pipeline (#34425 )
core: prevent spinner flicker when sync applying (#35445 )
core: exclude hyperfine env vars from daemon env reflection (182273670a )
core: provide actionable feedback when running migrations and pre-install fails with npm peer dep errors (#33961 , #33942 )
core: consider virtual trees in multiGlobWithWorkspaceContext (#35447 , #31805 , #35373 , #32588 )
core: surface ./nx --version stderr and force devDeps install (#35469 )
core: keep continuous children alive when nx:noop orchestrator completes (#35388 )
core: start TUI event reader synchronously in enter() to prevent stdin race (#35465 , #34619 , #34144 )
core: use require for global to local Nx handoff so Windows drive paths work (#35478 )
core: prevent daemon shutdown from cache-poisoned in-process nx loads (#35482 , #35444 , #34463 , #34111 )
core: add provenance check in nx console status path (#35485 )
core: skip target-defaults synthesis when defaults are incompatible with the specified target (#35486 )
core: native watcher rewrite + daemon hardening for daemon-on e2e (#35204 , #14 , #19 , #12 , #13 )
core: remove access control header from graph app (#35494 )
core: preserve hydrateFileMap back-compat for cached nx-cloud workers (#35502 , #34425 )
core: correctly classify same-second in-place updates in macOS watcher (#35514 )
core: restore deprecated allWorkspaceFiles on WorkspaceFileMap (#35518 , #34425 , #35502 )
core: ensure verbose logs go to stderr and daemon logs are properly decorated (#34358 )
core: show flaky-task count in run summary (#35491 )
core: unique telemetry user_id; expose workspace_id dimension (#35553 )
core: use workspace root for package manager detection in script targets (#35550 , #35116 )
core: update minimatch to 10.2.5 (#35569 , #34660 )
core: restore use-legacy-versioning shim for @nx/js@21 ensurePackage path (#35574 )
core: isolate NX_PARALLEL env var in parallel-related specs (#35579 )
core: bump axios to 1.16.0 for all packages (#35568 )
core: skip handleimport miss path when nx key packages are absent (#35596 )
core: use gethostuuid(3) instead of ioreg on macOS (#35599 )
core: isolate cache env vars in splitArgs spec (#35584 )
core: enable node's native v8 compile cache support (#35415 , #20454 )
core: error with helpful error instead of looping nx invocations (#34820 )
core: support skipped batch tasks end-to-end and fix TUI double logs (#35617 )
core: keep TUI task selection on the in-progress section (#35640 )
core: drain in-flight notify events in daemon force_flush_pending (#35646 , #35630 )
⚠️ core: drop legacy 'self'/'dependencies' magic strings in dependsOn (#35648 , #4017 )
core: correct TUI sidebar viewport height off-by-one (#34682 )
core: allow nx mcp to run outside of an Nx workspace (#35655 )
core: warn before installing unknown npm packages as preset (#35644 )
core: freshness-gate daemon recompute + per-OS force-flush grace (#35650 , #35646 )
core: improve nx migrate multi-major flag handling and feedback (#35673 , #35497 , #35444 )
core: use native graceful process tree shutdown (#33655 , #32438 )
core: warn instead of silently dropping legacy 'self'/'dependencies' dependsOn values (#35687 , #35648 )
core: preserve input order in createNodes plugin results (#35595 )
⚠️ core: remove deprecated initTasksRunner API (#35708 , #29993 )
core: do not drop target defaults in 23.0.0 array migration (#35711 )
core: restore nx/src/index entrypoint for Nx Cloud client compatibility (#35712 , #35708 )
core: resolve local plugin subpath imports from source (#35631 )
core: treat undefined task parallelism as parallel when scheduling (#35736 )
core: handle object form of bin field in getPrettierPath (#35680 )
core: detect vscode copilot ai agent (#35757 )
core: allow local plugin subpath imports without custom conditions (#35751 , #35631 )
core: always set task.cache as an explicit boolean (#35778 )
core: update brace-expansion and yaml (#35790 )
core: allow nx build scripts in generated pnpm-workspace.yaml (#35564 )
core: update tmp to 0.2.6 due to CVE-2026-44705 (#35813 )
core: correct nx migrate commit-tally undercount and consolidate outcome state (#35820 )
core: read pod cgroup limits instead of node limits in resource metrics (#35622 , #35665 )
core: forward full task graph to batch executors under DTE (#35859 )
core: support local plugins using NodeNext .js import specifiers (#35834 )
core: gate nx migrate first-party/third-party modes to Nx v23+ targets (#35830 )
core: correct 'occured' typo to 'occurred' in error messages (#35852 )
core: use workspace package manager when fetching migrations via install (#35866 )
core: disallow nx migrate --interactive for Nx v23+ targets (#35874 )
core: pre-authorize agentic handoff writes and consult the user before failing a step (#35889 )
core: respect --no-interactive across all nx migrate prompts (#35884 )
core: keep daemon alive when a recompute's plugin load fails (#35705 , #35650 )
core: respect NX_PREFER_TS_NODE over native type stripping (#35892 )
core: respect package manager minimum release age in nx migrate (#35902 )
core: show agentic migration prompt descriptions only for the focused choice (#35908 )
core: allow analytics requests through Claude Code sandbox network filter (#35949 )
core: exclude NX_CLOUD_ env vars from daemon env reflection (#35961 )
core: degrade cooldown-blocked dist-tags within their own channel (#35967 )
core: override shell-quote to ^1.8.4 to patch GHSA-w7jw-789q-3m8p (#35974 )
core: re-hash batch tasks with deps outputs after execution (#35980 , #34798 )
core: do not fail local plugin lookup when workspace has no root tsconfig (#35969 , #35631 , #35751 , #35970 )
core: handle --help for commands that bypass workspace handling (#35989 , #32662 )
core: allow {projectRoot} after the start of an output when project is at the workspace root (#35993 , #26244 , #35839 )
core: read and replay cached failures when NX_CACHE_FAILURES is enabled (#35997 , #35901 )
detox: generate valid JSON in .detoxrc for non-expo apps (bde1f18cef )
devkit: drop build-base outputs override (#35542 , #34946 )
devkit: only rewrite deep-import paths in real import sites (#35566 , #35541 , #35565 , #3131 )
devkit: exclude dist from jest module path scan (#35615 )
dotnet: correct output paths for Web SDK and centralized dist setups (#35398 )
dotnet: include Directory.. files in inputs (#35738 )
dotnet: declare obj output for publish/pack and track vitest dep spec tsconfig input (#35858 )
⚠️ dotnet: graduate @nx/dotnet — drop experimental banner and the /plugin export (#35895 )
gradle: exclude batch-runner from jest haste-map crawl (#35501 )
gradle: exclude project-graph from jest module path scan (#35609 )
gradle: support Windows file paths (#35184 , #34987 )
gradle: add transitive:true to all tasks (#35677 )
gradle: pin generated e2e project toolchain to installed JDK (#35703 )
gradle: make project graph configuration hash deterministic (#35972 )
gradle: exclude incremental-compilation .bin files from task inputs (#35975 )
js: include extended tsconfigs from project references in typecheck inputs (#35457 )
js: strip glob from inferred outputs before resolving as path (#35463 , #35452 )
js: reference vitest.config in eslint dep-checks for vitest libs (#35460 , #33670 , #35450 )
js: include transitive workspace deps in pruned pnpm lockfile (#35532 , #35347 , #34655 )
js: build to local dist and use nodenext (#35538 )
js: add backwards-compatible ./src/internal export shim for conformance@4/5 (#35710 , #11347 )
js: always register transpiler for registerTsProject so subsequent require(file) will work (#35735 )
js: fall back to npm publish when bun publish fails with auth error (#35756 )
js: multi-version support compliance (#35725 )
js: support auto mode for non-pnpm lock files in affected detection (#35141 , #34937 )
js: handle already-published version errors in release-publish executor (#35782 , #35235 )
js: use TypeScript readConfigFile instead of JSON.parse in resolvePathsBaseUrl (#35539 , #34965 , #35537 , #35824 )
js: align tsconfig include and exclude inputs inference with TypeScript behavior (#35876 )
js: correct inferred tsbuildinfo output path when rootDir is set (#36011 )
linter: detect root lint target added in same generator run (#35296 , #23147 , #34531 )
linter: prevent ENOENT crash in getRelativeImportPath for unresolvable paths (#35007 , #13872 , #34066 , #30491 , #16716 , #35006 , #21889 , #32190 )
linter: improve convert-to-flat-config output fidelity (#35330 )
linter: only rewrite workspace-package peer deps to workspace:* (#35423 , #35318 , #33417 )
⚠️ linter: migrate @nx/eslint and @nx/eslint-plugin to local dist build (#35720 )
linter: multi-version support compliance for @nx/eslint and @nx/eslint-plugin (#35811 , #35806 )
maven: skip attached artifacts that fail to materialize in batch record (#35473 )
maven: serialize Maven 4 build state recording (#35555 )
maven: widen runCLI timeout for --no-batch maven.test.ts cases (#35589 )
misc: exclude stories and specs from tailwind content scanning (#35470 )
misc: resolve pnpm catalog: refs in version lookups (#35459 , #35453 )
misc: adopt PluginCache across createNodes plugins to prevent flaky cache parse errors (#35544 )
misc: vite migration import fix and ai doc corrections (#35647 )
misc: stop inferring projects: 'self' in dependsOn entries (#35686 )
misc: skip $ escaping in file paths on windows (#35692 )
misc: multi-version compliance for @nx/express, @nx/node, and @nx/nest (#35807 )
misc: publish migration prompt files and report the real migrate fetch error (#35886 )
misc: multi-version support compliance for rollup, webpack, and module-federation (#35860 )
misc: rename createNodesV2 value usages in v23 migration, not just imports (#35930 )
misc: declare continuous on inferred executor targets (#35941 )
misc: fix gitlab ci workflow for new repos and merge requests (#34237 )
module-federation: bound static remote proxy port check to avoid nx serve hang (#35996 , #33871 , #33909 )
nextjs: use cached project graph in withNx (#35475 , #34518 , #32880 )
nextjs: multi-version support compliance (NXC-4395 ) (#35870 )
node: include tsconfig input in node-app esbuild scaffold (#35466 )
nx-dev: document nested CLI subcommands beyond two levels (#35519 )
nx-dev: short-circuit bot probes in framer rewrite edge function (#35527 )
nx-plugin: plugin lint checks should use dependentTasksOutputFiles (#35755 )
react: withSvgr migration preserves other properties (#35484 )
react: multi-version support compliance (NXC-4399 ) (#35872 )
react-native: fix TS2742 build error and retarget rollup/webpack migrations to beta.24 (#35896 )
release: handle short and full project names in commit scopes (#34219 )
release: restore packages/devkit/package.json after release (#35598 , #34946 )
release: skip expensive changelog operations when changelogs are disabled (#35405 )
release: scope fallback to project history for new packages (#35323 )
release: require docker config for docker versioning (#35841 )
release: scope ambiguous-scope check to active release group's projects (#35745 , #35744 )
remix: correct migration implementation path for flat-build packages (#35899 , #35893 )
repo: resolve graph-client build-client sandbox violations (#35522 )
repo: drop node 26 from nightly matrix until playwright/yauzl fix (#35626 , #40724 , #168 )
repo: run dotnet restore before publish (#35771 )
repo: run dotnet restore before macos e2e job (#35774 )
repo: rename publish VERSION env var to avoid MSBuild leak (#35849 )
repo: set workspace-plugin type to module to silence Node strip-types warning (#35880 )
⚠️ repo: migrate remaining first-party plugins to local dist build (M2-M5) (#35785 , #34946 , #35743 )
repo: use import type for type-only @nx/devkit imports in copy-a… (#35897 )
repo: increase FreeBSD publish VM memory to prevent OOM (#35914 )
repo: correct config path in update-repos scripts and use next migrate CLI (#35968 , #35915 )
rsbuild: infer build outputs from distPath.root directly (#35707 )
rspack: multi-version support compliance for @nx/rspack and @nx/rsbuild (#35676 )
storybook: multi-version support compliance (#35770 )
testing: convert executor-based jest.config.ts and preserve type-only imports (#35286 , #34593 )
testing: pin jest to ~30.3.0 to avoid jest-runtime 30.4 RN incompat (#35618 )
testing: handle absolute cypress screenshotsFolder/videosFolder paths (#35624 )
testing: correct paths and reserve ports across flaky React MF e2e tests (#35633 , #34148 , #32948 , #35325 )
testing: multi-version support compliance for @nx/playwright (#35642 )
testing: exclude dist and out-tsc from default jest module path scan (#35619 )
testing: multi-version support compliance for @nx/cypress (#35670 )
testing: correct yargs-parser import in getJestProjectsAsync (#35672 , #35654 )
⚠️ testing: migrate @nx/jest to local dist build (#35713 )
testing: publish @nx/vitest, @nx/cypress, @nx/playwright, @nx/vite from local dist (#35743 )
testing: enforce jest 29-30 multi-version compliance for @nx/jest (#35758 )
testing: give remix integrated e2e tests headroom for npm install (#35998 )
vite: enforce multi-version support windows for @nx/vite and @nx/vitest (#35671 )
vite: improve vitest 4 migration to better handle vitest workspace config (#35940 )
vue: multi-version support compliance for @nx/vue and @nx/nuxt (#35845 )
webpack: add webpack tooling to devDependencies in the v23 migration (#35944 )
⚠️ Breaking Changes
dotnet: graduate @nx/dotnet — drop experimental banner and the /plugin export (#35895 )
** the @nx/dotnet/plugin entry point has been
removed; use @nx/dotnet. The included migration updates nx.json
automatically.
Related Issue(s)
N/A
repo: migrate remaining first-party plugins to local dist build (M2-M5) (#35785 , #34946 , #35743 )
devkit: deprecate the standalone parameter of addProjectConfiguration (#35883 )
webpack: deprecate webpack/rspack config compose helpers (#35867 )
core: rename CreateNodes V2 types to canonical OG names (#35386 , #32951 )
nextjs: deprecate withNx function (#35861 )
vite: deprecate the nxViteTsPaths and nxCopyAssetsPlugin helpers (#35664 )
testing: remove deprecated skipSetupFile and setupFile jest options (#35588 )
The setupFile option of the @nx/jest:jest executor
and the skipSetupFile option of the @nx/jest:configuration generator
are removed.
misc: drop deprecated webpack plugin re-exports + v23 polish (#35659 )
linter: migrate @nx/eslint and @nx/eslint-plugin to local dist build (#35720 )
testing: migrate @nx/jest to local dist build (#35713 )
core: remove deprecated initTasksRunner API (#35708 , #29993 )
** The deprecated initTasksRunner export is removed
from the nx package. Consumers should use runDiscreteTasks /
runContinuousTasks instead.
Related Issue(s)
Internal: NXC-4307
release: drop deprecated releaseTag* flat properties and update v23 defaults (#35694 )
misc: remove deprecated js option from component generators (#35616 , #29111 )
core: drop legacy 'self'/'dependencies' magic strings in dependsOn (#35648 , #4017 )
bundling: remove SVGR option and provide withSvgr migration (#35611 )
misc: deprecate executors with inferred-plugin replacements (#35576 , #35517 )
angular: remove deprecated ngrx generator (#35567 )
The @nx/angular:ngrx generator has been removed. Use
@nx/angular:ngrx-root-store for root state and
@nx/angular:ngrx-feature-store for feature state instead.
vite: remove vitest support in favor of @nx/vitest (#35517 )
bundling: drop legacy typescript plugin and align rollup buildLibsFromSource default (#35516 )
testing: deprecate the @nx/cypress:cypress executor (#35531 , #35529 )
detox: deprecate the @nx/detox build and test executors (#35529 )
angular: remove deprecated move generator (#35513 )
The @nx/angular:move generator is removed. Use
@nx/workspace:move (or its mv alias) instead.
angular: remove deprecated @nx/angular/module-federation entry point (#35512 )
The @nx/angular/module-federation entry point is
removed. Update imports to use @nx/module-federation/angular instead.
The update-23-0-0-update-with-module-federation-import migration
handles this automatically when running nx migrate.
misc: remove deprecated stylesheet options from generators (#35103 )
misc: remove Tailwind CSS setup-tailwind generators (#35049 )
❤️ Thank You
You can’t perform that action at this time.