20.7.0 (2025-03-31)
🚀 Features
- angular: add release option to angular publishable libraries (#29869)
- angular: support angular 19.2.0 (#30088)
- angular: update angular eslint packages (#30245)
- angular: add convert-to-rspack generator (#29860)
- bundling: support rollup.config.ts (#29983)
- bundling: add buildLibsFromSource option to @nx/rollup:rollup executor (#30417)
- core: support bun's new text-based lockfile and use bun publish within nx release (#30064)
- core: display perpetual version information in nx report for powerpack (#30110)
- core: add activate key (#30250)
- core: add activate key " (#30250, #30295)
- core: add maxCacheSize option to limit local artifact size (#29654)
- core: add
nx register
(#30321) - core: provide default value for max cache size (#30351)
- js: upgrade verdaccio to 6 (#30015)
- js: add
typecheck
task to generated ci workflow file when using the ts solution setup (#30219) - linter: support eslint-config-prettier v10 (#30480)
- misc: add
useProjectJson
flag to project generators (#30319) - misc: enable ts solution setup by default for new workspaces (#30372)
- misc: set a
development
conditional export for buildable libraries when using the ts solution setup (#30451) - misc: add
--useProjectJson
flag to CNW (#30475) - module-federation: add NxModuleFederationPlugin for inferred usage (#30003)
- module-federation: Update to the latest version of @module-federation (#30147)
- module-federation: add ssr support to rspack crystal plugin (#30437)
- nx-dev: expose docs embedding search via endpoint (#30050)
- nx-dev: allow sampling rate to be configured through env var (#30193)
- nx-dev: update workspace conformance rule to check md files in general (d428eec060)
- nx-dev: add angular architecture blog post (#30400)
- nx-dev: add java landing page (#30508)
- react: Update react-router-dom to latest (#29919)
- react: add react-router plugin (#29965)
- react: Add react-router to create-nx-workspace and react app generator (#30316)
- release: configure when all branches should be checked for a matching releaseTagPattern (#30044)
- repo: replace explicit matrix with dynamic parsed from json (#30120)
- rspack: use ts-checker-rspack-plugin instead of fork-ts-checker-webpack-plugin (#30121)
- rspack: infer ts-node compiler options in rspack task env when using a typescript config file (#30345)
- rspack: alias convert-webpack to convert-to-rspack (#30367)
- testing: add type annotation for Jest configuration export (#30059)
- vue: add release option to vue publishable libraries (#29867)
- webpack: use sass-embedded and modern-compiler for sass (#29999)
🩹 Fixes
- angular: correct nx angular migration requirement for 19.2 (#30234)
- angular: directory type is not optional (#30354)
- angular: include
@angular/google-maps
in package updates (#30530) - bundling: use projectRoot for assets (#29978)
- bundling: remove migration always adding sass-embedded (#30276)
- bundling: fix esbuild to work with ts project references (#30230)
- core: change to use init generator during import (#30029)
- core: add the
extends
field to nx-schema.json (#30027) - core: respect
extends
when reading tsconfig options (#30062) - core: make hash_array resilient to None values (#30090)
- core: NX_PLUGIN_NO_TIMEOUTS should also remove timeout on plugin worker connection (#30095)
- core: update custom task runner deprecation message (#30093)
- core: fix typescript dependency calculation (#30131)
- core: task runner should match on full segments (e.g. foo does not match foo-e2e) (#30129)
- core: improve packages recognition when the package version is an external package (#29529)
- core: re-enable CRA migration to Vite (#30082)
- core: standardize useGitHub param (#30173)
- core: ensure daemon enabled check is unchanged (#30228)
- core: change graph node type and name to string (#29610)
- core: annotate daemon logs w/ nx version (#30262)
- core: handle nx config in package.json in move generator (#30270)
- core: run init generators from extended collections during nx add (#30280)
- core: handle package manager workspaces configuration in move generator (#30268)
- core: only add keep existing versions if init generator supports it (#30352)
- core: make 'key' parameter optional in register command (#30365)
- core: handle null outputs in native cache (#30398)
- core: simplify key registration process (#30405)
- core: legacy cache users should get artifacts when remote cache is hit (#30442)
- core: pass the project graph into the batch instead of recreating (#30455)
- core: fix local registry not being considered when using
bun
(#30459) - core: init should use pr version when specified (#30497)
- core: ensure local plugin is transpiled when using index files (#30133)
- core: add more detection for ci platforms (#30507)
- core: fixup error handling for get generator info (#30525)
- core: handle windows drive letter in a case-insensitive manner when normalizing paths (#30535)
- devkit: handle missing
include
andexclude
in tsconfig options when updating tsconfig to support js (#30073) - devkit: formatFiles should check for root prettier config before using prettier (#30426)
- esbuild: update peerDep range (#30167)
- eslint: ensure that packages in the same group as updated together (#30187)
- gradle: exlude htmlDependencyReport (#30300)
- gradle: build nx graph for gradle projects regardless of build gradle file location (#29783, #29802)
- graph: fix target details header tooltips in collapsed state (#30287)
- js: invalidate tsconfig files cache in the
@nx/js/typescript
plugin when extended files change (#30071) - js: identify correct circular dependecies (#29759)
- js: use uuid when generating tmp tsconfig (#30118)
- js: use absolute filetorun path (#30091)
- js: normalize paths correctly in
@nx/js/typescript
plugin (#30216) - js: handle plugin correctly for non-buildable libs and don't add duplicated pattern to workspaces config (#30209)
- js: do not add typecheck target if tsc is used for build (#30211)
- js: update
outDir
in runtime tsconfig files to matchtypes
export in package.json (#30217) - js: update tinyglobby to speed up shallow file matching (#30415)
- js: normalize tsconfig include paths correctly in
@nx/js/typescript
plugin (#30496) - js: infer
typecheck
task for buildable libraries with tsc (#30505) - linter: restore package update group for
@typescript-eslint/eslint-plugin
requirement (#30204) - misc: fix misc issues in project generators for the ts solution setup (#30111)
- misc: update axios and webpack (#30379)
- misc: override
customConditions
when using an incompatible module resolution (#30477) - misc: handle outputs with globs when normalizing tsconfig path mappings for buidable libraries (#30506)
- misc: init should prompt for cloud when using dot nx folder (#30501)
- module-federation: handle remote output paths (#30119)
- module-federation: handle parsing static remote config correctly (#30168)
- module-federation: the module federation package depends on rspack (#30520)
- nest: fix library generator (#30157)
- nextjs: add support for @testing-library/dom in application and library generators (#30189)
- nextjs: add setup generator for Tailwind CSS fixes absolute pathing (#30192)
- nextjs: enhance glob pattern (#30260)
- nextjs: update documentation for buildable libraries and bundler configuration (#30500)
- nx-dev: remove OTel-based tracing for now to remove local dev erros (#30096)
- nx-dev: sidebar should not always show angular-rs* links (#30448)
- nx-dev: adjust alignment on the pricing addon descriptions (50561ff009)
- nx-dev: add data-document attribute to improve search (#30524)
- react: add release option for @nx/react:lib --publishable (#29776)
- react: only add release config for publishable librarires (#30474)
- react: update react router logic with selected bundler (#30399)
- react: react-router should work with jest out of the box (#30487)
- react-native: change build target to be crystalized (#30151)
- release: ensure tags for version match stable variant before prerelease (#30047)
- release: allow preid option in release command (#29264)
- release: properly terminate case in switch statement (#30114)
- repo: fix nightly reporting (#30104)
- rspack: pin rspack 1.2.2 (#29997)
- rspack: handle potentially missing lockfile in
@nx/rspack/plugin
plugin (#30086) - rspack: remove unused plugin-minify (#30521)
- storybook: fix package.json updates so @storybook packages are in sync during migration (#30191)
- vite: prevent asset copying when NX_GRAPH_CREATION is enabled (#30037)
- vite: allow force ignore of logs from nxViteTsPaths plugin #29320 (#30200, #29320)
- vite: ensure paths with explicit extensions are resolved #29948 (#30202, #29948)
- vite: environments api support in executor (#30183)
- vite: copy assets plugin not copying files in watch mode #30141 (#30208, #30141)
- vite: correct mapping for reportsDirectory when using executors (#30232)
- vite: ensure test target dependency is not duplicated (#30289)
- webpack: allow baseHref to not be set #30291 (#30519, #30291)
- webpack: add extension alias support for handling ESM libs (#30513)
❤️ Thank You
- Alejandro Forero @focusaway
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- Denis Akiyakov @newsiberian
- Denis Bendrikov
- Emily Xiong @xiongemi
- Ethan Koenig @ethantkoenig
- Gustavo Perdomo
- Hikari Hayashi @latin-1
- Jack Hsu @jaysoo
- Jack Stevenson
- James Henry @JamesHenry
- Jason Jean @FrozenPandaz
- Jonathan Cammisuli @Cammisuli
- Juri @juristr
- Juri Strumpflohner @juristr
- Kevin Hallmark @khallmark
- Leosvel Pérez Espinosa @leosvelperez
- MaxKless @MaxKless
- Mike Hartington @mhartington
- Miroslav Jonaš @meeroslav
- MisterPandaPooh
- Nicholas Cunningham @ndcunningham
- Nicolas Beaussart @beaussan
- Petr Plenkov
- Richard Roozenboom @Roozenboom
- Roman Lorenzo Balayan @romanbalayan
- Tine Kondo @tinesoft
- Tristan Zander @tristanzander