npm / nx
nx
What changed in nx 21 to 23, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
66 breaking12 security22 deprecations92 new APIs and options10 performance58 behavior and defaults69 tooling310 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initnx 23218 changes
Breaking changes 39
Nx adds ultracache configuration for sandbox targets, replacing the sandbox target property.
Nx adds Angular v22 support; Angular v19 is no longer supported.
Angular esbuild option paths are now resolved relative to the workspace root.
ESLint v8 is no longer supported; Nx requires ESLint v9 or later.
Support for filtered array-shape targetDefaults was reverted pending redesign and reapplication.
The rollup buildLibsFromSource default is aligned.
CreateNodes V2 types are renamed to the canonical OG names.
CreateNodes V2 types are renamed to the canonical original names.
The legacy 'self' and 'dependencies' magic strings are dropped from dependsOn.
The legacy 'self' and 'dependencies' magic strings are dropped from dependsOn.
The deprecated initTasksRunner API has been removed.
The deprecated initTasksRunner export is removed from nx; consumers should use runDiscreteTasks or runContinuousTasks instead.
The deprecated js option is removed from component generators.
The deprecated js option has been removed from component generators.
The legacy TypeScript plugin has been dropped.
The legacy TypeScript plugin is dropped.
The deprecated Angular move generator has been removed.
The deprecated Angular NgRx generator has been removed.
Node 20 is no longer supported.
The deprecated entry point has been removed; update imports to a supported entry point.
The entry point is removed; update imports to @nx/module-federation/angular. nx migrate handles this automatically.
The generator is removed. Use @nx/workspace:move or its mv alias instead.
The generator is removed. Use @nx/angular:ngrx-root-store for root state or @nx/angular:ngrx-feature-store for feature state.
@nx/dotnet graduates from experimental status and drops the /plugin export.
The @nx/dotnet/plugin entry point is removed; use @nx/dotnet. The included migration updates nx.json automatically.
The skipSetupFile option of the @nx/jest:configuration generator is removed.
The setupFile option of the @nx/jest:jest executor is removed.
Interactive migration mode is disallowed for Nx v23 and later targets.
Renames --includeDependentProjects to --includeDependencies.
Deprecated flat releaseTag* properties are dropped and v23 defaults are updated.
Deprecated releaseTag* flat properties are dropped and v23 defaults are updated.
The deprecated Jest setupFile option has been removed.
The deprecated Jest skipSetupFile option has been removed.
The SVGR option has been removed; a withSvgr migration is provided.
The SVGR option is removed; a withSvgr migration is provided.
The setup-tailwind generators have been removed.
Vitest support is removed from @nx/vite in favor of @nx/vitest.
Vitest support is removed from @nx/vite in favor of @nx/vitest.
Deprecated webpack plugin re-exports have been dropped.
Security 7
Nx: Path traversal in nx migrate package-migrations extraction
Socket access is restricted to the owning user, improving isolation for daemon and plugin worker processes.
Nx daemon and plugin worker sockets are accessible to other local users
The import command no longer permits shell injection.
Nx: OS command injection via git revisions and remote refs
Nx: Zip-Slip in the self-hosted remote cache
Prevents path traversal and zip-slip, and warns when TLS verification is disabled.
Deprecations 20
The standalone parameter of addProjectConfiguration is deprecated.
The standalone parameter is deprecated.
The Angular convert-to-with-mf generator is deprecated.
Support for ESLint v8 is deprecated.
Executors that have inferred-plugin replacements are deprecated.
Old module federation generators are deprecated, and new consumer/provider generators are added.
The Cypress executor is deprecated.
The @nx/cypress:cypress executor is deprecated.
The @nx/detox build and test executors are deprecated.
The @nx/detox build executor is deprecated.
The @nx/detox test executor is deprecated.
The nxCopyAssetsPlugin helper is deprecated.
The nxCopyAssetsPlugin helper is deprecated.
The nxViteTsPaths helper is deprecated.
The nxViteTsPaths helper is deprecated.
Angular SCAM generators are deprecated.
The webpack and rspack config compose helpers are deprecated.
The webpack/rspack config compose helpers are deprecated.
The Next.js withNx function is deprecated.
The withNx function is deprecated.
New APIs and options 31
Nx adds an opt-in to select affected tasks instead of affected projects.
Use --explain to see why each task is affected.
Exports NodeExecutorOptions from @nx/js/executors for consumers that need the executor options type.
Set NX_CLOUD_USE_ULTRACACHE to turn on ultracache.
Nx adds a batched lint executor for oxlint.
Adds --port to @nx/web:app.
The CSS module hash algorithm can now be overridden.
Migration generators can now skip their AI step.
Nx Cloud generates this file for agent distribution.
Run a single migration with the new --run-migration option.
This command is added as an alias for nx-cloud start-nx-agents.
Nx Release now supports custom conventional commit types.
Nx Release can select projects based on tags.
The TUI adds vim-style pane search and a full-width status bar.
Generators consistently offer Vitest through the unitTestRunner option.
The library generator exposes the compiler option.
The library generator exposes the inSourceTests option.
Selected projects can run without running their task dependencies.
Programmatic usage can now force changelog generation.
TypeScript config path alias resolution now supports the ${configDir} token.
The workspace generator can scaffold a workspace into the current directory.
The @nx/esbuild/executors entry point is now exported.
Filtered targetDefaults can now use the nested-array shape.
Vite build and test targets gain configurable TypeScript path support.
Migration entries can now use a prompt field.
Adds the --mode flag to nx migrate.
Adds the --multi-major-mode flag to nx migrate.
Adds agentic mode for running migrations.
A migrate configuration section is available in nx.json.
The string '...' is supported as a spread token when merging target configuration.
Adds a flag to skip the confirmation prompt for third-party presets.
Performance 1
Angular Rspack builds are faster and align their behavior with the esbuild application builder.
Behavior and default changes 17
A continuous dependency's inputs are included in the hash of the task it serves.
Next.js uses out/ as the default output directory when output is export.
Reads the pnpm 12 min-release-age policy instead of deferring to an install.
Nx asks for confirmation before creating migration commits on the default branch.
Nx derives a stable repo key from the normalized remote and relative path, making repository identification consistent across equivalent paths.
Generated React projects no longer pin eslint-plugin-react.
The React 19 migration skips the React 19 update for workspaces using Remix v2.
Nx warns when the self-hosted remote cache disables TLS verification.
The terminal UI now supports mouse interaction.
Web executor, plugin, and generator commands run with the workspace package manager.
Clickable cloud prompt links now include UTM tracking.
Rsbuild build outputs are inferred directly from distPath.root.
The default Jest module path scan excludes dist and out-tsc.
Native Node.js TypeScript stripping is enabled by default.
The --include option now supports any package that supports optional updates.
The Rollup buildLibsFromSource default is aligned with the updated bundling behavior.
Vitest watch is disabled by default for Angular.
Tooling 29
Angular Rspack can scaffold and run SSR apps on the @angular/ssr application engine.
Nx reports the cache location alongside cache usage.
Nx supports Cypress 16.
Nx Angular supports ngrx v22, allowing Angular workspaces to use that version.
Orchestrated migrate runs emit a runbook and per-step instructions to guide the migration.
Nx guarantees terminal output files and adds an agent-friendly summary output style.
Nx supports Vitest 5.
Scans package projects for environment variables.
Keeps the cache in the workspace on CI.
The Nx daemon and plugin workers can run inside agent sandboxes.
Nx adds support for Angular v22.1.
Nx adds built-in support for Bun dependency catalogs.
Nx adds the @nx/oxlint plugin.
Nx adds built-in support for the oxfmt formatter alongside Prettier.
Generators for Node, Nest, and Express can generate Vitest setup.
Nx plugin generators add Vitest support for e2e tests.
Nx adds support for Expo SDK 56.
Nx adds an upgrade path from Next.js 14 to 15.
Nx shows a performance report at the end of every run, with recommendations.
Nx adds an upgrade path from React 18 to 19.
Nx supports @rspack/core@2 and @rsbuild/core@2 with multi-version compliance.
A migration renames createNodesV2 to createNodes.
A JSON schema is added for migrations.json files.
Deep imports from @nx/devkit/src/... are migrated away from.
Nx adds support for pnpm 11.2.2.
Shell tab-completion is available for bash, zsh, fish, and powershell.
Migrations are available to move Vite 7 projects to Vite 8.
The migration handles Vitest workspace configuration better.
The v23 migration adds webpack tooling to devDependencies.
Fixes and other changes 74
Corrects declaration maps and exports for Angular buildable libraries.
Fixes resolution of the requested Nx version when running nx migrate under npm 12.
Nx supports pnpm 12 install configuration and shims.
Carries minimumReleaseAge into pruned pnpm deploy output.
Writes the normalized cache option in NxAppRspackPlugin.
Resolves tsconfig to an absolute path so ${configDir} paths type-check without baseUrl.
The none value now skips AI agent file generation.
The esbuild executor now supports TypeScript esbuildConfig files.
Selected projects now run correctly when this option is used.
Nx now honors the pnpm minimumReleaseAge configuration with pnpm 11.
Options from targetDefaults now apply to inferred targets that are not redeclared.
Vitest generation now creates a root vitest.config.ts instead of the deprecated vitest.workspace.
The Vitest test executor now honors watch configuration and keeps --ui open.
Daemon workspace roots are compared case-insensitively on Windows.
A built next.config can load without @nx/next installed.
The optional ng-packagr package is imported lazily.
TS config files are reloaded fresh instead of being served from stale cached modules.
JavaScript affected detection resolves override selectors.
The Gradle plugin emits valid Groovy when applied to an existing allprojects block.
Angular keeps buildable libraries private.
Nx accepts bun.lock files with lockfileVersion 2 and 3.
Angular Rspack rebuilds components when their templates or styles change on Windows.
Target cacheability is maintained when an executor target default applies.
The Expo dev server stays alive under Jest.
Devkit tree walks and generator formatting honor cascading ignore files.
Expo derives Metro's projectRoot and node_modules from the app being bundled.
React makes module federation packages optional peer dependencies.
The generator no longer installs unused Next.js ESLint packages.
The Next.js library generator exports its server entry.
Nx stops the daemon before nx add installs a package.
The command drains stdout before exiting, preventing output from being lost.
Migration honors the package manager's registry configuration.
The command drains stdout before exiting, preventing output from being lost.
The command drains stdout before exiting, preventing output from being lost.
Angular Rspack builds no longer crash when styleUrls is not an array.
Target group members without a target are skipped.
Nx no longer leaves an unkillable process when a terminal closes.
Nx Release skips changelog resolution for unversioned projects.
Angular makes webpack-related packages optional peer dependencies, so projects that do not use them need not install them.
ensurePackage resolves packages against the workspace.
Webpack bundles subpaths of non-buildable libraries that use fallback-array exports.
Nx supports patched dependency hashes in pnpm 11 lockfiles.
Nx preserves comments in pnpm-workspace.yaml and reads package.json as JSONC.
The Babel preset supports private methods and static blocks.
Flat ESLint configs use projectService for typed linting.
The Module Federation dev-server plugin no longer caches static remote assets.
The Vite executor no longer leaks watch: false into the dev-server configuration.
The webpack executor propagates its watch option to the webpack configuration.
Workspace glob matching supports multiple brace groups.
Rspack uses contenthash for chunkFilename to prevent stale chunks.
formatFiles works with Prettier v2 support restored.
Nx re-adds the isCacheableTask helper for determining whether a task is cacheable.
create-nx-workspace now respects an explicit --nxCloud=skip setting for AI agents.
Projects-filtered targetDefaults are skipped when resolved without a project.
The Vitest executor supports passing mode through and applies mode-based configuration consistently.
Prevents doubled output paths in path mappings for buildable libraries.
Resolves catalog references in pruned package.json output.
Waits for the process tree to exit when stopping executor tasks.
Preserves the allowlist in pruned package.json output.
Avoids a crash when include=optional filters out the target package, and honors preapproved packages while emitting a valid temporary workspace.
Applies target defaults when project.json overrides an inferred run-commands target with different commands.
Scopes incremental type-check information per project.
Vite detects the Vue 2 plugin for vue-tsc type checking.
AI-edited files are formatted after agentic migrations.
Compilation failures are surfaced as build errors, and resources are released on teardown.
Angular resolves esbuild option paths relative to the workspace root.
nx migrate no longer writes minimumReleaseAgeExclude.
nx migrate no longer crashes on dependency specifiers that are not semver.
A breaking change changelog entry no longer swallows the trailing PR body.
Nx avoids false-positive tsconfig path matches for sibling project roots.
nx mcp can now run outside an Nx workspace.
NX_PREFER_TS_NODE is respected over native TypeScript stripping.
Absolute Cypress screenshotsFolder paths are handled correctly.
Absolute Cypress videosFolder paths are handled correctly.
nx 22406 changes
Breaking changes 26
TypeScript 7 is excluded from supported versions on the 22.7.x line.
Nx no longer infers projects: 'self' in dependsOn entries.
Generated tsconfig files no longer include baseUrl; path mappings use a ./ prefix instead.
An nx property that defines an executor or command now overwrites an inferred script target.
CRA migration logic has been removed from nx init.
The Gradle executor now enforces that only one Gradle task is passed to it.
The React package removes its file-loader dependency.
The Gradle executor now always reruns tasks.
Nx now exits with an error when generator prompts fail.
Failures in continuous tasks are propagated to dependent tasks.
Nested graph construction invoked during createNodes now produces an error instead of occurring unexpectedly.
Vitest support is split into the @nx/vitest plugin, with separate plugin, generator, and executor entry points.
This DefaultChangelogRenderer configuration is no longer nullable.
CreateNodes v1 types are no longer available in Nx 22.
The deprecated option was removed from webpack and rspack.
Deprecated legacy versioning was removed.
The deprecated legacy versioning mode is no longer available.
The environment variable was removed.
Formatting no longer defaults to sorting TypeScript path mappings; pass this flag to retain the previous behavior.
Support for non-isolated webpack config was removed from the React testing preset.
Migrations prior to v20 were removed.
The generator was removed in favor of framework-specific options.
The deprecated option was removed from webpack and rspack.
The option is no longer supported in library generators.
Now defaults to always; users who relied on the previous auto behavior can explicitly set it to auto.
The default changed to false in v22.
Security 5
Nx warns before installing unknown npm packages as presets.
nx graphdev server permissive CORS policyShell metacharacters in CLI arguments passed to tasks are now properly quoted.
Command injection in getNpmPackageVersion is prevented.
Module Federation updates its @module-federation packages to fix a Koa vulnerability.
Deprecations 2
The setup-tailwind generators are deprecated.
The releaseTag* properties were refactored into a nested releaseTag object; existing configurations continue to work through the migration period.
New APIs and options 61
The generate command can skip project graph creation.
Adds a way to control concurrency for migrate fallback installations.
Adds the NX_BAIL environment variable.
typescript-sync now supports nx.sync.ignoredDependencies.
A json input type is available for selectively hashing JSON fields.
The TaskResult interface now includes startTime and endTime.
Nx adds commands for debugging cache inputs and outputs.
The Playwright executor adds a cacheDir option.
Dependency filesets now support the ^{projectRoot} syntax.
nx init adds an agentic mode.
nx list adds a --json flag.
The top-level nx release command accepts --otp and detects EOTP errors.
Set NX_SKIP_FORMAT to skip Prettier formatting.
Executors can use the new preferBatch option.
Affected options now support --stdin.
The JavaScript plugin supports configuring the typecheck config name.
Adds an explicit cloud opt-out to CNW and preserves nxCloud=skip in non-interactive mode.
The TUI can display batch tasks.
Daemon logging settings can now be overridden.
A command was added to download the cloud client.
Nx can use Node's strip types feature instead of transpilation for TypeScript files when NX_PREFER_NODE_STRIP_TYPES is set.
This environment variable opts into Node's strip types feature instead of transpilation for TypeScript files.
Adds llms-full.txt and HTTP Link headers for LLM discovery on nx-dev.
A second prompt variant with a promotional message was added to CNW cloud prompts.
Rspack adds cache configuration.
The release flow adds an option to opt out of the commit scope filter.
Nx supports hashes specific to the current working directory.
Nx adds an inline TUI view mode.
A batch executor enables multi-task Maven execution.
Dependency checks add the peerDepsVersionStrategy option.
Rspack adds runtimeDependencies configuration.
Rspack adds typeCheckOptions configuration.
Adds a typed error class for error handling in create-nx-workspace.
The companion E2E project location can now be customized.
Rspack configuration now supports
cssFilename.The Next.js page generator accepts a
fileNameoption.Adds an environment variable for configuring the default output style.
Adds support for merging externals in
NxAppWebpackPlugin.The Playwright preset adds an option to open the HTML report.
Adds an option to use the tsgo compiler when inferring build and typecheck tasks.
The TUI now displays hints and status messages.
Workspace creation supports templates.
Adds a utility for loading ESLint rules from a directory.
The migration to Next 16 is optional.
Adds an option to prefix all Gradle targets.
Gradle options now allow a custom installation path.
Project and task configuration can now be specified from Gradle build files.
Maven targets can now be configured with a prefix applied to all targets.
The changelog CLI and API add the resolveVersionPlans option.
The Docker build target adds skipDefaultTag to control whether it uses the default tag.
The Docker version scheme now supports the {versionActionsVersion} placeholder.
The TUI supports OSC 9;4 progress indicators.
Added the --check=all flag.
Adds the excludeFromExternal option to the esbuild executor.
An initial draft of a .NET plugin was added.
Set this environment variable to true to keep sorting TypeScript path mappings by default.
Exposed from the daemon client.
Can now ignore the release configuration in nx.json.
Added an option to specify which version to use for a git tag.
Added as a changelog CLI and API option.
The option can now be set to always, with release graph-aware filtering.
Performance 9
Reduced memory usage during task hashing on large workspaces.
Nx enables Node's native V8 compile cache support.
withNx now uses the cached project graph.
The command runs faster by avoiding heavy imports.
Interpolates process.env more verbosely to reduce bundle size with DefinePlugin.
Initial generation for JavaScript projects is more lightweight.
Optimizes batch task scheduling to prevent redundant traversals.
Improves TypeScript plugin performance.
Hash tasks in batches when no custom hashers are configured.
Behavior and default changes 41
All Gradle tasks now have transitive set to true.
The command automatically opens the browser for the Nx Cloud setup URL.
The database is decoupled from the Nx version and shared across worktrees.
Running nx init in an empty Git directory prompts for a setup mode.
The command now cleans up legacy .gemini/skills files.
Generated lockfiles now include npm overrides.
Extended tsconfig files are now inferred as task inputs for lint targets.
Increases the default project graph timeout for Gradle.
The command A/B tests cloud prompt copy.
Plugin include/exclude patterns now support negation patterns.
Cloud commands now do nothing rather than erroring when the workspace is not connected.
The command copies Nx skills, subagents, and plugins.
Flaky tasks are detected only for cacheable tasks.
JSON schema validation now allows null values.
pom.xml and ancestor pom files are included as inputs for all Maven targets.
Maven classes are loaded at runtime to support version-agnostic batch execution.
Nx now handles more sophisticated Vite plugins.
Nx Cloud CNW completion messages now include decorative banners.
Module federation now uses localhost as its default host.
The command can infer the project from the current working directory.
Release version bumps now special-case 0.x versions.
Makes per-file logs opt-in through verbose mode.
Tasks marked cacheable are no longer presumed to be long-running.
TS Solution workspaces set generatePackageJson to false.
The Gradle plugin is no longer added to the plugins block when version catalogs are used.
Corrects the nx-schema default for preserveMatchingDependencyRanges to the value intended for v22.
Docker release automatically selects the version scheme when only one is available.
Docker targets can infer additional arguments when interpolation is supported.
Atomized targets now inherit the parent environment.
The command pulls the latest nx init before executing.
nxViteTsPaths now supports local path aliases.
Interactivity is disabled by default for run-one task outputs in the TUI.
Maven targets now forward parameters through target dependencies.
The TUI is enabled by default on Windows, changing the default task-output interface.
Gradle uses gitignore to determine dependent task output files.
Output streams without prefixes when showing the TUI.
Can now be set directly to an implementation.
Nx no longer forces this behavior; configure the package manager to enforce it if needed.
Now prompts for AI agent files during initialization.
Now defaults to true.
Now allow conventional commit style aliases.
Tooling 40
Gradle streams batch task results to Nx as they finish.
Adds a .NET CI workflow generator.
Nx adds support for Vite 8.
Storybook and Playwright are now included as implicit dependencies.
Generated package.json files now include pnpm install configuration.
Nx adds support for Angular v21.2.
The JavaScript plugin adds a deps-sync generator.
The project graph now reports external Maven dependencies.
Nx adds passthrough support for the nx-cloud apply-locally command.
Nx adds support for Yarn Berry catalogs.
Migrations and caia add .nx/polygraph to gitignore so it is ignored by Git.
The Vitest config file is now created.
The component stylesheet bundler now uses Tailwind and PostCSS configuration.
Nx adds support for Angular v21.1.
Nx supports bulk suppression for ESLint v9.24.0 and later.
Cypress component testing is supported in zoneless Angular projects.
Angular projects can use ngrx v21 with Nx.
Nx supports Angular v21.
An Angular migration sets
isolateModules: truein Jest tsconfig files.An Angular migration replaces imports from
jest-preset-angular/setup-jest.Nx supports Prettier v3.
SWC compilation error logging is improved, making errors easier to diagnose.
Generators use versions compatible with ESLint v9.
Vite config files are generated with the .mts extension to force ESM.
The report detects multiple Nx versions, helping developers identify version inconsistencies.
Adds a Vitest 4 migration for users of @nx/vite.
Adds a migration to add @nx/vitest.
The base ESLint config ignores out-tsc directories.
The Storybook integration supports Storybook 10.1.
The Maven plugin adds a generator for CI workflows.
Nx adds support for Cypress v15.
Nx adds support for Next.js 16.
Nx adds support for Storybook 10.
Maven plugin targets now support unbound goals.
Nx adds support for Vitest 4.
The peer dependency range includes Vitest 4 to prevent conflicts.
A Maven plugin was introduced.
Nx now supports pnpm catalogs.
Added watch-deps and build-deps targets.
Buildable library support was added.
Fixes and other changes 222
Oversized daemon responses now fall back to v8, and the wire protocol uses length prefixes.
Resolving configurations no longer mutates target options.
Maven and Gradle graph analysis no longer runs through a shell.
Migrations fetched via install now use the workspace package manager.
The Angular Rspack stylesheet bundler is disposed so one-shot builds exit.
Generated pnpm-workspace.yaml allows Nx build scripts and acknowledges the @swc/core build script.
Declares directory build props as inputs for analyzer dotnet tasks, the separate release build target, and analyzer tests dotnet targets.
Declares obj as a publish output to fix a sandbox violation in dotnet tasks.
Publishing falls back to npm publish when bun publish fails with an authentication error.
The conversion output more faithfully reflects the original configuration.
Results from createNodes plugins preserve their input order.
Directory.*.* files are included in .NET inputs.
Dollar signs in file paths are no longer escaped on Windows.
Local plugin subpath imports resolve from source without requiring custom conditions.
The runtime is added only on the vitest-analog path.
Undefined task parallelism is treated as parallel when scheduling.
Only workspace-package peer dependencies are rewritten to workspace:*.
Maven batch recording skips attached artifacts that fail to materialize.
Skipped batch tasks are supported end-to-end, and TUI double logs are fixed.
Testing handles absolute paths for Cypress screenshotsFolder and videosFolder.
Glob syntax is stripped from inferred outputs before resolving them as paths.
Maven 4 build state recording is serialized.
Internal re-exports are expanded for the cherry-picked v23 deep-import migration.
Corrects output paths for .NET Web SDK and centralized dist setups.
Pruned pnpm lockfiles include transitive workspace dependencies.
Angular Rspack keeps root-scoped assets out of per-locale i18n output.
The run summary now shows the flaky-task count.
Rollup includes the tsconfig solution input.
Webpack includes the tsconfig solution input.
Task selection stays in the in-progress section.
Verbose logs go to stderr, and daemon logs are properly decorated.
The Gradle integration supports Windows file paths.
The migration preserves other properties.
Release handling now accepts short and full project names in commit scopes.
Generated .detoxrc files now contain valid JSON for non-Expo apps.
The handoff now uses require so global-to-local Nx execution works with Windows drive paths.
Conversion now handles executor-based jest.config.ts files and preserves type-only imports.
The scaffold now includes the tsconfig input.
When pre-install fails with npm peer dependency errors, migrations now provide actionable feedback.
Continuous children now stay alive when the nx:noop orchestrator completes.
The command now surfaces stderr and forces devDependencies installation.
Version lookups now resolve pnpm catalog: references.
The linter now detects a root lint target added during the same generator run.
Stories and specs are now excluded from Tailwind content scanning.
Typecheck inputs now include extended tsconfigs from project references.
The Angular rspack module federation plugin enables ESM output.
Variables in .env files can reference variables defined in other files.
The command accepts --target/-t and -p flags when using colon targets.
Nx supports pnpm multi-document lockfiles.
The executor now supports npm workspaces.
React Router apps can use Vite 8.
Project graph recalculation no longer causes Gradle and Maven daemon accumulation.
The batch executor no longer hangs when a worker exits prematurely.
Plugin loading failures now display the actual error message.
Validates the bundler option for Angular presets, helping catch invalid options when creating a workspace.
Handles "." and absolute paths as workspace names when creating a workspace.
The dependency-checks lint rule recognizes tsgo.
Preserves sibling dependency inputs in native hashing, avoiding changes to the inputs used for hashing.
Disables prompts during migrate when non-interactive mode is enabled.
Handles non-interactive mode in create-nx-workspace and adds template shorthand names.
Uses Vite 7 when React Router is used in framework mode.
The command handles non-interactive mode.
The command adds template shorthand names.
The TypeScript plugin adds the {projectRoot} prefix to its d.ts fileset.
Duplicate migration keys are updated.
The rebuild chunks emitted summary is made accurate.
Declaration files in dependency projects are included as inputs.
Framework configs are prepended before baseConfig.
Prevent double installation in TypeScript solution workspaces.
Timeouts prevent the CLI from hanging during the GitHub push flow.
Test enums are ignored when atomizing.
Skips import-equals namespace aliases.
Resolves the published nx migrate package correctly.
References are handled when projects are moved or removed.
The parallel limit is respected for discrete task concurrency.
Runtime inputs are no longer cached at the task_hasher layer; filesets belong in the hash_plans layer.
Handles projects with colons in their names better.
SWC input source map resolution is disabled.
The TypeScript plugin passes configName to the typecheck command.
Resolves the addPlugin default in the init generator.
Is skipped when the global bin hands off to the local bin.
For Nx plugins, the conversion now uses native nx.configs.
The rule now detects require() calls.
The migration now gracefully handles broken Jest configs.
The preset now handles undefined options.
The hook now fires on SIGINT for continuous tasks.
Project-level ESLint configs are converted, and skipped configs are logged.
The plugin now uses the root config to determine the ESLint class.
nx show target now displays the continuous property.
The rule now allows wildcard paths.
Nx supports ESLint v10.
Nx cloud commands can run outside of a workspace.
Filtered releases include dependent projects in the release commit message when using --projects.
Filtered project lists no longer produce duplicate projects in the changelog.
Vitest resolves reportsDirectory against the workspace root.
The Vitest executor now respects reporters set in target options.
Resolves false positive loop detection when running with Bun.
Batch runner output is also sent to stderr so it displays in the terminal.
GitHub user/repo slug extraction now supports canonical SSH URLs.
Detection falls back to invoking the package manager when needed.
The angular-rspack output uses a relative path.
Ensures atomized task targets have dependsOn.
Gradle uses globs for dependent task output files.
The release schema now allows null values for dockerVersion.
Fixes setting the pom file without changing the base directory.
Fixes process.env usage and ensures safe fallback replacement in webpack.
The nx-welcome component uses SASS indented syntax when the selected style is sass.
When skipTypeCheck is true in TS Solution Setup, Nx skips the unnecessary type-check.
createGitTagValues now uses a null-safe fallback for version.
Sets isPreview=true for the Vite Preview server.
The watch command works when both all and initialRun are specified.
Path resolution uses the workspace root when baseUrl is not set.
Handles Ctrl+C gracefully and only pulls from latest when the local version is not latest.
The daemon skips stale recomputations and prevents file changes from being lost.
Ignore files are matched by path component according to gitignore behavior.
Writes output after each task in batch mode so the correct files are cached.
TUI logger initialization is gated behind the NX_TUI environment variable.
New workspaces no longer generate nxCloudId.
Resets the daemon client after project graph creation.
Cache restore now handles dangling symlinks.
Running configure-ai-agents no longer overrides MCP arguments.
makeAcyclic no longer drops unrelated continuous dependencies.
Maven locators are now correctly mapped to Nx project names.
Pressing [1] or [2] removes a pinned pane when it matches the current task.
Runtime cache keys are now deterministic.
Nx now shows help for run-one when project short names are used.
All task outputs are tracked regardless of path depth.
Batch output is no longer overridden for atomized targets.
Uses flags compatible with the Gradle tooling API.
Already-installed Nx packages are hidden from the suggestion list during import.
Improves plugin worker error messages and lifecycle timeouts.
Avoids throwing when worker.stdout is not an instance of a socket.
Resizing is handled better for inline_tui.
Nx falls back to node_modules when the temporary directory has noexec.
Cleans up the daemon workspace data directory when running nx reset with the noted option.
Avoids a hang in the TUI by moving it to a parking lot rwlock.
Cypress TypeScript configuration sets moduleResolution to node to prevent TS5095 errors.
The migration command now supports updating the @angular/cli package.
Target inference is skipped for root workspace configs that use projects.
getDependencies skips external dependencies that are not npm dependencies.
Ensures the Jest v30 migration is run.
React module federation setup with webpack and TypeScript solutions is corrected.
Flat config now honors setParserOptionsProject.
Fixes Vitest test runner options for Angular in cnw.
Fixes the dependency graph for multi-targeting and transitive dependencies in .NET projects.
Nx no longer shows a TUI when running a single task.
create-nx-workspace templates support pnpm and yarn.
Nx exits with an error when generator prompts fail.
Restores the
linkTaskDetailsparameter for backwards compatibility.NodeNext is now recognized as ESM.
Prevents a crash when terminating a task that uses the SWC executor.
PNPM patches are now included in externalDependencies hash computations.
Changes to
pnpm.overridesandoverridesin package.json are now detected.Generated Prisma clients can now be copied as assets from node_modules.
Expo SDK 54+ compatibility sets
projectRoottoworkspaceRoot.Interpolates
{releaseGroupName}in changelog tag and releaseTagPattern.The Node webpack configuration maps the
sourceMapsoption tosourceMap.The Node plugin uses
@swc/helpersinstead of tslib when the compiler is SWC.Task output is displayed in the TUI when the native command runner is disabled.
The TUI prevents pinning the same task in multiple panes.
Changes to overrides in package.json are now detected.
Changes to pnpm.overrides are now detected.
When project.json exists but has no name, Nx now checks package.json for the project name.
Stdout and stderr handling was adjusted to support the latest @swc/cli version.
The connectUrl value is included in completion metadata.
All tables are created upfront when the database is created.
Migration now collects known tsconfig files from non-buildable Angular libraries.
The error message is improved when generating Cypress component tests with esbuild-based build targets.
The node executor resolves the Nx binary from the workspace root.
Generated Nest libraries now use the correct outputPath for TypeScript solution setups.
Nx no longer invokes Prettier with both flags when that combination is unsupported.
Port availability is checked before remote proxies start.
The TUI summary now preserves command output for tasks that are not cached.
Workspace packages are handled when nx.name differs from package.json.name.
Passes more error detail for CNW.
Fixes the missing SWC register base URL when using tsgo.
Updates the jest ci target to forward top-level arguments.
Displays pnpm publish errors without requiring verbose mode.
Enables build mode for the TypeScript checker in TS solution setups.
Corrects the project path used when creating a temporary TypeScript configuration.
Processes only in-progress entry points, avoiding processing unrelated entry points during the write bundles transform.
Normalizes workspace protocol versions in requiredVersion for module federation.
Task results now always provide terminalOutput as a string.
Updates the worker configuration generated by the Vite generator to follow Vite's configuration.
Webpack chunks are shown when verbose output is enabled.
Nx kills the child process tree for different running tasks.
Workspace module copying now includes transitive workspace dependencies.
The daemon command exits when it reaches the end.
The Expo integration supports Expo 54.
The linter now handles various flat config override structures.
The Nuxt integration supports Nuxt 4.
The prompt no longer blocks non-interactive commands.
Project names are sanitized to produce valid Git tag names.
The Cypress commands template no longer includes a declare global wrapper.
Nest sets moduleResolution to node to prevent a TS5095 error.
The upper bound on migration requirements is removed.
Task graph client errors are surfaced through an error toast.
The graph exclude flag now uses findMatchingProjects to align with other exclude flags.
The generator excludes Tailwind from CSS modules syntax.
STORYBOOK_PROJECT_ROOT is removed when running automigrate to prevent hanging.
Jest 30 and later use .cts config files to fix __dirname issues.
The default input is now correctly treated as the default.
Arguments containing spaces are no longer split when executing through the nx wrapper.
Renders commit titles that include breaking changes.
Handles ERR_USE_AFTER_CLOSE gracefully during workspace creation.
Fixes a lockfile cache regression involving keyMap state.
Skips Maven plugin computation on Vercel and Netlify.
Captures stderr to provide better error messages.
Handles ERR_USE_AFTER_CLOSE gracefully during nx init.
Prevents the process from hanging between command completion and process exit.
Includes require paths when resolving specified plugins.
The eslint-config-next version is made to match Next.js 14 and 15 versions.
Local workspace dependencies are correctly identified on Windows.
Maven dependencies are resolved from project roots.
Nx also looks in the .nx installation when reading nx.json extends.
Handles null exit codes from crashed child processes.
Docker plugin interpolation now guards against a null commitSha.
Handles a Dockerfile located at the project root when determining the tag.
Execution continues when the cloud client is unavailable.
Importing @nx/webpack no longer errors when TypeScript is not installed.
Invalid workspaceRoot placement now produces a clearer error instead of an error message containing [object Object].
Adds the error reason to output.
nx 2115 changes
Breaking changes 1
The TUI is temporarily disabled for run-one.
Fixes and other changes 14
The linter now handles variable references in replaceOverride.
Ensures node execute completes before exit.
Prevents a crash caused by an undefined importer while parsing a pnpm lockfile.
Nx no longer prints flaky tasks guidance when Nx Cloud is already enabled.
Angular Rspack module federation now supports live reload.
Sets ng-packagr tsconfig options correctly based on the version in use.
Restores migrations used by nx repair.
Vite logic prevents overwriting a generated package.json.
Adding a project.json file to a project no longer changes its existing project name.
Includes the root node_modules directory when resolving packages in Angular Rspack.
Improves the message shown for unsupported TypeScript project references.
The --help flag now works properly with infix notation.
Dynamic module federation no longer initializes remoteUrlDefinitions to an empty object.
The bottom corner indicator is now displayed correctly in the TUI progress section.