Releases
23.1.0
Compare
Sorry, something went wrong.
No results found
23.1.0 (2026-07-13)
🚀 Features
⚠️ angular: support angular v22 (#35851 , #35910 )
core: show a performance report at the end of every run (#36077 )
core: support filtered targetDefaults via the nested-array shape (#36049 )
core: re-add isCacheableTask helper (#36177 )
core: add mouse support to the terminal UI (#35868 )
core: scaffold create-nx-workspace into the current directory (#36134 )
expo: support Expo SDK 56 (#35904 , #35714 )
⚠️ linter: drop eslint v8 support (#36006 )
linter: add migration to drop typescript-eslint v8-removed rules from flat configs (#36123 )
misc: add next 14 to 15 and react 18 to 19 upgrade paths (#36031 )
nx-cloud: add utm tracking to clickable cloud prompt links (#36028 )
nx-dev: show product hunt launch banner in docs (#36112 )
nx-dev: show product hunt launch banner in docs" (#36129 , #36112 )
release: add option to force changelog generation for programmatic usage (#36242 )
repo: enable the tsgo compiler workspace-wide (#35926 , #35047 , #35167 )
rspack: support @rspack/core@2 and @rsbuild/core@2 (multi-version compliance) (#35682 , #35764 , #13420 , #781 )
storybook: update Storybook to support Angular 22 (#36293 )
testing: add migration to verify typecheck after the 23.1 migration (#36106 )
vite: add configurable ts paths build/test targets and stabilize build coordination (#34890 )
🩹 Fixes
angular: resolve esbuild option paths relative to the workspace root (#36017 , #35936 )
angular: bump prescribed angular version to 22.0.4 (#36130 )
angular: make nx migrate to Angular 22 leave a buildable workspace (#36183 )
angular-rspack: surface compilation failures as build errors and release resources on teardown (#36018 )
bundling: restore preprocessor extensions in postcss normalizeOp… (#36057 , #35854 )
bundling: prevent TS6059 when an app imports a workspace lib from source (#36217 , #35017 )
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 )
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: refine the end-of-run performance report recommendations (#36127 , #36077 )
core: speed up bun lockfile parsing (#36198 )
core: set NX_CLI_SET in batch worker processes (#36214 , #36210 )
core: use standard utm params on performance-report links (#36226 )
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: add trailing space after performance report popup title (#36259 )
core: prevent TUI hint popup from permanently stealing focus (#36256 )
core: detect Codex sandbox on Linux to disable daemon and plugin isolation (#36273 )
core: skip projects-filtered targetDefaults when resolved without a project (#36281 , #36049 )
core: size TUI bottom bar reservations to the actual help text (#36261 )
core: defer unresolved spread tokens when merging intermediate target configurations (#36283 , #36235 )
core: omit peer dependencies when installing packages to a temp dir (#36295 )
core: include root package.json dependencies for '.'-rooted projects (#36291 , #33791 , #36290 )
core: reduce task hashing memory usage on large workspaces (#36267 , #36152 )
devkit: restore prettier v2 support in formatFiles (#36193 )
gradle: track copy/sync and AGP merge task outputs in dependent task inputs (#36099 )
gradle: correct change-plugin-version-0-1-23 migration to nx 23.1.0-beta.4 (#36103 , #36100 )
gradle: make project graph reports machine-portable (#36210 , #35388 )
gradle: derive dependent-task input extensions from the task model instead of scanning disk (#36211 )
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: restore the pre-TypeScript 6 default of loading all @types (#36163 )
js: avoid import locator unicode position panic (#36133 , #36128 )
js: prevent Windows TS6059 rootDir errors in tsc builds (#36184 , #35696 )
js: preserve esModuleInterop default when migrating to TypeScript 6 (#36225 )
js: keep tsconfigs compiling and config files loading under TypeScript 6 (#36245 )
js: wait for process tree exit when stopping node executor tasks (#36230 )
js: pin tsconfig root dir even when it matches the config directory (#36272 , #3175 )
js: pin rootDir on composite tsconfigs for ts6 (ts-jest strips composite) (#36285 , #36272 )
js: bump @swc/cli to 0.8.1 to patch critical decompress advisory (#36294 )
linter: install angular-eslint when converting Angular configs to flat config (#36160 )
linter: run typescript-eslint v8 rule migrations for scoped-only workspaces (#36180 )
linter: harden the ESLint v9 flat-config migration (#36204 )
linter: reconcile angular-eslint v22 breaking changes in flat config (#36200 )
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 happy-dom, tmp, and form-data to patched versions (#36013 )
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 )
misc: export @nx/esbuild/executors entry point (#36282 )
nx-cloud: use standard utm params on cloud prompt links (#36227 , #36226 )
nx-dev: keep mobile sidebar toggle clear of the conference banner (#36047 )
nx-dev: run next-sitemap directly instead of via pnpm (#36054 )
nx-dev: remove empty SaaS and Mobile template filters (#36085 )
react: skip react 19 update for workspaces using remix v2 (#36065 , #418 )
react: reserve ports in rspack e2e test to avoid default port collisions (#36090 )
react: bump eslint-plugin-react below 7.35 for ESLint 9 compatibility (#36161 )
react: stop pinning eslint-plugin-react in generated projects (#36168 , #36161 )
react: validate typecheck in the React 19 migration (#36186 )
⚠️ release: stop breaking change changelog entry from swallowing trailing PR body (#36052 , #35910 , #33070 )
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 )
rsbuild: bump @rsbuild/plugin-sass with @rsbuild/core for the v2 migration (#36162 )
rspack: use contenthash for chunkFilename to prevent stale chunks (#36136 , #2292 , #36014 )
testing: keep ts-jest resolving exports-only libs on typescript < 6 (#36089 )
testing: disable justInTimeCompile for webpack Cypress component testing (#36185 )
testing: update eslint-plugin-cypress for ESLint 9 compatibility (#36202 )
testing: template the e2e config for fresh projects instead of ast-parsing it (#36304 )
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: apply mode-based config consistently in the test executor (#36041 , #35196 )
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 )
⚠️ Breaking Changes
angular: support angular v22 (#35851 , #35910 )
Angular v19 is no longer supported.
linter: drop eslint v8 support (#36006 )
ESLint v8 is no longer supported. Nx requires ESLint v9
or later.
❤️ Thank You
You can’t perform that action at this time.