21.5.1 (2025-09-08)
🚀 Features
- angular: support angular v20.2 (#32351)
- angular-rspack: do not rely on postinstall >20.2 (#32613)
- core: add incompatibleWith field for packageJsonUpdates (#32464)
- core: auto-retry lock files changed daemon msgs (#32489)
- core: add NX_PROJECT_ROOT environment variable to runtime cache inputs (#31428, #20949)
- graph: task graph support multiple targets (#32418)
- graph: unwrap
RankDirPanel
from experimental (#32490, #32482, #32481) - js: add includeIgnoredAssetFiles option and per-asset includeIgnoredFiles (#31813)
- js: detect duplicate project references in
@nx/js:typescript-sync
(#32443) - module-federation: align dynamic federation with latest from module federation and rspack (#32509, #32542)
- nx: use platform certificate trust store (#31999)
- nx-dev: link ukg article on homepage (c02d448b9f)
- nx-dev: configure rewrite to astro-docs when NEXT_PUBLIC_ASTRO_URL is set (#32424)
- nx-dev: nx.dev homepage feature illustrations and CTA (#32298)
- nx-dev: update homepage subtagline (2af5446fba)
- repo: add GitHub Actions workflow to validate PR titles (#32458)
- rspack: add support for converting webpack plugin configs #30292 (#32382, #30292)
- rspack: support passing templateParameters to HtmlRspackPlugin (#32553)
- tools: add repository update system for automated Nx migrations (#32124)
- vite: support vite 7 (#32422)
- webpack: migrate from deprecated url.parse() to WHATWG URL API (f768886ae7)
🩹 Fixes
- angular: set the
tsConfig
option when possible to aid with angular migrations (#32355, #32138) - angular: do not update project configuration when not changes were made in migration (#32448)
- angular-rspack: do not error on server budget violation (#32445)
- core: improve Cursor editor detection and extension installation (#32374)
- core: ensure deterministic dummy task generation in task graphs (#32414)
- core: handle unsupported platforms in Cursor IDE install command (#32419)
- core: only prompt for NX Console installation in TTY environments (#32425)
- core: enhance validation for continuous task dependencies (#31786)
- core: retry current message when receiving NX_VERSION_CHANGED from daemon (#32417, #29446)
- core: use black for all fg elements when in light theme (#32415)
- core: fail fast when running commands in parallel (#32386, #28477)
- core: handle no daemon when stopping (#32455)
- core: create pnpm peer deps settings in the appropriate location when creating workspace (#32470)
- core: repair nx mcp in pnpm/yarn (#32452)
- core: allow additional properties in ProjectMetadata type (#32483)
- core: normalize root project root when merging project config results (#32517)
- core: detect devcontainer environment and skip Nx Console installation prompt if it exists (#32571)
- core: use more reasonable scroll speed on trackpads (#32603)
- core: exclude non-cacheable tasks from flaky detection (#32435)
- core: reduce CPU usage by adding 20ms interval to daemon process check (#32618)
- devkit: restore peer dep range to 2 majors (#32406, #31801)
- devkit: include UPDATE changes in findCreatedProjectFiles for generator callbacks (#31429, #29852)
- devkit: remove
nx
as direct dependency (#32614) - expo: export output should be within project directory (#32477)
- gradle: use AST parsing to migrate updates to version catalogs (#32463)
- gradle: allow test target name to be configuration from nx.json (#32416)
- gradle: allow test target name to be configured from nx.json" (#32637, #32416)
- graph: some misc fixes to the graph (#32401)
- graph: nxArgs.projects can be an empty array (#32479)
- graph: project details navigating for new taskGraph and tasks with default configuration on UI (#32510)
- graph: repair theme detection for nx console components (#32607)
- js: esm loader should handle absolute paths on windows #32376 (#32383, #32376)
- js: improve
@nx/js/typescript
plugin check for buildable libraries (#32405, #32116, #32290) - js: do not infer the project type in the
@nx/js/typescript
plugin (#32421) - js: use a unique typescript custom condition name for the workspace (#32429, #31332)
- js: store stale references correctly in
typescript-sync
generator (#32596) - misc: update @types/node to v20.19.9 to support fetch API (#32092, #31637)
- misc: respect string values in alwaysAddToPackageJson migration flag (#32433, #30586)
- misc: check for
packages
existence to detect pnpm workspaces setup (#32474) - module-federation: do not rely on virtualRuntimeEntry #31831 (#32387, #31831, #32404)
- nx-cloud: read package.json correctly for workspace name when creating new cloud workspace (#32504)
- nx-cloud: forward --help to nx-cloud aliases (#32627)
- nx-dev: update navbar CTA buttons and updates event tracking (#32392)
- nx-dev: re-enable contact form (#32493)
- nx-dev: task graph should not break docs (#32501)
- nx-dev: update header logo to link to nx.dev homepage (#32502)
- nx-dev: issue with index pages not showing content lists (#32559)
- nx-dev: resolve multiple styling issues in Astro documentation (#32561)
- nx-dev: add missing data in plugin migrations (#32562)
- nx-dev: remove self-referencing redirects causing infinite loops (#32615)
- plugin: handle directory paths correctly in executor and generator generators (#31856, #31803, #31776)
- release: ensure versionData is accurate for all transitive dependencies (#32531)
- rspack: expand serve-static target names for init generator (#32587)
- testing: support NX_CACHE_PROJECT_GRAPH when reading inferred config from jest cache file (#32380)
- testing: fall back to
tsconfig.json
in the jest resolver (#32083) - testing: log the correct installed cypress version when erroring due to using an unsupported version (#32598)
- webpack: migrate from deprecated url.parse() to WHATWG URL API (#32399)
❤️ Thank You
- Caleb Ukle
- Chau Tran @nartc
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- FrozenPandaz @FrozenPandaz
- Jack Hsu @jaysoo
- Jason Jean @FrozenPandaz
- Jonathan Gelin @jogelin
- Juri @juristr
- Juri Strumpflohner @juristr
- Leosvel Pérez Espinosa @leosvelperez
- Louie Weng @lourw
- Marc Palm @marcpalm
- MaxKless @MaxKless
- Miguel @mpsanchis
- Nicholas Cunningham @ndcunningham
- Nicole Oliver
- Rares Matei
- Steven Nance
- Tomáš Čarnecký @wereHamster