The JS plugin for Nx contains executors and generators that provide the best experience for developing JavaScript and TypeScript projects.
Last release today
26 Aug 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
3 years old
1889 releases · first in 2023
Release timeline
1889 releases since 2023Releases
- 23.0.210 Jul 2026
Release notes
Open source →23.0.2 (2026-07-10)
🚀 Features
- core: re-add isCacheableTask helper (#36177)
🩹 Fixes
- bundling: prevent TS6059 when an app imports a workspace lib from source (#36217, #35017)
- core: prefer module.registerHooks to avoid DEP0205 deprecation warning (#36081)
- core: prevent nx migrate crash when include=optional filters out the target package (#36087)
- core: make nx migrate honor preapproved packages and emit a valid temp workspace (#36086)
- core: skip daemon project-graph recompute on no-op file rewrites (#36082)
- core: prevent the TUI from auto-selecting a completed task when a batch finishes (#35833)
- core: deregister pseudo-terminal exit handlers when tasks finish (#36115)
- core: prevent path traversal / zip-slip in self-hosted remote cache (#36116)
- core: respect explicit --nxCloud=skip for AI agents in create-nx-workspace (#36131)
- core: warn when the self-hosted remote cache disables TLS verification (NXC-4593) (#36132, #36116)
- core: throw actionable error when pnpm .modules.yaml is missing (#35666, #35635)
- core: support
${configDir}in tsconfig path alias resolution (#36037, #35804) - core: prevent non-npm devEngines pin from breaking npm registry lookups (#36020, #35815)
- core: clarify nx sync remediation messaging and surface spinner output in non-tty (#35747)
- core: exclude direct-dependency overrides from generated package.json (#36040, #35675)
- core: apply target defaults when project.json overrides an inferred run-commands target with different commands (#36142, #36067)
- core: run the nx.bat wrapper for dot-nx setup on windows (#36048)
- core: speed up bun lockfile parsing (#36198)
- core: set NX_CLI_SET in batch worker processes (#36214, #36210)
- core: preserve comments in catalog YAML updates (#35733)
- core: box JsonFileSet payload to keep HashInstruction small (#36247, #35248, #36244, #36152)
- core: share workspace fileset hash results instead of deep-cloning per task (#36244, #34971, #34942)
- core: replace per-input visited clones with undo-log scoping in hash planner (#36248, #35071, #36152, #34971, #36244, #35248, #36247)
- core: intern hash instructions in a pool and plan with id lists (#36249, #35071, #36152, #36248)
- core: detect Codex sandbox on Linux to disable daemon and plugin isolation (#36273)
- devkit: restore prettier v2 support in formatFiles (#36193)
- graph: prevent project details web view top from being clipped (#36154)
- js: prevent doubled output paths in buildable library path mappings (#36138, #36079)
- js: scope incremental type-check .tsbuildinfo per project (#36137, #36113)
- js: preserve npm allowScripts allowlist in pruned package.json (#36016, #35931)
- js: resolve catalog references in pruned package.json output (#35805, #35419)
- js: avoid import locator unicode position panic (#36133, #36128)
- js: prevent Windows TS6059 rootDir errors in tsc builds (#36184, #35696)
- js: wait for process tree exit when stopping node executor tasks (#36230)
- linter: update terminal cli regex for local-dist build (#36201, #36199)
- maven: de-flake maven e2e by dropping -X debug forks and widening timeout (#36091)
- misc: bump axios to 1.16.1 (#36120)
- misc: use default import for chalk in @nx/workspace output.ts (#35523, #35521, #34111, #21201, #26667)
- misc: remove duplicate nx init cloud-prompt telemetry event (#36145)
- nx-cloud: use standard utm params on cloud prompt links (#36227, #36226)
- nx-dev: remove empty SaaS and Mobile template filters (#36085)
- react: reserve ports in rspack e2e test to avoid default port collisions (#36090)
- react: stop pinning eslint-plugin-react in generated projects (#36168, #36161)
- release: widen release e2e timeouts to absorb pre-version dlx install (#36092)
- repo: trust wix/brew tap so macOS detox CI can install applesimutils (#36146)
- rspack: use contenthash for chunkFilename to prevent stale chunks (#36136, #2292, #36014)
- rspack: stop mocking non-existent is-serve-mode util in apply-base-config test (fea2cabbcc)
- vite: widen vite ts-solution e2e build timeouts for cold multi-lib build (#36093)
- vite: detect @vitejs/plugin-vue2 (vite:vue2) for vue-tsc typecheck (#36125, #36094)
- vite: update deprecation docs link (#36070, #36053)
- vitest: support passing mode through to vitest (#35069)
- web: run executor/plugin/generator commands with the workspace package manager (#36021, #35950)
- webpack: prevent TS6059 when a tsc build bundles a workspace lib (#36188, #35017)
❤️ Thank You
- AgentEnder @AgentEnder
- Aidan Temple @aidant
- Craigory Coppola @AgentEnder
- cyphercodes @cyphercodes
- FrozenPandaz @FrozenPandaz
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Jonathan Garvey @jdgarvey
- Leosvel Pérez Espinosa @leosvelperez
- Miroslav Jonaš @meeroslav
- Rayan Salhab
- Richard Roozenboom @Roozenboom
- Sai Asish Y @SAY-5
- Steven Nance
- titanniya542-spec @titanniya542-spec
- Wilson Pinto
- 23.0.123 Jun 2026
Release notes
Open source →23.0.1 (2026-06-23)
🚀 Features
- nx-cloud: add utm tracking to clickable cloud prompt links (#36028)
🩹 Fixes
- angular: resolve esbuild option paths relative to the workspace root (#36017, #35936)
- angular-rspack: surface compilation failures as build errors and release resources on teardown (#36018)
- bundling: restore preprocessor extensions in postcss normalizeOp… (#36057, #35854)
- core: avoid tsconfig path false positives for sibling project roots (#35796, #35795, #35786)
- core: do not write minimumReleaseAgeExclude during nx migrate (#36045)
- core: do not crash nx migrate on non-semver dependency specifiers (#36051)
- core: format AI-edited files after agentic migrations (#36064)
- misc: bump happy-dom, tmp, and form-data to patched versions (#36013)
- nx-dev: keep mobile sidebar toggle clear of the conference banner (#36047)
- nx-dev: run next-sitemap directly instead of via pnpm (#36054)
- ⚠️ release: stop breaking change changelog entry from swallowing trailing PR body (#36052, #35910, #33070)
- vitest: apply mode-based config consistently in the test executor (#36041, #35196)
❤️ Thank You
- Alex Croteau @cw-alexcroteau
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- Marwan Johnstone
- 23.0.016 Jun 2026
Release notes
Open source →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
promptfield 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 --includeto 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
allWorkspaceFilesfrom 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 mcpto 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'independsOnentries (#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/pluginentry point has been removed; use@nx/dotnet. The included migration updatesnx.jsonautomatically.Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is merged. --> 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
setupFileoption of the@nx/jest:jestexecutor and theskipSetupFileoption of the@nx/jest:configurationgenerator 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
initTasksRunnerexport is removed from thenxpackage. Consumers should userunDiscreteTasks/runContinuousTasksinstead.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:ngrxgenerator has been removed. Use@nx/angular:ngrx-root-storefor root state and@nx/angular:ngrx-feature-storefor 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:movegenerator is removed. Use@nx/workspace:move(or itsmvalias) instead. - angular: remove deprecated @nx/angular/module-federation entry point (#35512)
The
@nx/angular/module-federationentry point is removed. Update imports to use@nx/module-federation/angularinstead. Theupdate-23-0-0-update-with-module-federation-importmigration handles this automatically when runningnx migrate. - misc: remove deprecated stylesheet options from generators (#35103)
- misc: remove Tailwind CSS setup-tailwind generators (#35049)
❤️ Thank You
- Abdullah Alaqeel @aqeelat
- Adam Keenan @adamk33n3r
- AgentEnder @AgentEnder
- AI-JamesHenry @AI-JamesHenry
- Alex
- Alex Croteau @cw-alexcroteau
- Amp
- Artur @arturovt
- beeman
- Benjamin Cabanes @bcabanes
- Benjamin Staneck @Stanzilla
- Charlie Croom
- Claude
- Claude Opus 4.6
- Claude Opus 4.8 (1M context)
- Copilot @Copilot
- Craigory Coppola @AgentEnder
- FrozenPandaz @FrozenPandaz
- Jack Hsu @jaysoo
- Jack Stevenson
- Jason Jean @FrozenPandaz
- jaysoo @jaysoo
- Justin McLellan @jmclellan-crexi
- Leosvel Pérez Espinosa @leosvelperez
- leosvelperez @leosvelperez
- llwt @llwt
- Louie Weng @lourw
- Max Kless
- MaxKless @MaxKless
- Minh Lê @DucMinhNe
- Miroslav Jonaš @meeroslav
- Olawuni Olagoke @olagokemills
- Optischa @Optischa
- Rares Matei
- rarmatei @rarmatei
- Sharon Lougheed
- ShwethaSundar
- Steven Nance
- Thiago Zanluca @zanlucathiago
- Thomas Dekiere @thdk
- 23.0.0-rc.415 Jun 2026pre-release
Release notes
Open source →23.0.0-rc.4 (2026-06-15)
🚀 Features
- core: revert array-shape targetDefaults support pending redesign and reapplication (#36005, #35340, #35711, #35752, #35991)
- nx-dev: support optional artwork in the promo banner card (#35992)
🩹 Fixes
- 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)
- module-federation: bound static remote proxy port check to avoid nx serve hang (#35996, #33871, #33909)
- testing: give remix integrated e2e tests headroom for npm install (#35998)
❤️ Thank You
- Benjamin Cabanes @bcabanes
- Claude
- Craigory Coppola @AgentEnder
- Jason Jean @FrozenPandaz
- 23.0.0-rc.312 Jun 2026pre-release
Release notes
Open source →23.0.0-rc.3 (2026-06-12)
🩹 Fixes
- 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)
❤️ Thank You
- Alex
- Jason Jean
- Rares Matei
- rarmatei @rarmatei
- 23.0.0-rc.212 Jun 2026pre-release
Release notes
Open source →23.0.0-rc.2 (2026-06-12)
🩹 Fixes
- core: override shell-quote to ^1.8.4 to patch GHSA-w7jw-789q-3m8p (#35974)
- gradle: make project graph configuration hash deterministic (#35972)
- gradle: exclude incremental-compilation .bin files from task inputs (#35975)
❤️ Thank You
- Jason Jean @FrozenPandaz
- 23.0.0-rc.111 Jun 2026pre-release
Release notes
Open source →23.0.0-rc.1 (2026-06-11)
🚀 Features
- nx-dev: add docs top banner for ai monorepos conference (#35956)
🩹 Fixes
- 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)
- repo: correct config path in update-repos scripts and use next migrate CLI (#35968, #35915)
❤️ Thank You
- FrozenPandaz @FrozenPandaz
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- 23.0.0-rc.011 Jun 2026pre-release
Release notes
Open source →23.0.0-rc.0 (2026-06-10)
🚀 Features
- core: extend
nx migrate --includeto any package that supports optional updates (#35905) - core: report analytics events for the nx migrate flow (#35937)
- 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)
🩹 Fixes
- core: show agentic migration prompt descriptions only for the focused choice (#35908)
- 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)
- release: scope ambiguous-scope check to active release group's projects (#35745, #35744)
- repo: increase FreeBSD publish VM memory to prevent OOM (#35914)
- vite: improve vitest 4 migration to better handle vitest workspace config (#35940)
- webpack: add webpack tooling to devDependencies in the v23 migration (#35944)
❤️ Thank You
- Claude Opus 4.8 (1M context)
- Craigory Coppola @AgentEnder
- FrozenPandaz @FrozenPandaz
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Justin McLellan @jmclellan-crexi
- Leosvel Pérez Espinosa @leosvelperez
- core: extend
- 23.0.0-pr.35465.2bc264327 Apr 2026pre-release
Nothing published for this version
- 23.0.0-pr.35413.460eeef24 Apr 2026pre-release
Nothing published for this version
- 23.0.0-pr.35204.e5f145929 Apr 2026pre-release
Nothing published for this version
- 23.0.0-pr.33655.cdc3e7228 Apr 2026pre-release
Nothing published for this version
- 23.0.0-pr.33655.96527d27 May 2026pre-release
Nothing published for this version
- 23.0.0-pr.33655.05d95425 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260618-f22e75c18 Jun 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260616-d9d260c16 Jun 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260615-71bbc7015 Jun 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260612-d5143c012 Jun 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260612-10af44f12 Jun 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260610-ab099bd10 Jun 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260609-b9a05829 Jun 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260603-fc8444b3 Jun 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260602-6ca3f3a2 Jun 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260521-b6858ba21 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260519-6e6edab19 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260515-4f1406715 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260514-feb64ba14 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260513-934a70b13 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260508-a2dfac68 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260508-9f8a6c28 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260506-b5945376 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260504-e8aa6124 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260501-fde01fa1 May 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260429-0205b2229 Apr 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260428-b05d65328 Apr 2026pre-release
Nothing published for this version
- 23.0.0-canary.20260424-608c3be24 Apr 2026pre-release
Nothing published for this version
- 23.0.0-beta.259 Jun 2026pre-release
Release notes
Open source →23.0.0-beta.25 (2026-06-09)
🚀 Features
- core: extend
nx migrate --includeto any package that supports optional updates (#35905) - 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)
🩹 Fixes
- core: respect package manager minimum release age in nx migrate (#35902)
- core: show agentic migration prompt descriptions only for the focused choice (#35908)
- 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: increase FreeBSD publish VM memory to prevent OOM (#35914)
❤️ Thank You
- Claude Opus 4.8 (1M context)
- FrozenPandaz @FrozenPandaz
- Jason Jean @FrozenPandaz
- Justin McLellan @jmclellan-crexi
- Leosvel Pérez Espinosa @leosvelperez
- core: extend
- 23.0.0-beta.246 Jun 2026pre-release
Release notes
Open source →23.0.0-beta.24 (2026-06-06)
🚀 Features
- angular: deprecate SCAM generators (#35887)
- 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)
- ⚠️ devkit: deprecate the standalone parameter of addProjectConfiguration (#35883)
- misc: add --trustThirdPartyPreset flag to skip confirmation prompt (#35827, #35826)
- ⚠️ webpack: deprecate webpack/rspack config compose helpers (#35867)
🩹 Fixes
- 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)
- ⚠️ dotnet: graduate @nx/dotnet — drop experimental banner and the /plugin export (#35895)
- js: align tsconfig include and exclude inputs inference with TypeScript behavior (#35876)
- 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)
- nextjs: multi-version support compliance (NXC-4395) (#35870)
- react: multi-version support compliance (NXC-4399) (#35872)
- react-native: fix TS2742 build error and retarget rollup/webpack migrations to beta.24 (#35896)
- 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)
⚠️ Breaking Changes
- dotnet: graduate @nx/dotnet — drop experimental banner and the /plugin export (#35895)
** the
@nx/dotnet/pluginentry point has been removed; use@nx/dotnet. The included migration updatesnx.jsonautomatically.Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is merged. --> 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)
❤️ Thank You
- Craigory Coppola @AgentEnder
- Jack Hsu @jaysoo
- Jack Stevenson
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- 23.0.0-beta.234 Jun 2026pre-release
Release notes
Open source →23.0.0-beta.23 (2026-06-04)
🚀 Features
- angular: deprecate convert-to-with-mf generator (#35862)
- core: avoid redundant rematch in findMatchingConfigFiles (#35793, #35792)
- ⚠️ core: rename CreateNodes V2 types to canonical OG names (#35386, #32951)
- ⚠️ nextjs: deprecate withNx function (#35861)
🩹 Fixes
- angular-rspack: dispose stylesheet bundler so one-shot builds exit (#35869)
- 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)
- dotnet: declare obj output for publish/pack and track vitest dep spec tsconfig input (#35858)
- js: use TypeScript readConfigFile instead of JSON.parse in resolvePathsBaseUrl (#35539, #34965, #35537, #35824)
- vue: multi-version support compliance for @nx/vue and @nx/nuxt (#35845)
⚠️ Breaking Changes
- core: rename CreateNodes V2 types to canonical OG names (#35386, #32951)
- nextjs: deprecate withNx function (#35861)
❤️ Thank You
- Abdullah Alaqeel @aqeelat
- Alex Croteau @cw-alexcroteau
- Claude
- Craigory Coppola @AgentEnder
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- Minh Lê @DucMinhNe
- 23.0.0-beta.223 Jun 2026pre-release
Release notes
Open source →23.0.0-beta.22 (2026-06-02)
🚀 Features
- core: add a migrate configuration section to nx.json (#35831)
- core: feed migration docs to agents in nx migrate (#35835)
- linter: deprecate ESLint v8 support (#35819)
- ⚠️ testing: remove deprecated skipSetupFile and setupFile jest options (#35588)
- ⚠️ vite: deprecate the nxViteTsPaths and nxCopyAssetsPlugin helpers (#35664)
🩹 Fixes
- angular: bump zoneJsVersion to ~0.16.0 to align with Angular v21 (#35799)
- 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)
- 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)
- misc: multi-version compliance for @nx/express, @nx/node, and @nx/nest (#35807)
- 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)
- repo: rename publish VERSION env var to avoid MSBuild leak (#35849)
- testing: enforce jest 29-30 multi-version compliance for @nx/jest (#35758)
- vite: enforce multi-version support windows for @nx/vite and @nx/vitest (#35671)
⚠️ Breaking Changes
- vite: deprecate the nxViteTsPaths and nxCopyAssetsPlugin helpers (#35664)
- testing: remove deprecated skipSetupFile and setupFile jest options (#35588)
The
setupFileoption of the@nx/jest:jestexecutor and theskipSetupFileoption of the@nx/jest:configurationgenerator are removed.
❤️ Thank You
- Claude
- Craigory Coppola @AgentEnder
- FrozenPandaz @FrozenPandaz
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- llwt @llwt
- Miroslav Jonaš @meeroslav
- Olawuni Olagoke @olagokemills
- Steven Nance
- Thiago Zanluca @zanlucathiago
- Thomas Dekiere @thdk
- 23.0.0-beta.211 Jun 2026pre-release
Release notes
Open source →23.0.0-beta.21 (2026-05-29)
🚀 Features
- module-federation: deprecate old generators and add new consumer/provider generators (#35825)
🩹 Fixes
- angular-rspack: apply multi-version compliance to @nx/angular-rspack(-compiler) (#35806)
- 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)
- linter: multi-version support compliance for @nx/eslint and @nx/eslint-plugin (#35811, #35806)
- storybook: multi-version support compliance (#35770)
❤️ Thank You
- Craigory Coppola @AgentEnder
- Jack Hsu @jaysoo
- Jack Stevenson
- Leosvel Pérez Espinosa @leosvelperez
- Miroslav Jonaš @meeroslav
- 23.0.0-beta.2027 May 2026pre-release
Release notes
Open source →23.0.0-beta.20 (2026-05-27)
🚀 Features
- core: add agentic mode to nx migrate --run-migrations (#35718)
🩹 Fixes
- core: update brace-expansion and yaml (#35790)
❤️ Thank You
- Jack Hsu @jaysoo
- Leosvel Pérez Espinosa @leosvelperez
- leosvelperez @leosvelperez
- 23.0.0-beta.1923 May 2026pre-release
Release notes
Open source →23.0.0-beta.19 (2026-05-22)
🚀 Features
- js: support pnpm 11.2.2 (#35772)
- ⚠️ misc: drop deprecated webpack plugin re-exports + v23 polish (#35659)
🩹 Fixes
- bundling: multi-version support compliance for @nx/esbuild (#35768)
- core: always set task.cache as an explicit boolean (#35778)
- nx-plugin: plugin lint checks should use dependentTasksOutputFiles (#35755)
- repo: run dotnet restore before publish (#35771)
- repo: run dotnet restore before macos e2e job (#35774)
- testing: publish @nx/vitest, @nx/cypress, @nx/playwright, @nx/vite from local dist (#35743)
⚠️ Breaking Changes
- misc: drop deprecated webpack plugin re-exports + v23 polish (#35659)
❤️ Thank You
- Claude
- Craigory Coppola @AgentEnder
- FrozenPandaz @FrozenPandaz
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- jaysoo @jaysoo
- Leosvel Pérez Espinosa @leosvelperez
- 23.0.0-beta.1822 May 2026pre-release
Release notes
Open source →23.0.0-beta.18 (2026-05-22)
🚀 Features
- core: add shell tab-completion (bash, zsh, fish, powershell) (#34951)
- ⚠️ misc: drop deprecated webpack plugin re-exports + v23 polish (#35659)
🩹 Fixes
- angular: only add @oxc-project/runtime on the vitest-analog path (#35734)
- core: detect vscode copilot ai agent (#35757)
- core: allow local plugin subpath imports without custom conditions (#35751, #35631)
- dotnet: include Directory.. files in inputs (#35738)
- js: fall back to npm publish when bun publish fails with auth error (#35756)
- js: multi-version support compliance (#35725)
- repo: run dotnet restore before publish (#35771)
⚠️ Breaking Changes
- misc: drop deprecated webpack plugin re-exports + v23 polish (#35659)
❤️ Thank You
- Benjamin Staneck @Stanzilla
- Craigory Coppola @AgentEnder
- FrozenPandaz @FrozenPandaz
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- jaysoo @jaysoo
- Leosvel Pérez Espinosa @leosvelperez
- 23.0.0-beta.1719 May 2026pre-release
Release notes
Open source →23.0.0-beta.17 (2026-05-19)
🚀 Features
- misc: convert prompt generator migrations to use prompt field (#35688)
🩹 Fixes
- 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)
- js: always register transpiler for registerTsProject so subsequent require(file) will work (#35735)
- ⚠️ linter: migrate @nx/eslint and @nx/eslint-plugin to local dist build (#35720)
- misc: skip
$escaping in file paths on windows (#35692) - rsbuild: infer build outputs from distPath.root directly (#35707)
⚠️ Breaking Changes
- linter: migrate @nx/eslint and @nx/eslint-plugin to local dist build (#35720)
❤️ Thank You
- AgentEnder @AgentEnder
- Artur @arturovt
- Copilot @Copilot
- Craigory Coppola @AgentEnder
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- leosvelperez @leosvelperez
- 23.0.0-beta.1617 May 2026pre-release
Release notes
Open source →23.0.0-beta.16 (2026-05-17)
🚀 Features
- core: enable native Node.js TypeScript stripping by default (#35608)
🩹 Fixes
- ⚠️ testing: migrate @nx/jest to local dist build (#35713)
⚠️ Breaking Changes
- testing: migrate @nx/jest to local dist build (#35713)
❤️ Thank You
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- 23.0.0-beta.1516 May 2026pre-release
Release notes
Open source →23.0.0-beta.15 (2026-05-16)
🩹 Fixes
❤️ Thank You
- Jason Jean @FrozenPandaz
- 23.0.0-beta.1416 May 2026pre-release
Release notes
Open source →23.0.0-beta.14 (2026-05-16)
🩹 Fixes
- ⚠️ core: remove deprecated initTasksRunner API (#35708, #29993)
- core: do not drop target defaults in 23.0.0 array migration (#35711)
- js: add backwards-compatible ./src/internal export shim for conformance@4/5 (#35710, #11347)
⚠️ Breaking Changes
- core: remove deprecated initTasksRunner API (#35708, #29993)
** The deprecated
initTasksRunnerexport is removed from thenxpackage. Consumers should userunDiscreteTasks/runContinuousTasksinstead.Related Issue(s)
Internal: NXC-4307
❤️ Thank You
- Jason Jean @FrozenPandaz
- 23.0.0-beta.1316 May 2026pre-release
Release notes
Open source →23.0.0-beta.13 (2026-05-15)
🚀 Features
- core: rename nx watch --includeDependentProjects to --includeDependencies (#35699)
- core: support filtered array-shape targetDefaults with projects and source (#35340)
- linter: allow prompt-only entries in migration nx-plugin-checks (#35700, #35638)
- ⚠️ release: drop deprecated releaseTag* flat properties and update v23 defaults (#35694)
🩹 Fixes
- 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)
- gradle: pin generated e2e project toolchain to installed JDK (#35703)
- js: build to local dist and use nodenext (#35538)
- rspack: multi-version support compliance for @nx/rspack and @nx/rsbuild (#35676)
⚠️ Breaking Changes
- release: drop deprecated releaseTag* flat properties and update v23 defaults (#35694)
❤️ Thank You
- AI-JamesHenry @AI-JamesHenry
- Alex
- Claude Opus 4.6
- Craigory Coppola @AgentEnder
- FrozenPandaz @FrozenPandaz
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- 23.0.0-beta.1214 May 2026pre-release
Release notes
Open source →23.0.0-beta.12 (2026-05-14)
🚀 Features
- core: support
promptfield in migration entries (#35638)
🩹 Fixes
- core: improve nx migrate multi-major flag handling and feedback (#35673, #35497, #35444)
- linter: only rewrite workspace-package peer deps to workspace:* (#35423, #35318, #33417)
- misc: stop inferring
projects: 'self'independsOnentries (#35686) - testing: multi-version support compliance for @nx/cypress (#35670)
- testing: correct yargs-parser import in getJestProjectsAsync (#35672, #35654)
❤️ Thank You
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- core: support
- 23.0.0-beta.1113 May 2026pre-release
Release notes
Open source →23.0.0-beta.11 (2026-05-13)
🩹 Fixes
- core: freshness-gate daemon recompute + per-OS force-flush grace (#35650, #35646)
- gradle: add transitive:true to all tasks (#35677)
❤️ Thank You
- FrozenPandaz @FrozenPandaz
- Jason Jean @FrozenPandaz
- Louie Weng @lourw
- 23.0.0-beta.1013 May 2026pre-release
Release notes
Open source →23.0.0-beta.10 (2026-05-13)
🚀 Features
- ⚠️ bundling: remove SVGR option and provide withSvgr migration (#35611)
- bundling: add Vite 7 -> 8 migrations (#35614)
- core: add --mode and --multi-major-mode flags to nx migrate (#35497)
- ⚠️ misc: remove deprecated js option from component generators (#35616, #29111)
- testing: bump cypress to 15.14 + remove stale Vite 8 guard (#35613)
- testing: add migration for Jest 30 snapshot guide link (#35629)
🩹 Fixes
- angular: multi-version support compliance (#35587)
- angular-rspack: exclude eslint config from tailwind v4 source scan (#35663)
- 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 mcpto run outside of an Nx workspace (#35655) - core: warn before installing unknown npm packages as preset (#35644)
- gradle: support Windows file paths (#35184, #34987)
- linter: improve convert-to-flat-config output fidelity (#35330)
- misc: vite migration import fix and ai doc corrections (#35647)
- 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)
⚠️ Breaking Changes
- 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)
❤️ Thank You
- Adam Keenan @adamk33n3r
- Amp
- Charlie Croom
- Craigory Coppola @AgentEnder
- FrozenPandaz @FrozenPandaz
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- Max Kless
- 23.0.0-beta.98 May 2026pre-release
Release notes
Open source →23.0.0-beta.9 (2026-05-08)
🚀 Features
- ⚠️ angular: remove deprecated ngrx generator (#35567)
- misc: drop Node 20 support and bump @types/node (#35591)
- ⚠️ misc: deprecate executors with inferred-plugin replacements (#35576, #35517)
- ⚠️ vite: remove vitest support in favor of @nx/vitest (#35517)
🩹 Fixes
- angular-rspack: keep root-scoped assets out of per-locale i18n emit (#35621)
- 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)
- devkit: exclude dist from jest module path scan (#35615)
- gradle: exclude project-graph from jest module path scan (#35609)
- linter: prevent ENOENT crash in getRelativeImportPath for unresolvable paths (#35007, #13872, #34066, #30491, #16716, #35006, #21889, #32190)
- maven: widen runCLI timeout for --no-batch maven.test.ts cases (#35589)
- release: restore packages/devkit/package.json after release (#35598, #34946)
- repo: drop node 26 from nightly matrix until playwright/yauzl fix (#35626, #40724, #168)
- testing: pin jest to ~30.3.0 to avoid jest-runtime 30.4 RN incompat (#35618)
- testing: handle absolute cypress screenshotsFolder/videosFolder paths (#35624)
⚠️ Breaking Changes
- misc: deprecate executors with inferred-plugin replacements (#35576, #35517)
- angular: remove deprecated ngrx generator (#35567)
The
@nx/angular:ngrxgenerator has been removed. Use@nx/angular:ngrx-root-storefor root state and@nx/angular:ngrx-feature-storefor feature state instead. - vite: remove vitest support in favor of @nx/vitest (#35517)
❤️ Thank You
- AgentEnder @AgentEnder
- Craigory Coppola @AgentEnder
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- jaysoo @jaysoo
- Leosvel Pérez Espinosa @leosvelperez
- Sharon Lougheed
- 23.0.0-beta.86 May 2026pre-release
Release notes
Open source →23.0.0-beta.8 (2026-05-06)
🚀 Features
- ⚠️ bundling: drop legacy typescript plugin and align rollup buildLibsFromSource default (#35516)
🩹 Fixes
- 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)
- dotnet: correct output paths for Web SDK and centralized dist setups (#35398)
- repo: resolve graph-client build-client sandbox violations (#35522)
⚠️ Breaking Changes
- bundling: drop legacy typescript plugin and align rollup buildLibsFromSource default (#35516)
❤️ Thank You
- beeman
- Claude
- Craigory Coppola @AgentEnder
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Optischa @Optischa
- 23.0.0-beta.75 May 2026pre-release
Release notes
Open source →23.0.0-beta.7 (2026-05-05)
🩹 Fixes
❤️ Thank You
- FrozenPandaz @FrozenPandaz
- Jason Jean @FrozenPandaz
- 23.0.0-beta.65 May 2026pre-release
Release notes
Open source →23.0.0-beta.6 (2026-05-05)
🚀 Features
- ⚠️ detox: deprecate the @nx/detox build and test executors (#35529)
- devkit: migrate
@nx/devkit/src/...deep imports (#35541, #34946) - ⚠️ testing: deprecate the @nx/cypress:cypress executor (#35531, #35529)
🩹 Fixes
- core: unique telemetry user_id; expose workspace_id dimension (#35553)
- core: use workspace root for package manager detection in script targets (#35550, #35116)
- devkit: drop build-base outputs override (#35542, #34946)
- js: include transitive workspace deps in pruned pnpm lockfile (#35532, #35347, #34655)
- maven: serialize Maven 4 build state recording (#35555)
- misc: adopt PluginCache across createNodes plugins to prevent flaky cache parse errors (#35544)
⚠️ Breaking Changes
- testing: deprecate the @nx/cypress:cypress executor (#35531, #35529)
- detox: deprecate the @nx/detox build and test executors (#35529)
❤️ Thank You
- FrozenPandaz @FrozenPandaz
- Jason Jean @FrozenPandaz
- MaxKless @MaxKless
- 23.0.0-beta.54 May 2026pre-release
Release notes
Open source →23.0.0-beta.5 (2026-05-01)
🚀 Features
- gradle: stream batch task results to nx as they finish (#35487)
- nx-dev: track docs analytics for code copy, LLM prompt, YouTube (#35526)
🩹 Fixes
- nx-dev: short-circuit bot probes in framer rewrite edge function (#35527)
❤️ Thank You
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- 23.0.0-beta.430 Apr 2026pre-release
Release notes
Open source →23.0.0-beta.4 (2026-04-30)
🚀 Features
- ⚠️ angular: remove deprecated @nx/angular/module-federation entry point (#35512)
- ⚠️ angular: remove deprecated move generator (#35513)
- core: show target uses task graph + filter broken dependsOn during normalization (#35367)
🩹 Fixes
- 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)
- js: reference vitest.config in eslint dep-checks for vitest libs (#35460, #33670, #35450)
- maven: skip attached artifacts that fail to materialize in batch record (#35473)
- nx-dev: document nested CLI subcommands beyond two levels (#35519)
⚠️ Breaking Changes
- angular: remove deprecated move generator (#35513)
The
@nx/angular:movegenerator is removed. Use@nx/workspace:move(or itsmvalias) instead. - angular: remove deprecated @nx/angular/module-federation entry point (#35512)
The
@nx/angular/module-federationentry point is removed. Update imports to use@nx/module-federation/angularinstead. Theupdate-23-0-0-update-with-module-federation-importmigration handles this automatically when runningnx migrate.
❤️ Thank You
- AgentEnder @AgentEnder
- Craigory Coppola @AgentEnder
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- 23.0.0-beta.330 Apr 2026pre-release
Release notes
Open source →23.0.0-beta.3 (2026-04-30)
🩹 Fixes
- core: preserve hydrateFileMap back-compat for cached nx-cloud workers (#35502, #34425)
- gradle: exclude batch-runner from jest haste-map crawl (#35501)
❤️ Thank You
- Jason Jean @FrozenPandaz
- 23.0.0-beta.229 Apr 2026pre-release
Release notes
Open source →23.0.0-beta.2 (2026-04-29)
🚀 Features
- ⚠️ misc: remove Tailwind CSS setup-tailwind generators (#35049)
- ⚠️ misc: remove deprecated stylesheet options from generators (#35103)
🩹 Fixes
- angular: disable vitest watch by default (#35493)
- bundling: include tsconfig solution input for rollup (#35476)
- bundling: include tsconfig solution input for webpack (#35477, #35476)
- 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)
- js: strip glob from inferred outputs before resolving as path (#35463, #35452)
- misc: exclude stories and specs from tailwind content scanning (#35470)
- misc: resolve pnpm catalog: refs in version lookups (#35459, #35453)
- nextjs: use cached project graph in withNx (#35475, #34518, #32880)
- node: include tsconfig input in node-app esbuild scaffold (#35466)
- react: withSvgr migration preserves other properties (#35484)
- release: handle short and full project names in commit scopes (#34219)
⚠️ Breaking Changes
- misc: remove deprecated stylesheet options from generators (#35103)
- misc: remove Tailwind CSS setup-tailwind generators (#35049)
❤️ Thank You
- Claude
- Craigory Coppola @AgentEnder
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- MaxKless @MaxKless
- ShwethaSundar