20.5.0 (2025-03-06)
🚀 Features
- angular: add release option to angular publishable libraries (#29869)
- angular: support angular 19.2.0 (#30088)
- angular: update angular eslint packages (#30245)
- bundling: support rollup.config.ts (#29983)
- core: lock graph creation when running in another process (#29408)
- core: add
prefixColor
property to@nx:run-commands
(#29348) - core: add sync generators option to target defaults in nx-schema (#29441)
- core: show link to migrate detail page in --interactive mode (#29874)
- core: update CNW defaults so they generate a useful workspace by default (#29915)
- core: add multi hash fn (#29935)
- 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)
- graph: update graph lib to latest nx graph (#29768)
- js: upgrade verdaccio to 6 (#30015)
- js: add
typecheck
task to generated ci workflow file when using the ts solution setup (#30219) - linter: add
runtimeHelpers
option to@nx/dependency-checks
rule (#29954) - misc: replace
ts-jest
transformer with@swc/jest
for ts solution setup (#29763) - module-federation: add NxModuleFederationPlugin for inferred usage (#30003)
- module-federation: Update to the latest version of @module-federation (#30147)
- nx-dev: refactor and improve style of video-player (#29749)
- nx-dev: add ability to add labels to video-player (3e3c466d47)
- nx-dev: allow callout component to be expanded by default (#29806)
- nx-dev: add epic nx release course (#29777)
- nx-dev: show alt text as label below markdown images (a4f07dbb64)
- nx-dev: conformance rule for blog post description (3d0b15ef10)
- nx-dev: allow link-card components to take an image URL (2f1b6f9f72)
- nx-dev: add quote component for enterprise articles (13b9c23e3b)
- nx-dev: add metrics and related blogs section (541acf536b)
- nx-dev: webinar page (#29913)
- nx-dev: add company video (c8072fa20e)
- nx-dev: add Faro for observability (#30021)
- 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)
- react: Update react-router-dom to latest (#29919)
- release: configure when all branches should be checked for a matching releaseTagPattern (#30044)
- rspack: improve plugin createNodes performance (#29876)
- rspack: use ts-checker-rspack-plugin instead of fork-ts-checker-webpack-plugin (#30121)
- testing: support vitest 3 (#29908)
- testing: disable jest runtime by default when inferring targets (#29917)
- testing: add type annotation for Jest configuration export (#30059)
- vite: add support for vite 6 (#29871)
- vue: add release option to vue publishable libraries (#29867)
- webpack: add option to opt out of watching buildable dependencies (#29984)
- webpack: use sass-embedded and modern-compiler for sass (#29999)
🩹 Fixes
- angular: fix path issues on windows for storybook generators and unit tests (#27489)
- angular: do not generate
@nx/dependency-checks
block in flat root eslint config (#29980) - angular: correct nx angular migration requirement for 19.2 (#30234)
- bundling: rspack should allow ES config module imports (#29095)
- 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: allow for non-js libs to be moved without errors or the creation of any unneeded tsconfig files (#28350)
- core: reduce number of processed files when creating in-memory transpiler (#29774)
- core: exponential retry on cache put fail (#29017)
- core: allow postTaskExecution hook without preTaskExecution hook (#29820)
- core: improve resolution of packages in package manager workspaces when constructing the project graph (#29795)
- core: do not write filemap cache when there are errors (#29892)
- core: do not use revokable proxy (#29878)
- core: create multi-glob function (#29880)
- core: fix plugin error indexes (#29936)
- core: handle nullable
lock
when creating project graph (#30000) - core: tweaks to nx init (#30002)
- 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)
- devkit: handle missing
include
andexclude
in tsconfig options when updating tsconfig to support js (#30073) - esbuild: update peerDep range (#30167)
- eslint: ensure that packages in the same group as updated together (#30187)
- gradle: fix dependencies.txt not found (#29787)
- gradle: fix max buffer for gradle stdout (#29864)
- gradle: fix gradle undefined dependency target (#29943)
- gradle: log gradlew output for verbose (#29966)
- js: ensure js library creation respects skipFormat (#28831)
- js: do not infer
tsc
tasks with verbose output by default (#29804) - js: set --ws=false when running npm config for jest e2e (#29887)
- js: generate pacakge.json for non-buildable nest and expo libs (#29891)
- js: allow publishable library to run release command (#29775)
- js: improve the
@nx/js/typescript
plugin performance (#30024) - 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) - linter: add files entry to react flat configs to avoid applying TS rules to JSON files (#29457)
- linter: add
cjs
,cts
,mjs
, andmts
to the default extensions for the inference plugin (#29534) - linter: produce type information for the eslint-plugin main entry point (#29855)
- linter: install @eslint/eslintrc package as necessary (#29933)
- linter: dependency-check-support-catalogs (#29923)
- linter: restore package update group for
@typescript-eslint/eslint-plugin
requirement (#30204) - misc: set
hidden: true
for all init generators (#29833) - misc: generate config with output contained within project root (#29850)
- misc: fix misc issues in project generators for the ts solution setup (#30111)
- module-federation: depend on a range of versions of webpack to prevent peer dep issues (#29797)
- module-federation: tuple remotes should have global identifier added if missing (#29811)
- module-federation: handle remote output paths (#30119)
- module-federation: handle parsing static remote config correctly (#30168)
- nest: fix library generator (#30157)
- nextjs: enhance support for custom server with SWC configuration (#29895)
- 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)
- nx-dev: make toc sticky (#29784)
- nx-dev: typo in ts pkg management article (#29791)
- nx-dev: update blog metadata to include the post descriptions (247dc296a5)
- nx-dev: Update customers carousel subtitle (#29920)
- nx-dev: error on course detail page on mobile (ef4398eb60)
- nx-dev: remove OTel-based tracing for now to remove local dev erros (#30096)
- react: add release option for @nx/react:lib --publishable (#29776)
- 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: don't try to fetch master if already on master (#29831)
- repo: fix nightly reporting (#30104)
- rspack: handle configs with default exports (#29825)
- rspack: should be inferred by default (#29736)
- rspack: pin rspack 1.2.2 (#29997)
- rspack: handle potentially missing lockfile in
@nx/rspack/plugin
plugin (#30086) - storybook: fix package.json updates so @storybook packages are in sync during migration (#30191)
- testing: infer correct file output paths for atomized targets (#29766)
- testing: fix passing extra args to Jest cli (#27704)
- testing: move webpack and vite to optional peer dep (#29800)
- testing: remove dependency on @nx/vite and @nx/webpack from @nx/playwright (#30023)
- vite: fall back to file matching when resolved file does not exist in
nx-vite-ts-paths
plugin (#29472) - vite: ignore vite temp files in eslint config (#29909)
- 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)
❤️ Thank You
- Alejandro Forero @focusaway
- Amr Salama
- Anthony Boyd @Bullfrog1234
- Anthony Shew
- Ashley Hunter
- Chau Tran
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- Denis Akiyakov @newsiberian
- Denis Bendrikov
- Emily Xiong @xiongemi
- Esteban
- Ethan Koenig @ethantkoenig
- Gustavo Perdomo
- Hikari Hayashi @latin-1
- Isaac Mann @isaacplmann
- Jack Hsu @jaysoo
- James Henry @JamesHenry
- Jason Jean @FrozenPandaz
- Jonathan Cammisuli @Cammisuli
- Juri @juristr
- Juri Strumpflohner @juristr
- Kerick Howlett @KerickHowlett
- Kevin Hallmark @khallmark
- Leosvel Pérez Espinosa @leosvelperez
- Mararok @Mararok
- MaxKless @MaxKless
- Mike Pham
- Miroslav Jonaš @meeroslav
- MisterPandaPooh
- Neil @nc1z
- Nicholas Cunningham @ndcunningham
- Nicolas Beaussart @beaussan
- Petr Plenkov
- robertIsaac
- Ryan Bas @ryanbas21
- Stefan Haas @HaasStefan
- Tristan Zander