24.1.0-beta.0 (2026-11-10)
🚀 Features
- core: stop scaffolding apps and libs folders for preset generators (#37635)
- core: support NX_DB_NAME for local databases (#37200, #37573)
- js: remove the deprecated classproperties babel preset option (#37634)
- js: report Verdaccio startup readiness (#37683)
- node: support NestJS 12 (#36937)
- nx-dev: validate nx.dev links in packages/ against the docs sitemap (#37805)
🩹 Fixes
- angular: register the ssr dev server afterEmit hook only once (#37589, #37587)
- angular-rspack: install the plugin after Angular dependencies (#37562)
- angular-rspack: refresh SSR apps after server changes (#37607, #37586)
- angular-rspack: print diagnostic positions and full warning text (#37637, #37431)
- angular-rspack: respect component style minification (#37722, #37713)
- core: resolve pnpm aliased dependencies to their own snapshot (#37538, #37429)
- core: drop repository-local git env from the ai-config clone (#37498, #37436)
- core: pin the package manager version in generated workspaces (#37261)
- core: match project patterns with unknown colon prefixes or regex characters (#37500)
- core: keep migrations.json and prompt files out of migrate commits (#37530)
- core: load Nx Cloud code in the daemon with Node's native .js loader (#37534)
- core: keep the daemon running when PROCESS_IN_BACKGROUND fails (#37535)
- core: stop readyWhen logMatches from matching Nx command lines (#37550)
- core: avoid MaxListenersExceededWarning on Nx Cloud agents (#37553)
- core: let readyWhen read the NX_READY_URL its producer reports (#37554)
- core: name every pending dependency in the readiness wait line (#37555)
- core: avoid MaxListenersExceededWarning with parallel run-commands (#37556)
- core: preserve TUI task start times across mode switches (#37558)
- core: recover external dependencies after configuration errors (#37560)
- core: avoid pnpm store probes during version detection (#37561)
- core: count every run-commands readyWhen match, including on stderr (#37567)
- core: exit 1, not 130, when dependents of a failed task are skipped (#37574, #37506)
- core: allow options in object dependsOn entries of project and nx.json schemas (#37600)
- core: fail run-commands tasks that exit before printing readyWhen text (#37591)
- core: honor run-commands readyWhen for a single command in a terminal (#37594)
- core: preserve completed task timings across TUI modes (#37592)
- core: exit 1 on --nx-bail and show why batch tasks were skipped (#37604)
- core: await file watcher registration before reporting readiness (#37076)
- core: fix entryWhenNoChanges from adding empty lines to changelogs (#36516)
- core: detect package manager from workspace root in pnpm workspaces (#35003, #32579)
- core: resolve workspace-provided packages from the workspace root (#37272)
- core: recover project dependencies after configuration errors (#37611)
- core: fail run-commands tasks whose command cannot start (#37628)
- core: report continuous dependency inputs in nx show target --json (#37649)
- core: report skipped tasks and count summaries against the run total (#37626)
- core: load angular.json projects for nx executors converted to builders (#37645, #33651)
- core: keep claude md nx block that imports agents md (#37646)
- core: honor NO_PROXY forms and NODE_EXTRA_CA_CERTS in readyWhen url probes (#37676)
- core: support pnpm global virtual store installs in nx migrate (#37653, #37392)
- core: recover from native cache load failures (#37652)
- core: bump undici to 7.30.1 to patch security advisories (#37685, #37331)
- core: stop findImports when the jsx lexer stalls on multi-byte chars (#37695, #37687)
- core: prune task results before hash planning (#37714)
- core: keep cache restores and stores inside task outputs (#37661)
- core: harden git handling in nx import (#37663)
- core: verify and pin the nx versions that init and configure-ai-agents install (#37665)
- core: keep nx cloud credentials and task arguments out of analytics and urls (#37667)
- core: only serve the graph to local same-origin requests (#37668)
- core: hash uncovered node_modules reads and keep env out of runtime input logs (#37670)
- core: remove the duplicate redactUrlCredentials import (#37733)
- core: check ownership of daemon and pseudo-terminal socket directories (#37660)
- core: validate fetched migration metadata in nx migrate (#37664)
- core: keep yarn berry bin folders off the daemon path (#37672)
- core: report tasks skipped by ultracache to the tasks runner (#37741)
- core: import ai agent utils through a file url in the daemon (#37380, #37374)
- core: fail the run when an initiating continuous task exits non-zero (#37756)
- core: name the bare pnpm node only from the root importer (#37758)
- core: keep run-commands output written right before a command exits (#37762, #37452)
- core: match learned ultracache exclusions by suffix category (#37779)
- core: hash package.json script bodies when targets set their own inputs (#37704, #37457)
- core: keep temp installs, caches and data directories private to the current user (#37659)
- dotnet: pass configuration parameter for dotnet test and clean (#36222)
- graph: reset graph on external select all (#36944)
- graph: use current nx brand favicon in graph client (#37655)
- js: keep root tsconfig references to non-project tsconfig files (#37266)
- js: exclude node_modules from tailwind dependency glob patterns (#37657, #37343)
- js: include yarn patch checksum in the external node hash (#37709)
- js: keep a workspace-root rootDir through the typescript plugin tsconfig cache (#37701, #37700)
- js: update the npm lock file when releasing a root package without workspaces (#37333, #37299)
- js: treat bun and bun: imports as builtin modules (#37810, #37809)
- js: build the typescript-sync ignore matcher once and skip source listing for composite checks (#37795, #37791)
- linter: reuse the project graph under bun lint (#37641)
- linter: correct converted eslint report paths and cache inferred reports (#37677, #37610)
- maven: suppress wire payloads in verbose batch builds (#37566)
- maven: only apply build state paths inside the workspace or build directory (#37671)
- misc: write versioned docs lockfile into the staging dir (#37546)
- misc: read nx.dev agent skills from generated/.agents/skills (#37681)
- misc: patch HTTP, XML and archive dependencies (#37693)
- misc: widen picomatch dependency from 4.0.4 to ^4.0.7 (#37698)
- misc: include peers hidden by exports maps in generated package.json (#37761, #37388)
- nextjs: bump Next.js 15 and 16 to releases patching critical RCEs (#37601)
- nextjs: make inferred build depend on dependency typecheck in ts solution setups (#37647, #36757)
- nx-cloud: hand the nx-cloud bin's command line to the bundle's runCLI (#37605)
- nx-cloud: declare nx logout's URL argument and --all (#37579)
- nx-cloud: generate .nx/pipelines/ci.yaml from ci-workflow (#37811)
- nx-plugin: preserve the working directory in generated e2e tests (#37565)
- nx-plugin: keep create-package e2e package managers consistent (#37651)
- release: stop release e2e flaking on the GitHub username lookup (#37544)
- release: treat git and commit-derived input as data in nx release (#37666)
- release: only resolve workspace changelog changes when it is generated (#37222, #37145)
- rspack: keep user optimization settings in development web builds (#37570, #37557)
- rspack: keep extract licenses from crashing module federation builds (#37572, #37209)
- rspack: apply browserslist targets to scripts, styles and runtime (#37571, #37564)
- rspack: warn when the ignored transformers option is set (#37643, #36875)
- storybook: migrate workspaces past the storybook dev server advisories (#37407)
- storybook: rebuild build-storybook when stories or storybook config change (#37763)
- storybook: keep nx packages on their version when migrating to storybook 10 (#37336, #37260)
- testing: generate working spec tsconfigs in TS solution workspaces (#37504)
- testing: resolve type errors in generated Playwright e2e projects (#37552)
- testing: keep root project and custom-named jest configs working in v24 (#37503)
- testing: select the test files jest runs for atomized targets (#37505)
- testing: infer the serve task from bunx-prefixed playwright webServer commands (#37606, #37597)
- testing: exclude all generated jest config extensions from the production named input (#37070, #36978)
- testing: make atomized jest targets run only their own test file (#37625)
- vite: skip serve targets for library projects without a server config (#37702, #35957)
- vitest: preserve project-root coverage paths during migration (#37743, #37737)
- webpack: convert webpack configs of projects served by the js node executor (#37644, #36389)
❤️ Thank You
- Adam Wamai Egesa @Koslun
- AI-JamesHenry @AI-JamesHenry
- Akinfenwa Obaseyi @obaseyi2
- Andrew Ovens
- ATKasem
- Ayesha Waseem @AyeshaWaseemAhmad
- bylethviva @bylethviva
- Cestercian @cestercian
- Chau Tran @nartc
- Craigory Coppola @AgentEnder
- Danny Wilson
- Diogo Esteves @dgesteves
- Jack Hsu @jaysoo
- Jacob Ley @JacobLey
- Jake Guida @jakeguida
- Jason Jean @FrozenPandaz
- Jeff Berry @jeffberry
- Johnny Huirilef @johnnyhuirilef
- Johnny J. Huirilef Millán @johnnyhuirilef
- Juri Strumpflohner @juristr
- Kaan Çelebi @kaanisthatyou
- Leosvel Pérez Espinosa @leosvelperez
- leosvelperez @leosvelperez
- lyfuci
- Matthieu Brouillard @MatthieuBrouillard
- MaxKless @MaxKless
- nartc
- Nicole Oliver
- Omri Luzon
- Rahul Kashyap @itisrmk
- Sam Persson
- sarankumar @sarankumar1325
- Sean Sun
- Victor Savkin @vsavkin