21.4.1 (2025-08-22)
🚀 Features
- graph: task graph support multiple targets (#32418)
- js: add includeIgnoredAssetFiles option and per-asset includeIgnoredFiles (#31813)
- js: detect duplicate project references in
@nx/js:typescript-sync
(#32443) - nx: use platform certificate trust store (#31999)
- nx-dev: link ukg article on homepage (8d16697547)
- nx-dev: configure rewrite to astro-docs when NEXT_PUBLIC_ASTRO_URL is set (#32424)
- repo: add GitHub Actions workflow to validate PR titles (#32458)
- rspack: add support for converting webpack plugin configs #30292 (#32382, #30292)
- tools: add repository update system for automated Nx migrations (#32124)
- webpack: migrate from deprecated url.parse() to WHATWG URL API (70fb618785)
🩹 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)
- devkit: restore peer dep range to 2 majors (#32406, #31801)
- devkit: include UPDATE changes in findCreatedProjectFiles for generator callbacks (#31429, #29852)
- 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)
- graph: some misc fixes to the graph (#32401)
- graph: nxArgs.projects can be an empty array (#32479)
- 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) - 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-dev: update navbar CTA buttons and updates event tracking (#32392)
- plugin: handle directory paths correctly in executor and generator generators (#31856, #31803, #31776)
- 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) - webpack: migrate from deprecated url.parse() to WHATWG URL API (#32399)
❤️ Thank You
- 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
- Nicholas Cunningham @ndcunningham
- Tomáš Čarnecký @wereHamster