22.0.0-beta.1 (2025-10-27)
🚀 Features
- bundling: add excludeFromExternal option to esbuild executor (#32980)
- ⚠️ core: remove CreateNodes v1 types for Nx 22 (#32951)
- core: add --check=all flag to configure-ai-agents (#32968)
- core: expose registerProjectGraphRecomputationListener from daemon client (#33005)
- core: add support for pnpm catalogs (#32978, #30035, #29772)
- core: enhance spinner handling and add spinner to inferred conversion (#33031)
- core: update rust (#33220)
- docker: support inferring additional args for targets with interpolation support (#32892)
- dotnet: add initial draft of .NET plugin (#32869)
- gradle: add custom installation path to options (#33187)
- maven: introduce maven plugin (#32947)
- ⚠️ misc: remove deprecated
decorate-cliscript and stop sorting tsconfig paths by default (#32781) - misc: remove migrations prior to v20 (#32904)
- module-federation: support TS Soln and Package Manager workspaces paradigms (#33056)
- nest: ensure dependencies are added to project's package.json #32548 (#32986, #32548)
- nx-cloud: update description on nx login and logout (#31344)
- nx-dev: add v22 to version picker (#33110)
- ⚠️ release: match nx affected behavior to determine relevant conventional commits (#32915)
- ⚠️ release: remove deprecated legacy versioning (#32888)
- ⚠️ release: switch defaults for fixed release group tag pattern, preserve matching dependency ranges and strictPreid (#32878)
- ⚠️ release: set preserveMatchingDependencyRanges to true by default (#32983)
- release: add releaseTagPatternPreferDockerVersion to specify version to use for git tag #32900 (#32972, #32900)
- ⚠️ release: release graph aware filtering, updateDependents can now be "always" (#32971)
- ⚠️ release: set updateDependents to always by default (#33029)
- ⚠️ release: refactor releaseTag* properties to a releaseTag object (#33020)
- release: allow changelog.renderer to be set to an implementation directly (#33095)
- release: new replaceExistingContents CLI and API option for changelog (#33096)
- release: allow ignoring nx.json release config with ReleaseClient (#33099)
- release: allow conventional commit style aliases in version plan release types (#33167)
- release: support {versionActionsVersion} in docker version scheme (#33178)
- storybook: add watch-deps and build-deps targets (deb10f2818)
- vite: add buildable libs support for vitest (#32973)
- vue: migrate @vitejs/plugin-vue to 6.0.1 (#33097)
🩹 Fixes
- angular: improve message for unsupported typescript project references (#33148)
- angular: ensure ngpackagr tsconfig options set correctly based on version #33081 (#33150, #33081)
- angular-rspack: do not parse json with babel #32690 (#32966, #32690)
- angular-rspack: ensure root node_modules included when resolving packages (#33144, #33026)
- angular-rspack: bubble errors correctly (#33183)
- bundling: postcss-cli-resources should handle relative deploy url #32714 (#32762, #32714)
- core: improve provenance error with custom registry information (#32903)
- core: optimize task hashing with BFS and performance logging (#32911)
- core: tweak configure-ai-agents prompt (#32914)
- core: ensure nx is published with the correct dependency version for the native packages (#32928, #32898)
- core: upgrade axios to 1.12.0 to address CVE-2025-58754 (#32712)
- core: repair repo root on setupAiAgents in nx init (#32984)
- core: remove requirement to be in a package manager workspace (#32992)
- core: remove duplicated "Running" string from tui title (#32991)
- core: display bottom corner indicator of tui in progress section correctly (#32985)
- core: temporarily disable tui for run-one (#33048)
- core: ensure --help works properly with infix notation (#32662)
- core: improve db connection initialization and error messages (#33054, #28640, #30856, #32894)
- core: prioritize in-progress tasks section visibility in tui (#33053)
- core: enhance tui summary output to fix misc issues (#33057)
- core: format catalog definition files when appropriate in
nx migrate(#33105) - core: allow prerelease versions of nx to be used with devkit (#33123)
- core: restore migrations used by
nx repair(#33124) - core: avoid changing existing project name if a project.json file is added to a project (#33114)
- core: do not remove wal files manually for existing databases (#33143)
- core: do not print flaky tasks guidance when nx cloud is already enabled (#33149)
- core: add wrappers for start and stop agent nx-cloud commands (#33140)
- core: revert changes to the db connection initialization (#33156)
- core: store reason when marking daemon as disabled (#33172)
- core: adding output error reason (#33159)
- core: continue execution when cloud client is unavailable (#33214)
- core: prevent error message containing
[object Object]for invalid {workspaceRoot} placement (#33203) - core: fix swapped arguments when resolving catalog references from the filesystem (#33237)
- core: should find dockerfiles to suggest installing docker plugin (#33234)
- core: stream without prefixes showing tui (#33194, #32535)
- core: ensure daemon writes project graph cache to disk consistently (#33217)
- core: add accept header to http remote cache get (#33093, #33092)
- core: prevent undefined importer crash in pnpm lockfile parsing (#33223)
- core: split lockfile cache and other performance improvements (#33256)
- docker: handle undefined options when creating graph (#33235)
- docker: handle dockerfile at project root tag (#33236)
- dotnet: fixup various issues + missing functionality (#33132)
- graph: prevent content from overflowing in the PDV component (#33120)
- js: temporarily hash all external dependencies for tasks inferred by the
@nx/js/typescriptplugin (#32912) - js: ensure node execute completes before exit (#32629, #32385, #32356)
- linter: install correct deps in eslint convert to flat config generator (#33078)
- maven: add support for unbound goals in plugin targets (#33191)
- maven: use File.isAbsolute for cross-platform path detection (#33195)
- ⚠️ misc: don't set legacy-peer-deps by default (#33014, #22066, #29537)
- misc: add explanatory footer to ai agents prompts (#33182)
- misc: handle null exit codes from crashed child processes (#33163, #29204)
- module-federation: ensure angular rspack module federation supports live reload (#33137)
- nextjs: remove whitespace for newly generated server component (1d687c4994)
- nextjs: update entrypoints for buildable library with vite to include server entry #31457 (#32977, #31457)
- node: migrate to koa 3.0.3 (#33208)
- nx-cloud: update broken documentation links to AI features (0149fac877)
- nx-dev: improve default zoom level of graph nodes in docs (#32910)
- nx-dev: provide message to check previous docs w/ empty migrations (#32919)
- nx-dev: watch for theme changes for project/task graph components (#32885)
- nx-dev: update credit pricing link to new docs page (#32899)
- nx-dev: update nextjs internal-link-checker to include astro urls (#33045)
- nx-dev: respect NX_DEV_URL in sitemap checker (#33058)
- nx-dev: handle null github data (#33061)
- nx-dev: add docker to build-tools tech section (#33164)
- nx-dev: update docs code blocks usage (#32998)
- nx-dev: add copy-docs back as a dep of serve (#33215)
- react: dynamic module federation should not initialize remoteUrlDefinitions to empty object (#33059, #27927, #33055, #27793, #27842)
- release: ensure schema for release.groups is correct (#33007)
- release: skip filtered out groups when processing (#33044)
- ⚠️ release: ensure multilines in breaking changes are rendered by changelog renderer (#33070, #33014)
- release: replace local dependency protocols of unchanged dependencies #30995 (#33151, #30995)
- ⚠️ release: better respect version plan file contents for changelog entries (#33166)
- release: breaking change contents extraction (#33184)
- remix: @nx/remix/package.json export typo fixed #32810 (#32940, #32810)
- remix: ensure supported version of vite is used (#33089)
- repo: fix pr releases to not depend on a broken range (#32993)
- testing: show warning instead of error when no blob outputs found during merge (#33022)
- vite: ensure tsconfig file is resolved from workspaceRoot #31987 (#32990, #31987)
- vite: enable build watch mode by default for preview (#31604, #31623)
- vite: add logic to prevent overwriting generated package.json (#30705, #30312)
- vite: nxViteTsPaths supports local path aliases (#33241, #33231)
⚠️ Breaking Changes
-
release: config.conventionalCommitsConfig for
DefaultChangelogRendereris no longer nullable. (#33166) -
release: The --legacy-peer-deps behavior is no longer forced. (#33070, #33014)
If you need it, configure your package manager to enforce it.
Would only render the first line, and without the PR reference.Expected Behavior
The changelog renderer should:
- Capture and render all lines of a breaking change explanation, not
just the first
line - Include PR/commit references in the breaking change section (e.g.,
([#33014](url))) - Properly indent multi-line and multi-paragraph breaking changes for
better
readability - Maintain consistent formatting between the feature/fix entry and its
corresponding
breaking change entry
Example of correct output:
### ⚠️ Breaking Changes - **misc:** The `--legacy-peer-deps` behavior is no longer forced. ([#33014](url)) If you need it, configure your package manager to enforce it.
- Capture and render all lines of a breaking change explanation, not
-
misc: The
--legacy-peer-depsbehavior is no longer forced. (#33014, #22066, #29537)If you need it, configure your package manager to enforce it.
-
release: This is a breaking change in the preferred configuration structure. Existing configurations will continue to work through the migration period, but users should update to the new nested format. (#33020)
-
release: Users who relied on the previous 'auto' behavior can (#33029)
explicitly set
updateDependents: 'auto'in their nx.json:{ "release": { "version": { "updateDependents": "auto -
release: The signature of
init()onVersionActionshas (#32971)changed, it no longer accepts a second argument. Validation of the
manifest files, if any, now takes place via a separate method
(validate()) call after construction of the newReleaseGraph. For
the most part, users do not need customVersionActionsso only a small
percentage of consumers should be impacted.
Fixes #31273 -
⚠️ core: remove CreateNodes v1 types for Nx 22 (#32951)
-
⚠️ release: set preserveMatchingDependencyRanges to true by default (#32983)
-
⚠️ release: switch defaults for fixed release group tag pattern, preserve matching dependency ranges and strictPreid (#32878)
-
⚠️ release: remove deprecated legacy versioning (#32888)
-
release: More files are now being used to determine relevant (#32915)
commits, meaning there is higher chance for projects to receive version
bumps -
misc: The long-deprecated
decorate-cliscript has been (#32781)removed.
BREAKING CHANGE: Thenx formatcommand and generators no longer
default to sorting TypeScript path mappings. To keep the previous
behavior, pass the--sort-root-tsconfig-pathsflag to the command or
setNX_FORMAT_SORT_TSCONFIG_PATHS=true.
❤️ Thank You
- Andrew Ovens @aovens-quantifi
- Caleb Ukle
- Claude
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- David Scourfield @daiscog
- Emilio Heinzmann @emiliosheinz
- Hugo Burton @hugs7
- Jack Hsu @jaysoo
- James Henry @JamesHenry
- Jason Jean @FrozenPandaz
- Juri @juristr
- Leosvel Pérez Espinosa @leosvelperez
- Louie Weng @lourw
- MaxKless @MaxKless
- Mike Cebrian
- Miroslav Jonaš @meeroslav
- Mischa Fischer
- Nikola Kalinov
- Sander Boelhouwers
- Shai Reznik @shairez
- Terry Mun-Andersen @terrymun
- Vijay Ramakrishnan
- Zachary DeRose @ZackDeRose
- Zoran Kokeza