github nrwl/nx 22.7.0

latest release: 23.0.0-beta.0
7 hours ago

22.7.0 (2026-04-24)

🚀 Features

  • core: add .nx/self-healing to .gitignore (#34855)
  • core: decouple DB version from Nx version and share DB across worktrees (#34942)
  • core: auto-open browser for Cloud setup URL during create-nx-workspace (#35014)
  • core: allow generate command to skip project graph creation (#35170)
  • core: remove polygraph cloud passthrough (#35153)
  • core: use CNW variant 1 cloud prompt in nx init (#35155)
  • core: add source map annotations to nx show target (#35225)
  • core: prompt for setup mode when running nx init in empty git directory (#35226)
  • core: add json input type for selective JSON field hashing (#35248)
  • core: update nx-set-shas usage to v5 (#34934)
  • core: add NX_BAIL environment variable (#34711)
  • core: add page up/down to tui shortcuts (#34525)
  • core: add logging and progress message types to daemon (#35342)
  • dotnet: add ci-workflow generator (#33321)
  • js: support nx.sync.ignoredDependencies in typescript-sync (#35401)
  • misc: a/b test cloud prompt copy in create-nx-workspace (#35039)
  • misc: update nx init telemetry meta from CSV to JSON format (#35076)
  • misc: lock in CNW cloud prompt A/B winner and add new variants (#35154)
  • nx-dev: add conditional blog/changelog proxy in edge function (#35043)
  • nx-dev: add nx-blog sitemap to root sitemap index (#35363)
  • repo: add nx-labs repo target and use glob pattern for update-all-repos (#34999)
  • repo: enable tsgo compiler for nx package (#35047)
  • repo: enforce no-disabled-tests via ESLint with per-project warning caps (#35122)
  • repo: add e2e test for nx build process verification (#35119)
  • vite: add compiler option to vite plugin for tsgo support (#35429, #33821, #35047, #35167)

🩹 Fixes

  • angular: update duplicate migration keys (#34961)
  • angular: add storybook and playwright as implicit dependencies (#35224)
  • angular: preserve specific file paths in tsconfig when adding secondary entry point (#35254, #33051)
  • angular: fall back to addUndefinedDefaults when addUndefinedObjectDefaults is unavailable (#35290)
  • angular-rspack: ensure rebuild chunks emitted summary accurate (#34979, #34936)
  • angular-rspack: normalize Windows path separators for i18n (#35252, #32864)
  • angular-rspack: add fileReplacements to resolve.alias (#34197)
  • angular-rspack: fixes issues with angular-rspack hmr (#35294, #35040)
  • bundling: disable swc input source map resolution (#35010, #32671)
  • bundling: bump esbuild for new projects to a version compatible with vite 8 (#35132)
  • bundling: declare tsconfig.json as input for esbuild targets (#35432)
  • core: skip analytics and DB connection when global bin hands off to local (#34914)
  • core: properly quote shell metacharacters in CLI args passed to tasks (#34491, #32305, #26682)
  • core: avoid redundant project graph requests in ngcli adapter (#34907)
  • core: ensure postTasksExecution fires on SIGINT for continuous tasks (#34876, #34623, #34869)
  • core: improve error handling in nx migrate registry fetching (#34926, #33014, #33135)
  • core: remove CRA migration logic from nx init (#34912)
  • core: pass collectInputs flag through daemon IPC for task hashing (#34915)
  • core: prevent DB corruption from concurrent initialization (#34861)
  • core: set windowsHide: true on all child process spawns (#34894, #34455)
  • core: split-target should handle projects with colons in name better (#34725)
  • core: prevent TUI crash when task output arrives after completion (#34785, #34677)
  • core: respect --parallel limit for discrete task concurrency (#34721, #34117, #31494)
  • core: use scroll-offset-based scrollbar positioning in TUI (#34689)
  • core: skip import-equals namespace aliases in native scanner (#34947, #34644)
  • core: include command name on all telemetry events (#34949)
  • core: skip workspace context setup when global bin hands off to local (#34953, #34914)
  • core: add explicit exports entry for nx/src/native directory (#34967, #34111)
  • core: use upsert to prevent FK constraint violations in task DB (#34977)
  • core: runtime inputs shouldn't be cached at task_hasher layer and filesets should be in the hash_plans layer (#34971, #30170)
  • core: suppress postinstall error output when nx is not yet built (#34986)
  • core: show better log message when isolated plugin shuts down after hook completion (#34922)
  • core: handle owners and conformance project refs on move/remove (#34815)
  • core: resolve published nx migrate package resolution (#35013, #34111)
  • core: prevent batch executor error on prematurely completed tasks (#35015)
  • core: add timeouts to GitHub push flow to prevent CLI hangs (#35011, #34482)
  • core: prevent nx watch infinite loop from overly broad output globs (#34995)
  • core: add package export for nx/release/changelog-renderer (#35033)
  • core: validate bundler option for Angular presets in create-nx-workspace (#35074)
  • core: handle "." and absolute paths as workspace name in CNW (#35083, #1)
  • core: pin version of axios (#35093)
  • core: preserve sibling dependency inputs in native hashing (#35071)
  • core: restore nx package exports compatibility (#35095)
  • core: sandbox exclusions, multi-line typeof import detection, global ensurePackage mock (#35056)
  • core: restore metadata table for telemetry session tracking (#35099)
  • core: no-interactive should disable prompts during migrate (#35106)
  • core: reduce published nx package size with files allowlist (#35109)
  • core: clean up legacy .gemini/skills during configure-ai-agents (#35117)
  • core: copy pnpm install configuration to generated package.json (#35016, #30240)
  • core: improve migrate error reporting (#34980)
  • core: display actual error message when plugin loading fails (#35138, #35137)
  • core: bump axios to 1.13.5 to resolve CVE-2026-25639 (#35148, #35145)
  • core: update and pin ejs to 5.0.1 (#35157)
  • core: misc tui perf fixes (#35187)
  • core: replace LGPL-licensed @ltd/j-toml with BSD-3-Clause smol-toml (#35188)
  • core: supply chain hardening via transitive dependency pinning (#35159)
  • core: kill discrete tasks and use tree-kill for batch cleanup on SIGINT (#35175)
  • core: support cross-file variable references in .env files (#34956, #34955)
  • core: disable Yarn scripts for temp nx@latest installs (#35210)
  • core: use fresh package manager cache for e2e tests (#35211)
  • core: add missing inputs and sandbox exclusions for native tasks (#35212)
  • core: prevent phantom connections and dead polling in plugin workers (#34823, #34388)
  • core: ensure build tasks use copyReadme named input (#35217)
  • core: add prettier config inputs to astro-docs format target (#35222)
  • core: add vale-changed.mjs script to vale target inputs (d4c55d806a)
  • core: add missing build inputs for angular-rspack example projects (fd0dff1078)
  • core: add run-native-target script input to dotnet build-analyzer (#35221)
  • core: overwrite inferred script target when nx prop defines executor or command (#35227)
  • core: exclude populate-local-registry-storage from sandbox I/O checks (#35239)
  • core: replace exec() with spawn() to prevent maxBuffer crash on large command output (#35256)
  • core: inline daemon status check, drop subprocess workaround (#35273)
  • core: don't cache project graph errors on daemon (#35088)
  • core: cap TUI parallel slots by total task count (#35299)
  • core: don't hang when workspace contains a named pipe (#35289)
  • core: optimize warm cache performance for task execution (#35172, #31067)
  • core: allow controlling migrate fallback installation concurrency (#35312)
  • core: support pnpm multi-document lockfiles (#35271)
  • core: await queued processTask promises before cache.getBatch (#35322, #35172)
  • core: use v8 serialization in pseudo-IPC channel (#35332)
  • core: recognize json inputs in TS task hasher fallback (#35334)
  • core: speed up nx --version by avoiding heavy imports (#35326)
  • core: resolve native binary crash on aarch64 linux with 16K/64K page kernels (#35356, #145353, #6541, #1547, #1549, #35345)
  • core: normalize spawned run-commands output (#35358)
  • core: create process report on fatal error in .nx/workspace-data (#35193)
  • core: improve native TypeScript type definitions (#35251)
  • core: don't spread plugin name into set constructor (#35385)
  • core: allow --target/-t and -p flags for nx run with colon targets (#35394, #35098)
  • core: make nx version lookup bundle-safe (#35430)
  • core: restore top-level schemas/ in published nx package (#35427, #34111, #35109, #35411)
  • core: wait for stdio drain before capturing task output (#35422, #35302)
  • core: prevent deferred spinner text update from causing early spinner appearance (#35435)
  • devkit: prevent double install in generators for TS solution workspaces (#34891)
  • devkit: add startTime and endTime to TaskResult interface (#34996)
  • gradle: remove annotations from atomizer (#34871)
  • gradle: ignore test enums when atomizing (#34974)
  • gradle: increase project graph timeout defaults (#35058)
  • gradle: use object notation for exclude tasks (#35085)
  • gradle: detect @input provider-based dependencies (#35090)
  • gradle: prevent Gradle and Maven daemon accumulation during project graph recalculation (#35143)
  • gradle: infer input extensions on project graph generation (#35160)
  • gradle: hoist shared task computation out of per-class loop in atomized CI target generation (#35199)
  • gradle: patch 0.1.19 to beta.11 (#35202)
  • gradle: recognize Kotlin compile tasks in inferred input extensions (#35335)
  • gradle: resolve sandbox violations in e2e-gradle tests (#35349, #35315)
  • js: normalize cwd path separator in typescript plugin targets (#34911)
  • js: preserve tsconfig fields in typescript plugin cache (#34908)
  • js: pass configName to typecheck command in TS plugin (#34989, #34274)
  • js: add input on .d.ts files within dependency projects (#34968)
  • js: add {projectRoot} prefix to d.ts fileset in typescript plugin (#35037)
  • js: recognize tsgo in dependency-checks lint rule (#35048)
  • js: narrow tsc build-base outputs to only tsc-produced file types (#35041)
  • js: include tsbuildinfo in narrowed tsc build-base outputs (#35086, #35041)
  • js: use explicit nx/bin/nx path in start-local-registry (#35127)
  • js: resolve ENOWORKSPACES test error in setupVerdaccio for @nx/js:library generator (#34755)
  • js: include npm overrides in generated lockfile (#35192, #34529)
  • js: stop generating baseUrl in tsconfig, use ./ prefix for path mappings (#34965, #32958)
  • js: suppress false swc-node/ts-node warning on Node 22.18+ (#35247, #32567)
  • js: avoid full source scan in readTsConfigPaths (#35300)
  • js: resolve project tsconfig for inferred tsc run-commands targets in dependency-checks (#35291)
  • js: declare .d.cts/.d.mts as typecheck inputs and outputs (#35357)
  • js: resolve build output dir from globbed outputs in node executor (#35288, #35041, #35198, #35301)
  • js: avoid double-prefixing node executor output paths (#35050, #35044, #33577)
  • js: add npm workspace support to prune-lockfile executor (#35383, #33523)
  • linter: detect require() calls in enforce-module-boundaries rule (#34896, #34096)
  • linter: use native nx.configs in convert-to-flat-config for Nx plugins (#34897, #31736)
  • linter: convert project-level eslint configs and log when skipped (#34899, #29458)
  • linter: use root config to determine ESLint class in plugin (#34900, #32110)
  • linter: prepend framework configs before baseConfig in flat config generation (#34898, #28381, #32923)
  • linter: remove custom eslint hasher (d64aeef5df)
  • linter: infer extended tsconfig files as task inputs (#35190)
  • linter: add missing inputs to eslint executor target defaults (#35236)
  • maven: prevent batch executor hang from premature worker exit (#35001, #34757)
  • maven: make install targets noop when maven.install.skip=true (#35009)
  • maven: log analyzer startup under verbose instead of stdout (#35361)
  • maven: honor settings.xml in Maven 3 batch runner (#35216)
  • misc: make webinar banner theme-aware with light mode support (#35029)
  • misc: handle non-interactive mode and add template shorthand names for CNW (#35045)
  • misc: use workspace root for package manager detection and normalize paths in plugins (#35116)
  • misc: stream Framer proxy responses and add edge function timing (#35215)
  • misc: bump axios to 1.15.0 for all packages (#35237)
  • misc: allow create-nx-workspace . --no-interactive in empty directory (#35281)
  • misc: remove process exit handlers when child process exits (#35279)
  • module-federation: enable ESM output for Angular rspack MF plugin (#34839, #34584, #33992)
  • module-federation: bump @module-federation/enhanced to ^2.3.3 (#35314, #35311)
  • nextjs: align nx-dev build inputs and update plugin defaults (#35238)
  • nextjs: add semver to required packages in update-package-json (#35384, #34095)
  • node: split package-manager exec command for VS Code launch.json (#35295, #35276)
  • nx-cloud: remove invalid images (#34997, #34970)
  • nx-dev: resolve changelog page 500 error (#34920, #34909)
  • nx-dev: build nx-dev in-place to fix ai package resolution (#34730, #34669)
  • nx-dev: improve docs search ranking and metrics (#34992)
  • nx-dev: correct YouTube channel URL on courses page (#35034)
  • nx-dev: improve search ranking for reference pages (#35243, #1, #7, #2)
  • nx-dev: seo improvements for nx.dev/docs (#35244)
  • nx-dev: restore sitemap generation (#35351)
  • nx-dev: remove broken header links (podcast) (#35410)
  • react: force Vite 7 when using React Router in framework mode (#35101)
  • react: support Vite 8 for React Router apps (#35365)
  • release: fall back to gh user search for author usernames (#34904)
  • release: surface swallowed publish errors when stdout is not valid JSON (#35283, #34497)
  • release: apply preid to dependent patch bumps (#35381, #33488)
  • repo: skip flaky Cypress HMR e2e tests (#34969)
  • repo: use @nx/nx-source export condition in jest resolver (#34972)
  • repo: resolve FreeBSD build disk space issue (#35030)
  • repo: add copy-assets plugin and migrate all packages from legacy-post-build (#34994)
  • repo: copy-assets plugin and e2e improvements (#35042, #34994)
  • repo: pass env vars into docker builds in publish workflow (#35060)
  • repo: bump picomatch from 4.0.2 to 4.0.4 (#35081, #35068)
  • repo: fixup lock-threads failing with resource inaccessible message (#35005)
  • repo: re-enable Cypress HMR e2e tests after upstream tapable fix (#35105, #34969, #20693)
  • repo: clean Angular CLI restore target before cache copy (#35121)
  • repo: correct build target outputs for docker and vue packages (#35136)
  • repo: narrow copy-assets outputs to prevent overlap with build-base (#35097)
  • repo: update issue-notifier.yml (#35178)
  • repo: resolve FreeBSD build OOM and disk exhaustion (#35309, #35231)
  • repo: switch agent apt mirror to azure to avoid canonical sync races (#35324)
  • testing: handle undefined options in playwright preset (#34750)
  • testing: gracefully handle broken jest configs in alias migration (#34901)
  • testing: add dependent .d.ts inputs for ts-jest without isolatedModules (#35231)
  • testing: declare external tsconfig files as playwright e2e task inputs (#35287)
  • testing: include config file path in plugin hash calculation (#35346)
  • vite: add support for Vite 8 (#34850, #34849)
  • vite: update vitest and plugin-react-swc versions for vite 8 compat (#35062)
  • vite: bump sass version for vue/nuxt presets for Vite 8 compat (#35073)
  • vitest: resolve addPlugin default in init generator (#34990)
  • vitest: add dependent task output files as inputs for vitest test targets (#35242)
  • vitest: infer ancestor tsconfig files as test task inputs (#35241)
  • webpack: bump postcss-loader to ^8.2.1 to eliminate transitive yaml@1.x CVE (#35028, #35025)

❤️ Thank You

Don't miss a new nx release

NewReleases is sending notifications on new releases.