The Workspace plugin contains executors and generators that are useful for any Nx workspace. It should be present in every Nx workspace and other plugins build on it.
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
1890 releases · first in 2023
Release timeline
1890 releases since 2023Releases
- 21.4.0-beta.330 Jul 2025pre-release
Release notes
Open source →21.4.0-beta.3 (2025-07-30)
🚀 Features
- core: add bun parser (#31973, #31862, #31433, #31338, #30607, #30603, #30466, #30460, #30362, #30302)
- core: add nx mcp command (#32022)
- node: add prune target to node apps (#32119)
- nx-dev: make payfit testimonial clickable on nx cloud page (c2d0ecfd82)
🩹 Fixes
- docker: format current date to UTC (#32103)
- misc: critical severity for form-data package (#32108)
- nx-dev: reenable YouTube, and Tweet components to markdoc configuration (#32109)
- react-native: add release option to publisable react-native library (#29817)
❤️ Thank You
- Colum Ferry @Coly010
- Emily Xiong @xiongemi
- Juri @juristr
- Leosvel Pérez Espinosa @leosvelperez
- MaxKless @MaxKless
- Nicholas Cunningham @ndcunningham
- 21.4.0-beta.227 Jul 2025pre-release
Release notes
Open source →21.4.0-beta.2 (2025-07-27)
🚀 Features
- docker: add docker plugin (#31634)
🩹 Fixes
- core: cloud commands should be handled before loading local (#32090)
- core: remove graph creation from postinstall hook (#32027, #31694)
❤️ Thank You
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- Victor Savkin @vsavkin
- 21.4.0-beta.125 Jul 2025pre-release
Release notes
Open source →21.4.0-beta.1 (2025-07-25)
🚀 Features
- ⚠️ bundling: remove stylus support (#32035)
- core: add tsBuildInfoFile option all packages tsconfig.lib.json (#32030)
- core: log out-of-sync details returned by sync generators when running
nx sync:check(#32072) - core: display estimated task durations in the tui terminal pane when available (#31972)
🩹 Fixes
- angular: update
jest-preset-angularto v15 (#32050, #32024) - angular: update migration target version for
jest-preset-angularv15 package update (#32051) - bundling: fix stylus installation error due to npm security (#32036)
- core: render the correct output in the tui terminal pane when pinning task (#31975)
- core: handle undefined packageJson.dependencies (#31998)
- core: improve build time by narrowing the path scope for upload (#32023)
- core: improve tui minimal view display and prevent flashing scrollbar (#32045)
- core: make tasks list columns in the tui more compact (#32074)
- core: improve arrow key detection for interactive programs (#32075)
- core: prevent thread leaks in nx_walker and logger (#32061)
- core: disable TUI on ai agents (#31480)
- core: derive graph node type correctly when
projectTypeis not set (#32018, #31983) - core: pnpm lockfile parser handles undefined dependencies (#32084)
- core: prevent --skipInstall from being passed from create-nx-workspace to new generator (#32086, #31834)
- jest: revert back to Jest 30 after synckit compatibility fix (#31984, #31981)
- js: resolve relative imports correctly in nested projects (#31978, #31980)
- linter: update lint executor to correctly handle
--fixand--quiet(#31970, #31868) - linter: handle negative numbers in flat config AST generation (#32085, #31955)
- misc: fix setup selection (#31997)
- misc: allow scoped package names in application generators (#31957, #31229)
- nextjs: infer relevant tasks with the typescript sync generator when using ts project references (#31996, #31983)
- testing: normalize spec files correctly in jest
replace-removed-matcher-aliasesmigration (#31995, #31991) - testing: add missing package updates for
ts-jestandjest-utilfor jest v30 migrations (#32017)
⚠️ Breaking Changes
- bundling: Stylus (.styl) files are no longer supported.
❤️ Thank You
- Colum Ferry @Coly010
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- Nicholas Cunningham @ndcunningham
- Victor Savkin @vsavkin
- 21.4.0-beta.019 Jul 2025pre-release
Release notes
Open source →21.4.0-beta.0 (2025-07-19)
🚀 Features
- repo: use ts solution in the nx repo (#31654)
🩹 Fixes
❤️ Thank You
- Nicholas Cunningham @ndcunningham
- 21.3.1211 Feb 2026
Release notes
Open source →21.3.12 (2026-02-11)
🩹 Fixes
- core: track all task outputs regardless of path depth (#34321)
- repo: use sudo for global npm install in publish workflow (508d91e4dc)
- repo: use GITHUB_ACTIONS env var for CI detection in nx-release (2c9ed8fc67)
❤️ Thank You
- FrozenPandaz @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- 21.3.111 Aug 2025
Release notes
Open source →21.3.11 (2025-08-01)
🩹 Fixes
- angular: add missing config properties to adapter whitelist (#32186)
- core: only traverse workspace node when it exists (#32165)
- gradle: fix bootJar, add excludeDependsOn to false (#32157)
- module-federation: re-add support for mf aliases (#31347)
- release: provide a link to Manage Release page when "nx release"fails (#32153)
- release: use top-level releaseTagPattern as the default for release groups (#32154)
- rspack: update installed version of rspack to be same as @nx/rspack (#32152)
- testing: add NODE_OPTIONS flag for Node.js 24 compatibility (#32177)
❤️ Thank You
- Colum Ferry @Coly010
- Emily Xiong @xiongemi
- Jack Hsu @jaysoo
- Leosvel Pérez Espinosa @leosvelperez
- Nicholas Cunningham @ndcunningham
- Rodrigo Yokota @ryok90
- 21.3.1030 Jul 2025
Release notes
Open source →21.3.10 (2025-07-30)
🩹 Fixes
- misc: small tweaks in messaging (#32131)
❤️ Thank You
- Victor Savkin @vsavkin
- 21.3.929 Jul 2025
Release notes
Open source →21.3.9 (2025-07-29)
🩹 Fixes
- misc: critical severity for form-data package (#32108)
❤️ Thank You
- Nicholas Cunningham @ndcunningham
- 21.3.828 Jul 2025
Release notes
Open source →21.3.8 (2025-07-28)
🩹 Fixes
- core: remove graph creation from postinstall hook (#32027, #31694)
- react-native: add release option to publisable react-native library (#29817)
❤️ Thank You
- Craigory Coppola @AgentEnder
- Emily Xiong @xiongemi
- 21.3.725 Jul 2025
Release notes
Open source →21.3.7 (2025-07-25)
🩹 Fixes
- core: prevent --skipInstall from being passed from create-nx-workspace to new generator (#32086, #31834)
- core: cloud commands should be handled before loading local (#32090)
- misc: allow scoped package names in application generators (#31957, #31229)
❤️ Thank You
- Jack Hsu @jaysoo
- Leosvel Pérez Espinosa @leosvelperez
- Victor Savkin @vsavkin
- 21.3.625 Jul 2025
Release notes
Open source →21.3.6 (2025-07-25)
🩹 Fixes
- angular: update migration target version for
jest-preset-angularv15 package update (#32051) - core: improve tui minimal view display and prevent flashing scrollbar (#32045)
- core: make tasks list columns in the tui more compact (#32074)
- core: improve arrow key detection for interactive programs (#32075)
- core: prevent thread leaks in nx_walker and logger (#32061)
- core: disable TUI on ai agents (#31480)
- core: derive graph node type correctly when
projectTypeis not set (#32018, #31983) - js: resolve relative imports correctly in nested projects (#31978, #31980)
❤️ Thank You
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- angular: update migration target version for
- 21.3.523 Jul 2025
Release notes
Open source →21.3.5 (2025-07-23)
🩹 Fixes
- angular: update
jest-preset-angularto v15 (#32050, #32024) - core: render the correct output in the tui terminal pane when pinning task (#31975)
- linter: update lint executor to correctly handle
--fixand--quiet(#31970, #31868) - nextjs: infer relevant tasks with the typescript sync generator when using ts project references (#31996, #31983)
- testing: normalize spec files correctly in jest
replace-removed-matcher-aliasesmigration (#31995, #31991) - testing: add missing package updates for
ts-jestandjest-utilfor jest v30 migrations (#32017)
❤️ Thank You
- Leosvel Pérez Espinosa @leosvelperez
- angular: update
- 21.3.423 Jul 2025
Release notes
Open source →21.3.4 (2025-07-23)
🚀 Features
- ⚠️ bundling: remove stylus support (#32035)
⚠️ Breaking Changes
- bundling: Stylus (.styl) files are no longer supported.
❤️ Thank You
- Nicholas Cunningham @ndcunningham
- 21.3.323 Jul 2025
Release notes
Open source →21.3.3 (2025-07-23)
🩹 Fixes
- core: install stylus security placeholder while package is no longer available on npm (#32036)
The stylus package on the npm registry has been removed by npm themselves as it was deemed to be compromised. There is nothing we can do for now other than install their security placeholder to unblock installations.
Stylus will not work until this is resolved between the stylus project and npm, thread here: https://github.com/stylus/stylus/issues/2938
❤️ Thank You
- Nicholas Cunningham @ndcunningham
- 21.3.221 Jul 2025
Release notes
Open source → - 21.3.120 Jul 2025
Release notes
Open source →21.3.1 (2025-07-20)
This was a version bump only, there were no code changes.
- 21.3.018 Jul 2025
Release notes
Open source →21.3.0 (2025-07-18)
🚀 Features
- angular: support angular v20.1 (#31845)
- bundling: add useLegacyTypescriptPlugin option to migrate from rollup-plugin-typescript2 (#31718, #30488)
- core: improve message when workspace is not detected (#31632)
- core: pass in progress task outputs to tui for non-direct child processes (#31655)
- core: add CI warning for missing remote cache solution (#31678)
- core: enhance native cache operations with comprehensive logging (#31652)
- core: refactor CI workflow generator to use centralized command generation (#31787)
- core: add CI warning for missing remote cache solution " (#31678, #31860)
- core: add fix-ci command to CI workflows (#31833)
- core: add support for
--tuiand--no-tui(#31621) - core: add comprehensive dependency tracking with continuous task support (#31861)
- core: add live durations for running tasks in the tui (#31897)
- core: allow {args} to be fully interpolated in run-commands (#31824)
- core: add --initialRun flag to nx watch command (#31910)
- core: add env var for cache size (#31609)
- core: add GitHub repository creation and push functionality (#31936)
- graph: enhance migration state management and introduce migration stopping functionality. (#31626)
- js: support publishing with registryConfigKey when pnpm >=9.15.7 <10.0.0 || >=10.5.0 (#31622)
- js: add copy-workspace-modules executor (#31545)
- js: deprecate simpleName option in library generator (#31673, #29508)
- js: add prune-lockfile executor (#31557)
- module-federation: bump @module-federation/enhanced version to 0.15.0 to fix vulnerability (#30806, #30502, #30748)
- module-federation: bump @module-federation/node & @module-federation/enhanced to fix esbuild vulnerability (#31924, #31923)
- nx-dev: read description from markdown frontmatter for index pages (#31566)
- react: support port option for react app generator (#31552)
- release: allow for semver requirements to be disabled in version and changelog (#31794)
- release: releaseTagPatternStrictPreid option to match git tag based on semver preid (#31756)
- rspack: add support for proxyConfig in the dev-server executor (#31909)
- testing: support jest v30 (#31853, #31778)
🩹 Fixes
- angular: fix import from ng-packagr (#31600, #31597)
- angular: handle inferred projects without project configuration files in migrations (#31633, #31607)
- angular: respect skipTsConfig option in library generator (#31738, #31185)
- angular: improve indexHtmlTransformer documentation (#31742, #30831)
- angular: expand nx tokens in project configurations when running schematic migrations (#31526, #29052)
- angular: generate ngrx facade spec file correctly (#31850)
- bundling: respect decision to create babelrc file (#31755, #31582)
- bundling: ensure lockfile creation doesnt error with bun (#31762, #30568, #26640)
- core: show the correct content in the tui terminal pane for skipped tasks (#31559)
- core: ensure destination directories are created before copying files (#31624)
- core: prevent duplicate nx cloud logs from global and local nx invocations (#31641)
- core: do not auto-exit tui when there are multiple failed tasks (#31631)
- core: improve error handling in daemon server (#31728, #31407, #31567)
- core: clarify TypeScript configuration requirements for applications in project references migration (#31764, #31715)
- core: resolve package.json for @nx/js to improve plugin detection (#31770)
- core: update nx to version 21.3.0-beta.0 (#31771)
- core: allow any framework value in preset generator schema (#31665)
- core: return current nx init date when no git available yet (6fdca3d539)
- core: consider virtual trees in globAsync (#31805)
- core: improve tui contrast on some terminal themes (#31299)
- core: add option to use v8 for daemon message serialization to avoid issues when JSON.stringify would fail (#30516)
- core: allow opting out of sorting root tsconfig path mappings with an env var (#31763, #29043)
- core: improve column display decision logic in tui (#31885)
- core: swap from gray -> dark gray for light theme secondary foreground (#31901)
- core: update our caching for ts-node service from plugins (#31917)
- core: ensure non-pty tasks have output in terminal pane when finish (#31925)
- core: remove affected comment and improve CI setup messages (#31913)
- core: remove accidental additional line (#31930)
- core: preserve scroll position when tasks complete and scroll faster (#31898)
- core: improve parent gitignore handling for nested Nx workspaces (#31911, #27368, #28000, #27295, #28123, #29413, #29245)
- core: shutdown running tasks properly when recieving sigterm (#31534)
- core: lockfile pruning uess project name to identify workspace nodes (#31959)
- core: allow nx-cloud commands to run without local Nx installation (#31974)
- docs: add missing --project parameter to Angular service generation command (#31735, #31410)
- expo: respect
--unit-test-runner=noneproperly when generating expo apps and libs (#31754, #30366) - gradle: fix gradle on windows (#31595)
- gradle: add build-ci target even if atomized=false (#31537)
- gradle: add dependsOn outputs to inputs dependentTasksOutputFiles (#31683)
- gradle: handle custom build gradle files (#31817)
- gradle: allow excludeDependsOn to be false (#31890)
- js: failing e2e test due to dependency (#31676)
- js: resolve asset paths relative to workspace root instead of cwd (#31664)
- js: improve typescript plugin build detection (#31533, #29670)
- linter: respect the
--quietoption when running with--fix(#31403, #31401) - linter: correct lintFilePatterns documentation to show it's optional (#31744, #29648)
- linter: update lint executor to always log errors and stack traces (#31757, #21630)
- linter: refactor checking if the identifier is a function via tsquery (#31792)
- misc: add fallback for missing source root (#31759, #30638)
- misc: await load in config-utils.ts (#31408)
- misc: nx should error if atomization brings in invalid file paths (#31675)
- misc: improve the generation of storybook stories (#31893)
- module-federation: ensure manifest path not prepended with workspace root (#31698, #31524)
- module-federation: restore support for relative URLs in module federation remotes (#31723, #30615, #31538)
- module-federation: ensure react deps are eagerly loaded #31612 (#31961, #31612)
- nextjs: use next/jest.js for Jest configuration to support modern JSX transform (#31705, #27900)
- node: ensure args are set in target correctly (#31758, #31578)
- node: improve error handling during cleanup in Node application tests (#31767)
- node: reorder addPlugin in normalizeOptions return object (#31785)
- node: preserve existing test target options (#31891)
- nuxt: fix TypeScript configuration chain for Nuxt components and composables (#31701, #30742)
- nx-dev: small adjustment to the blog post (bd898d3220)
- nx-dev: pinning logic on blog entry page (ebb1716a99)
- nx-dev: update sorting of pinned posts (d347d976ad)
- plugin: fix e2e-project generator when the e2e target is inferred (#31809)
- react: do not set styles.tailwind for executor options for projects not using inferred targets (#31667)
- react: add .js extensions to subpath imports in module federation templates (#31730, #31448)
- react: normalize paths correctly when generating stories (#31944)
- react: Ensure react-router e2e test are generated with the correct config (#31945)
- react-native: fix react native web configuration (#29608)
- react-native: app creation should sync deps (#31839)
- storybook: handle hyphenated framework names in pnpm dependency installation (#31760, #31292)
- testing: do not update component configuration in cypress
set-inject-document-domainmigration (#31614, #31610) - testing: correct Playwright grep documentation from glob to regex (#31743, #30181)
- testing: do not re-add vscode recommended extension for jest after initial jest setup (#31745, #29345)
- testing: prefer using tsconfig.spec.json when loading jest config in plugin (#31726, #31351)
- testing: unset
customConditionswhen running theopen-cypressinferred task (#31687, #31616) - testing: when we generate a random port we should start from 1024 (#31927)
- testing: update yarn integration tests for remix and enable previously skipped tests (#31933)
- vite: fix the build command for the deps in the vite tsconfig paths plugin (#31729, #31333)
- vite: resolve outDir path correctly for nested monorepos (#31741, #31234)
- vite: ensure path aliases are not replaced when building vite projects and using ts path mappings (#31747, #30814)
- vite: ensure vue-tsc is used for typecheck of vue projects (#31761, #31647)
- vite: bump @analogjs/vite-plugin-angular to 1.19.x (#31866)
- webpack: respect user config when applying node target #30937 (#31700, #30937)
- webpack: use loadPaths instead of includePaths (#31946, #30340)
- webpack: ensure less and less-loader deps are ranges (#31958, #31953)
❤️ Thank You
- Benjamin Cabanes @bcabanes
- bkp-ttd
- Brandon Roberts @brandonroberts
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- Emily Xiong @xiongemi
- Iulian Marcu @iuliancmarcu
- Jack Hsu @jaysoo
- James Henry @JamesHenry
- Jason Jean @FrozenPandaz
- Jonathan Gelin @jogelin
- Julien Marcou
- Juri @juristr
- Juri Strumpflohner @juristr
- Leosvel Pérez Espinosa @leosvelperez
- Miguel @mpsanchis
- Nicholas Cunningham @ndcunningham
- Tomáš Čarnecký @wereHamster
- Victor Savkin @vsavkin
- yarden-island
- 21.3.0-rc.018 Jul 2025pre-release
Release notes
Open source →21.3.0-rc.0 (2025-07-18)
🚀 Features
- core: add live durations for running tasks in the tui (#31897)
- core: allow {args} to be fully interpolated in run-commands (#31824)
- core: add --initialRun flag to nx watch command (#31910)
- core: add env var for cache size (#31609)
- core: add GitHub repository creation and push functionality (#31936)
- module-federation: bump @module-federation/node & @module-federation/enhanced to fix esbuild vulnerability (#31924, #31923)
- rspack: add support for proxyConfig in the dev-server executor (#31909)
🩹 Fixes
- core: ensure non-pty tasks have output in terminal pane when finish (#31925)
- core: remove affected comment and improve CI setup messages (#31913)
- core: remove accidental additional line (#31930)
- core: preserve scroll position when tasks complete and scroll faster (#31898)
- core: improve parent gitignore handling for nested Nx workspaces (#31911, #27368, #28000, #27295, #28123, #29413, #29245)
- core: shutdown running tasks properly when recieving sigterm (#31534)
- core: lockfile pruning uess project name to identify workspace nodes (#31959)
- misc: nx should error if atomization brings in invalid file paths (#31675)
- misc: improve the generation of storybook stories (#31893)
- module-federation: ensure react deps are eagerly loaded #31612 (#31961, #31612)
- react: normalize paths correctly when generating stories (#31944)
- react: Ensure react-router e2e test are generated with the correct config (#31945)
- react-native: fix react native web configuration (#29608)
- react-native: app creation should sync deps (#31839)
- testing: when we generate a random port we should start from 1024 (#31927)
- testing: update yarn integration tests for remix and enable previously skipped tests (#31933)
- webpack: use loadPaths instead of includePaths (#31946, #30340)
- webpack: ensure less and less-loader deps are ranges (#31958, #31953)
❤️ Thank You
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- Emily Xiong @xiongemi
- Jason Jean @FrozenPandaz
- Julien Marcou
- Leosvel Pérez Espinosa @leosvelperez
- Nicholas Cunningham @ndcunningham
- yarden-island
- 21.3.0-canary.20250718-9f1c81118 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250717-8b4b3e917 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250716-46d21c716 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250715-cf994df15 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250712-18e5d9512 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250711-be6d35b11 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250710-13551c910 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250708-ea5cd308 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250705-666da3e5 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250704-e92cbee4 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250703-84ce8313 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250702-157a34a2 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250701-bfdf8921 Jul 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250628-743023828 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250627-07233f027 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250626-8b6ad4226 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250625-fe687a025 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250624-0ef885724 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250621-57e70d021 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250619-29b14b119 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250618-5c2fdc918 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250617-b97222d17 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250614-db86a3514 Jun 2025pre-release
Nothing published for this version
- 21.3.0-canary.20250613-18155f413 Jun 2025pre-release
Nothing published for this version
- 21.3.0-beta.714 Jul 2025pre-release
Release notes
Open source →21.3.0-beta.7 (2025-07-14)
🩹 Fixes
- core: swap from gray -> dark gray for light theme secondary foreground (#31901)
- core: update our caching for ts-node service from plugins (#31917)
- misc: await load in config-utils.ts (#31408)
- node: preserve existing test target options (#31891)
❤️ Thank You
- Craigory Coppola @AgentEnder
- Nicholas Cunningham @ndcunningham
- Tomáš Čarnecký @wereHamster
- 21.3.0-beta.611 Jul 2025pre-release
Release notes
Open source →21.3.0-beta.6 (2025-07-11)
🚀 Features
- core: add comprehensive dependency tracking with continuous task support (#31861)
- testing: support jest v30 (#31853, #31778)
🩹 Fixes
- core: improve column display decision logic in tui (#31885)
❤️ Thank You
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- 21.3.0-beta.511 Jul 2025pre-release
Release notes
Open source →21.3.0-beta.5 (2025-07-11)
🚀 Features
- core: add support for
--tuiand--no-tui(#31621)
🩹 Fixes
- gradle: allow excludeDependsOn to be false (#31890)
❤️ Thank You
- Craigory Coppola @AgentEnder
- Emily Xiong @xiongemi
- core: add support for
- 21.3.0-beta.410 Jul 2025pre-release
Release notes
Open source →21.3.0-beta.4 (2025-07-10)
🚀 Features
🩹 Fixes
- angular: generate ngrx facade spec file correctly (#31850)
- core: add option to use v8 for daemon message serialization to avoid issues when JSON.stringify would fail (#30516)
- core: allow opting out of sorting root tsconfig path mappings with an env var (#31763, #29043)
- misc: add fallback for missing source root (#31759, #30638)
- vite: bump @analogjs/vite-plugin-angular to 1.19.x (#31866)
❤️ Thank You
- Brandon Roberts @brandonroberts
- Craigory Coppola @AgentEnder
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- 21.3.0-beta.38 Jul 2025pre-release
Release notes
Open source →21.3.0-beta.3 (2025-07-08)
🚀 Features
- core: refactor CI workflow generator to use centralized command generation (#31787)
- core: add CI warning for missing remote cache solution " (#31678, #31860)
- release: allow for semver requirements to be disabled in version and changelog (#31794)
🩹 Fixes
- core: consider virtual trees in globAsync (#31805)
- core: improve tui contrast on some terminal themes (#31299)
- plugin: fix e2e-project generator when the e2e target is inferred (#31809)
❤️ Thank You
- Colum Ferry @Coly010
- James Henry @JamesHenry
- Jason Jean @FrozenPandaz
- Jonathan Gelin @jogelin
- Miguel @mpsanchis
- 21.3.0-beta.23 Jul 2025pre-release
Release notes
Open source →21.3.0-beta.2 (2025-07-03)
🩹 Fixes
- core: return current nx init date when no git available yet (6fdca3d539)
- gradle: handle custom build gradle files (#31817)
❤️ Thank You
- Emily Xiong @xiongemi
- Victor Savkin @vsavkin
- 21.3.0-beta.12 Jul 2025pre-release
Release notes
Open source →21.3.0-beta.1 (2025-07-02)
🚀 Features
- core: add CI warning for missing remote cache solution (#31678)
- core: enhance native cache operations with comprehensive logging (#31652)
🩹 Fixes
- core: update nx to version 21.3.0-beta.0 (#31771)
- core: allow any framework value in preset generator schema (#31665)
- gradle: add dependsOn outputs to inputs dependentTasksOutputFiles (#31683)
- linter: refactor checking if the identifier is a function via tsquery (#31792)
- node: reorder addPlugin in normalizeOptions return object (#31785)
❤️ Thank You
- Benjamin Cabanes @bcabanes
- Emily Xiong @xiongemi
- Jason Jean @FrozenPandaz
- Nicholas Cunningham @ndcunningham
- 21.3.0-beta.028 Jun 2025pre-release
Release notes
Open source →21.3.0-beta.0 (2025-06-28)
🚀 Features
- bundling: add useLegacyTypescriptPlugin option to migrate from rollup-plugin-typescript2 (#31718, #30488)
- core: improve message when workspace is not detected (#31632)
- core: pass in progress task outputs to tui for non-direct child processes (#31655)
- graph: enhance migration state management and introduce migration stopping functionality. (#31626)
- js: support publishing with registryConfigKey when pnpm >=9.15.7 <10.0.0 || >=10.5.0 (#31622)
- js: add copy-workspace-modules executor (#31545)
- js: deprecate simpleName option in library generator (#31673, #29508)
- js: add prune-lockfile executor (#31557)
- module-federation: bump @module-federation/enhanced version to 0.15.0 to fix vulnerability (#30806, #30502, #30748)
- nx-dev: read description from markdown frontmatter for index pages (#31566)
- react: support port option for react app generator (#31552)
🩹 Fixes
- angular: fix import from ng-packagr (#31600, #31597)
- angular: handle inferred projects without project configuration files in migrations (#31633, #31607)
- angular: respect skipTsConfig option in library generator (#31738, #31185)
- angular: improve indexHtmlTransformer documentation (#31742, #30831)
- angular: expand nx tokens in project configurations when running schematic migrations (#31526, #29052)
- bundling: respect decision to create babelrc file (#31755, #31582)
- bundling: ensure lockfile creation doesnt error with bun (#31762, #30568, #26640)
- core: show the correct content in the tui terminal pane for skipped tasks (#31559)
- core: ensure destination directories are created before copying files (#31624)
- core: prevent duplicate nx cloud logs from global and local nx invocations (#31641)
- core: do not auto-exit tui when there are multiple failed tasks (#31631)
- core: improve error handling in daemon server (#31728, #31407, #31567)
- core: clarify TypeScript configuration requirements for applications in project references migration (#31764, #31715)
- core: resolve package.json for @nx/js to improve plugin detection (#31770)
- docs: add missing --project parameter to Angular service generation command (#31735, #31410)
- expo: respect
--unit-test-runner=noneproperly when generating expo apps and libs (#31754, #30366) - gradle: fix gradle on windows (#31595)
- gradle: add build-ci target even if atomized=false (#31537)
- js: failing e2e test due to dependency (#31676)
- js: resolve asset paths relative to workspace root instead of cwd (#31664)
- js: improve typescript plugin build detection (#31533, #29670)
- linter: respect the
--quietoption when running with--fix(#31403, #31401) - linter: correct lintFilePatterns documentation to show it's optional (#31744, #29648)
- linter: update lint executor to always log errors and stack traces (#31757, #21630)
- module-federation: ensure manifest path not prepended with workspace root (#31698, #31524)
- module-federation: restore support for relative URLs in module federation remotes (#31723, #30615, #31538)
- nextjs: use next/jest.js for Jest configuration to support modern JSX transform (#31705, #27900)
- node: ensure args are set in target correctly (#31758, #31578)
- node: improve error handling during cleanup in Node application tests (#31767)
- nuxt: fix TypeScript configuration chain for Nuxt components and composables (#31701, #30742)
- nx-dev: small adjustment to the blog post (bd898d3220)
- nx-dev: pinning logic on blog entry page (ebb1716a99)
- nx-dev: update sorting of pinned posts (d347d976ad)
- react: do not set styles.tailwind for executor options for projects not using inferred targets (#31667)
- react: add .js extensions to subpath imports in module federation templates (#31730, #31448)
- storybook: handle hyphenated framework names in pnpm dependency installation (#31760, #31292)
- testing: do not update component configuration in cypress
set-inject-document-domainmigration (#31614, #31610) - testing: correct Playwright grep documentation from glob to regex (#31743, #30181)
- testing: do not re-add vscode recommended extension for jest after initial jest setup (#31745, #29345)
- testing: prefer using tsconfig.spec.json when loading jest config in plugin (#31726, #31351)
- testing: unset
customConditionswhen running theopen-cypressinferred task (#31687, #31616) - vite: fix the build command for the deps in the vite tsconfig paths plugin (#31729, #31333)
- vite: resolve outDir path correctly for nested monorepos (#31741, #31234)
- vite: ensure path aliases are not replaced when building vite projects and using ts path mappings (#31747, #30814)
- vite: ensure vue-tsc is used for typecheck of vue projects (#31761, #31647)
- webpack: respect user config when applying node target #30937 (#31700, #30937)
❤️ Thank You
- bkp-ttd
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- Emily Xiong @xiongemi
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Jonathan Gelin @jogelin
- Julien Marcou
- Juri @juristr
- Juri Strumpflohner @juristr
- Leosvel Pérez Espinosa @leosvelperez
- Nicholas Cunningham @ndcunningham
- Victor Savkin @vsavkin
- 21.2.416 Jul 2025
Release notes
Open source →21.2.4 (2025-07-16)
🚀 Features
- core: allow {args} to be fully interpolated in run-commands (#31824)
- rspack: add support for proxyConfig in the dev-server executor (#31909)
🩹 Fixes
- core: improve column display decision logic in tui (#31885)
- core: swap from gray -> dark gray for light theme secondary foreground (#31901)
- core: update our caching for ts-node service from plugins (#31917)
- core: remove affected comment and improve CI setup messages (#31913)
- core: remove accidental additional line (#31930)
- misc: await load in config-utils.ts (#31408)
- misc: nx should error if atomization brings in invalid file paths (#31675)
- misc: improve the generation of storybook stories (#31893)
- node: preserve existing test target options (#31891)
- react: normalize paths correctly when generating stories (#31944)
- testing: when we generate a random port we should start from 1024 (#31927)
❤️ Thank You
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- Jason Jean @FrozenPandaz
- Leosvel Pérez Espinosa @leosvelperez
- Nicholas Cunningham @ndcunningham
- Tomáš Čarnecký @wereHamster
- yarden-island
- 21.2.311 Jul 2025
Release notes
Open source →21.2.3 (2025-07-11)
🚀 Features
- core: refactor CI workflow generator to use centralized command generation (#31787)
- core: add CI warning for missing remote cache solution " (#31678, #31860)
- core: add fix-ci command to CI workflows (#31833)
- core: add support for
--tuiand--no-tui(#31621)
🩹 Fixes
- angular: generate ngrx facade spec file correctly (#31850)
- core: return current nx init date when no git available yet (4b29c2434a)
- core: consider virtual trees in globAsync (#31805)
- core: improve tui contrast on some terminal themes (#31299)
- core: add option to use v8 for daemon message serialization to avoid issues when JSON.stringify would fail (#30516)
- core: allow opting out of sorting root tsconfig path mappings with an env var (#31763, #29043)
- gradle: handle custom build gradle files (#31817)
- gradle: allow excludeDependsOn to be false (#31890)
- misc: add fallback for missing source root (#31759, #30638)
- plugin: fix e2e-project generator when the e2e target is inferred (#31809)
- vite: bump @analogjs/vite-plugin-angular to 1.19.x (#31866)
❤️ Thank You
- Brandon Roberts @brandonroberts
- Craigory Coppola @AgentEnder
- Emily Xiong @xiongemi
- James Henry @JamesHenry
- Jason Jean @FrozenPandaz
- Jonathan Gelin @jogelin
- Leosvel Pérez Espinosa @leosvelperez
- Miguel @mpsanchis
- Victor Savkin @vsavkin
- 21.2.22 Jul 2025
Release notes
Open source →21.2.2 (2025-07-02)
🚀 Features
- bundling: add useLegacyTypescriptPlugin option to migrate from rollup-plugin-typescript2 (#31718, #30488)
- core: pass in progress task outputs to tui for non-direct child processes (#31655)
- core: add CI warning for missing remote cache solution (#31678)
- core: enhance native cache operations with comprehensive logging (#31652)
- graph: enhance migration state management and introduce migration stopping functionality. (#31626)
- module-federation: bump @module-federation/enhanced version to 0.15.0 to fix vulnerability (#30806, #30502, #30748)
🩹 Fixes
- angular: respect skipTsConfig option in library generator (#31738, #31185)
- angular: improve indexHtmlTransformer documentation (#31742, #30831)
- angular: expand nx tokens in project configurations when running schematic migrations (#31526, #29052)
- bundling: respect decision to create babelrc file (#31755, #31582)
- core: do not auto-exit tui when there are multiple failed tasks (#31631)
- core: improve error handling in daemon server (#31728, #31407, #31567)
- core: resolve package.json for @nx/js to improve plugin detection (#31770)
- core: update nx to version 21.3.0-beta.0 (#31771)
- core: allow any framework value in preset generator schema (#31665)
- docs: add missing --project parameter to Angular service generation command (#31735, #31410)
- expo: respect
--unit-test-runner=noneproperly when generating expo apps and libs (#31754, #30366) - gradle: add dependsOn outputs to inputs dependentTasksOutputFiles (#31683)
- js: failing e2e test due to dependency (#31676)
- js: resolve asset paths relative to workspace root instead of cwd (#31664)
- js: improve typescript plugin build detection (#31533, #29670)
- linter: correct lintFilePatterns documentation to show it's optional (#31744, #29648)
- linter: update lint executor to always log errors and stack traces (#31757, #21630)
- linter: refactor checking if the identifier is a function via tsquery (#31792)
- module-federation: ensure manifest path not prepended with workspace root (#31698, #31524)
- module-federation: restore support for relative URLs in module federation remotes (#31723, #30615, #31538)
- nextjs: use next/jest.js for Jest configuration to support modern JSX transform (#31705, #27900)
- node: ensure args are set in target correctly (#31758, #31578)
- node: reorder addPlugin in normalizeOptions return object (#31785)
- nuxt: fix TypeScript configuration chain for Nuxt components and composables (#31701, #30742)
- nx-dev: small adjustment to the blog post (550c7e37da)
- nx-dev: pinning logic on blog entry page (c747d3f172)
- nx-dev: update sorting of pinned posts (74e77e18f2)
- react: do not set styles.tailwind for executor options for projects not using inferred targets (#31667)
- react: add .js extensions to subpath imports in module federation templates (#31730, #31448)
- storybook: handle hyphenated framework names in pnpm dependency installation (#31760, #31292)
- testing: do not update component configuration in cypress
set-inject-document-domainmigration (#31614, #31610) - testing: correct Playwright grep documentation from glob to regex (#31743, #30181)
- testing: do not re-add vscode recommended extension for jest after initial jest setup (#31745, #29345)
- testing: prefer using tsconfig.spec.json when loading jest config in plugin (#31726, #31351)
- testing: unset
customConditionswhen running theopen-cypressinferred task (#31687, #31616) - vite: fix the build command for the deps in the vite tsconfig paths plugin (#31729, #31333)
- vite: resolve outDir path correctly for nested monorepos (#31741, #31234)
- vite: ensure path aliases are not replaced when building vite projects and using ts path mappings (#31747, #30814)
- vite: ensure vue-tsc is used for typecheck of vue projects (#31761, #31647)
- webpack: respect user config when applying node target #30937 (#31700, #30937)
❤️ Thank You
- Benjamin Cabanes @bcabanes
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- Emily Xiong @xiongemi
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Jonathan Gelin @jogelin
- Julien Marcou
- Juri @juristr
- Leosvel Pérez Espinosa @leosvelperez
- Nicholas Cunningham @ndcunningham
- Victor Savkin @vsavkin
- 21.2.119 Jun 2025
Release notes
Open source →21.2.1 (2025-06-19)
🚀 Features
- core: improve message when workspace is not detected (#31632)
- js: support publishing with registryConfigKey when pnpm >=9.15.7 <10.0.0 || >=10.5.0 (#31622)
- js: add copy-workspace-modules executor (#31545)
- nx-dev: read description from markdown frontmatter for index pages (#31566)
- react: support port option for react app generator (#31552)
🩹 Fixes
- angular: fix import from ng-packagr (#31600, #31597)
- angular: handle inferred projects without project configuration files in migrations (#31633, #31607)
- core: show the correct content in the tui terminal pane for skipped tasks (#31559)
- core: ensure destination directories are created before copying files (#31624)
- core: prevent duplicate nx cloud logs from global and local nx invocations (#31641)
- gradle: fix gradle on windows (#31595)
- gradle: add build-ci target even if atomized=false (#31537)
- linter: respect the
--quietoption when running with--fix(#31403, #31401)
❤️ Thank You
- bkp-ttd
- Colum Ferry @Coly010
- Emily Xiong @xiongemi
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Jonathan Gelin @jogelin
- Juri Strumpflohner @juristr
- Leosvel Pérez Espinosa @leosvelperez
- Nicholas Cunningham @ndcunningham
- 21.2.012 Jun 2025
Release notes
Open source →21.2.0 (2025-06-12)
🚀 Features
- angular: add support for rspack module federation (#31231)
- angular: support angular cli v20.0.0-rc.3 (#30715)
- angular: update
nx initlegacy integrated migration for angular to handle angular v17 (#31352) - ⚠️ angular: support angular v20 (#31369)
- angular: update angular eslint packages to v20 (#31489)
- bundling: use tsconfig.lib.json for rollup.config.ts (#30453)
- gradle: exclude dependsOn tasks (#30913)
- misc: enhance IDE integration with Nx Console auto-installation and improved logging (#31462)
- nest: Update nest version to 11 (#31393, #30188)
- nx-dev: AI landing page (#31310)
- nx-dev: update hero tagline (41387af458)
- nx-dev: add rss and atom feeds (ee7dbf9c3a)
- repo: enhance Claude Code workflow and settings (#31405, #31380)
- repo: add golden list of projects to our Nightly CI (#31414)
- repo: add ndcunningham to Claude workflow authorized users (#31479)
- repo: migrate to pnpm 10 (#31427)
- ⚠️ storybook: support storybook 9 (#31172)
🩹 Fixes
- add .ts extension to nx-release script reference in project.json (#31483)
- angular: update tsconfig files generation to better support angular v20 (#31357)
- angular: keep extra target metadata when needed in
convert-to-rspackgenerator (#31309) - angular: generate correct output for buildable libraries on windows (#31437, #31436)
- angular: optimize ng-packagr-lite watch mode file writing (#31434, #31033)
- bundling: do not normalize tsconfig path for Windows with rollup (#30567)
- bundling: correctly handle .cjs.js .mjs.js in rollup for type definitions (#29366, #29308)
- core: handle killing child processes of continuous tasks on Windows (#31296, #31235)
- core: do not hide task list with run-many if there is only 1 task (#31324)
- core: generate workspace file readme typo (#31341, #31335)
- core: fix broken nx-cloud url shortening logic (#31283)
- core: infer codex environment and use default tasks runner (#31359)
- core: use next available port when the port for nx graph is in use (#31365, #30915)
- core: handle run-commands targets with no commands (#31364, #31345)
- core: implement missing --print flag for nx graph command (#31406, #30255)
- core: update getTouchedProjectsFromLockFile to handle deleted/moved projects correctly (#31361)
- core: ensure nx init implementation for angular correctly resolves
@angular/core(#31430, #31291) - core: print installation logs when installing latest version during
nx migrateand using--verbose(#31432) - core: use
ts-nodeoption from tsconfig files when creating transpiler (#31469) - core: Update macos pipelines configuration (#31476)
- core: scope typescript resolution cache correctly when processing the graph (#31455, #31223)
- core: remove tabs from local workspace plugins section in nx report (#31490)
- core: handle external node without default version when generating a pnpm pruned lockfile (#31503, #28627)
- core: add conditional compilation for WASM build compatibility (#31491)
- core: default to 'run' target when only project is specified (#31452)
- core: remove log_error function and standardize logging (#31515)
- core: scope native logging to nx module by default (#31530)
- core: simplify Nx Console installation prompt (#31532)
- core: update Node.js version to 22.16.0 since the rust-docker-lts version is not updated (#31547)
- gradle: change run and bootRun to cacheable false (#31287)
- gradle: add migration script to check gradle plugin version (#31304)
- gradle: fix gradle test running gaps (#31313)
- js: write typescript plugin cache files atomically (#31390, #30239, #31187)
- js: enable end-to-end tests for Vue application in dev mode (#31415)
- js: enhance TypeScript transformer loading to support function-based plugins (#31443, #31411)
- linter: speed up inferred plugin node processing (#31281)
- linter: handle
ng-package.jsonfile with nolib.entryFilein@nx/enforce-module-boundariesrule (#31360) - linter: fix line endings handling in '@nx/eslint:convert-to-flat-config' generator (#31043)
- linter: infer lint tasks with inputs using
{workspaceRoot}to support nested projects (#31488, #31264) - linter: update allowed ESLint config file extensions (#30127)
- module-federation: use runtimeChunk false when not in dev mode (#31256, #30637, #31114)
- module-federation: enhance remote entry handling with query parameters in paths (#30615, #30602)
- nextjs: add extension alias support for handling ESM libs (#31323, #30714)
- node: add project name sanitization for Docker commands. (#31461, #31421)
- node: esbuild breaks and does not cleanup (#30469)
- nx-dev: only track analytics in prod envs (#31367)
- react: add missing dependency when generating a react lib that has testing (#31308)
- react: routing option to library generator (#31328, #30721)
- react: allow for buildTargetWebpack to have an executor of @nx/webpack:webpack or @nx/rspack:rspack (#30253, #30235)
- release: sort groups topologically bottom-up and fix typo to allow multi-level group dependencies (#31374)
- release: changelog filtering logic for the project commits (#31449)
- remix: update setup-tailwind generator to correct import statements (#30599, #30343)
- repo: MacOS failures in our E2E Tests (#31528)
- rspack: fix issue with optimization options in rspack config (#31337, #31268, #30292)
- rspack: ensure nest applications generated correctly #31204 (#31424, #31204)
- rspack: Add missing return for rspack composoable plugin (#31372)
- rspack: must run type check with @nx/rspack:rspack when skipTypeChecking is false (#31027, #31026)
- storybook: improve speed of storybook plugin (#31277, #22953, #31276)
- vite: bump @analogjs/vite-plugin-angular to 1.16.x (#31317)
- vite: add ajv dependency for non-pnpm package managers (#31413)
- vite: resolve project-specific tsconfig before workspace fallback (#31423, #28945)
- vite: NxReporter compatible with Vitest ≥0.29 (#31425)
- webpack: add support for retrieving all transitive non-buildable dependencies (#31343)
- webpack: handle package.json exports field for non-buildable libs (#31444)
⚠️ Breaking Changes
- storybook: Remove deprecated generators:
- angular: Support for Angular v17 was dropped.
❤️ Thank You
- Ashkan @ashkanhosseini
- Brandon Roberts @brandonroberts
- Charlie Croom
- Colum Ferry @Coly010
- dpnolte @dpnolte
- Emily Xiong @xiongemi
- Jack Hsu @jaysoo
- Jacob S
- James Henry @JamesHenry
- Jason Jean @FrozenPandaz
- Johann Wagner @konqi
- Jonathan Cammisuli @Cammisuli
- Juri Strumpflohner @juristr
- laney
- Leosvel Pérez Espinosa @leosvelperez
- Matthias Stemmler @ms-tng
- Miguel @mpsanchis
- Miroslav Jonaš @meeroslav
- Nadav Shatz
- Nicholas Cunningham @ndcunningham
- Paul Bohm @enki
- Paweł Tymczuk @LetItRock
- Petr Plenkov
- Rui Lima @rapzo
- Terry @Teamop
- Torin
- 21.2.0-canary.20250612-8ddd69712 Jun 2025pre-release
Nothing published for this version
- 21.2.0-canary.20250611-ec0eda511 Jun 2025pre-release
Nothing published for this version
- 21.2.0-canary.20250610-c8ff33910 Jun 2025pre-release
Nothing published for this version
- 21.2.0-canary.20250606-c43d2f26 Jun 2025pre-release
Nothing published for this version
- 21.2.0-canary.20250605-5ffd82e5 Jun 2025pre-release
Nothing published for this version