Compare commits

...

855 Commits

Author SHA1 Message Date
FrozenPandaz 96ae211d98 chore(repo): print error 2026-01-09 14:12:08 -05:00
Leosvel Pérez Espinosa 4462a72f46 fix(core): allow dte to handle continuous tasks termination (#34018)
## Current Behavior

When running a task graph with continuous tasks and one of them is
terminated, the reverse continuous task deps that have no other tasks
that depend on them are also automatically terminated. This is fine in a
non-DTE context, but when running in a DTE context, the DTE task runner
must own the lifecycle of the continuous tasks, and Nx shouldn't
automatically terminate them.

## Expected Behavior

Nx shouldn't automatically terminate continuous tasks when running in a
DTE context.
2026-01-09 18:16:49 +00:00
Leosvel Pérez Espinosa cc5d173ed0 fix(core): disallow Vitest & Angular unit test runner when bundler is not esbuild in cnw (#34023)
## Current Behavior

The `create-nx-workspace` incorrectly offers `Vitest & Angular` as a
valid unit test runner choice when the bundler is something other than
`esbuild`.

## Expected Behavior

The `create-nx-workspace` should only offer `Vitest & Angular` as a
valid unit test runner choice when the bundler is `esbuild`.

## Related Issue(s)

Fixes #34014
2026-01-09 16:11:45 +00:00
Leosvel Pérez Espinosa 9230a8c515 fix(core): make process metrics registration in critical paths non-blocking (#34019)
## Current Behavior

On systems under heavy load, plugin loading can fail with:

```bash
Plugin Worker exited because no plugin was loaded within 10 seconds of starting up.
```

The initialization of the process metrics collection could potentially
cause this by blocking the loading of the plugin.

## Expected Behavior

Process metrics initialization no longer blocks critical startup paths,
allowing plugin loading to succeed regardless of system load.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2026-01-09 10:50:37 -05:00
Leosvel Pérez Espinosa 88c6baaf19 fix(core): display shared running tasks in the in progress section of the tui (#34059)
## Current Behavior

Shared running tasks (tasks running in another process) do not appear in
the In Progress section of the TUI. They show the throbber as being in
progress, but are located in the Pending/Completed section.

## Expected Behavior

Shared running tasks (tasks running in another process) should appear in
the In Progress section of the TUI.
2026-01-09 10:45:55 -05:00
Colum Ferry beb5ef585b feat(react): update react-router and remix versions to address CVEs (#34058)
Update to patched versions of React Router (7.12.0, 6.30.3) and Remix
(2.17.3) to address CVEs:

https://github.com/remix-run/react-router/security/advisories/GHSA-3cgp-3xvw-98x8

https://github.com/remix-run/react-router/security/advisories/GHSA-9583-h5hc-x8cw

https://github.com/remix-run/react-router/security/advisories/GHSA-9jcx-v3wj-wh4m

https://github.com/remix-run/react-router/security/advisories/GHSA-h5cw-625j-3rxh

https://github.com/remix-run/react-router/security/advisories/GHSA-2w69-qvjg-hvjx

https://github.com/remix-run/react-router/security/advisories/GHSA-8v8x-cx79-35w7
2026-01-09 13:23:11 +00:00
MaxKless dbedd19d68 fix(core): set windowsHide:true in package installation (#34053)
## Current Behavior
package installation does not set `windowsHide` so it flashes a terminal
window

## Expected Behavior
there should be no flashing terminal window

Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
2026-01-09 12:48:02 +09:00
Craigory Coppola 7f32f2c75f chore(repo): add copy-built-package script (#34035)
Adds a sm utility script to ease quickly checking changes against local
repos. Not a replacement for local registry + install, but good for
quick checks
2026-01-08 18:30:02 -05:00
Louie Weng a5c1388804 chore(gradle): bump version to 0.1.11 (#34054)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Bump gradle project graph plugin version to 0.1.11

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2026-01-08 22:31:26 +00:00
Jason Jean a13f5eb0d8 chore(repo): update nx to 22.4.0-beta.1 (#33968)
Updating Nx from 22.3.0-beta.3 to 22.4.0-beta.1
2026-01-08 17:24:34 -05:00
Caleb Ukle e38d2857f2 docs(nx-cloud): add new scopes for BB when using Nx Cloud onboarding (#34052) 2026-01-08 13:23:05 -05:00
Louie Weng 4af608013d feat(gradle): excludeDependsOn based on provider relationships (#33923)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

We have a hard coded list of task targets to not exclude depends on. 

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

We resolve a gradle task such that we can identify if there are provider
dependency relationships involved. If there are, then do not exclude
depends on since Gradle needs the dependsOn tasks to fulfill providers.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2026-01-08 17:59:05 +00:00
Louie Weng d73fd46d6e fix(gradle): resolve dependencies after capturing project tasks (#34045)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

When processing Kotlin Multiplatform (KMP) projects, the Nx Gradle
plugin encounters ConcurrentModificationException errors because KMP
dynamically modifies the Gradle project's task and configuration
containers during dependency resolution. The plugin was resolving
configuration dependencies before processing tasks, which triggered
KMP's hierarchy finalization and dynamic task creation while the plugin
was still iterating over these collections.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The Gradle plugin should handle Kotlin Multiplatform projects without
errors by:
1. Processing tasks before resolving configuration dependencies,
preventing KMP from modifying task containers during iteration
2. Creating immutable snapshots of task and configuration collections
before iteration to avoid concurrent modification issues

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes NXC-3633
2026-01-08 08:32:27 -08:00
Louie Weng 99a9216c43 fix(gradle): force gradle executor to always rerun tasks (#34024)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

The Nx Plugin uses Nx as the backing mechanism, but Gradle still does
some caching behind the scenes. When using Nx and Gradle's caching at
the same time, there can be times where Gradle does not recognize input
changes and will not execute tasks that it mistakenly deems unchanged.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Ensure that the batch executor always reruns tasks and is not impacted
by the Gradle build cache.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes NXC-3649
2026-01-08 08:31:12 -08:00
Rares Matei 66488a2dc2 docs(nx-cloud): document how to set working directory in nx agents (#34033)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Caleb Ukle <caleb@nrwl.io>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2026-01-08 12:43:09 +00:00
Colum Ferry 2cdaffc850 feat(release): special-case 0.x versions for semver bumps (#34031)
For 0.x versions, shift semver bump types down to follow the common
convention where breaking changes bump minor, and new features bump
patch:

- major -> minor
- premajor -> preminor
- minor -> patch
- preminor -> prepatch
- patch -> patch (unchanged)

This ensures that `nx release` with a breaking change on a 0.x package
(e.g., 0.1.0) bumps to 0.2.0 instead of 1.0.0.

Fixes NXC-3638

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2026-01-08 10:23:06 +00:00
Jack Hsu 9fb5a6ce59 fix(linter): handle variable references in replaceOverride (#34026)
The migration generator (`@nx/plugin:migration`) fails when due to
ESLint flat config not being parsed correctly, leading to an error.

This happens because `replaceOverride` uses `parseTextToJson` to parse
the config, which fails for non-JSON-serializable JavaScript
expressions.

This PR fixes the issue by using AST parsing, like we did for
`hasOverrides` here https://github.com/nrwl/nx/pull/33548.

Fixes #34010

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 12:56:31 -05:00
Leosvel Pérez Espinosa 92f821d281 fix(js): avoid duplicate @nx/js/typescript plugin entries for non-buildable libs (#34021)
## Current Behavior

When adding a non-buildable JS library (`bundler: 'none'`) to a
workspace with an existing `@nx/js/typescript` plugin registration that
has build options configured, a duplicate plugin entry is unnecessarily
created in `nx.json`.

## Expected Behavior

Non-buildable libraries reuse the existing plugin registration when
`skipBuildCheck: true` is not specified, thereby avoiding duplicate
entries in `nx.json`. The `@nx/js/typescript` plugin will infer the
project as non-buildable because the library's `package.json` will have
entry points pointing to source files, so there's no need for a separate
plugin registration.

## Related Issue(s)

Fixes #33981
2026-01-07 09:18:39 +01:00
Colum Ferry 0119275ffd fix(module-federation): pin rspack to 1.6.8 (#34022)
## Current Behavior
Rspack 1.7.0 is failing to create factories for internals with Module
Federation.

## Expected Behavior
Pin Rspack to 1.6.8 for now to ensure continued functioning of Module
Federation
2026-01-06 10:00:42 -05:00
Andrey Chalkin 80cde6a950 feat(release): add option to opt-out commit scope filter (#33382)
## Current Behavior

PR #32915 changed how conventional commits determine version, making
them rely on commit scope:
commits with types configured to bump minor / major version bumps only
patch if commit scope exists and it does not include project name

## Expected Behavior

In our project we do not use projectName as commit scope, so we would
like to bring back old behavior, this can be achieved by adding option
to opt-out such behavior

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-12-30 14:51:07 -05:00
David Antoon caee7c6ee4 feat(rspack): add typeCheckOptions, runtimeDependencies, and cache options (#33931)
## Current Behavior

- The `skipTypeChecking` option is a simple boolean that only allows
enabling/disabling type checking
- Rspack executor is missing the `runtimeDependencies` option that
webpack has
- The `cache` configuration is hardcoded and cannot be overridden by
users

## Expected Behavior

- New `typeCheckOptions` option allows configuring type checking with `{
async: true }` to run type checking in a separate process without
blocking the build
- The deprecated `skipTypeChecking` option is maintained for backward
compatibility
- Rspack now supports `runtimeDependencies` option for adding runtime
dependencies to generated `package.json` (useful for Docker installs)
- New `cache` option allows users to override webpack/rspack caching
behavior while maintaining backward-compatible defaults

## Related Issue(s)

N/A - Standalone feature

## Changes Made

### typeCheckOptions (webpack & rspack)
- Added `TypeCheckOptions` interface with `async` property
- Added `typeCheckOptions` option to plugin options interfaces
- Updated `apply-base-config.ts` to normalize `typeCheckOptions` from
deprecated `skipTypeChecking` for backward compatibility
- Added schema definitions to `schema.json` and `schema.d.ts`

### runtimeDependencies (webpack & rspack)
- Added `runtimeDependencies` option to `NxAppRspackPluginOptions`
- Updated `GeneratePackageJsonPlugin` to resolve and include runtime
dependencies
- Added schema definitions to `schema.json` and `schema.d.ts`

### cache (webpack & rspack)
- Added `cache` option to plugin options interfaces
- Updated `apply-base-config.ts` to check `'cache' in options` before
applying defaults
- Allows explicit `cache: undefined` to force cache to be disabled
- Maintains backward-compatible defaults:
  - Webpack: `{ type: 'memory' }` for Node targets in watch mode
- Rspack: `true` for Node targets in watch mode, `true` in dependent
config

## Files Changed

**Webpack:**
-
`packages/webpack/src/plugins/nx-webpack-plugin/nx-app-webpack-plugin-options.ts`
-
`packages/webpack/src/plugins/nx-webpack-plugin/lib/apply-base-config.ts`
- `packages/webpack/src/executors/webpack/schema.json`
- `packages/webpack/src/executors/webpack/schema.d.ts`
- `packages/webpack/src/plugins/generate-package-json-plugin.ts`

**Rspack:**
- `packages/rspack/src/plugins/utils/models.ts`
- `packages/rspack/src/plugins/utils/apply-base-config.ts`
-
`packages/rspack/src/plugins/utils/plugins/generate-package-json-plugin.ts`
- `packages/rspack/src/executors/rspack/schema.json`
- `packages/rspack/src/executors/rspack/schema.d.ts`

**Documentation:**
- `astro-docs/.../webpack/Guides/webpack-plugins.mdoc`
- `packages/webpack/docs/webpack-build-executor-examples.md`

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-12-30 13:37:13 -05:00
Kasper Christensen 5ef02e4c96 fix(testing): set moduleResolution to node in Cypress tsconfig to prevent TS5095 error (#33726)
When generating Cypress component testing in Angular workspaces, the
base tsconfig sets moduleResolution to 'bundler' which causes TS5095
errors because 'bundler' requires module to be 'preserve' or 'es2015+'.

Cypress runs in Node.js and should use Node.js module resolution
instead. This fix sets moduleResolution to 'node' for Cypress
tsconfig.json templates.

## Current Behavior

When generating Cypress component testing configuration in Angular
workspaces, the generated `cypress/tsconfig.json` inherits
`moduleResolution: "bundler"` from the workspace base config. Since
Cypress uses `module: "commonjs"` for Node.js runtime, this causes
TypeScript compiler error TS5095: "Option 'bundler' can only be used
when 'module' is set to 'preserve' or to 'es2015' or later."

## Expected Behavior

The generated `cypress/tsconfig.json` should explicitly set
`moduleResolution: "node"` to match the `module: "commonjs"` setting,
preventing TS5095 errors. This aligns with how NestJS applications
handle the same issue (see #33607).

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-12-30 10:45:45 -05:00
kazuki nakai ab01b2113f docs(core): add Docker development guidance (#33848)
## Summary

Adds comprehensive Docker development guidance to the Nx Daemon
documentation.

Related to #33263, #30359, #14126

## What's included

This PR expands the existing Nx Daemon docs with a new "Running Nx in
Docker" section that covers:

- **Why the daemon often fails in Docker** - ephemeral filesystems,
inode/mtime changes from volume mounts, container restarts, IPC issues
- **Recommended approach** - disable daemon with `NX_DAEMON=false`
- **Example docker-compose setup** - minimal reproducible configuration
for local development
- **CI/CD best practices** - when to prefer stateless builds over daemon
caching

## Context

Several issues have been opened around daemon behavior in containers,
but the existing docs only briefly mention socket location
customization. Users are left wondering:
- Why doesn't the daemon work reliably in Docker?
- What's the recommended workflow for containerized development?
- How should CI pipelines handle this?

Issue #33263 specifically describes daemon crashes when running nx
between Docker and non-docker environments - this PR documents the
recommended workaround (`NX_DAEMON=false`) and explains why.

## Preview

The new section appears under the existing "Customizing the socket
location" heading and includes:
- Explanation of Docker-specific challenges
- Code examples for Dockerfile, docker-compose, and CLI
- Rule of thumb callout for quick reference

Open to feedback on structure or placement.

---------

Co-authored-by: kazuki <kazuki@kazukinoMacBook-Air.local>
Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-12-29 15:42:08 -05:00
Copilot 84450f66db docs(core): add --tui and --no-tui flags to terminal UI documentation (#33303)
The `--tui` and `--no-tui` command-line flags were added after the
terminal UI documentation was written. Docs need to reference these
flags alongside the existing configuration methods.

## Changes

Updated `astro-docs/src/content/docs/guides/Tasks &
Caching/terminal-ui.mdoc`:
- Added `--tui` and `--no-tui` flags to the "Enable/Disable the Terminal
UI" section
- Restructured as bulleted list showing all four configuration methods

## Usage

Users can now control the Terminal UI via:
- `--tui` / `--no-tui` flags: `nx run-many -t build --no-tui`
- `NX_TUI` environment variable
- `tui.enabled` in `nx.json`

Fixes https://linear.app/nxdev/issue/NXC-3371

> [!WARNING]
>
> <details>
> <summary>Firewall rules blocked me from connecting to one or more
addresses (expand for details)</summary>
>
> #### I tried to connect to the following addresses, but was blocked by
firewall rules:
>
> - `repo.gradle.org`
> - `staging.nx.app`
>
> If you need me to access, download, or install something from one of
these locations, you can either:
>
> - Configure [Actions setup
steps](https://gh.io/copilot/actions-setup-steps) to set up my
environment, which run before the firewall is enabled
> - Add the appropriate URLs or hosts to the custom allowlist in this
repository's [Copilot coding agent
settings](https://github.com/nrwl/nx/settings/copilot/coding_agent)
(admins only)
>
> </details>

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> Issue Title: Update
https://nx.dev/docs/guides/tasks--caching/terminal-ui#enabledisable-the-terminal-ui
to reference the `--tui` and `--no-tui` flags
> Issue Description: These were added after the other methods, docs need
to be updated to have them in the nrwl/nx repo
> Fixes
https://linear.app/nxdev/issue/NXC-3371/update-httpsnxdevdocsguidestasks-cachingterminal-uienabledisable-the
> 
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> [https://github.com/nrwl/nx](https://github.com/nrwl/nx)
> 
> Comment by User d484ef82-7f7d-4a95-be09-9d82ca3905dc:
> 📋 I wasn't able to determine which GitHub repository to work in.
> 
> I think it's one of these, but can you tell me which one is right?
> 
> Comment by User :
> This thread is for an agent session with githubcopilot.
> 
> 


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/nrwl/nx/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: AgentEnder <6933928+AgentEnder@users.noreply.github.com>
Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-12-29 15:28:35 -05:00
Rafayel Hovhannisyan 97fde57f7f feat(linter): add peerDepsVersionStrategy option to dependency-checks (#33417)
Adds a new peerDepsVersionStrategy option that allows configuring how
peer dependencies versions are set when auto-fixing. When set to
'workspace', peer dependencies will use 'workspace:*' instead of the
installed or root package version. Defaults to 'installed' to maintain
backward compatibility.

## Current Behavior
A concrete peer dependency version is being fixed.

## Expected Behavior
User can choose between `installed` and `workspace` version strategies.

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-12-29 15:24:43 -05:00
Copilot 0da6921ac3 docs(nx-dev): fix inputs syntax and document missing object formats (#33298)
## Plan to Fix Inputs Documentation

Based on the issue, I need to correct the inputs documentation at
`/astro-docs/src/content/docs/reference/inputs.mdoc`. The problems are:

- [x] Fix the invalid syntax in "Source Files" section - currently shows
inputs as an object instead of an array
- [x] Document the `{ input: someNamedInput, projects: [] }` format for
referencing named inputs from specific projects
- [x] Document the `{ input: someNamedInput, dependencies: true }`
format for referencing named inputs from dependencies
- [x] Document the object form for fileset inputs (e.g., `{ fileset:
string }`)
- [x] Ensure all documented formats match the TypeScript type definition
- [x] Fix typo found in code review (to to -> to)
- [x] Remove targetDefaults wrapper from examples (per review feedback)
- [x] Use string syntactic sugar forms in examples and explain
equivalence to object forms
- [x] Fix comment to show object form equivalence instead of repeating
string form

## Changes Made

1. **Fixed Source Files section syntax**:
   - Changed from invalid object syntax to correct array syntax
   - Removed unnecessary targetDefaults wrapper per review feedback
   - Added documentation for the object format with fileset property

2. **Added new section "Named Inputs from Other Projects"**:
   - Documents `{ input: "production", projects: "mylib" }` format
- Documents `{ input: "production", projects: ["mylib", "myapp"] }`
format for multiple projects
- Uses string syntactic sugar `"production"` and `"^production"` in
examples
- Explains equivalence: `"production"` is shorthand for `{ "input":
"production" }`, `"^production"` is shorthand for `{ "input":
"production", "dependencies": true }`

3. **Fixed typo**: Changed "to to not invalidate" to "to not invalidate"

All changes validated with prettier formatting checks.

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> Issue Title: Docs: correct inputs syntax and document missing formats
> Issue Description: The inputs docs appear inaccurate at
[nx.dev/docs/reference/inputs#source-files](https://nx.dev/docs/reference/inputs#source-files).
> 
> * The shown inputs syntax isn’t valid; it should be an array.
> * The page doesn’t mention the `{ input: someNamedInput, projects: [\]
}` format.
> * It also doesn’t cover the object form for `deps`/`self` inputs.
> 
> Valid types reference:
[https://github.com/nrwl/nx/blob/master/packages/nx/src/config/workspace-json-project-json.ts#L206](https://github.com/nrwl/nx/blob/master/packages/nx/src/config/workspace-json-project-json.ts#L206)
> 
> Working with \[GitHub
Copilot\](User:d484ef82-7f7d-4a95-be09-9d82ca3905dc) on this.
> Fixes
https://linear.app/nxdev/issue/NXC-3369/docs-correct-inputs-syntax-and-document-missing-formats
> 
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> [https://github.com/nrwl/nx](https://github.com/nrwl/nx)
> 
> Comment by User d484ef82-7f7d-4a95-be09-9d82ca3905dc:
> 📋 I wasn't able to determine which GitHub repository to work in.
> 
> I think it's one of these, but can you tell me which one is right?
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> Side not, copilot assignment didn't work. Would have been neat 🙂
> 
> Comment by User d484ef82-7f7d-4a95-be09-9d82ca3905dc:
> Waiting for https://linear.app/nxdev/profiles/craigory to link their
GitHub account. [Click to authorize
→](https://linear.business.githubcopilot.com/linear/auth)
> 
> Comment by User :
> This thread is for an agent session with githubcopilot.
> 
> Comment by User :
> Created issue
[NXC-3369](https://linear.app/nxdev/issue/NXC-3369/docs-correct-inputs-syntax-and-document-missing-formats)
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> This comment thread is synced to a corresponding [thread in
Slack](https://nrwl.slack.com/archives/CT3CQ2F0D/p1761762896195989?thread_ts=1761762896.195989&cid=CT3CQ2F0D).
All replies are displayed in both locations.
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> @Linear create a docs issue, assign it to me and copilot
> 
> Comment by User f5ae6d50-28e9-4ee7-ad51-3da8208d5914:
> Send a PR? 🙏
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> See these valid types:
[https://github.com/nrwl/nx/blob/master/packages/nx/src/config/workspace-json-project-json.ts#L206](https://github.com/nrwl/nx/blob/master/packages/nx/src/config/workspace-json-project-json.ts#L206)
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> Also on the same page, I don't see any mention of the `{ input:
someNamedInput, projects: [] }` format, nor the object form for deps /
self inputs
> 
> 


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: AgentEnder <6933928+AgentEnder@users.noreply.github.com>
2025-12-29 14:00:42 -05:00
Austin Fahsl 75ff26630b docs(misc): remove redundant checkout conditional for GHA DTE example (#33829)
## Current Behavior

The GitHub Actions DTE example includes a redundant conditional checkout
step that has separate configurations for pull request and default
branch events, both performing the same checkout operation.

## Expected Behavior

The GitHub Actions example should use a single, simpler checkout
configuration that works for both pull request and default branch
events, removing redundant code.

## Related Issue(s)

This change simplifies the documentation example by removing redundant
checkout steps while maintaining the same functionality.
2025-12-29 13:56:04 -05:00
Anthony Shew c43ceb3a67 docs(misc): update Turborepo documentation with visualization details (#33970)
Updated Turborepo section to include robust browser-based graph
visualizations and Graphviz image exports.

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-12-29 13:54:04 -05:00
QING LIN 3735641f62 fix(core): convert filePath to an absolute path before typescript resolves the module (#34001)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
TypeScript’s module resolution stop at project's root when resolving
modules.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
TypeScript’s module resolution will walk up to the workspace root when
resolving modules

## Changes Made
Convert the filePath to an absolute path inside findProjectFromImport
before calling resolveImportWithTypescript, because TypeScript’s module
resolution will not correctly traverse up the directory tree toward the
workspace root when given a relative path.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #33985
2025-12-29 12:06:18 -05:00
Philip Fulcher 768c580f1d docs(nx-dev): add year of webinars article (#33980) 2025-12-28 15:19:49 +00:00
Colum Ferry d959d70185 fix(vitest): skip target inference for root workspace configs with projects (#33977)
When a vitest config file is at the workspace root and contains a
`projects` property in the test configuration, the plugin now skips
inferring test targets for that config. This is because root workspace
configs act as orchestrators - the actual tests live in the individual
project configs referenced by `projects`.

Fixes #32471
2025-12-22 13:55:24 +00:00
Colum Ferry 7cd296ba18 fix(vitest): add guard rails for vitest llm migration (#33976)
Edit guard rails for Vitest 4 LLM migration
2025-12-22 12:31:17 +00:00
Philip Fulcher ee4c687492 docs(nx-dev): add 2025 review article (#33973) 2025-12-20 23:07:22 -05:00
Copilot 9790910fbe fix(angular): only throw "define" error when options.define has keys (#33969)
## Current Behavior

The dev-server builder throws an error about the "define" option not
being supported in Angular < 21, even when users don't configure it. The
validation uses a truthy check that treats empty objects `{}` as true.

## Expected Behavior

The error should only throw when users explicitly configure define with
actual keys.

## Related Issues

Fixes #33964

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: leosvelperez <12051310+leosvelperez@users.noreply.github.com>
2025-12-20 10:40:12 +00:00
Craigory Coppola dd7ec3016b feat(core): support cwd specific hashes (#33879)
## Current Behavior
There is no straight-forward way to use the cwd as part of a tasks hash

## Expected Behavior
You can use `{workingDirectory: 'absolute'}` to factor the working
directory into the hash

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #33684
2025-12-20 01:37:12 -05:00
Miroslav Jonaš ab82bfed92 fix(core): improve package-json createNode performance (#33960)
On test repo, the
`package-json:createNodes:isInPackageManagerWorkspacesTime` takes:
- Before the PR: 2356ms
- With PR: 23ms

This is achieved by avoiding unnecessary use of `minimatch` when a
direct string comparison is sufficient.

It also makes creation and logging of entire graph come down from
`23.6s` down to `18.5s`

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: meeroslav <meeroslav@users.noreply.github.com>
2025-12-19 17:38:23 -05:00
Bendegúz Hajnal 8b83502114 feat(linter): add bulk suppression support for ESLint v9.24.0+ (#32184)
Add support for ESLint's new bulk suppression features introduced in
v9.24.0.

- Add `suppressAll` option to suppress all existing violations
- Add `suppressRule` option to suppress specific rule(s)
- Added `suppressionsLocation` option to specify custom location for the
suppressions file (defaults to eslint-suppressions.json)
- Include proper version checking for ESLint v9.24.0+
- Add related tests and documentation
- Update schema and TypeScript types

This allows teams to incrementally adopt stricter lint rules without
being overwhelmed by legacy violations.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
The `@nx/eslint` package currently doesn't support ESLint's bulk
suppression features. When teams want to enable new lint rules, they
must fix all existing violations first, which can be a significant
barrier to adopting stricter linting standards.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
The @nx/eslint package now supports ESLint v9.24.0+'s bulk suppression
features through new flags:
- `suppressAll`: Suppresses all existing violations
- `suppressRule`: Suppresses specific rules
- `suppressionsLocation`: specifies a custom location for the
suppressions file (defaults to eslint-suppressions.json)

```json
{
  "lint": {
    "executor": "@nx/eslint:lint",
    "options": {
      "suppressAll": true 
    }
  }
}
```

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

https://github.com/nrwl/nx/discussions/30620
2025-12-19 17:26:20 -05:00
Jack Hsu 5f5a0b0ab3 fix(misc): remove CNW A/B testing flow branching (#33967)
This PR removes the variant check for deciding whether to use GitHub
templates for CNW. Moving forward, the first-level options are all
`nrwl/*` templates. The `Custom` option allows users to go back to the
previous presets.
2025-12-19 16:43:12 -05:00
Jack Hsu 137ab459fe docs(nx-dev): support .md URLs and llms.txt for AI agents (#33958)
This PR allows `.md` to be append to any docs URL to return raw markdown
content. Also adds `/llms.txt` that links to each markdown URL in the
docs site.

This allows AI agents to read content without having to parse HTML,
saving tokens.

Preview of `llms.txt`:
https://deploy-preview-33958--nx-docs.netlify.app/docs/llms.txt
Preview of page markdown content:
https://deploy-preview-33958--nx-docs.netlify.app/docs/concepts/buildable-and-publishable-libraries.md

Closes DOC-368
2025-12-19 15:00:07 -05:00
Leosvel Pérez Espinosa 61c41c9a75 docs(core): add missing env vars for nx migrate (#33962)
Documents the `NX_MIGRATE_SKIP_INSTALL` and `NX_MIGRATE_USE_LOCAL`
environment variables.
2025-12-19 17:57:09 +01:00
Philip Fulcher 19fa732eb0 docs(nx-dev): add 21.3 release article and changelog (#33939)
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: Caleb Ukle <caleb@nrwl.io>
2025-12-19 11:23:08 -05:00
Colum Ferry 5242d61717 docs(module-federation): add guide for using Tailwind CSS with Module Federation (#33959)
Explains how to configure Tailwind CSS so that classes used in remote
applications are properly compiled by the host application. Covers both
Tailwind v3 (content array) and v4 (@source directive) configurations.
2025-12-19 10:51:00 -05:00
Jack Hsu 7bb90bf1c9 docs(misc): use middleware for Framer proxy to keep pages static (#33956)
This PR fixes the `/changelog` page.

With `getStaticProps`, files were read at build time when copy-docs had
already copied them. With `getServerSideProps`, files are read at
request time on serverless functions where those files don't exist.

This PR reverts the changes to use `getServerSideProps` and uses a
middleware instead. This also has the benefit of keeping the pages
static, so we do not need edge functions to run their server function.

Fixed: https://nx-dev-git-doc-372-nrwl.vercel.app/changelog

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: jaysoo <jaysoo@users.noreply.github.com>
2025-12-19 10:37:29 -05:00
Caleb Ukle 3e32862622 fix(misc): remove auto CI Optimization card from AI page (#33955)
Fixes DOC-371
2025-12-19 15:33:45 +01:00
Leosvel Pérez Espinosa 691bb320ce feat(angular): support cypress component testing with zoneless projects (#33941)
## Current Behavior

Cypress Component Testing for zoneless Angular projects is not
supported.

## Expected Behavior

Cypress Component Testing for zoneless Angular projects should be
supported.
2025-12-19 14:17:05 +01:00
MaxKless be5bd5f8e2 docs(core): document NX_USE_LOCAL env var (#33952) 2025-12-19 14:13:55 +01:00
Leosvel Pérez Espinosa 5659d50e11 fix(linter): honor setParserOptionsProject in flat config (#33953)
## Current Behavior

When generating Angular apps/libs with `setParserOptionsProject`, the
ESLint flat config output did not include the project-level
`parserOptions.project`, so type-aware lint rules still fail unless
users edit the config manually.

## Expected Behavior

Enabling `setParserOptionsProject` produces the appropriate
project-level `parserOptions.project` configuration in both flat ESLint
config and legacy `.eslintrc.json`, so type-aware linting works out of
the box.

## Related Issue(s)

Fixes #33944
2025-12-19 14:12:22 +01:00
Leosvel Pérez Espinosa 5a4b345a3a fix(angular): support @angular/cli package update during nx migrate (#33918)
## Current Behavior

When migrating Angular packages the `@angular/cli` package is not
updated as part of the `nx migrate` initial package updates to the
`package.json` file. Instead, it's updated at a later stage with a
migration generator. This happens for a couple of reasons:

- Angular CLI package group will update all the packages using a `^`,
which can result in workspaces getting a minor version of the packages
installed before Nx adds support for that minor version.
- Angular CLI migrations can error due to some assumptions that are not
always correct in Nx workspaces.
- The `nx migrate` command currently doesn't have the ability to ignore
the package group or migrations of a given package.

This is why the `@angular/cli` package is migrated "manually" in a
migration generator.

## Expected Behavior

The `@angular/cli` package should be updated as part of the package
updates performed by the `nx migrate` command while ignoring its package
group and migrations. The `@nx/angular` package already provides the
same set of migrations and more.

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-12-19 08:07:06 -05:00
Leosvel Pérez Espinosa c23dcfb649 fix(core): fix vitest test runner options for angular in cnw (#33921)
## Current Behavior

Creating a new Angular workspace with Vitest results in no test setup
being generated. This happens because the `vitest` option is no longer
available, and instead, there are two options: `vitest-angular` and
`vitest-analog`.

## Expected Behavior

Creating a new Angular workspace should prompt for Vitest with Angular
or Vitest with Analog to set up the tests.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: leosvelperez <leosvelperez@users.noreply.github.com>
Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-12-19 08:06:55 -05:00
Colum Ferry 841f1ef8ec fix(module-federation): skip non-npm external dependencies in getDependencies (#33951)
The getDependentPackagesForProject function was crashing when processing
projects with non-npm external nodes (e.g., cargo: prefixed nodes from
@monodon/rust plugin). The code only handled npm: prefixed externals and
treated everything else as workspace libraries, causing undefined access
errors when cargo externals were encountered.

This fix adds a check to skip external nodes that aren't npm-prefixed by
detecting the presence of a colon in the dependency target. Only npm:
prefixed externals are processed as npm packages, and other external
prefixes (cargo:, maven:, etc.) are now properly skipped.

Fixes #32819
2025-12-19 12:31:57 +00:00
Colum Ferry 32bc89e078 docs(release): clarify ignorePatternsForPlanCheck syntax #30324 (#33926)
## Current Behaviour

The ignorePatternsForPlanCheck configuration option in nx.json for
version plans lacks
documentation about the pattern syntax. Users attempting to use negation
patterns (e.g.,
["*", "!src/"]) may experience unexpected behavior because gitignore
semantics don't work
  as intuitively expected with such patterns.

 ## Expected Behaviour

  The documentation and JSDoc comments now clearly explain:
  - That ignorePatternsForPlanCheck follows gitignore semantics
  - Working patterns like ["**/*.spec.ts"] and ["**/*.ts", "!**/src/**"]
- Non-working patterns like ["*", "!src/"] and why they don't work as
expected
- Recommended approach of using file extension patterns instead of
wildcards when trying to
   ignore all files except those in specific directories

 ## Related Issues

  Fixes #30324

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-12-19 12:31:47 +00:00
Colum Ferry e31aea073f fix(module-federation): use localhost as default host #33909 (#33947) 2025-12-19 10:38:47 +00:00
Colum Ferry 531163ea11 docs(react): remove apps preset from cnw command #31841 (#33943)
Closes #31841
2025-12-19 10:00:38 +00:00
Leosvel Pérez Espinosa 98bbec7fc7 feat(angular): support ngrx v21 (#33940)
## Current Behavior

NgRx v21 is not supported.

## Expected Behavior

NgRx v21 should be supported.
2025-12-19 09:14:42 +00:00
Craigory Coppola 390602b7c7 chore(core): revert wasm changes in get_mod_time (#33929)
WASM changes are breaking the build
2025-12-18 18:31:20 -05:00
Craigory Coppola 32783dfb09 feat(core): add inline-tui view mode (#32718)
## Current Behavior
When running single tasks we have a "minimal" tui, but that minimal tui
still makes it really hard / impossible to use some of the terminals
built in features... like:

- Find (can only find what's currently rendered by tui)
- Text select + copy (can only select what's rendered to screen, copied
text includes the frame around the tui / scrollbar)

## Expected Behavior
When running single tasks we can use an inline viewport to render some
tui widgets at the bottom of the viewport, and terminal output can be
printed above.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-18 18:31:07 -05:00
Louie Weng ab488f7e75 chore(maven): disable e2e tests (#33936)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Disabling Maven e2e tests since something with e2e setup breaks when we
try to update the spring boot version.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-18 18:08:50 -05:00
Caleb Ukle cb2cbb6930 fix(nx-dev): make sure canonical urls are always nx.dev (#33932)
make sure canonical always points to nx.dev and not a subdomain preview
incase they're index.
<img width="1728" height="863" alt="image"
src="https://github.com/user-attachments/assets/8e7d91c1-277b-4a2a-91ec-732f7f4f37ae"
/>
also confirm that robots.txt still has deny for non prod builds. 

this is done via middleware since canonical url is controlled via astro
config 'site' property. which is used to control other aspects that we
do want to be preview URL domains (like navigation). so we have a
middleware to always override the url to match prod.

also nextjs side was already overriding this in `_app.tsx`
2025-12-18 16:25:08 -05:00
Jack Hsu 9016f8d842 docs(nx-dev): add dynamic banner support to nx.dev (#33793)
This PR adds the ability to consumer banner data for nx.dev (both astro
and next.js) from a remote JSON file. This is only enabled if
`BANNER_URL` environment variable is set.

The `banner-config.json` files are committed for both astro and next.js,
so before we consume banner JSON from Framer, we can use this as the
source of truth rather than update the component code.

Once we switch completely to Framer CMS, we can remove the committed
JSON files.

Note: A redeploy is required for banner changes to take effect. In the
future we may be able to do this dynamically in Astro.

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-18 16:21:11 -05:00
Louie Weng 0a04c920b1 revert(maven): revert maven plugin back down to 0.0.11 (#33930)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Maven plugin was complaining about Spring-boot version being behind 3.5
when running e2e suite. Also bumped down maven plugin version since
version 0.0.12 could not be found at the time of this PR.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-18 15:42:46 -05:00
Caleb Ukle 22cce83550 fix(nx-dev): make sure only prod is indexed (#33922)
Note: required updating inputs for tasks to make sure env vars are
correctly cache busting.

Prod
<img width="1459" height="724" alt="image"
src="https://github.com/user-attachments/assets/1289b745-b68f-4176-9812-ef783d03ba26"
/>
non prod
<img width="1585" height="589" alt="image"
src="https://github.com/user-attachments/assets/dd0603b2-6487-4690-8bed-4c3d82644304"
/>
2025-12-18 13:03:26 -05:00
Caleb Ukle e31f815a6b docs(nx-cloud): clarify nx cloud run details when disabling nx cache (#33925) 2025-12-18 16:51:56 +00:00
Caleb Ukle 014d229b4a docs(core): add include/exclude plugin options to inferred tasks docs (#33924)
## Current Behavior

The inferred tasks documentation at
https://nx.dev/docs/concepts/inferred-tasks does not mention the
`include` or `exclude` options on plugins, even though this is a common
and useful feature for scoping plugins to specific projects.

## Expected Behavior

The inferred tasks documentation now includes a new section called
"Scope Plugins to Specific Projects" that explains:
- How to use `include` and `exclude` properties in plugin configuration
- What the glob patterns match against
- Use cases for this feature (scoping plugins, applying different
options to different projects)

This aligns with the existing documentation in the nx.json reference
guide.

## Related Issue(s)

Fixes DOC-367
2025-12-18 11:50:00 -05:00
Colum Ferry 1bc16c86dc fix(react): set up module federation with webpack and ts soln correctly #31029 (#33920)
## Current Behavior

When generating a React Module Federation remote with webpack bundler in
a TypeScript
Solution setup, the generator incorrectly sets the production webpack
config path in the
project configuration. Additionally, the sourceRoot property is not
being set in
package.json for TS Solution setups, which causes issues with module
federation's ability
  to locate source files correctly.

 ## Expected Behavior

  When using a TypeScript Solution setup:
- The production webpack config should not be explicitly set in the
build target's
  production configuration (it will be inferred correctly)
- The sourceRoot property should be set in package.json under the nx
configuration to
  properly identify the project's source directory
- The typecheck target should be added as a dependency for both build
and serve targets

 ## Related Issue(s)

  Fixes #31029
2025-12-18 15:42:08 +00:00
Leosvel Pérez Espinosa d9ca27bc3d fix(testing): ensure jest v30 migration is run (#33916)
## Current Behavior

The `replace-removed-matcher-aliases` migration from `@nx/jest` is not
run when migrating to Angular v21 (and updating Jest to v30). That
migration targets the original package update for Jest v30 (Nx 21.3.0),
which was incompatible with Angular < 21, so it wouldn't have run for
Angular workspaces at the time. Now that Angular is being updated to
v21, Jest is updated to v30, but the migration generator is not running.

## Expected Behavior

The `replace-removed-matcher-aliases` migration from `@nx/jest` should
run when migrating to Angular v21 (and updating Jest to v30).
2025-12-18 10:06:47 -05:00
Jason Jean d6a4b7d7ba chore(maven): update Maven version to 4.0.0-rc-5 (#33914)
## Current Behavior

The Maven version used for development dependencies is currently set to
3.9.11 in both pom.xml and mise.toml.

## Expected Behavior

The Maven version should be updated to 4.0.0-rc-5 to align with the
Maven 4 version already used in the batch-runner component.

## Related Issue(s)

N/A - This is a dependency version update to ensure consistency across
the Maven plugin ecosystem.

## Changes

- Updated `maven.version` property in pom.xml from 3.9.11 to 4.0.0-rc-5
- Updated maven tool version in mise.toml from 3.9.11 to 4.0.0-rc-5

This ensures that developers working on the Nx Maven plugin use the same
Maven 4.0.0-rc-5 version across all components.
2025-12-18 10:06:23 -05:00
Jason Jean 0cb91b85cb chore(maven): bump Maven plugin version to 0.0.12 (#33913)
## Current Behavior

The Maven plugin version is currently at 0.0.11.

## Expected Behavior

This PR bumps the Maven plugin version to 0.0.12 and creates a migration
for Nx 22.4.0-beta.0. This allows users to automatically update their
pom.xml files when they upgrade to the next version of Nx.

## Related Issue(s)

N/A - Version bump
2025-12-18 10:06:07 -05:00
Jason Jean f154b70196 fix(core): daemon client reconnection on server restart (#33432)
## Current Behavior

The daemon currently depends on client requests failing with a
`LOCK_FILES_CHANGED` error to trigger a restart. This creates several
issues:
- The daemon may stay running with stale dependencies if no requests
come in
- The client must wait for a request to fail to trigger reconnection
- Special-case error handling is scattered across the client code

## Expected Behavior

The daemon should proactively restart itself when lock files change, and
the client should gracefully reconnect with exponential backoff for any
server shutdown scenario.

## Changes

### Client-Side: Exponential Backoff Reconnection
- Add `handleConnectionError()` method that retries with exponential
backoff (10ms → 5000ms, 30 attempts max)
- Preserve pending messages during reconnection and resend them once the
new daemon is available
- Remove special-case handling for `LOCK_FILES_CHANGED` and
`NX_VERSION_CHANGED` errors
- Remove `retryMessageAfterNewDaemonStarts()` method as it's no longer
needed

### Server-Side: Self-Restart on Lock File Changes  
- Add `startNewDaemonInBackground()` to spawn a replacement daemon
before shutdown
- Add `handleServerProcessTerminationWithRestart()` for restartable
shutdown scenarios
- Detect lock file changes and proactively start a new daemon before
responding with an error
- Keep version change handling simple (just exit, no restart)

## Benefits
- **More Resilient**: Client recovers from any server shutdown, not just
specific errors
- **Cleaner Architecture**: Server manages its own lifecycle, client
doesn't need special cases
- **No Request Dependency**: Daemon doesn't wait for requests to detect
changes
- **Reduced Error Spam**: Exponential backoff prevents connection error
floods
- **Future-Proof**: Foundation for other restart scenarios (plugins,
config changes)

## Related Issue(s)

Fixes https://github.com/nrwl/nx/issues/30514
Fixes https://github.com/nrwl/nx/issues/29118
2025-12-17 23:02:08 -05:00
Jason Jean fed034a32d feat(maven): add batch executor for multi-task Maven execution (#33228)
## Summary

Adds a batch executor for Nx Maven that enables parallel multi-task
execution with significant performance improvements. The batch runner
keeps Maven resident in memory, avoiding cold start overhead for each
task.

## Changes

### 1. Batch Runner JAR (`packages/maven/batch-runner`)
- **ResidentMavenExecutor**: Uses Maven 4.x's `ResidentMavenInvoker` to
keep Maven in memory
- **NxMaven**: Custom Maven wrapper that caches project graphs and
sessions across invocations
- **CachingResidentMavenInvoker**: Preserves session state so artifacts
from `jar:jar` are visible to `install:install`
- **BuildStateManager**: Applies/records build states for
cross-invocation caching
- Maven 4.x dependencies are shaded into the JAR for standalone
execution

### 2. TypeScript Executors (`packages/maven/src/executors/maven`)
- **maven.impl.ts**: Single-task executor using `mvnw`/`mvn`
- **maven-batch.impl.ts**: Batch executor that invokes the batch runner
JAR
- Automatic Maven version detection and executable resolution

### 3. Shared Utilities (`packages/maven/shared`)
- `BuildState`, `BuildStateApplier`, `BuildStateRecorder` for
cross-invocation state
- `MavenCommandResolver` for detecting Maven executable
- Reusable across batch-runner and maven-plugin modules

### 4. Maven Plugin Updates (`packages/maven/maven-plugin`)
- Updated to use `@nx/maven:maven` executor (batch-aware)
- Improved `GitIgnoreClassifier` for nested .gitignore handling
- Cache config tweaks for compiler inputs

## Performance

| Scenario | Before | After |
|----------|--------|-------|
| Cold start per task | 100-500ms | N/A (one-time init) |
| Per-task execution | 100-500ms | ~1.3ms (cached) |
| Improvement | - | **75-385x faster** |

## Version Support

- **Maven 4.x**: Full support with ResidentMavenExecutor (optimized)
- **Maven 3.x**: Falls back to ProcessBasedMavenExecutor (subprocess)

## Testing

- E2E tests for Maven 4.0.0-rc-4, 4.0.0-rc-5
- Unit tests for TypeScript executors
- Tests for GitIgnoreClassifier

## Current Behavior

Uses subprocess execution via `mvnw`/`mvn` for each task.

## Expected Behavior

Batch execution keeps Maven resident, dramatically reducing per-task
overhead.

## Related Issue(s)

Part of Maven integration improvements.

---------

Co-authored-by: Max Kless <maxk@nrwl.io>
2025-12-17 22:49:54 -05:00
Philip Fulcher 62b3c91be9 docs(nx-dev): remove December 2025 webinar notifier (#33911) 2025-12-17 22:17:04 -05:00
Craigory Coppola 9475bb4386 fix(core): ensure no tui on single tasks (#33910)
## Current Behavior
The tui shouldn't show for single tasks

## Expected Behavior
The tui isn't shown for single tasks

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-17 23:43:01 +00:00
Craigory Coppola c7cdd2a9b9 fix(dotnet): fix dependency graph for multi-targeting and transitive deps (#33908)
## Current Behavior

  Two issues with the .NET dependency graph:

1. Issue #33653: When a .NET project uses multi-targeting
(<TargetFrameworks> plural), its project reference dependencies
disappear from the Nx graph.
2. Issue #33397: Transitive dependencies are incorrectly shown as direct
dependencies. For example, if A → B → C, the graph shows A depending on
both B and C, when it should only show A → B.

##  Expected Behavior

1. Multi-targeting projects should correctly show their dependencies in
the graph.
2. Only direct dependencies should be shown, not transitive ones. Nx
handles transitive dependencies through the dependency chain.

 ### Solution

  Multi-targeting fix (#33653)

  MSBuild creates multiple nodes for multi-targeting projects:
  - An "outer build" with TargetFrameworks set but TargetFramework empty
  - "Inner builds" for each target framework with TargetFramework set

The fix groups nodes by project file path and prefers inner builds
(which have properly resolved references) over outer builds.

 ### Transitive dependency fix (#33397)

Changed from using ProjectGraphNode.ProjectReferences (which includes
transitive dependencies in multi-targeting scenarios) to
ProjectInstance.GetItems("ProjectReference") which returns only direct
references defined in the project file.

 ## Related Issue(s)

  Fixes #33653
  Fixes #33397

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 18:22:01 -05:00
Jason Jean 6e426514e2 chore(repo): update nx to 22.3.0-beta.3 (#33907)
Updating Nx from 22.3.0-beta.2 to 22.3.0-beta.3
2025-12-17 14:42:51 -05:00
Jack Hsu 6323dba876 fix(core): convert * to workspace:* for pnpm/yarn/bun in CNW (#33893)
Templates use `"*"` for workspace dependencies in individual
package.json files. This works for npm but breaks pnpm, yarn, and bun
which require the `workspace:` protocol for proper symlinking.

For pnpm, yarn, and bun: automatically convert `"*"` dependencies to
`"workspace:*"` in all workspace package.json files. npm is left
unchanged since it handles `"*"` natively.

Also adds support for 2-level nested projects (e.g.,
`libs/shared/models/package.json`).

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 14:11:06 -05:00
Jack Hsu 5c404e669f docs(misc): add "Copy page" button to copy markdown content (#33905)
This PR adds a `Copy page` action under the ToC in the right sidebar.

<img width="608" height="861" alt="image"
src="https://github.com/user-attachments/assets/9d3c7444-1163-4682-87dc-a399178e750d"
/>

The helps get the content into LLMs and AI agents.
2025-12-17 13:53:17 -05:00
Leosvel Pérez Espinosa 6f85b83fd3 cleanup(repo): format all files (#33902)
Format all files after Prettier v3 was merged.
2025-12-17 17:15:06 +00:00
Berend de Boer a5fc0d6b6e docs(misc): add link to new nx-biome plugin (#33854)
This plugin supports --batch for very fast formatting and linting.
2025-12-17 17:13:06 +01:00
Leosvel Pérez Espinosa e3777677b8 fix(core): invalidate sync generator cache on file changes and use up-to-date project graph (#33780)
## Current Behavior

Sync generators are processed in the background by the daemon server.
Their results are cached and reprocessed when the project graph is
recomputed. There are currently two issues:

- The cache is only invalidated after the project graph finishes
recomputing, which means that there's an interval between files changed
(triggering the project graph recomputation) and the recomputation
finishes, where the cache is not invalidated, and it's stale. During
that interval, any request to get the sync generator changes will use
the stale cache.
- Sync generators are scheduled to be processed after the project graph
is recomputed, so a quick succession of recomputations can be coalesced.
The problem is that the scheduled closure uses the project graph from
the initial scheduling, rather than the latest available project graph
at the time it runs. This results in the usage of stale data to process
the sync generators.

## Expected Behavior

Getting sync generators changes should always return up-to-date
information.
2025-12-17 10:36:48 -05:00
Leosvel Pérez Espinosa 99d226fd6b fix(core): improve database initialization error handling (#33820)
## Current Behavior

When database initialization fails due to filesystem issues, permission
problems, or environment incompatibilities (like WAL mode not being
supported), Nx shows generic error messages that don't provide
actionable guidance to users. For example:
- "Unable to create db lock file: PermissionDenied"
- "Unable to set journal_mode: <sqlite error>"

This makes it difficult for users to diagnose and resolve issues,
especially in restricted environments like Docker containers, network
filesystems, or WSL1.

## Expected Behavior

With this PR, database initialization errors now provide:

1. **Context-specific error messages** - Different guidance based on the
error type:
- Permission denied: Instructions about file ownership, Docker volume
permissions, and read-only filesystems
   - Storage full: Suggestions to free disk space
   - Already exists: Guidance about stale files from crashed processes

2. **Automatic WAL mode fallback** - When WAL journal mode is not
supported by the filesystem, Nx now automatically falls back to DELETE
journal mode instead of failing. This improves compatibility with:
   - Network filesystems (NFS, CIFS)
   - Some Docker volume configurations
   - Other environments with limited locking support

3. **WSL1 detection** - Proactively detects WSL1 environments (which
have known WAL incompatibilities) and uses DELETE mode from the start,
avoiding failed attempts and retries.

4. **Better cleanup on retry** - When database initialization fails and
needs to retry, all auxiliary files (WAL and SHM files) are also cleaned
up, not just the main database file.

5. **Actionable reporting instructions** - All error messages now
include:
- How to capture detailed logs
(`NX_NATIVE_FILE_LOGGING=nx::native::db=trace`)
   - Link to create an issue
   - Suggestion to run `nx reset`
2025-12-17 10:25:18 -05:00
Leosvel Pérez Espinosa 6f7830088e feat(core): add hints and status messages to the tui (#33838)
## Current Behavior

When users press unhandled keys in the TUI (e.g., pressing `i` on a
completed task, or typing in a non-interactive terminal pane), nothing
happens and there's no feedback explaining why.

Similarly, when users press certain key bindings like `c` to copy
output, the action succeeds but there's no visual confirmation.

## Expected Behavior

### Hint Popups for Unhandled Keys

Users now see helpful hint popups when pressing keys that don't work in
the current context:

- Pressing `i`, `c`, or `Ctrl+A` in the dependency view (task hasn't
started yet)
- Pressing `i` on a task that doesn't support interactive mode
- Pressing character keys in a terminal pane that's not in interactive
mode

The hints explain what's happening and guide users on how to proceed.

### Status Messages for "Invisible" Actions

When users perform actions without obvious visual feedback, a status
message now appears in the terminal pane's bottom border:

- `Output copied` when pressing `c` to copy
- `Sent to assistant` when pressing `Ctrl+A`

### Configuration Option

Users who prefer not to see hint popups can disable them in `nx.json`:

```json
{
  "tui": {
    "suppressHints": true
  }
}
```
2025-12-17 10:14:11 -05:00
Colum Ferry a64d1b237e fix(storybook): use helper to find correct version when pnpm catalogs are used (#33900)
Current Behavior

When using pnpm catalogs to manage dependency versions, the Storybook
utilities and ESLint version-utils read package.json directly using
readJson() or readJsonFile(). This approach doesn't resolve catalog
references like catalog:default, causing version detection to fail or
return incorrect values.

  For example, if package.json contains:
  {
    "devDependencies": {
      "storybook": "catalog:default"
    }
  }

The current code would return "catalog:default" as the version string
instead of resolving it to the actual version (e.g., "8.5.0").

  Expected Behavior

Use the getDependencyVersionFromPackageJson() helper from @nx/devkit
which properly handles pnpm catalog resolution. This ensures that
version detection works correctly regardless of whether dependencies are
specified directly or via pnpm catalogs.

  The helper:
  - Resolves catalog: references to their actual versions
  - Falls back gracefully when catalogs aren't in use
  - Maintains consistent behavior across different package managers

  Related Issue(s)

Fixes issues with pnpm catalog compatibility in Storybook generators and
ESLint utilities.

  Related to #29772

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-12-17 14:44:40 +00:00
Leosvel Pérez Espinosa 62c13c5477 feat(misc): support prettier v3 (#33898)
## Current Behavior

Nx doesn't generate projects with Prettier v3.

## Expected Behavior

Nx should generate projects with Prettier v3.

## Related Issue(s)

Fixes #30801
2025-12-17 09:26:13 -05:00
Leosvel Pérez Espinosa c29834c0a7 fix(angular): ensure jest and jest-preset-angular are updated correctly for angular v21 (#33896)
## Current Behavior

There's a deadlock between the Angular and Jest package updates
requirements (`requires` and `incompatibleWith`) that prevents updating
Jest to v30 and `jest-preset-angular` to v16.

## Expected Behavior

Updating to Angular v21 should result in updating Jest to v30 and
`jest-preset-angular` to v16.

This is ensured by moving the `jest-preset-angular` package update
definition to the `@nx/jest` package and processing the `@nx/angular`
package updates before `@nx/jest`. That way, by the time `@nx/jest` is
processed, the migrator would have collected the Angular v21 updates,
and the requirements will be met.
2025-12-17 08:48:34 -05:00
Jack Hsu 3384b1dc91 docs(nx-dev): add Framer rewrite support for nx-dev (#33677)
## Current Behavior
The nx-dev Next.js app can only serve pages from its own codebase or
proxy to Astro docs.

## Expected Behavior
Support proxying specific pages to a Framer site via environment
variables:
- `NEXT_PUBLIC_FRAMER_URL`: Base URL of the Framer site
- `NEXT_PUBLIC_FRAMER_REWRITES`: Comma-separated paths for new pages

For existing pages like `/ai`, the proxy is handled in
`getServerSideProps`.

## Related Issue(s)
Closes DOC-349

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-17 08:16:00 -05:00
Leosvel Pérez Espinosa a24119303c feat(angular): add migration to replace jest-preset-angular/setup-jest imports (#33899)
Replaces the removed `jest-preset-angular/setup-jest` import with the
new `setupZoneTestEnv` function from
`jest-preset-angular/setup-env/zone`.
2025-12-17 14:10:36 +01:00
Chau Tran 8d5ca12b30 fix(graph): serve full project graph when navigating from PDV (#33897) 2025-12-17 18:56:32 +07:00
Jan Sudczak 4493157fb0 fix(js): allow copying generated Prisma client (asset) from 'node_modules' (#33822)
Removed 'node_modules' from the ignore list for asset copying.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Updating Nx to v22 breaks my app. Some projects use generated Prisma
clients which, because of how Prisma binaries work, have to be generated
to `node_modules` in order to work both locally and in Docker context.
With Nx v22 Prisma client is not copied when project is built using
`@nx/esbuild:esbuild` (or any other executor supporting `assets`
property) without any error or warning. It took mi couple of hours to
pinpoint the exact line of code responsible for this. `node_modules` dir
is hardcoded there without any possibility to be overridden.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Prisma client can be copied from `node_modules` to project output
directory when building.
Ignoring `node_modules` is removed **or can be overridden**. I'm open to
any solution which will let me update Nx in my repository.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 21:26:04 -05:00
Jason Jean f33d7e7c96 chore(repo): update nx to 22.3.0-beta.1 (#33873)
Updating Nx from 22.2.0-beta.4 to 22.3.0-beta.1

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: FrozenPandaz <FrozenPandaz@users.noreply.github.com>
Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-16 17:02:40 -05:00
Jack Hsu cf7ecc9111 fix(core): reduce error rate with dir validation and add more debugging data (#33887)
This PR adds a validation to the directory prompt, so users should not
hit the error as often. Only possible now if they pass the arg from CLI
_and_ they are in non-interactive mode.

We also added some more data to help debug problems, such as node
version, template/preset chosen, etc. And updated the message in
"custom" preset prompt to align with the more effective "full platform"
prompt.

Note: Also update the error message (if it hits) to be the same in new
flow and old flow.

## Related Issue(s)
Closes NXC-3624

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 22:00:24 +00:00
Copilot ffc5f69320 docs(core): document argv in task execution hook contexts (#33322)
The `argv` field was already implemented in `PreTasksExecutionContext`
and `PostTasksExecutionContext` but lacked tests and documentation for
plugin authors to discover and use it.

## Changes

- **Added unit tests**
(`packages/nx/src/daemon/server/handle-tasks-execution-hooks.spec.ts`)
validating that `argv` flows correctly through hook handlers for
different command patterns (direct, affected, run-many)

- **Enhanced existing documentation** in
`astro-docs/src/content/docs/extending-nx/task-running-lifecycle.mdoc`
with a new section covering:
  - Context property definitions showing the `argv` field
- Examples showing how to detect command types (direct execution,
affected, run-many)
- Example demonstrating conditional analytics based on the original
command
  - Common command patterns reference
  - Best practices for defensive argv parsing

## Usage

```typescript
import type { NxPlugin, PostTasksExecutionContext } from '@nx/devkit';

export const myPlugin: NxPlugin = {
  name: 'my-plugin',
  
  postTasksExecution: async (options, context: PostTasksExecutionContext) => {
    // Distinguish between nx build my-app vs nx affected -t build
    if (context.argv.includes('affected')) {
      console.log('Running in affected mode');
    }
  }
};
```

Fixes
https://linear.app/nxdev/issue/NXC-3382/add-contextargv-to-task-execution-hook-contexts

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> Issue Title: Add context.argv to task execution hook contexts
> Issue Description: Expose the original CLI arguments on the plugin
worker so hooks can distinguish how execution was started (e.g., `nx
build nx-api` vs `nx affected -t build`). Proposal: include the invoking
argv on the hook context (e.g., `context.argv`).
> Fixes
https://linear.app/nxdev/issue/NXC-3382/add-contextargv-to-task-execution-hook-contexts
> 
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> [https://github.com/nrwl/nx](https://github.com/nrwl/nx)
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> Aha! that worked - so you can tell it to assign to copilot instead of
"me and copilot"
> 
> Comment by User d484ef82-7f7d-4a95-be09-9d82ca3905dc:
> 📋 I wasn't able to determine which GitHub repository to work in.
> 
> I think it's one of these, but can you tell me which one is right?
> 
> Comment by User :
> Created issue
[NXC-3382](https://linear.app/nxdev/issue/NXC-3382/add-contextargv-to-task-execution-hook-contexts)
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> This comment thread is synced to a corresponding [thread in
Slack](https://nrwl.slack.com/archives/C070BJ2JYLW/p1761928859857989?thread_ts=1761928859.857989&cid=C070BJ2JYLW).
All replies are displayed in both locations.
> 
> Comment by User :
> This thread is for an agent session with githubcopilot.
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> @Linear make a ticket and assign it to copilot
> 
> Comment by User f5ae6d50-28e9-4ee7-ad51-3da8208d5914:
> Makes sense to me
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> Sure, context.argv?
> 
> Comment by User f5ae6d50-28e9-4ee7-ad51-3da8208d5914:
> We can add them as `argv`?
> 
> Comment by User f5ae6d50-28e9-4ee7-ad51-3da8208d5914:
> Yeah they would run on the plugin worker so it's not there
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> @jason we could add `originalArgv` to the contexts?
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> Eh, probably not... they run on the plugin worker
> 
> Comment by User 4215f3ef-50bd-4f09-85a0-b489c88057b6:
> Yeah, I don't think the hooks know.... I'd be curious if process.argv
would just have that info though
> 
> Comment by User 439b15a6-827b-4258-971a-d86133ad59de:
> payfit does
> 
> Comment by User 74901385-a023-4825-8470-fe68b1b55664:
> I can’t see anything about that in the docs - so I would assume the
hooks are agnostic to how the tasks were triggered?
> 
> Comment by User 74901385-a023-4825-8470-fe68b1b55664:
> so they’re asking is there’s a way to tell the difference between `nx
build nx-api` or `nx affected -t build` in the task hook?
> 
> Comment by User 74901385-a023-4825-8470-fe68b1b55664:
> > I’ve been playing around with the Task Execution Hooks, specifically
the postTasksExecution hook, and I think it will be really useful for me
to grab some detailed metrics for our specific use cases.
> > What I feel like it’s missing is a way to see what command actually
started the task execution, whether it was a specific target or an
affected command. As long as it was a specific target, I think the tasks
are sorted in order so the last taskResult will probably be the actual
target of the command but for affected it seems a bit more random what
the last result will be.
> > Is there a way to know exactly which command kicked off the ‘task
execution’?
> 
> 


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: AgentEnder <6933928+AgentEnder@users.noreply.github.com>
Co-authored-by: Craigory Coppola <craigorycoppola@gmail.com>
Co-authored-by: Caleb Ukle <caleb@nrwl.io>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Copilot <Copilot@users.noreply.github.com>
2025-12-16 16:15:17 -05:00
Leosvel Pérez Espinosa 035e0fd872 fix(core): prevent pinning the same task in multiple panes in the tui (#33863)
## Current Behavior

The same task can be pinned in multiple terminal panes of the TUI. This
causes one pane to scroll the other because they share the same data.

## Expected Behavior

The same task can only be pinned in a single terminal pane of the TUI.
2025-12-16 16:09:23 -05:00
Jason Jean 4ebbe9735c fix(web): update e2e test regex for SWC decorator metadata (#33892)
## Current Behavior

The e2e test `should emit decorator metadata when using --compiler=swc`
fails because the regex `/Foo=.*?_decorate/` expects the old transpiled
output format where classes were assigned to variables.

## Expected Behavior

The test should pass by matching the current SWC output format which
uses native ES class syntax.

## Solution

Updated the regex from `/Foo=.*?_decorate/` to `/class
Foo.*_ts_metadata/` which:
- Matches `class Foo` (native ES class syntax)
- Verifies `_ts_metadata` is present (decorator metadata)
2025-12-16 15:53:36 -05:00
Leosvel Pérez Espinosa d61ae25b2a fix(core): display task output in TUI when native command runner is disabled (#33881)
## Current Behavior

When `NX_NATIVE_COMMAND_RUNNER=false` is set, tasks running in the TUI
don't display any output in the terminal pane. The pane remains empty
even though the task is running.

## Expected Behavior

Task output is displayed in the TUI terminal pane regardless of the
`NX_NATIVE_COMMAND_RUNNER` setting.

## Related Issues

Fixes #32803
2025-12-16 15:21:07 -05:00
Caleb Ukle 7d1ea67cf0 chore(repo): remove legacy community/approved-plugins.json file (#33869)
use astro-docs/src/content/approved-community-plugins.json instead. 


Fixes DOC-363

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: barbados-clemens <barbados-clemens@users.noreply.github.com>
2025-12-16 15:20:30 -05:00
Caleb Ukle 80501c9848 docs(core): add examples for dependentTasksOutputFiles (#33870) 2025-12-16 15:10:48 -05:00
MaxKless e7758aa6cc cleanup(gradle): fix failing nightly (#33884)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-16 14:32:43 -05:00
Leosvel Pérez Espinosa 71bfc216c3 feat(angular): add migration to set isolateModules: true to jest tsconfig files (#33889)
## Current Behavior

When upgrading to Angular 21 with Jest, users may encounter TypeScript
compilation issues because their `tsconfig.spec.json` files don't have
`isolatedModules: true` set, which is required for compatibility with
Jest and `jest-preset-angular`.

## Expected Behavior

After running `nx migrate`, Angular projects using Jest will
automatically have `isolatedModules: true` added to their
`tsconfig.spec.json` files (or custom test tsconfig files referenced by
`@nx/jest:jest` tasks) if not already set or inherited from a parent
tsconfig.
2025-12-16 19:30:42 +01:00
Louie Weng 4931fbfdad docs(nx-cloud): fix references to metrics enablement (#33888)
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Update references to disablement variable for metrics collection for Nx
Cloud enterprise users.

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-12-16 10:25:02 -08:00
Colum Ferry 497345ab74 chore(misc): add agents.md and gemini to codeowners (#33886) 2025-12-16 17:05:35 +00:00
Colum Ferry 3db0fb2ce9 fix(node): use @swc/helpers instead of tslib when compiler is swc (#33885)
When using `@nx/node:library` generator with `--compiler=swc`, the
generator
was incorrectly adding `tslib` as a dependency instead of
`@swc/helpers`.

This change fixes two issues:
1. Pass the correct bundler (matching the compiler) to
jsLibraryGenerator
so it adds the correct helper dependency to the project's package.json
2. Update ensureDependencies to only add tslib when compiler is tsc

Fixes #31202
2025-12-16 17:02:42 +00:00
Caleb Ukle db33a7b9c9 chore(nx-dev): update agent files (#33883)
update claude/agent.md with info about how to use docs
2025-12-16 11:16:53 -05:00
Tine Kondo af003c1a0c feat(nx-plugin): allow customizing the location of the companion E2E project (#32073)
Fixes #32069

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-12-16 15:44:13 +00:00
Leosvel Pérez Espinosa 6d34960175 fix(core): add back ability to create cache_outputs table without a foreign key (#33880)
Add back the ability to create the `cache_outputs` table without a
foreign key to `task_details`. Nx Cloud still needs this.
2025-12-16 09:02:35 -05:00
Kasper Christensen 5ccc0a8c4b fix(misc): use string type for fetchDepth in azure-pipelines.yml (#33727)
The Azure Pipelines schema requires fetchDepth to be a string, but the
generator was outputting a number.
This fix changes the value to a string to match the official schema
specification.

## Current Behavior
The generator creates `azure-pipelines.yml` with `fetchDepth: 0`
(number), which causes YAML schema validation error because the Azure
Pipelines schema expects `fetchDepth` to be a string.

According to the [Azure Pipelines
schema](https://raw.githubusercontent.com/microsoft/azure-pipelines-vscode/master/service-schema.json),
`fetchDepth` is defined as:
```json
"fetchDepth": {
    "description": "Depth of Git graph to fetch",
    "$ref": "#/definitions/string"
}
```

## Expected Behavior
The generator should output `fetchDepth: '0'` (string) to match the
schema specification and prevent validation errors.

Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
2025-12-16 14:00:42 +00:00
Charlie Croom d5bd57e697 fix(core): include PNPM patches in externalDependencies hash computations (#33551)
## Current Behavior
If a workspace uses pnpm and adds a local patch to a dependency (e.g.
`vitest`), this patch is not taken into account when computing that
dependency's hash for purposes of determining cache changes. In
practice, you could patch vitest locally, and tests would pull from the
cache.

## Expected Behavior
Patches can alter behavior in the same way that updating the version
could, it's just that the version is not created and the patch is
applied locally.

This updates the pnpm lockfile parsing functionality to read the patches
field into a map and then combine the patch hash with the integrity
hash. The integrity hash ONLY represents the remote / tarball
intergrity, so these have to be combined in order to create a proper
key.

## Related Issue(s)
(Could not find any, but saw this in my work today)

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-16 13:53:55 +01:00
teawithfruit de966a21c0 fix(js): adjusted stdout and stderr handling to support the latest @swc/cli version (#32685)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Due to this PR https://github.com/swc-project/pkgs/pull/53 at SWC, it is
not possible to use the latest version of @swc/cli in NX.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
stdout and stderr are now handled more precisely, allowing you to update
to the latest version of @swc/cli.

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-12-16 12:22:08 +00:00
Zachary DeRose 68d4d4e994 fix(js): check package.json for name when project.json exists but has no name (#31887)
## Current Behavior

When a project has a `project.json` file but no `name` field, the
`addBuildAndWatchDepsTargets` function in
`packages/js/src/plugins/typescript/util.ts` returns early without
creating build and watch deps targets, even if the project has a valid
name in its `package.json`.

## Expected Behavior

The function should fall back to checking `package.json` for the project
name when `project.json` exists but has no `name` field, allowing the
build and watch deps targets to be created properly.

## Related Issue(s)

This fixes an issue where projects with `project.json` files missing the
`name` field would not get proper build and watch dependency targets
generated.

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-12-16 11:05:58 +00:00
Craigory Coppola 98e479210d fix(js): detect changes to pnpm.overrides and overrides in package.json (#31914)
## Current Behavior

`getProjectPathsAffectedByDependencyUpdates` in
`@packages/nx/src/plugins/js/project-graph/affected/lock-file-changes.ts`
doesn't return projects affected when updating `pnpm.overrides` or
`overrides` in package.json.

## Expected Behavior

When `overrides`, `resolutions`, or `pnpm.overrides` fields are changed
in package.json, the affected projects should be properly detected and
returned.

## Related Issue(s)

This addresses reports that affected project detection isn't working
properly when package manager override configurations are changed.

## Changes Made

- Enhanced `getTouchedNpmPackages` function to detect changes to
`overrides`, `resolutions`, and `pnpm.overrides` fields
- When a known package is changed in overrides, only that specific
package is marked as affected
- When an unknown package is changed in overrides, all projects are
marked as affected (since overrides can affect transitive dependencies)
- Added comprehensive tests for all override scenarios

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: AgentEnder <AgentEnder@users.noreply.github.com>
2025-12-16 11:05:37 +00:00
Asif Rahman 28c9673887 docs(storybook): fix incorrect version references in storybook v9 docs (#32727)
### Summary:
This PR updates the Nx documentation for the Storybook migration
generator to ensure clear and accurate guidance for migrating to
Storybook version 9. It replaces outdated references to version 8,
corrects migration links, and updates example configurations for Angular
and React (Vite) projects to reflect Storybook v9. These improvements
help users follow the correct steps and avoid confusion when upgrading
their workspace to the latest major release.

### Key Updates:

- Updated all migration documentation links and text to target Storybook
v9 resources.
- Corrected example .storybook/main.js|ts file descriptions for Angular
and React projects to reference version 9.
[[1]](diffhunk://#diff-2bd0403b5cc6e0c92d83a89400b36d55ad50eb0f82688aa976ecb3c93ff69eceL44-R44)
[[2]](diffhunk://#diff-2bd0403b5cc6e0c92d83a89400b36d55ad50eb0f82688aa976ecb3c93ff69eceL61-R61)
- Ensured users will be directed to the right guides and migration steps
for a smoother upgrade experience.

### Type of Change:
Documentation only; no changes to code or functionality.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
N/A - Docs update

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
N/A - Docs update

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->
N/A
2025-12-16 10:25:20 +00:00
Raphael Araújo 45cdecef50 fix(nextjs): accept fileName option to generate page (#30013)
## Current Behavior
The `pageGenerator` has the option `fileName`, but it is not affecting
anything.

## Expected Behavior
The `pageGenerator` has the option `fileName`, it will define the page
file name.
2025-12-16 10:08:23 +00:00
Jason Jean 02b4dbe08b fix(misc): send connectUrl in completion metadata (#33878)
## Current Behavior

The `recordStat` telemetry for `create-nx-workspace` and
`create-nx-plugin` completion events does not include the Nx Cloud
connect URL.

## Expected Behavior

The connect URL (e.g., `https://cloud.nx.app/connect/{shortlinkId}`) is
now included in the completion metadata sent to `/nx-cloud/stats`.

## Related Issue(s)

N/A - Internal telemetry enhancement
2025-12-15 23:31:42 +00:00
Jack Hsu 63306c01ae chore(repo): fix nightlies (#33875)
NODE_VERSION was set only on the mise-action step, so subsequent steps
defaulted to the wrong node version and corepack couldn't create the
pnpm shim.

Also update corepack first, otherwise you might run into intermittent
integrity check issues:
- https://github.com/nodejs/corepack/issues/612
- https://vercel.com/kb/guide/corepack-errors-github-actions

---

  Before (NODE_VERSION at step-level):

  1. mise-action runs with NODE_VERSION=20
    - mise installs Node 20
- mise adds /home/runner/.local/share/mise/installs/node/20.x.x/bin/ to
PATH
2. corepack enable runs - NODE_VERSION is NOT set anymore (step env is
gone)
    - corepack shim calls mise
- mise reads mise.toml template: node = "{{ env['NODE_VERSION'] |
default(value='24.11.0') }}"
    - NODE_VERSION is unset → defaults to 24.11.0
    - mise runs corepack from Node 24's install
    - corepack creates pnpm shim in Node 24's bin directory
  3. pnpm install runs
    - PATH has Node 20's bin (from step 1)
    - pnpm is in Node 24's bin (from step 2)
    - pnpm not found!

  After (NODE_VERSION at job-level):

  1. mise-action runs with NODE_VERSION=20 (from job env)
    - mise installs Node 20, adds its bin to PATH
  2. corepack enable runs - NODE_VERSION=20 is still set
    - corepack shim calls mise
    - mise sees NODE_VERSION=20
    - corepack runs from Node 20's install
    - pnpm shim created in Node 20's bin
  3. pnpm install runs
    - PATH has Node 20's bin ✓
    - pnpm is in Node 20's bin ✓
    - Works!
---

Closes NXC-3620

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 17:36:30 -05:00
Philip Fulcher b9ca315b71 docs(nx-dev): updating blog posts related to Powerpack (#33798) 2025-12-15 17:29:33 -05:00
Jason Jean 2be4dde7ce fix(core): restore linkTaskDetails param for backwards compatibility (#33874)
## Current Behavior

The `linkTaskDetails` parameter was removed from the `NxCache`
constructor in #33843, which broke Nx Cloud since it still passes this
parameter.

## Expected Behavior

The `NxCache` constructor should accept the `linkTaskDetails` parameter
(even if unused) to maintain backwards compatibility with Nx Cloud.

## Related Issue(s)

Fixes
https://github.com/nrwl/nx/commit/ed09ee1daed597b7be60255f0cebe52efdd1ae69#r172894152
2025-12-15 21:19:05 +00:00
Philip Fulcher c5dac1eb95 docs(nx-dev): add changelog for 22.2 (#33795) 2025-12-15 15:06:28 -06:00
Jack Hsu e864b6a266 fix(core): update CNW messaging and remove cancel event from SIGINT (#33872)
Updates CNW messages and removes `cancel` event from being recorded in
SIGINT handler, since it didn't work.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: jaysoo <jaysoo@users.noreply.github.com>
2025-12-15 14:19:46 -05:00
Colum Ferry 68d539c19c fix(module-federation): check port availability before starting remote proxies (#33871)
When multiple MF dev servers run concurrently and share the same remote,
they would both attempt to start proxies on the same port, causing
EADDRINUSE errors.

This fix checks if a port is already in use before attempting to start
a proxy. If the port is occupied (likely by another MF dev server that
started earlier), the proxy is skipped for that remote since it's
already being served.

Uses the existing `waitForPortOpen` utility with retries: 0 to perform
an immediate check.

Fixes #33470
2025-12-15 17:53:34 +00:00
Colum Ferry ae0a47aaf1 docs(misc): clarify dryRun behavior for releasePublish (#33868)
Update the programmatic API documentation to clarify that the dryRun
option for releasePublish does not prevent the underlying commands
from being executed. Instead, it forwards the flag to the executor
and sets the NX_DRY_RUN environment variable.

This makes it clear that:
- The built-in @nx/js:release-publish executor handles dryRun correctly
- Custom nx-release-publish executors must implement dryRun support
themselves

Fixes #33443
2025-12-15 17:01:36 +00:00
Colum Ferry 2516974bd6 docs(release): add independent versioning guidance for publish workflow (#33867)
The publish workflow template was designed for fixed versioning strategy
(where all packages share the same version). This commit adds:

- A callout explaining that the template works best with fixed
versioning
- A new section covering considerations for independent versioning
- Documentation of GitHub's 3-tag event limitation
- Alternative approaches: workflow_dispatch, branch-based triggers, or
batch tag pushing

Fixes #33502
2025-12-15 17:00:45 +00:00
Craigory Coppola 72c47e7452 fix(core): preserve command output in TUI summary for non-cached tasks (#33673)
## Current Behavior

The `printTaskTerminalOutput` callback in the TUI summary life cycle
overwrites terminal output for all tasks when output is provided. This
causes the command line information (the actual command that was run) to
be lost for non-cached tasks because non-cached tasks stream their
output via `appendTaskOutput`, which includes the command information.

## Expected Behavior

For non-cached tasks (those with 'failure' or 'success' status), the
output should be preserved from the streaming via `appendTaskOutput`
which includes the complete command line that was executed. Only cached
tasks should have their output overwritten by `printTaskTerminalOutput`
since they don't go through the streaming path.

## Related Issue(s)

<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: AgentEnder <AgentEnder@users.noreply.github.com>
2025-12-15 11:50:07 -05:00
Colum Ferry 026756cf80 fix(nest): ensure library is generated with correct outputPath for TS Soln #32060 (#33864)
## Current Behavior
NestJs libraries are generated with output path pointing to workspace
level dist folder. With TS Soln setups, we expect the dist folder to be
local to the project.

## Expected Behavior
Ensure the outputPath generated is correct

## Related Issue(s)

Fixes #32060
2025-12-15 16:29:00 +00:00
Colum Ferry 999d9e32a2 chore(misc): update codeowners to reflect latest ownership (#33860)
Update codeowners
2025-12-15 13:31:19 +00:00
Leosvel Pérez Espinosa ae8612fba6 fix(core): do not invoke prettier with --write and --list-different when unsupported (#33857)
## Current Behavior

`nx format:write` fails with Prettier 4+ (and Prettier 3.6+ with the
experimental CLI enabled) with the error:

```bash
Incompatible options: "write" and "list-different" cannot be used together
```

## Expected Behavior

`nx format:write` works seamlessly across all Prettier versions (2.x,
3.x, and 4.x).

## Related Issue(s)

Fixes #33658 
Fixes #31951

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-12-15 14:22:25 +01:00
Jason Jean c3ace6deba chore(repo): add root Maven and Gradle files to Java reviewers in CODEOWNERS (#33714)
## Current Behavior

Root Maven and Gradle build files (pom.xml, build.gradle.kts,
settings.gradle.kts) are not explicitly assigned to the Java reviewers
in CODEOWNERS.

## Expected Behavior

With this PR, the Java reviewers (@FrozenPandaz @MaxKless @lourw) will
be automatically added as reviewers when changes are made to:
- `/pom.xml` - Root Maven build file
- `/build.gradle.kts` - Root Gradle build file  
- `/settings.gradle.kts` - Gradle settings file

This ensures the Java team has visibility into changes affecting the
root Java build configuration.

## Related Issue(s)

N/A - Maintenance improvement to CODEOWNERS
2025-12-15 08:21:36 -05:00
Rares Matei 099dc7db1a docs(nx-cloud): remove broken on-premise auth-single-admin redirect (#33840)
## Current Behavior

The `/ci/recipes/enterprise/on-premise/auth-single-admin` and
`/ci/recipes/on-premise/auth-single-admin` paths redirect to
`https://github.com/nrwl/nx-cloud-helm`, but the documentation that
should exist at these paths no longer has a target location.

## Expected Behavior

These redirect rules are removed so the broken links don't mislead users
with incorrect redirects.

## Related Issue(s)

Fixes CLOUD-4007
2025-12-15 21:56:25 +09:00
Leosvel Pérez Espinosa b6051f07af fix(angular): install compatible vitest version for angular projects (#33858)
#### Current Behavior

When creating a new Nx workspace with Angular v20 and selecting Vitest
as the unit test runner, the installation fails with an npm peer
dependency conflict:

```bash
npm error ERESOLVE could not resolve
npm error peerOptional vitest@"^3.1.1" from @angular/build@20.3.13
npm error Found: vitest@4.0.15
```

## Expected Behavior

Workspace creation completes successfully when selecting Angular with
Vitest as the unit test runner.

## Related Issue(s)

Fixes #33770
2025-12-15 11:47:51 +01:00
Jonathan Gelin ad5d9b726d fix(release): {releaseGroupName} not interpolated in changelog tag/releaseTagPattern (#33779) 2025-12-14 09:36:34 +00:00
Jason Jean 0a58d4c7f8 fix(repo): install correct Rust target for x86_64 macOS build (#33853)
## Current Behavior

The publish workflow was installing `aarch64-apple-darwin` Rust target
but attempting to build for `x86_64-apple-darwin`, causing the build to
fail with:

```
error[E0463]: can't find crate for `core`
  = note: the `x86_64-apple-darwin` target may not be installed
  = help: consider downloading the target with `rustup target add x86_64-apple-darwin`
```

## Expected Behavior

The workflow should install the correct Rust target
(`x86_64-apple-darwin`) before attempting to build for it.

## Related Issue(s)

N/A - Bug found during publish workflow debugging
2025-12-13 20:55:21 -05:00
Miroslav Jonaš ad7dfe7885 fix(core): improve performance of buildExplicitPackageJsonDependencies (#33791)
Further improvement of the graph creation.

Improving the `buildExplicitPackageJsonDependencies`.

| | Before | After |
| ---- | ----- | ---- |
| buildExplicitPackageJsonDependencies | 128 | 12 |
| isPackageJsonAtProjectRoot | 114 | 1 |

Fixes #

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-13 16:02:17 +00:00
Leosvel Pérez Espinosa ed09ee1dae fix(core): create all tables upfront when creating the database (#33843)
Create all the tables upfront when creating the database. This prevents
some issues in some scenarios where a missing table is reported.
2025-12-12 14:56:29 -05:00
Leosvel Pérez Espinosa 15a7d954fc fix(angular): improve error message when using esbuild-based build targets and generating cypress ct (#33846)
## Current Behavior

When running `nx g @nx/angular:cypress-component-configuration` on an
Angular project that uses esbuild (the default bundler since Angular
17), users receive a confusing error message:

```bash
Unable to find a valid build configuration. Try passing in a target for an Angular app.
```

This doesn't explain why the configuration fails or what the actual
limitation is.

## Expected Behavior

Users now receive a clear, informative error message that explains:
- Cypress Component Testing for Angular requires a webpack-based build
target
- Their project uses an esbuild-based executor (and which one)
- Cypress only supports webpack as the bundler for Angular component
testing

This helps users understand the limitation and make informed decisions
about how to proceed.

## Related Issue(s)

Fixes #33329
2025-12-12 18:36:48 +00:00
Adwait Athale 4ef85ffec2 chore(module-federation): optimize path mappings and remote resolution (#33752)
## Current Behavior

### 1. typescript.ts - readTsPathMappings was O(n²)

The function was spreading the accumulator object on every iteration:

```
┌─────────────────────────────────────────────────────────────┐
│                    BEFORE: O(n²)                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  For each path alias (n=100):                               │
│    tsPathMappings.set(tsConfigPath, {                       │
│      ...tsPathMappings.get(tsConfigPath),  ← SPREAD n items │
│      [alias]: paths                                         │
│    });                                                      │
│                                                             │
│  Iteration 1: spread 0 items                                │
│  Iteration 2: spread 1 item                                 │
│  Iteration 3: spread 2 items                                │
│  ...                                                        │
│  Iteration n: spread n-1 items                              │
│                                                             │
│  Total: 0+1+2+...+(n-1) = n(n-1)/2 = O(n²) operations       │
│                                                             │
│  For 100 aliases: 4,950 spread operations                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘
```

### 2. get-remotes-for-host.ts - Multiple inefficiencies

- `Object.keys()` called twice on same object
- `replace()` called twice on same string
- Multiple array spreads for port calculation

## Expected Behavior

### 1. typescript.ts - Now O(n)

```
┌─────────────────────────────────────────────────────────────┐
│                     AFTER: O(n)                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  const processedPaths = {};                                 │
│  for (const [alias, paths] of entries) {                    │
│    processedPaths[alias] = paths.map(normalize);            │
│  }                                                          │
│  tsPathMappings.set(tsConfigPath, processedPaths);          │
│                                                             │
│  Total: n iterations, each O(1) = O(n)                      │
│                                                             │
│  For 100 aliases: 100 operations (vs 4,950)                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘
```

### 2. get-remotes-for-host.ts - Optimized

```
┌─────────────────────────────────────────────────────────────┐
│                  OPTIMIZATIONS                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────┐         ┌─────────────────┐            │
│  │ Object.keys(x)  │  ───►   │ const keys =    │            │
│  │ Object.keys(x)  │         │   Object.keys(x)│            │
│  │ (2 calls)       │         │ // use keys     │            │
│  └─────────────────┘         └─────────────────┘            │
│                                                             │
│  ┌─────────────────┐         ┌─────────────────┐            │
│  │ r.replace(...)  │  ───►   │ const norm =    │            │
│  │ r.replace(...)  │         │   r.replace(...)│            │
│  │ (2 calls)       │         │ // use norm     │            │
│  └─────────────────┘         └─────────────────┘            │
│                                                             │
│  ┌─────────────────┐         ┌─────────────────┐            │
│  │ Math.max(       │  ───►   │ for (port of p) │            │
│  │  ...[...a,...b] │         │  if (port>max)  │            │
│  │ )               │         │    max = port   │            │
│  │ (3 arrays)      │         │ (0 extra arrays)│            │
│  └─────────────────┘         └─────────────────┘            │
│                                                             │
└─────────────────────────────────────────────────────────────┘
```

## Why Accept This PR

1. **Significant complexity reduction**: O(n²) → O(n) for path mappings
processing
2. **Zero behavior change**: Test passes, no functional changes
3. **Clean implementation**: Simple refactoring using idiomatic patterns
4. **Complementary to PR #33734**: Optimizes files not touched by that
PR

## Related Issue(s)

Performance improvement for Module Federation path mappings and remote
resolution.

 ## Merge Dependencies

This PR has no dependencies and can be merged independently.

---
2025-12-12 18:21:28 +00:00
James Kraus fe2bf86a8b fix(react): update template comment to be valid css (#33169)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The `//` comment in the styled template [is not valid
css](https://stackoverflow.com/questions/12298890/is-it-bad-practice-to-prefix-single-lines-of-css-with-as-a-personal-comment-s/20192639#20192639)
and is causing [stylelint](https://stylelint.io/) to throw errors upon
creating new apps

## Expected Behavior
It should be valid css

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

https://github.com/nrwl/nx/issues/33579

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-12-12 18:20:45 +00:00
Jack Hsu 192099af44 fix(js): resolve nx binary from workspace root in node executor (#33842)
## Current Behavior

When running `nx serve` with a NestJS project (and other node apps using
`runBuildTargetDependencies`), the node executor attempts to resolve the
`nx` binary using `require.resolve('nx')`. This fails with because
`nx/package.json` does no longer has a `main` field.

## Expected Behavior

The node executor should correctly resolve and use the `nx` binary from
the workspace where it's always installed.

This is fixed by using `nx/bin/nx.js` instead of just `nx` -- as we do
in other places.

## Related Issue(s)

Fixes #33776

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 12:59:36 -05:00
Timo Santi 30e6f85b48 fix(js): handle workspace packages when nx.name differs from package.json.name (#33583)
## Current Behavior
<!-- This is the behavior we have today -->

When a workspace library has a `name` field set in its `nx`
configuration (e.g., `"nx": { "name": "buildable" }`), the
`@nx/js:prune-lockfile` executor fails to include transitive
dependencies from that library in the pruned lockfile.

The issue occurs because `addNodesAndDependencies` attempts to retrieve
workspace nodes using `graph.nodes[name]` where `name` is the package
name from `package.json`, but `graph.nodes` is keyed by the project name
(from `nx.name`). When these differ, the lookup fails and transitive
dependencies are not traversed.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The `@nx/js:prune-lockfile` executor should include all transitive
dependencies from workspace libraries regardless of whether the library
has a `name` field set in its `nx` configuration.

The fix uses the workspace node from the `workspacePackages` map (which
is keyed by package name) instead of attempting to look it up in
`graph.nodes` (which is keyed by project name).

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #33582
2025-12-12 12:59:20 -05:00
Leosvel Pérez Espinosa 80523ef09a fix(js): prevent crash when terminating task using the @nx/js:swc executor (#33845)
## Current Behavior

When terminating a task using the `@nx/js:swc` executor before it ever
got to execute its post-compilation logic, a `TypeError: disposeFn is
not a function` error is thrown.

## Expected Behavior

Terminating a task using the `@nx/js:swc` executor should not error.

## Related Issue(s)

Fixes #31938
2025-12-12 17:58:11 +00:00
Leosvel Pérez Espinosa f6189359e6 fix(angular): collect known tsconfig files from non-buildable angular libraries in migration (#33834)
## Current Behavior

The `update-21-2-0/update-module-resolution migration` doesn't process
any tsconfig files of non-buildable libraries.

## Expected Behavior

The `update-21-2-0/update-module-resolution migration` should process
common/known tsconfig files of non-buildable libraries.

## Related Issue(s)

Fixes #33705
2025-12-12 17:50:35 +00:00
Yevhenii Yusenkov 54eed65774 feat(js): improve SWC compilation error logging (#33297)
Currently, when SWC compilation fails, Nx logs only a generic message:

  "SWC compilation failed"

There is no `error.message`, no `stderr` and no `stdout` printed.  
In many cases the actual cause of failure is completely hidden, which
makes debugging very difficult, especially in CI.

This PR improves the logging by printing:

- error.message (or the error itself)
- stderr if available
- stdout if available

This makes SWC failures visible and debuggable again.



## Current Behavior
Only a generic "SWC compilation failed" message is logged. No error
message or stdout are shown.

## Expected Behavior
Include error.message, stderr, and stdout (when available) so developers
can understand and debug failures.
2025-12-12 17:40:56 +00:00
Hamza Khan 7f6db63f91 fix(node): sourceMaps option to sourceMap in webpack config (#33333)
## Current Behavior
when I run the below nx workspace command
nx g @nx/express:app kafka-service --directory=apps/kafka-service
--e2eTestRunner=none

the apps/kafka-service/webpack.config.json is generated with the below
lines

const { NxAppWebpackPlugin } = require('@nx/webpack/app-plugin');
const { join } = require('path');

module.exports = {
  output: {
    path: join(__dirname, 'dist'),
    ...(process.env.NODE_ENV !== 'production' && {
      devtoolModuleFilenameTemplate: '[absolute-resource-path]',
    }),
  },
  plugins: [
    new NxAppWebpackPlugin({
      target: 'node',
      compiler: 'tsc',
      main: './src/main.ts',
      tsConfig: './tsconfig.app.json',
      assets: ["./src/assets"],
      optimization: false,
      outputHashing: 'none',
      generatePackageJson: true,
      sourceMaps: true,
    })
  ],
};

there is no such property in NxAppWebpackPluginOptions called
**sourceMaps**, hence source maps are not generated
the correct property is **sourceMap**


## Expected Behavior
module.exports = {
  output: {
    path: join(__dirname, 'dist'),
    ...(process.env.NODE_ENV !== 'production' && {
      devtoolModuleFilenameTemplate: '[absolute-resource-path]',
    }),
  },
  plugins: [
    new NxAppWebpackPlugin({
      target: 'node',
      compiler: 'tsc',
      main: './src/main.ts',
      tsConfig: './tsconfig.app.json',
      assets: ["./src/assets"],
      optimization: false,
      outputHashing: 'none',
      generatePackageJson: true,
      sourceMap: true,
    })
  ],
};

## Related Issue(s)

Fixes #
2025-12-12 17:40:39 +00:00
Leosvel Pérez Espinosa 8136eaf568 feat(angular): support angular v21 (#33378)
## Current Behavior

Angular v21 is not supported.

## Expected Behavior

Angular v21 should be supported.

## Blockers

### Required

- [x] `jest-preset-angular`:
  - [x] PR: https://github.com/thymikee/jest-preset-angular/pull/3485
- [x] Release:
https://github.com/thymikee/jest-preset-angular/releases/tag/v16.0.0

### Optional

We may release Angular v21 support without waiting for these packages to
support it.

- [ ] NgRx
  - [x] PR: https://github.com/ngrx/platform/pull/5025
  - [ ] Release: N/A
- [ ] Cypress (Component Testing doesn't support Zoneless apps)
  - [ ] PR: https://github.com/cypress-io/cypress/pull/33004
  - [ ] Release: N/A

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-12-12 18:39:13 +01:00
Jack Hsu 6828a36979 fix(core): pass more error detail for CNW (#33844)
We're missing messages and variant when errors happen during CNW. This
will help us track down potential problems.

We also want to know when CNW is cancelled in order to know that we're
not missing any events.
2025-12-12 17:26:08 +00:00
Berend de Boer 32ff9e3532 docs(misc): update description for @berenddeboer/nx-aws-cdk (#33002)
Description update for @berenddeboer/nx-aws-cdk plugin: this has become
self-inferring.

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-12 16:45:55 +00:00
Adwait Athale aeb7122f76 chore(module-federation): consolidate getModuleFederationConfig implementations (#33735)
## Current Behavior

The `getModuleFederationConfig` function is implemented separately in 4
places with 70-80% duplicate code:
- `with-module-federation/webpack/utils.ts` (161 lines)
- `with-module-federation/rspack/utils.ts` (150 lines)
- `with-module-federation/angular/utils.ts` - async version (~80 lines)
- `with-module-federation/angular/utils.ts` - sync version (~80 lines)

Each implementation repeats the same core logic:
1. Get project from graph
2. Get and filter dependencies
3. Share workspace libraries and npm packages
4. Apply eager packages
5. Map remotes

## Expected Behavior

A single shared implementation with framework-specific configuration via
a `FrameworkConfig` interface. Each bundler utility becomes a thin
wrapper that provides its specific configuration.

### Changes

| File | Before | After | Change |
|------|--------|-------|--------|
| `webpack/utils.ts` | 161 lines | 54 lines | -107 lines |
| `rspack/utils.ts` | 150 lines | 51 lines | -99 lines |
| `angular/utils.ts` | 273 lines | 119 lines | -154 lines |
| **NEW** `module-federation-config.ts` | - | 289 lines | +289 lines |

**Net reduction**: 41 lines, with significantly improved maintainability

### New Shared Utility

Created
`packages/module-federation/src/utils/module-federation-config.ts` with:

- `FrameworkConfig` interface for bundler-specific customization
- `ModuleFederationConfigResult` interface for type-safe return values
- `getModuleFederationConfigAsync()` - for webpack/angular async configs
- `getModuleFederationConfigSync()` - for rspack/angular sync configs
- `createDefaultRemoteUrlResolver()` - shared remote URL generation
- Caching for `NX_MF_DEV_SERVER_STATIC_REMOTES` env variable parsing
(performance)

### Benefits

1. **Single source of truth**: Bug fixes and improvements only need to
be made once
2. **Better maintainability**: Framework-specific behavior is clearly
separated via config
3. **Performance**: Added caching for env variable parsing
4. **Type safety**: New interfaces provide better IntelliSense and
compile-time checks
5. **Backward compatible**: All existing exports and behavior preserved

## Related Issue(s)

N/A - This is a refactoring for improved code maintainability and
performance.

## Merge Dependencies

**Must be merged AFTER:** #33734

---
2025-12-12 16:09:28 +00:00
Jay Bell 11992be147 fix(core): swc register base url missing when using tsgo (#33332)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

With the new tsgo `baseUrl` has been completely removed, this breaks
compilation of plugins using swc when calling them with nx due to swc
needing the baseUrl. I patched my company workspace with this fix and it
did resolve it, not sure if its the right fix or what the ramifications
are so happy to discuss that more. Since `baseUrl` is removed in tsgo
(and recommended against in general), we need to find a way to provide
it to swc (potentially through an `.swcrc` alternatively, I tried adding
that to my workspace though and it didn't do anything).

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-12 16:07:35 +00:00
Colum Ferry cf742e7271 fix(expo): set projectRoot to workspaceRoot for Expo SDK 54+ compatibility (#33836)
Expo CLI 54.0.12+ changed how originModulePath is determined in Metro
resolvers - from workspace root to project root. This caused the Nx
custom resolver to double-path modules when resolving workspace
libraries.

This fix:
- Adds projectRoot: workspaceRoot to the Metro config to ensure
  originModulePath remains workspace-relative
- Adds defensive path normalization in pnpmResolver to handle edge cases

Fixes #33597
2025-12-12 16:04:48 +00:00
Mark Lindsey 2a3684b325 docs(nx-cloud): fix self-healing docs to include gitlab and azure devops (#33841)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Self-healing docs only reference being supported for GitHub. 
<!-- This is the behavior we have today -->

## Expected Behavior
We should show instructions for all currently supported vcs providers,
including GitLab and Azure Devops.
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-12 09:43:58 -05:00
Jack Hsu 302905ea9e feat(core): add CnwError class for typed error handling in create-nx-workspace (#33839)
Replace process.exit(1) calls with typed CnwError exceptions for
structured error reporting and telemetry tracking. Update recordStat
meta to use typed JSON objects with named keys instead of arrays.

Examples of what's sent as `meta`.

```
{"type":"start","flowVariant":"1"}
{"type":"complete","flowVariant":"1","setupCIPrompt":"which-ci-provider","setupCloudPrompt":"cloud-v2-remote-cache-visit","nxCloudArg":"skip","nxCloudArgRaw":"","pushedToVcs":"SkippedGit","template":"nrwl/empty-template"}
{"type":"start","flowVariant":"1"}
{"type":"start","flowVariant":"0"}
{"type":"complete","flowVariant":"0","setupCIPrompt":"which-ci-provider","setupCloudPrompt":"enable-caching2","nxCloudArg":"skip","nxCloudArgRaw":"","pushedToVcs":"SkippedGit","template":"custom"}
{"type":"start","flowVariant":"1"}
{"type":"error","errorCode":"DIRECTORY_EXISTS"}
{"type":"start","flowVariant":"1"}
{"type":"error","errorCode":"DIRECTORY_EXISTS"}
{"type":"start","flowVariant":"1"}
{"type":"complete","flowVariant":"1","setupCIPrompt":"which-ci-provider","setupCloudPrompt":"cloud-v2-green-prs-visit","nxCloudArg":"yes","nxCloudArgRaw":"","pushedToVcs":"FailedToPushToVcs","template":"nrwl/empty-template"}
{"type":"start","flowVariant":"1"}
{"type":"complete","flowVariant":"1","setupCIPrompt":"which-ci-provider","setupCloudPrompt":"cloud-v2-fast-ci-visit","nxCloudArg":"yes","nxCloudArgRaw":"","pushedToVcs":"FailedToPushToVcs","template":"nrwl/empty-template"}
{"type":"start","flowVariant":"1"}
{"type":"start","flowVariant":"1"}
{"type":"complete","flowVariant":"1","setupCIPrompt":"which-ci-provider","setupCloudPrompt":"cloud-v2-green-prs-visit","nxCloudArg":"skip","nxCloudArgRaw":"","pushedToVcs":"SkippedGit","template":"nrwl/typescript-template"}
{"type":"start","flowVariant":"1"}
{"type":"error","errorCode":"WORKSPACE_CREATION_FAILED"}
```

Known errors like "directory exists" does not print stack trace:

<img width="1061" height="362" alt="image"
src="https://github.com/user-attachments/assets/8f29f303-3839-4297-b789-d23ac3af6d52"
/>

Another known error (invalid custom preset):

<img width="1091" height="391" alt="image"
src="https://github.com/user-attachments/assets/c7f6e586-42a8-493b-b595-f7d77743683f"
/>

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 09:25:58 -05:00
Andreas Jagiella 85558dce76 fix(rspack): enable build mode for TypeScript checker in TS solution setups (#33447)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
When using Nx React Module Federation with Rspack, running `nx run-many
-t e2e` before `nx run-many -t typecheck`, it causes typecheck to fail.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
`nx run-many -t typecheck` should succeed regardless of whether Rspack
(via `nx preview`) was executed before it.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes https://github.com/nrwl/nx/issues/33445
2025-12-12 14:03:27 +00:00
Colum Ferry e588a0e5fb fix(js): make CopyAssetsHandler per-file logs opt-in via verbose mode (#33835)
The CopyAssetsHandler was logging every copied file to the console,
causing noisy output when a project copies many files. This could
cause build errors to be cut off in terminals with scroll limits.

Change logger.log() to logger.verbose() so per-file logging only
appears when --verbose is passed or NX_VERBOSE_LOGGING=true.

Fixes #33521
2025-12-12 13:50:29 +00:00
Colum Ferry ea97487a52 fix(js): display pnpm publish errors without requiring --verbose (#33837)
The release-publish executor was only displaying npm-style errors
(error.summary
and error.detail), but pnpm returns errors with a different format
(error.code
and error.message). This caused pnpm publish errors to be invisible
unless users
passed the --verbose flag.

This fix adds handling for pnpm's error format so that error messages
are
properly displayed to users without requiring --verbose.

Fixes 33537
2025-12-12 13:50:21 +00:00
Aaro Karell 60fffd3c1a feat(js): add option for using tsgo compiler when inferring build and typecheck tasks (#33821)
Adds a 'compiler' option to the @nx/js/typescript plugin configuration,
with options 'tsc' and 'tsgo'. Affects both typecheck and build targets.

## Current Behavior

The `@nx/js/typescript` plugin always uses `tsc` as the compiler, with
no way to use the native `tsgo` preview.

## Expected Behavior

The `@nx/js/typescript` plugin can be configured to use `tsgo` for
building and typechecking.

## Related Issue(s)

Related discussion #32591.
2025-12-12 14:13:01 +01:00
Colum Ferry 1409648739 feat(webpack): add support for merging externals to NxAppWebpackPlugin (#33833)
This pull request introduces a new option to the Nx Webpack plugin that
allows users to control whether the plugin should merge its external
dependencies configuration with any existing Webpack externals
configuration. This provides greater flexibility when customizing how
external dependencies are handled during the build process.

Configuration enhancements:

* Added a new `mergeExternals` boolean option to the
`NxAppWebpackPluginOptions` interface, allowing users to specify whether
to combine the plugin's externals configuration with the existing
Webpack config.
* Updated the logic in `apply-base-config.ts` so that the `externals`
array is set based on the new `mergeExternals` option, defaulting to not
merging unless specified.

---------

Co-authored-by: David Antoon <davidmantoon@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-12-12 12:03:34 +00:00
Jack Hsu b367b5437b fix(core): add pnpm/yarn support for CNW templates (#33827)
Currently the template flow will only set up `npm`, even if you run
`yarn create` or `pnpx create-nx-workspace`. This PR adds support back
for other package managers.
2025-12-11 20:29:11 -05:00
Caleb Ukle 1310ee6f28 docs(misc): mcp client list cleanup (#33826)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: barbados-clemens <barbados-clemens@users.noreply.github.com>
2025-12-11 20:09:13 +00:00
Kamenskih Dmitriy 205daee6e6 fix(webpack): interpolate process.env more verbosely to reduce bundle size with DefinePlugin (#30826)
## Current Behavior
When we prepare ENVs for the DefinePlugin, we are creating the
`process.env` object.
For example:
```
// .env
NX_PUBLIC_VALUE1=1
NX_PUBLIC_VALUE2=2
NX_PUBLIC_VALUE3=3
```
As result we will have:
```js
{
   'process.env': {
      "NX_PUBLIC_VALUE1": "1",
      "NX_PUBLIC_VALUE2": "2",
      "NX_PUBLIC_VALUE3": "3"
   }
}
```

As a result, in the final bundle, we will replace process.env with this
object.
The issue:
If I use all 3 values in my application DefinePlugin will inject this
object 3 times, instead of injecting it once.
It will look like that:
```js
const a = {
      "NX_PUBLIC_VALUE1": "1",
      "NX_PUBLIC_VALUE2": "2",
      "NX_PUBLIC_VALUE3": "3"
}.NX_PUBLIC_VALUE1
const b = {
      "NX_PUBLIC_VALUE1": "1",
      "NX_PUBLIC_VALUE2": "2",
      "NX_PUBLIC_VALUE3": "3"
}.NX_PUBLIC_VALUE2
const c = {
      "NX_PUBLIC_VALUE1": "1",
      "NX_PUBLIC_VALUE2": "2",
      "NX_PUBLIC_VALUE3": "3"
}.NX_PUBLIC_VALUE3
```

## Expected Behavior
DefinePlugin injects values instead of env object in each place
```js
const a = "1"
const b = "2"
const c = "3"
```

## Fixes
- fixed this issue for webpack
- fixed this issue for storybook
- fixed this issue for rspack

TLDR:
now we have object like so:
```js
{
    "process.env.NX_PUBLIC_VALUE1": "1",
    "process.env.NX_PUBLIC_VALUE2": "2",
    "process.env.NX_PUBLIC_VALUE3": "3"
}
```

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-12-11 18:42:14 +00:00
Jonathan Wilbur b6aa097cdc fix(js): recognize NodeNext as ESM (#31508)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
NodeNext is not recognized as ESM. This causes this warning message to
be logged, even when you have `"type": "module",` in the `package.json`
file and are compile TypeScript to `"module": "NodeNext"`.

```
Package type is set to "module" but "cjs" format is included. Going to use "esm" format instead. You can change the package type to "commonjs" or remove type in the package.json file.
```

## Expected Behavior
Don't log this message. It is incorrect.

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-12-11 16:53:56 +00:00
Nicholas Cunningham 2c043bc670 fix(testing): update jest ci target to forward top level args (#31379)
This pull request refactors the `dependsOn` configuration for Jest
targets in the Nx plugin to improve flexibility and maintainability. The
changes replace string-based dependencies with structured objects,
ensuring better alignment with Nx's target configuration standards.

This PR updates the `dependsOn` configuration for Jest `ciTarget` to
ensure that top-level args are passed on if the parent target has a
dependsOn for other targets.

For example if i pass `nx run-many e2e-ci -- --json
--outputFile=my-test-results.json` the options:
- `--json`
- `--outputFile`

Should be forwarded to the dependent targets.

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-11 15:36:47 +00:00
Jack Hsu 8df9d50061 chore(misc): fix release script to check GITHUB_ACTIONS not NODE_AUTH_TOKEN (#33824)
The check should be for `GITHUB_ACTIONS` since that is the intention.
The token may not be set due to Trusted Publisher flow.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-12-11 09:53:52 -05:00
Guilherme Siquinelli 2917b3e545 fix(vite): update worker configuration in generator to follow Vite's … (#30465)
…new convention

## Current Behavior

Currently, the @nx/vite plugin generates a `vite.config.ts` file where
the worker configuration is commented out, but uses the old format:

```ts
// worker: {
//  plugins: [ nxViteTsPaths() ],
// }
```

If uncomment, this format triggers a warning from Vite, as the worker
configuration should now be a function that returns an array of plugins.
While Vite automatically converts the old format for compatibility, it
is not ideal to rely on this behavior.

## Expected Behavior

With the changes in this PR, the @nx/vite plugin will generate a Vite
configuration where the worker configuration follows the new convention,
avoiding warnings and ensuring compatibility with future versions of
Vite. The updated configuration will look like this:

```ts
// worker: {
//  plugins: () => [ nxViteTsPaths() ],
// }
```

This change ensures that the generated configuration aligns with Vite's
recommended practices and eliminates unnecessary warnings.

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-12-11 15:19:53 +01:00
ResonAtom 0f2c2c4ff8 fix(webpack): show webpack chunks when verbose (#30960)
The NxAppWebpackPlugin option 'verbose' should show chunk output during
webpack build when true, and hide them when false. It's currently the
reverse, causing a lot of console spam during dev, and the hiding the
info during ci/cd.

## Current Behavior
Setting the NxAppWebpackPlugin option 'verbose' to false shows chunk
output.

<img width="848" alt="chunky"
src="https://github.com/user-attachments/assets/4cd5502d-d059-4ace-9e42-28eb160bc1d0"
/>

## Expected Behavior
Setting the NxAppWebpackPlugin option 'verbose' to false hides chunk
output.
2025-12-11 11:26:28 +00:00
Alexey Balmasov 6c2c49cd03 fix(bundling): correct project path for createTmpTsConfig (#31314)
Resolve issue when
projectRoot was created from
join workspaceRoot and projectNode.data.root
but method createTmpTsConfig also make join

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
```
 method withNx create
 const projectRoot = join(workspaceRoot, projectNode.data.root);

```
method createTmpTsConfig 
apply also join
```
  const tmpTsConfigPath = join(
    workspaceRoot,
    'tmp',
    projectRoot,
    process.env.NX_TASK_TARGET_TARGET ?? 'build',
    `tsconfig.generated.${randomUUID()}.json`
  );
```

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31522
2025-12-11 11:26:09 +00:00
Khalil LAGRIDA 0acce33d4e chore(core): nx plugin submission @gridatek/nx-supabase (#33718) 2025-12-11 11:21:47 +00:00
Svyatoslav Zaytsev db1b8f5a3a feat(testing): add option to playwright preset to open html report (#31282)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
No option to manage opening html report after run.

## Expected Behavior
Added option to manage opening html report after run.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-11 12:03:33 +01:00
Altan Stalker 620f6ea0ad chore(repo): lock default node version to 24.11.0 (#33801) 2025-12-11 14:08:57 +04:00
Caleb Ukle c4af67343f docs(misc): add nx-mcp reference page (#33767)
fixes: DOC-341

https://deploy-preview-33767--nx-docs.netlify.app/docs/reference/nx-mcp

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: barbados-clemens <barbados-clemens@users.noreply.github.com>
2025-12-10 15:54:01 -06:00
Jason Jean 4147b62a16 fix(repo): revert to older nightly Rust for WASM builds (#33797)
## Current Behavior

The nightly-2025-12-10 Rust version removed `mtim()` from the WASI
`MetadataExt` trait, causing the WASM build to fail with:

```
error[E0599]: no method named `mtim` found for reference `&std::fs::Metadata` in the current scope
```

## Expected Behavior

WASM builds should compile successfully.

## Solution

Revert to `nightly-2025-05-09` which still has the `mtim()` API
available in the WASI `MetadataExt` trait.
2025-12-10 16:18:35 -05:00
Jason Jean 6cdbeb6e1a fix(repo): use RUSTUP_TOOLCHAIN env var for WASM builds (#33794)
## Current Behavior

The `build:wasm` script uses `rustup override set nightly-2025-12-10` to
set the Rust toolchain. However, when mise is configured to manage Rust
(e.g., `rust = "1.90.0"` in `mise.toml`), it sets the `RUSTUP_TOOLCHAIN`
environment variable which has higher precedence than directory
overrides.

This causes the WASM build to fail with:
```
error[E0554]: `#![feature]` may not be used on the stable release channel
```

## Expected Behavior

WASM builds should use nightly Rust regardless of mise configuration.

## Solution

Set `RUSTUP_TOOLCHAIN=nightly-2025-12-10` directly in the script, which
overrides any existing env var from mise or other sources.
2025-12-10 14:57:27 -05:00
Caleb Ukle be035dce59 docs(misc): add reference for Nx Console settings (#33363)
## Current Behavior

The Nx Console settings reference lacks explanation of VSCode's user vs
workspace settings and incorrectly states that Project Viewing Style is
unavailable in JetBrains IDEs.

## Expected Behavior
Nx consoles are documented for vscode/jetbrains editors


https://deploy-preview-33363--nx-docs.netlify.app/docs/reference/nx-console-settings

fixes: DOC-315

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-10 19:15:13 +00:00
Jason Jean 0d7ecb937b fix(repo): install nightly Rust for WASM build in publish workflow (#33792)
## Current Behavior

After the mise migration (#33772), the `publish.yml` workflow fails
during the "Build Wasm" step with:

```
error[E0554]: `#![feature]` may not be used on the stable release channel
 --> packages/nx/src/lib.rs:2:33
  |
2 | #![cfg_attr(target_os = "wasi", feature(wasi_ext))]
```

The WASM build requires nightly Rust because it uses the unstable
`wasi_ext` feature. The `build:wasm` script attempts to switch to
nightly via `rustup override set`, but after the mise migration, the
nightly toolchain is no longer pre-installed, causing the build to fail
with the stable compiler.

## Expected Behavior

The WASM build should successfully compile using nightly Rust with the
`wasi_ext` feature.

## Related Issue(s)

Fixes the publish workflow regression introduced in #33772
2025-12-10 14:08:45 -05:00
Miroslav Jonaš 72d91de8c4 fix(core): improve node creation for pnpm parser (#33788)
| | Before | After |
| ---- | ----- | ---- |
| Total createNodes | 812 | 104 |
| Total matchPropValue | 672 | 2 |

## Current Behavior
The `createNode` function is slow for pnpm due to suboptimal
`matchPropValue` function.

## Expected Behavior
The `createNode` function should be fast and not slowdown the graph
creation.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-10 13:54:27 -05:00
Leosvel Pérez Espinosa 04bd4dfdab fix(core): ensure terminalOutput is always a string in task results (#33782)
## Current Behavior

When some tasks fail during execution, it can result in a cryptic:

```bash
Failed to convert JavaScript value 'Undefined' into rust type 'String'
```

This happens because the reported `terminalOutput` for the errored tasks
can be `undefined`, and it hides the actual error that occurred.

## Expected Behavior

Error handling paths should always provide a valid string for
`terminalOutput`, using the error stack/message, or an empty string as a
fallback.

## Related Issue(s)

Fixes #32675
2025-12-10 13:25:09 -05:00
Jason Jean 33c3adaa15 fix(repo): restore mise tools in e2e-matrix workflow (#33785)
## Current Behavior

The inline `mise_toml` config in `e2e-matrix.yml` was overwriting the
entire `mise.toml` file, causing rust, dotnet, bun, and java to NOT be
installed by mise. This resulted in slow package installs as these tools
were downloaded during `pnpm install` instead.

## Expected Behavior

All tools from `mise.toml` (rust, dotnet, bun, java) should be installed
by mise, with only the node version varying based on the matrix.

## Solution

Use mise's template syntax to make node version configurable via
`NODE_VERSION` env var while preserving all other tools from
`mise.toml`:

```toml
node = "{{ env['NODE_VERSION'] | default(value='24') }}"
```

Then in the workflow, set the env var instead of overriding the entire
config:

```yaml
- name: Setup dev tools with mise
  uses: jdx/mise-action@v3
  env:
    NODE_VERSION: ${{ matrix.node_version }}
```

## Related Issue(s)

Fixes slow install times in nightly e2e-matrix workflow after #33772.
2025-12-10 11:46:59 -05:00
Jason Jean b2219f2cd0 fix(repo): fix dotnet installation on Windows (#33786)
## Current Behavior

The mise vfox-dotnet plugin fails on Windows with:
```
mise ERROR Failed to install vfox:mise-plugins/vfox-dotnet@9:
     0: error converting Lua table to PreInstall (no version returned from vfox plugin)
```

This prevents dotnet from being installed via mise on Windows CI
runners.

## Expected Behavior

Dotnet should install successfully on all platforms including Windows.

## Related Issue(s)

Related upstream issue: https://github.com/jdx/mise/discussions/4738

## Solution

1. **mise.toml** - Made dotnet installation conditional on Linux/macOS
only using the `os` option
2. **.github/workflows/publish.yml** - Added `winget install` to install
.NET SDK 9 on Windows CI runners

This approach works around the buggy vfox plugin by using the native
Windows package manager instead.
2025-12-10 11:46:50 -05:00
Leosvel Pérez Espinosa eb6712e738 fix(angular): process only the in progress entry points in ng-packagr-lite's write bundles transform function (#33784)
## Current Behavior

When building Angular libraries with `ng-packagr` >20.3.0, the build
fails with:

```bash
TypeError: Cannot read properties of undefined (reading 'outputCache')
```
This occurs because `ng-packagr` v20.3.1 introduced a memory
optimization
([ng-packagr#3172](https://github.com/ng-packagr/ng-packagr/pull/3172))
that calls `dispose()` on entry points after they're processed, setting
`entry.cache = undefined`.

Nx's custom `writeBundlesTransform` was iterating over **all** entries
in the graph, including already-disposed entry points, causing the crash
when accessing their cache.

## Expected Behavior

Angular library builds should succeed with `ng-packagr` >20.3.0,
including libraries with secondary entry points. Workspaces using lower
versions of `ng-packagr` should remain unaffected.

## Solution

Align with `ng-packagr`'s own pattern by using
`graph.find(isEntryPointInProgress())` to process only the currently
in-progress entry point, rather than iterating over all graph entries.

**Key changes:**

- Use `isEntryPointInProgress()` instead of iterating all entries with
`isEntryPoint()`
- Remove unused `BuildGraph` import (no longer creating a new graph)
- Update package node only when processing the primary entry point (more
efficient)
- Return nothing from the transform (original graph passes through, same
as ng-packagr)

This approach:

- Matches `ng-packagr`'s `writeBundlesTransform` implementation pattern
- Only accesses cache of the in-progress entry point (guaranteed not to
be disposed)
- Works with all supported `ng-packagr` versions (v19+) since
`isEntryPointInProgress()` has been available since v19

## Related Issue(s)

Fixes #33560
2025-12-10 17:13:24 +01:00
Jack Hsu e4b9e5822d fix(core): fix record stat on initial CNW call (#33783)
This PR fixes an issue with CNW where the initial `recordStat` call is
not working due to a logic error on passing `directory` that isn't
initialized yet.
2025-12-10 10:48:19 -05:00
Miguel 8da37b04f3 fix(core): exit with error when generator prompts fail (#33691)
## Current Behavior

If there are issues with values passed to generators via prompt, we
still see a green output and exit code 0.

A colleague found out about this by pressing `Ctrl+C` when being
prompted for parameters for a generator, and this led to the CLI simply
continuing execution and showing no issue.

## Expected Behavior

CLI fails.
2025-12-10 16:45:02 +01:00
Andrew Ovens 691a64532b feat(core): add NX_DEFAULT_OUTPUT_STYLE env var (#33493)
Allows setting a default output style instead of having to include it on
every command

Closes #27490

## Current Behavior
We must specify --outputStyle on every command

## Expected Behavior
Should allow overriding the default with an environment variable

## Related Issue(s)
#27490

Fixes #27490
2025-12-10 12:22:46 +01:00
Ashish Shanker cc369a3e11 fix(core): set max listeners for process in task orchestrator (#33596)
When 8+ dependent tasks exist, each adds an `exit` listener to track
completion. This listener attaches to `process`. So we apply the same
fix that worked for `stdout` and `stderr`, and was merged through [PR
16693](https://github.com/nrwl/nx/pull/16993)

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
For `nx` targets with 8+ dependent targets, we encounter
`maxListenersExceededWarning`:
```
(node: 22553) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added to [process]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit.
(node: 22553) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added to [process]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit.
(node: 22553) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added to [process]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit.
```
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
No `MaxListenersExceededWarning` should be thrown on account of the nx
run.
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #32439

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-10 11:45:13 +01:00
Adwait Athale badc998c65 fix(core): share visited Set across affected graph traversal (#33756)
## Current Behavior

In `filterAffectedProjects`, a **new visited Set is created for each
touched project**:

```typescript
ctx.touchedProjects.forEach((p) => {
  addAffectedNodes(p, reversed, result, new Set());  // NEW Set per project!
});
ctx.touchedProjects.forEach((p) => {
  addAffectedDependencies(p, reversed, result, new Set());  // NEW Set per project!
});
```

This defeats the purpose of the visited Set for deduplication. If
projects A and B both depend on shared project C, then C gets visited
**twice**.

## Expected Behavior

Share a single visited Set across all touched projects:

```typescript
const visitedNodes = new Set<string>();
const visitedDeps = new Set<string>();
for (const p of ctx.touchedProjects) {
  addAffectedNodes(p, reversed, result, visitedNodes);  // SHARED Set
}
for (const p of ctx.touchedProjects) {
  addAffectedDependencies(p, reversed, result, visitedDeps);  // SHARED Set
}
```

## Performance Impact

```
Before (separate Sets):              After (shared Sets):
┌─────────────────────────┐         ┌─────────────────────────┐
│  touchedProjects: [A,B] │         │  touchedProjects: [A,B] │
└───────────┬─────────────┘         └───────────┬─────────────┘
            │                                   │
    ┌───────┴───────┐                   ┌───────┴───────┐
    ▼               ▼                   ▼               ▼
┌───────┐       ┌───────┐           ┌───────┐       ┌───────┐
│ A     │       │ B     │           │ A     │       │ B     │
│visited│       │visited│           │       │       │       │
│= {}   │       │= {}   │           │ shared visitedNodes   │
└───┬───┘       └───┬───┘           └───┬───┘       └───┬───┘
    │               │                   │               │
    ▼               ▼                   ▼               ▼
┌───────┐       ┌───────┐           ┌───────────────────────┐
│visit C│       │visit C│           │ visit C (ONCE)        │
│(dup!) │       │(dup!) │           │ skip C from B         │
└───────┘       └───────┘           └───────────────────────┘

Complexity:                         Complexity:
O(touched × shared_deps)            O(total_nodes)
```

**Example**: With 50 touched projects sharing 100 common dependencies:
- Before: 50 × 100 = 5,000 node visits
- After: ~150 node visits (each node visited once)

## Why Accept This PR

1. **Bug-like behavior**: The current code defeats the purpose of the
visited Set
2. **Significant impact**: Affects every `nx affected` command
3. **Zero risk**: Same traversal logic, just shared deduplication
4. **Common scenario**: Monorepos often have shared dependencies (utils,
types, etc.)
## Related Issue(s)

Contributes to #32265

## Merge Dependencies

This PR has no dependencies and can be merged independently.

---

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-10 10:21:44 +01:00
Adwait Athale 58a69f99b1 fix(core): optimize pnpm lockfile parsing with pre-built indexes (#33750)
## Current Behavior

When parsing pnpm lockfiles to build the project graph:

### matchPropValue function
- Uses separate `Object.values()` + `Object.keys()` iterations
- Two passes over the same data to find a value and get its key

### Hoisted Dependencies Lookup
- For each package, calls `Object.keys(hoistedDeps).find(k =>
k.startsWith(...))`
- O(n) search performed m times = O(n*m) total

## Expected Behavior

### Single-pass Iteration

```
BEFORE: matchPropValue
┌─────────────────────────────────────────────────────────────┐
│  const index = Object.values(record).findIndex(v === key)   │
│  if (index > -1)                                            │
│    return Object.keys(record)[index]  ← Another iteration!  │
│                                                             │
│  = 2 iterations over the same data                          │
└─────────────────────────────────────────────────────────────┘

AFTER: Object.entries() single pass
┌─────────────────────────────────────────────────────────────┐
│  for (const [name, version] of Object.entries(record)) {    │
│    if (version === key) return name  ← Early exit           │
│  }                                                          │
│                                                             │
│  = 1 iteration with early exit on match                     │
└─────────────────────────────────────────────────────────────┘
```

### Pre-built Index for Hoisted Dependencies

```
BEFORE: O(n*m) Hoisted Lookup
┌─────────────────────────────────────────────────────────────┐
│  for each package (n packages):                             │
│    Object.keys(hoistedDeps).find(k => k.startsWith(...))    │
│    ← O(m) search where m = hoisted deps                     │
│                                                             │
│  Total: O(n * m)                                            │
│                                                             │
│  Example: 500 packages × 200 hoisted deps                   │
│         = 100,000 string comparisons                        │
└─────────────────────────────────────────────────────────────┘

AFTER: Pre-built Index Map O(n+m)
┌─────────────────────────────────────────────────────────────┐
│  Build hoistedKeysByPackage Map once:  O(m)                 │
│    Map<packageName, hoistedKey>                             │
│                                                             │
│  for each package (n packages):                             │
│    hoistedKeysByPackage.get(packageName)  O(1)              │
│                                                             │
│  Total: O(n + m)                                            │
│                                                             │
│  Example: 500 packages + 200 hoisted deps                   │
│         = 700 operations (vs 100,000)                       │
└─────────────────────────────────────────────────────────────┘
```

## Impact

For large pnpm monorepos:

| Metric | Before | After | Improvement |
|--------|--------|-------|-------------|
| matchPropValue iterations | 2 | 1 | 50% fewer iterations |
| Hoisted lookup complexity | O(n×m) | O(n+m) | ~100x for large repos |
| String comparisons | n×m | n+m | Dramatic reduction |

## Related Issue(s)

Contributes to #32669, #32254

## Merge Dependencies

This PR has no dependencies and can be merged independently.

**Must be merged BEFORE:** #33751

---
2025-12-10 10:20:49 +01:00
Khalil LAGRIDA 6feae2e1fb docs(misc): update github username (#32652)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

Co-authored-by: khalilou88 <32600911+khalilou88@users.noreply.github.com>
Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-10 07:31:57 +00:00
Joe Prisk bff97e01cb feat(rspack): add support for cssFilename config #32498 (#32506)
## Current Behavior
Passing cssFilename does not change the outputted css bundle

## Expected Behavior
Specifying cssFilename in the rspack.config will be honoured by
@nx/rspack

## Related Issue(s)
https://github.com/nrwl/nx/discussions/32498

Co-authored-by: Joe Prisk <joe.prisk@elmosoftware.com.au>
Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-10 08:18:34 +01:00
Jason Jean 029df7a649 chore(repo): migrate GitHub workflows to use mise for dev tools (#33772)
## Summary

Migrates GitHub workflows to use [mise](https://mise.jdx.dev/) for
managing development tool installations instead of individual setup
actions.

## Changes

- **mise.toml**: Added pnpm@10.11.1 to tool configuration
- **ci.yml**: Replaced pnpm, node, rust, and java setup actions with
`mise-action@v3` in both Linux and macOS jobs
- **e2e-matrix.yml**: Replaced all tool setup actions with mise-action
in preinstall and e2e jobs
- **publish.yml**: Replaced tool setup actions with mise-action in build
and publish jobs
- **codeql workflows**: Updated to use `mise-action@v3`

## Benefits

- **Single source of truth**: All tool versions defined in `mise.toml`
- **Faster CI setup**: Mise provides better caching than individual
actions
- **Consistency**: Same tool versions across local dev and CI
- **Easier maintenance**: Update versions in one place

## Test Plan

- [ ] CI workflow passes on Linux
- [ ] CI workflow passes on macOS
- [ ] E2E matrix builds successfully
- [ ] Publish workflow can run (test with dry-run if possible)
- [ ] CodeQL scans complete successfully

Fixes #ISSUE_NUMBER
2025-12-09 16:08:01 -05:00
Philip Fulcher 7342e603b3 docs(nx-dev): update 22.1 release article (#33773) 2025-12-09 14:03:48 -06:00
Colum Ferry 60920310c0 docs(vitest): add guide on testing without building deps (#33769)
## Current Behavior
We do not have a guide showing how to use Vitest with custom conditions

## Expected Behavior
Add a guide showing how to use Vitest with custom conditions
2025-12-09 16:16:25 +00:00
Jack Hsu 22c0f002fd docs(nx-dev): add search and filter controls to plugin registry (#33765)
The Plugin Registry page in astro-docs displays a static grid of plugins
without any search or filtering capabilities, making it hard to find
specific plugins.

Users can search plugins by name or description, and sort by release
date, npm downloads, GitHub stars, or Nx version compatibility.

<img width="975" height="1059" alt="image"
src="https://github.com/user-attachments/assets/a08e2a12-697e-4e3b-b9c0-2983d50fdad8"
/>


Closes DOC-343

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: jaysoo <jaysoo@users.noreply.github.com>
2025-12-09 11:00:06 -05:00
Kasper Christensen cb5510d277 fix(storybook): conditionally include node imports only for non-angular frameworks (#33728)
## Current Behavior
The fileURLToPath and dirname imports are only used in the
getAbsolutePath function, which is only generated for non-Angular
Storybook projects.

## Expected Behavior
This change prevents unnecessary imports from being added to Angular
Storybook configurations.
2025-12-09 11:00:44 +00:00
Adwait Athale 68783a9c78 fix(module-federation): normalize workspace protocol versions in requiredVersion (#33733)
## Current Behavior

When using pnpm with workspace protocol (`workspace:*`, `workspace:^`,
etc.), module federation sets `requiredVersion` to the raw protocol
string (e.g., `workspace:*`) instead of resolving it to the actual
semver version from the library's package.json.

This causes issues like:
- `requiredVersion: "workspace:*"` which is not a valid semver
- Module federation failing to properly share workspace libraries
- Warnings about unable to find required versions

Example of the broken output:
```json
{
  "version": "*",
  "singleton": true,
  "requiredVersion": "^*"
}
```

## Expected Behavior

When a workspace protocol version is detected, it should be resolved to
the actual version from the library's package.json:

```json
{
  "version": "2.0.0",
  "singleton": true,
  "requiredVersion": "2.0.0"
}
```

## Changes Made

1. **Added helper functions** in `share.ts`:
- `isWorkspaceProtocolVersion()` - Detects workspace protocol versions
(`workspace:*`, `workspace:^`, `*`, `file:`)
- `normalizeWorkspaceProtocolVersion()` - Resolves protocol versions to
actual semver by looking up the library's package.json

2. **Applied normalization in `shareWorkspaceLibraries()`**:
- After getting version from `getDependencyVersionFromPackageJson`,
normalize it if it's a workspace protocol
- Simplified the `workspaceLibrariesAsDeps` loop by using the helper
function (removed duplicated logic)

3. **Updated `getNpmPackageSharedConfig()`**:
- Added a check to warn and return undefined when workspace protocol
versions are passed
- Helps users understand that workspace libraries should be configured
properly

4. **Added comprehensive tests** (13 new tests):
- 6 tests for workspace protocol version normalization in
`shareWorkspaceLibraries`
- 7 tests for `getNpmPackageSharedConfig` handling workspace protocol
versions

## Related Issue(s)

Fixes #31397

## Merge Dependencies

This PR has no dependencies and can be merged independently.

**Must be merged BEFORE:** #33734

---
2025-12-09 10:23:34 +00:00
Jason Jean 52e2995917 chore(repo): update nx to 22.2.0-beta.4 (#33722)
Updating Nx from 22.2.0-beta.3 to 22.2.0-beta.4

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: FrozenPandaz <FrozenPandaz@users.noreply.github.com>
2025-12-08 17:07:27 -05:00
Adwait Athale 5d597ee55c fix(js): use Set for O(1) package.json root lookup (#33757)
## Current Behavior

In `buildExplicitPackageJsonDependencies`, for every file in the project
file map, we call `isPackageJsonAtProjectRoot` which uses
`Array.find()`:

```typescript
function isPackageJsonAtProjectRoot(nodes, fileName) {
  return (
    fileName.endsWith('package.json') &&
    nodes.find((projectNode) =>  // O(n) lookup per file!
      joinPathFragments(projectNode.root, 'package.json') === fileName
    )
  );
}
```

This is O(files × projects) complexity.

## Expected Behavior

Build a Set of valid package.json paths once, then use O(1) Set lookup:

```typescript
const projectPackageJsonPaths = new Set(
  Object.values(ctx.projects).map((project) =>
    joinPathFragments(project.root, 'package.json')
  )
);

// Later: O(1) lookup
if (projectPackageJsonPaths.has(f.file)) { ... }
```

## Performance Impact

```
Before (Array.find per file):       After (Set.has):
┌─────────────────────────┐         ┌─────────────────────────┐
│ For each file:          │         │ Build Set once:         │
│   nodes.find(...)       │         │   O(projects)           │
│   O(projects) per file  │         └───────────┬─────────────┘
└───────────┬─────────────┘                     │
            │                                   ▼
            ▼                         ┌─────────────────────────┐
┌─────────────────────────┐         │ For each file:          │
│ Total: O(files×projects)│         │   Set.has(f.file)       │
└─────────────────────────┘         │   O(1) per file         │
                                    └───────────┬─────────────┘
                                                │
                                                ▼
                                    ┌─────────────────────────┐
                                    │ Total: O(files+projects)│
                                    └─────────────────────────┘
```

**Example**: With 5,000 files and 200 projects:
- Before: 5,000 × 200 = 1,000,000 comparisons (worst case)
- After: 200 (build Set) + 5,000 (lookups) = 5,200 operations

## Additional Changes

- Replaced `forEach` with `for...in/of` loops
- Removed unused `isPackageJsonAtProjectRoot` function
- Removed unused `ProjectConfiguration` import
- Net reduction of 7 lines

## Why Accept This PR

1. **Significant complexity reduction**: O(n²) → O(n)
2. **Hot path**: Called during dependency graph construction for every
file
3. **Cleaner code**: Removed unused function, fewer lines

## Related Issue(s)

Contributes to #32265

## Merge Dependencies

This PR has no dependencies and can be merged independently.

---
2025-12-08 16:52:12 -05:00
Louie Weng e6a5a7ed84 fix(gradle): do not add gradle plugin to plugins block if using version catalogs (#33763)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
We would add the gradle project graph plugin to your build.gradle files
if we did not already detect it. However, this did mechanism did not
recognize aliases for the project graph plugin that came from version
catalogs.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

When adding the project graph plugin to build.gradle.kts, we check if a
version catalogue exists, and if it does we add the alias for the
project graph plugin.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-12-08 15:09:14 -05:00
Adwait Athale 300493ec0b fix(core): use Set for O(1) visited node lookup in hasPath (#33754)
## Current Behavior

The `hasPath` function in `graph.ts` uses an array with `indexOf()` for
tracking visited nodes during recursive graph traversal:

```typescript
function hasPath(graph, target, node, visited: string[]) {
  for (let d of graph.dependencies[node] || []) {
    if (visited.indexOf(d.target) > -1) continue;  // O(n) lookup
    visited.push(d.target);
    // recursive call...
  }
}
```

This results in O(n) lookups per node visited, making worst-case
traversal O(n²).

## Expected Behavior

Use `Set` for O(1) visited node tracking:

```typescript
function hasPath(graph, target, node, visited: Set<string>) {
  for (const d of graph.dependencies[node] || []) {
    if (visited.has(d.target)) continue;  // O(1) lookup
    visited.add(d.target);
    // recursive call...
  }
}
```

## Performance Impact

```
Before (Array + indexOf):              After (Set + has):
┌─────────────────────────┐           ┌─────────────────────────┐
│   hasPath() called      │           │   hasPath() called      │
└───────────┬─────────────┘           └───────────┬─────────────┘
            │                                     │
            ▼                                     ▼
┌─────────────────────────┐           ┌─────────────────────────┐
│ visited.indexOf(target) │           │  visited.has(target)    │
│      O(n) lookup        │           │      O(1) lookup        │
└───────────┬─────────────┘           └───────────┬─────────────┘
            │                                     │
            ▼                                     ▼
┌─────────────────────────┐           ┌─────────────────────────┐
│   visited.push(target)  │           │   visited.add(target)   │
│        O(1)             │           │        O(1)             │
└───────────┬─────────────┘           └───────────┬─────────────┘
            │                                     │
            ▼                                     ▼
    Complexity: O(n²)                     Complexity: O(n)
    for full traversal                    for full traversal
```

**Example with 500 nodes:**
- Before: 500 nodes × avg 250 indexOf lookups = ~125,000 comparisons
- After: 500 nodes × 1 Set lookup each = 500 operations

## Why Accept This PR

1. **Zero risk**: Same semantics, just faster data structure
2. **Standard pattern**: Set is the idiomatic choice for visited
tracking in graph algorithms
3. **Measurable impact**: Graph filtering with `--focus` flag will be
significantly faster on large monorepos
## Related Issue(s)

Contributes to #32265

## Merge Dependencies

This PR has no dependencies and can be merged independently.

---
2025-12-08 14:03:23 -05:00
Philip Fulcher c6b2a26156 docs(nx-dev): add december 2025 webinar (#33760) 2025-12-08 14:52:54 +00:00
Louie Weng 60d019e0c7 Revert "docs(nx-cloud): update resource usage minimum version to 22.2" (#33725)
Reverts nrwl/nx#33723
2025-12-05 19:18:48 +00:00
Philip Fulcher 6c2c50d84c docs(nx-dev): update youtube link in resource usage article (#33724) 2025-12-05 18:22:26 +00:00
Louie Weng f70a9c1cc7 docs(nx-cloud): update resource usage minimum version to 22.2 (#33723)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Correcting docs to mention that resource collection on Nx Cloud will be
availabe from 22.2 onwards.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-05 17:32:26 +00:00
Philip Fulcher 3cd1c73d3d docs(nx-dev): add resource usage article (#33721)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: philipjfulcher <philipjfulcher@users.noreply.github.com>
2025-12-05 10:31:43 -06:00
Colum Ferry 19e6404eb5 fix(release): ensure --preid flag considers stable tags for version determination (#33703)
When using `nx release version --preid=alpha`, the version determination
now correctly considers both prerelease tags AND stable release tags to
determine the "latest" version. Previously, it would only look at
prerelease tags matching the preid, ignoring stable releases that should
have become the new baseline.

For example, with tags: 1.1.0, 1.1.0-alpha.0, 1.1.0-alpha.1, 1.1.1
- Before: Would return 1.1.0-alpha.1 → bump to 1.1.0-alpha.2
- After: Returns 1.1.1 (stable >= preid base) → bump to 1.1.2-alpha.0

Fixes #33343
2025-12-05 12:28:01 +00:00
Colum Ferry f0252323f8 fix(misc): update output location of ai-migration files (#33696)
Place `ai-migration` files into `tools/ai-migrations`
2025-12-04 17:42:10 -05:00
Jason Jean 71bfd7eb7e feat(maven): update Maven plugin version to 0.0.11 (#33713)
## Current Behavior

The Maven plugin version is currently at 0.0.10 across all pom.xml files
in the repository.

## Expected Behavior

With this PR, the Maven plugin version will be updated to 0.0.11. This
includes:
- Updating the version in the root pom.xml
- Updating the version in packages/maven/maven-plugin/pom.xml
- Updating the mavenPluginVersion constant in
packages/maven/src/utils/versions.ts
- Adding a migration script to automatically update user pom.xml files
from 0.0.10 to 0.0.11

## Related Issue(s)

N/A - Version bump for the Maven plugin
2025-12-04 17:35:01 -05:00
Jack Hsu 2fdf5b278d chore(repo): add debug logging to hanging webpack e2e tests (#33712)
Webpack e2e tests occasionally hang in CI without clear indication of
where the test gets stuck.

Debug logs will help identify which step the test hangs at, making it
easier to diagnose and fix the root cause.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-04 17:02:17 -05:00
Louie Weng 0f45aaff8a chore(gradle): bump version to 0.1.10 (#33711)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Current gradle plugin version is at 0.1.9

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Take gradle plugin to 0.1.10

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-12-04 21:31:36 +00:00
Jason Jean 4627345d4e chore(repo): update nx to 22.2.0-beta.3 (#33706)
Updating Nx from 22.2.0-beta.2 to 22.2.0-beta.3
2025-12-04 20:43:21 +00:00
Jack Hsu e807320d74 docs(nx-dev): add global Cmd+K search shortcut for non-docs pages (#33709)
Pressing Cmd+K (or Ctrl+K) on non-docs pages does nothing. The Pagefind
search is only accessible when already on the documentation pages.

Pressing Cmd+K on any non-docs page redirects to the docs and
automatically opens the search modal with focus on the input field.


https://www.loom.com/share/72fcee74620640cab28639e9ad33d962


Closes DOC-314

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-04 14:57:23 -05:00
Jason Jean 0f24bf559d chore(repo): update ocean repo to use pnpm (#33707)
## Current Behavior

The `tools/update-repos/config/repos.json` configuration has the ocean
repository set to use `npm` as its package manager.

## Expected Behavior

The ocean repository should be configured to use `pnpm` as its package
manager, reflecting the actual package manager used by the repository.

## Related Issue(s)

N/A - Configuration update to reflect actual repository state.
2025-12-04 14:30:18 -05:00
Jack Hsu aba0eb280d fix(core): cnw sends correct selectedRepositoryName; prints instructions when user Ctrl+C (#33699)
This PR adds `SIGINT` handling when user kills the process via `Ctrl+C`
during CNW. This only prints when the workspace setup is complete, and
we also print the Cloud onboarding URL if it has been set up.

Also fixes an issue where `selectedRepositoryName` is never sent during
CNW.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-04 14:27:49 -05:00
Benjamin Cabanes ba2c982ae8 docs(nx-dev): add redirect for Self-Healing CI feature (#33708)
Add self-healing redirect.
2025-12-04 14:23:54 -05:00
MaxKless d2e85ba720 feat(gradle): add targetNamePrefix option to mark all gradle targets (#33685)
## Current Behavior
you can mark some targets generated by gradle by specifying options.

## Expected Behavior
you can apply a prefix to all targets generated by gradle. This is
useful for targetDefaults, for example.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Adds a Gradle option to prefix all generated Nx target names
(including dependencies and CI targets) with tests to avoid
double-prefixing.
> 
> - **Gradle project graph**:
> - Apply optional `targetNamePrefix` to all target names and dependency
rewrites in `createNodeForProject`, `processTargetsForProject`, and
`getDependsOnForTask`.
> - Wire prefix through plugin/task: read in
`NxProjectGraphReportPlugin`, expose on `NxProjectReportTask`, and pass
to processing functions.
> - Ensure CI targets (`ciTestTargetName`, `check-ci`, `build-ci`) are
correctly prefixed and not double-prefixed; update dependency
replacement logic accordingly.
>   - Add logging for prefix usage.
> - **Plugin options (TS)**:
> - Extend `GradlePluginOptions` with `targetNamePrefix` in
`packages/gradle/src/plugin/utils/gradle-plugin-options.ts`.
> - **E2E tests**:
> - Add tests validating prefixed targets exist and run, and that CI
test targets are not double-prefixed in `e2e/gradle/src/gradle.test.ts`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9a5160b8855a32d6c13c33c97379e7aa143a0737. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-12-04 13:57:41 -05:00
Philip Fulcher c5e9489f2f docs(nx-dev): add nx vs diy article (#33704) 2025-12-04 16:11:45 +00:00
Caleb Ukle 1a877efc98 docs(nx-cloud): update guide for ci resource usage (#33697) (#33701) 2025-12-04 08:13:06 -05:00
Berend de Boer 8352d40df5 fix(core): optimize bun lockfile parser (#33623)
Key optimisations:

1. Pre-computed PackageIndex - Built once during lockfile parsing:
   - byName: Map from package name → array of versions (O(1) lookup)
   - workspaceNames: Set of workspace package names (O(1) lookup)
   - workspacePaths: Set of workspace paths (O(1) lookup)
- packagesWithWorkspaceVariants: Set of packages with workspace-specific
variants (O(1) lookup)
   - patchedPackages: Set of patched package names (O(1) lookup)
2. findResolvedVersion: Changed from O(n) scan through all packages to
O(1) map lookup + O(k) where k = number of versions for that package
(typically 1-3)
3. isWorkspacePackage: Changed from O(n) scan to O(1) set lookup
4. hasWorkspaceSpecificVariant: Changed from O(n) scan to O(1) set
lookup
5. isNestedPackageKey: Now uses pre-computed workspace paths/names sets
instead of computing them each call

On my 40 project typescript monorepo my time goes from about 30 seconds
to 4.5s, a speed-up of 6-7x.

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-12-04 11:52:22 +01:00
Caleb Ukle 77692feae4 docs(nx-cloud): add guide for ci resource usage (#33697)
add info about how to use the Nx 22.1+ task metric gathering w/ Nx Cloud


https://deploy-preview-33697--nx-docs.netlify.app/docs/guides/nx-cloud/task-resource-usage

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: barbados-clemens <barbados-clemens@users.noreply.github.com>
2025-12-03 14:35:58 -06:00
Copilot 3ca68887de docs(nx-cloud): standardize terminology to "Access token" (#33334)
## Current Behavior

The Bitbucket integration documentation uses inconsistent terminology:
"App Password" for Bitbucket Cloud and "HTTP Access Tokens" for
Bitbucket Data Center.

## Expected Behavior

Documentation should use consistent "Access token" terminology across
both Bitbucket Cloud and Data Center sections.

## Changes

- Updated section headers to use "Acces token" terminology
- Replaced all instances of "app password" with "API token"
- Fixed plural "HTTP Access Tokens" → "HTTP Access Token"
- Updated image alt text for consistency
- Updated aside note title: "User linked access tokens" → "User linked
API tokens"

## Related Issue(s)

Fixes
https://linear.app/nxdev/issue/DOC-322/update-bitbucket-docs-to-use-api-tokens-terminology

> [!WARNING]
>
> <details>
> <summary>Firewall rules blocked me from connecting to one or more
addresses (expand for details)</summary>
>
> #### I tried to connect to the following addresses, but was blocked by
firewall rules:
>
> - `staging.nx.app`
>
> If you need me to access, download, or install something from one of
these locations, you can either:
>
> - Configure [Actions setup
steps](https://gh.io/copilot/actions-setup-steps) to set up my
environment, which run before the firewall is enabled
> - Add the appropriate URLs or hosts to the custom allowlist in this
repository's [Copilot coding agent
settings](https://github.com/nrwl/nx/settings/copilot/coding_agent)
(admins only)
>
> </details>

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> Issue Title: Update Bitbucket docs to use API tokens terminology
> Issue Description: Update the Nx Cloud Bitbucket source control
integration docs to reference API tokens instead of App Passwords.
Update the language on the docs page accordingly:
[bitbucket.mdoc](https://github.com/nrwl/nx/blob/master/astro-docs/src/content/docs/guides/Nx%20Cloud/Source%20Control%20Integration/bitbucket.mdoc)
> Fixes
https://linear.app/nxdev/issue/DOC-322/update-bitbucket-docs-to-use-api-tokens-terminology
> 
> 
> Comment by User 439b15a6-827b-4258-971a-d86133ad59de:
> [https://github.com/nrwl/nx](https://github.com/nrwl/nx)
> 
> Comment by User d484ef82-7f7d-4a95-be09-9d82ca3905dc:
> 📋 I wasn't able to determine which GitHub repository to work in.
> 
> I think it's one of these, but can you tell me which one is right?
> 
> Comment by User d484ef82-7f7d-4a95-be09-9d82ca3905dc:
> Waiting for https://linear.app/nxdev/profiles/caleb to link their
GitHub account. [Click to authorize
→](https://linear.business.githubcopilot.com/linear/auth)
> 
> Comment by User :
> Created issue
[DOC-322](https://linear.app/nxdev/issue/DOC-322/update-bitbucket-docs-to-use-api-tokens-terminology)
> 
> Comment by User 439b15a6-827b-4258-971a-d86133ad59de:
> This comment thread is synced to a corresponding [thread in
Slack](https://nrwl.slack.com/archives/C04ML056D99/p1762090527735769?thread_ts=1762090527.735769&cid=C04ML056D99).
All replies are displayed in both locations.
> 
> Comment by User :
> This thread is for an agent session with githubcopilot.
> 
> Comment by User 439b15a6-827b-4258-971a-d86133ad59de:
> @Linear make a docs issue to update the language for the bitbucket
source control integration to talk about api tokens instead of app
passwords.
> Assign it to copilot. 
> Here is the docs page in question 
>
[https://github.com/nrwl/nx/blob/master/astro-docs/src/content/docs/guides/Nx%20Cloud/Source%20Control%20Integration/bitbucket.mdoc](https://github.com/nrwl/nx/blob/master/astro-docs/src/content/docs/guides/Nx%20Cloud/Source%20Control%20Integration/bitbucket.mdoc)
> 
> 


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/nrwl/nx/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Caleb Ukle <caleb@nrwl.io>
2025-12-03 20:29:17 +00:00
Jack Hsu 2e442d56b4 feat(core): add template support to create-nx-workspace (#33468)
This PR simplifies the CNW process so we only prompt for a starter (TS,
NPM Packages, React, Angular) and we clone a full example to showcase Nx
monorepo for the given starter. This speeds up CNW drastically and
allows users to get the workspace in 5-10 seconds vs 1-3 minutes.

Users can choose `Custom` to fall back to the previous prompts, which
will ask framework, unit test runner, e2e runner, etc.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-03 13:12:55 -05:00
Colum Ferry 7792d80258 fix(core): sanitize project names for valid git tag names in nx release (#33692)
Gradle multi-module projects have project names with colons (e.g.,
`:common:iam-client`)
which are invalid in git tag names. This adds a
`sanitizeProjectNameForGitTag()` function
that replaces colons with slashes and other invalid git ref characters
with hyphens.

The sanitization is applied when:
- Creating git tags in `createGitTagValues()`
- Creating the `ReleaseVersion` class gitTag property
- Matching existing tags in `getLatestGitTagForPattern()`

Fixes #33262
2025-12-03 16:32:18 +00:00
Colum Ferry e6eed35426 feat(expo): support Expo 54 (#33612)
## Current Behavior
We only support Expo 53

## Expected Behavior
Add support for Expo 54
Allow existing workspaces wishing to remain on Expo 53 to continue to be
supported
Add migrations allowing LLMs to handle migrating from Expo 53 to Expo 54


## Related Issue(s)

Closes NXC-3526

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-12-03 10:37:24 -05:00
Colum Ferry 5895c9acf6 fix(angular-rspack): ensure rebuild logs are only printed once (#33694)
## Current Behavior
Rebuild logs during serve of Angular Rspack applications are logged an
exponential number of times with each change.

## Expected Behavior
Log only once
2025-12-03 15:26:48 +00:00
Colum Ferry 2ee5d69ca3 fix(react): update @emotion/styled to latest version #31252 (#33690)
## Current Behavior
We currently install an outdated version of `@emotion/styled` that
causes Typecheck issues.

## Expected Behavior
Use latest version of Emotion

## Related Issue(s)

Fixes #31252
2025-12-03 13:48:57 +00:00
Colum Ferry b740baf57a fix(angular-rspack): use CJS when serving applications for HMR #33106 (#33693)
## Current Behavior
Angular Rspack outputs ESM for build and serve. However, with serve, it
causes issue for HMR.

## Expected Behavior
Use CJS for serve to allow HMR to work correctly

## Related Issue(s)

Fixes #33106
2025-12-03 13:31:22 +00:00
Jack Hsu b314dd187b chore(testing): add jest migration example (#33687)
This  adds the missing example for the new `jest.config.cts` migration.
2025-12-02 18:29:21 -05:00
Colum Ferry 30acb10c89 feat(vitest): make initial generation for JS projects more lightweight (#33670)
## Expected Behavior
Generate only `vitest.config.mts` file when not bundling with Vite
Use `vite.config` file if it exists already
Add `testMode` option to the `@nx/vitest` Inference Plugin to allow
easier switching between `vitest` and `vitest run`.

## Related Issue(s)

Fixes NXC-3334
2025-12-02 16:29:13 +00:00
MaxKless adc6d0757e fix(core): stop adding outdated vscode/cursor rule files to gitignore (#33680)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Removes legacy additions of `.cursor/rules/nx-rules.mdc` and
`.github/instructions/nx.instructions.md` to `.gitignore` across code,
templates, and migrations.
> 
> - **.gitignore behavior**:
> - Remove logic in
`packages/nx/src/command-line/init/implementation/utils.ts` that
appended `.cursor/rules/nx-rules.mdc` and
`.github/instructions/nx.instructions.md`.
>   - Clean up root `.gitignore` to exclude those entries.
> - Update new workspace templates
(`packages/workspace/.../__dot__gitignore`) to omit those entries.
> - **Migrations**:
> - Remove migration `21-1-0-add-ignore-entries-for-nx-rule-files` from
`packages/nx/migrations.json` and delete its implementation and spec.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7863fa5beee127777f819a5155ae17239c5b16cd. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-12-02 11:18:46 -05:00
Colum Ferry 804d4c2e0c feat(vitest): update @analogjs/vitest-angular to 2.1.2 #33602 (#33681)
## Current Behavior
Trying to create a new workspace is failing on npm peer dep conflicts
when trying to use Vitest with Angular.
The version of `@analogjs/vitest-angular` only supports Vitest <4.

## Expected Behavior
Update to latest version of `@analogjs/vitest-angular` to support Vitest
4

## Related Issue(s)

Fixes #33602
2025-12-02 15:45:21 +00:00
Colum Ferry 5f8540488b fix(bundling): set buildLibsFromSource in normalize options for Rollup (#33679)
## Current Behavior
`buildLibsFromSource` defaults to true only in the `@nx/rollup:rollup`
executor.
In the normalize options helper for the executor, it is not handled at
all. Programmatic usage would therefore result in `undefined`.

For pure Inference Plugin usage, `buildLibsFromSource` is also not
handled in normalize options.
Therefore, it always defaults to `undefined`.

## Expected Behavior
To reduce breaking changes, force `buildLibsFromSource` to be false for
Inference Plugin usage.
Explicitly set it in executor's normalize options helper to true to
match the schema default.

## Related Issue(s)

Fixes NXC-3537
2025-12-02 14:03:52 +00:00
Jonathan Gelin 4923c15e7e fix(release): interpolate releaseGroupName in getLatestGitTagForPattern (#33674)
# Fix: Pass releaseGroupName to getLatestGitTagForPattern for proper tag
resolution

## Problem

When using `releaseTag.pattern: "{releaseGroupName}@{version}"`, Nx
fails to resolve versions from git tags because the `{releaseGroupName}`
placeholder is not interpolated.

For example, with git tag `my-group@2.9.0`:
- **Expected**: Extract version `2.9.0`
- **Actual**: Extracts `"my-group"` → Error: `Invalid semver version
'my-group' provided`

## Root Cause

In `release-graph.ts:627-631`, only `projectName` is passed to
`getLatestGitTagForPattern()`, missing `releaseGroupName` needed for
interpolation.

## Solution

Pass `releaseGroupName` to the interpolation data (1-line change at
`release-graph.ts:631`):

```typescript
latestMatchingGitTag = await getLatestGitTagForPattern(
  releaseTagPattern,
  {
    projectName: projectGraphNode.name,
    releaseGroupName: releaseGroupNode.group.name, //  Added
  },
  { ... }
);
```

## Backward Compatibility

 Fully backward compatible:
- `releaseGroupNode.group.name` is always defined (user-defined or
`"__default__"`)
- Unused interpolation data is safely ignored
- Existing patterns (`v{version}`, `{projectName}@{version}`) continue
to work

## Tests

Added test case in `git.spec.ts` for `{releaseGroupName}@{version}`
pattern that verifies correct tag matching and version extraction.

## Files Changed

- `packages/nx/src/command-line/release/utils/release-graph.ts` (1 line)
- `packages/nx/src/command-line/release/utils/git.spec.ts` (1 test case)

Co-authored-by: James Henry <james@henry.sc>
2025-12-02 10:23:26 +00:00
Jonathan Gelin 8207c94617 feat(docker): auto-select version scheme when only one is available (#33671) 2025-12-02 11:27:40 +04:00
Jonathan Gelin a4c13212ab fix(docker): fix releasing non docker projects (#33667) 2025-12-02 11:26:11 +04:00
Jason Jean 02c01e5daf fix(repo): enable wayland-data-control feature for arboard (#33675)
## Current Behavior

The arboard crate is used without the `wayland-data-control` feature,
which means clipboard operations may not work properly on Wayland-based
Linux systems.

## Expected Behavior

With the `wayland-data-control` feature enabled, arboard can interact
with the clipboard on Wayland systems using the wlr-data-control
protocol.

## Related Issue(s)

N/A - Enhancement for better Wayland support
2025-12-01 21:57:22 -05:00
Jason Jean a5015d3992 chore(repo): update nx to 22.2.0-beta.2 (#33676)
Updating Nx from 22.2.0-beta.1 to 22.2.0-beta.2
2025-12-01 21:57:06 -05:00
Jason Jean c888ac72c6 fix(maven): remove incorrect threadSafe to parallelism mapping (#33678)
## Current Behavior

The Maven plugin incorrectly maps Maven's `isThreadSafe` mojo property
to Nx's `parallelism` target property. Maven's `isThreadSafe` indicates
whether a mojo can safely run in parallel with other mojos of the same
type within the same Maven build (multi-threaded Maven builds).

## Expected Behavior

Nx's `parallelism` controls whether the target can run in parallel
alongside anything else - a fundamentally different concept. All Maven
targets now default to `parallelism: true`, letting Nx handle
parallelism based on its own task graph analysis rather than using
Maven's unrelated thread-safety concept.

## Related Issue(s)

N/A - Internal cleanup based on code review feedback.
2025-12-01 16:58:24 -05:00
Jack Hsu 731aba377a fix(testing): remove --no-experimental-strip-types flag from @nx/jest/plugin + migrate to jest.config.cts if needed (#33657)
## Current Behavior
On Node.js v24+, the `@nx/jest/plugin` sets
`--no-experimental-strip-types` in NODE_OPTIONS which causes an error:
"node: --no-experimental-strip-types is not allowed in NODE_OPTIONS".

Additionally, `jest.config.ts` files using ESM syntax (`export default`,
`import`) fail to load correctly under Node.js type-stripping when the
project is configured for CommonJS.

## Expected Behavior
- Remove the NODE_OPTIONS manipulation that adds
`--no-experimental-strip-types`
- Add a migration (22.2.0-beta.2) that converts `jest.config.ts` files
from ESM to CJS syntax for projects using `@nx/jest/plugin`
- The migration only runs when `@nx/jest/plugin` is registered in
`nx.json`
- Projects with `type: module` are warned as they're incompatible with
the plugin
- Files using ESM-only features (import.meta, top-level await) are
skipped with a warning for manual conversion

## Demo

https://www.loom.com/share/8a157a0b01d144ae8d6ae48b9b0cd0e4


## Related Issue(s)
Closes NXC-3541

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-01 09:43:26 -05:00
Colum Ferry 8ff2768aaa feat(vite): add migration to add @nx/vitest (#33669)
## Current Behavior
We don't have a migration to migrate users to use the new @nx/vitest
package if they're currently using @nx/vite
Given that we have Vitest-related operations marked as deprecated when
used via @nx/vite, we should have a migration.

## Expected Behavior
Add a migration that:
1. Installs @nx/vitest
2. Switches @nx/vite:test executor usage to use @nx/vitest:test executor
usage
3. Splits `@nx/vite/plugin` in nx.json that sets up vitest test targets
to use `@nx/vitest` instead
2025-12-01 13:37:24 +00:00
Colum Ferry 637daf5343 fix(vite): vitest executor to return the async iterable #33588 (#33668)
## Current Behavior
The `@nx/vite:test` executor is not returning the async iterable. This
causes a destructuring issue.

## Expected Behavior
Ensure the `@nx/vite:test` executor returns the async iterable.

## Related Issue(s)

Fixes #33588
2025-12-01 10:33:58 +00:00
Jason Jean 6df1d8891a chore(repo): update nx to 22.2.0-beta.1 (#33650)
Updating Nx from 22.2.0-beta.0 to 22.2.0-beta.1

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-28 16:53:05 -05:00
Jack Hsu ba5b78e910 chore(repo): disable docker from macos nightlies since it does not work without vm-in-vm (#33659)
Disable but add a comment that we could enable it on macos intel if we
need to. For now it's covered by linux.
2025-11-28 15:06:27 -05:00
Jack Hsu f8f05b4086 fix(linter): update generators to use ESLint v9 compatible versions (#33633)
This PR updates the `workspace-rule` generator so use ESLint v9 by
default. It currently forces the unsupported ESLint v8.

In theory this is only useful if not using workspaces and you need
tsconfig paths to be mapped and resolved correctly. For workspaces, you
can easily just generate any library to be used to contain custom rules.

Closes NXC-3500

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-28 11:00:11 -05:00
Jack Hsu 7ff4f19529 docs(misc): update blog post links to new enterprise paths (#33654)
## Current Behavior
Blog posts contain broken links pointing to old `/powerpack` and
`/docs/enterprise/powerpack/*` paths that no longer exist.

## Expected Behavior
Links should point to the new enterprise documentation paths:
- `/powerpack` → `/enterprise`
- `/docs/enterprise/powerpack/*` → `/docs/enterprise/*`
- `/docs/reference/powerpack/*` → `/docs/reference/*`

## Related Issue(s)
Closes DOC-354

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-28 10:43:33 -05:00
James Henry f161603d37 fix(core): nx-schema default value for preserveMatchingDependencyRanges should have changed in v22 (#33587)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
2025-11-28 15:42:18 +00:00
Jason Jean 191e492c05 fix(core): ensure perf logs are flushed before exit in graph command (#33621)
## Current Behavior

When running `NX_PERF_LOGGING=true nx graph --file graph.json`, many
performance logs are missing (e.g., `create-project-graph-async`,
`retrieve-project-configurations`).
  Only plugin-specific logs like `createDependencies` appear.

  ## Expected Behavior

All performance timing logs should appear, matching the output of
`NX_PERF_LOGGING=true nx show projects`.

  ## Related Issue(s)

  N/A - Internal improvement for debugging/profiling.

  ## Solution

The `graph.ts` file had `process.exit(0)` calls that terminated the
process immediately, not giving the async `PerformanceObserver` callback
time to fire.

Added `await new Promise((res) => setImmediate(res))` before
`process.exit(0)` to give the event loop one tick to process pending
callbacks. This follows the existing
  pattern in `show/projects.ts` and `show/project.ts`.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-28 15:28:08 +00:00
Jason Jean 9ffe2fd715 fix(core): prevent Nx Console prompt from blocking non-interactive commands (#33646)
## Current Behavior

The Nx Console installation prompt blocks commands when run in
non-interactive contexts such as:
- CI environments
- AI agents
- Piped commands

The prompt only checked `process.stdout.isTTY` but not
`process.stdin.isTTY`, causing it to wait indefinitely for input that
would never arrive.

## Expected Behavior

Commands should complete without prompting when run in non-interactive
environments.

## Related Issue(s)

Fixes #33552

## Solution

Updated the check to verify:
1. Both `stdin` and `stdout` are TTY (truly interactive terminal)
2. Not running in a CI environment (using existing `isCI()` utility)

This ensures the prompt only appears when the user can actually provide
input.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-28 09:53:46 -05:00
Jason Jean 3ca0e475ab fix(core): suppress git stderr output in parseGitOutput (#33645)
## Current Behavior

Since Nx 21.6.1, running `nx graph` or other commands that calculate
affected projects prints git errors to stderr when the default branch is
not fetched:

```
fatal: ambiguous argument 'main': unknown revision or path not in the working tree.
```

This causes CI pipelines with strict stderr checking to fail, even
though the nx commands succeed.

## Expected Behavior

Git error messages should not be printed to stderr. The errors are
already caught and handled gracefully - they just shouldn't be visible
to the user.

## Related Issue(s)

Fixes #33330

## Solution

Added `stdio: 'pipe'` to the `execSync` call in `parseGitOutput()`. This
suppresses stderr output while still allowing the command to throw on
failure (which is already caught by the try-catch in `graph.ts`).

This matches the pattern used in `getMergeBase()` which already uses
`stdio: 'pipe'`.
2025-11-28 14:52:46 +00:00
Jason Jean 2c1bfa30b1 fix(core): include create-nx-workspace in migration package group (#33643)
## Current Behavior

When running `nx migrate latest`, the `create-nx-workspace` package is
not updated along with other Nx packages, even though it's a core part
of the Nx ecosystem that users may have as a dependency (especially when
extending the install package pattern).

## Expected Behavior

The `create-nx-workspace` package should be updated to the same version
as `nx` and other `@nx/*` packages when running migrations.

## Related Issue(s)

Fixes #33585

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-28 14:46:13 +00:00
Jason Jean 2cfb746272 fix(nuxt): update preset test for v4 app directory structure (#33648)
## Current Behavior

The nuxt preset test was checking for `apps/${name}/src/app.vue`, but
since the generator now defaults to Nuxt v4 which uses the app directory
structure, this file is no longer created at that path.

## Expected Behavior

Tests should pass on master.

## Solution

Updated the test to check for `apps/${name}/app/app.vue` which is the
correct path for Nuxt v4's app directory structure.
2025-11-28 12:19:04 +04:00
Jack Hsu 363457c2a8 fix(nuxt): do not import base eslint config for root project (#33642)
If you generate a standalone/root project then there's no
`eslint.config.mjs` to import from base.

<img width="1269" height="355" alt="image"
src="https://github.com/user-attachments/assets/b9658f08-48ff-48e7-bab8-fcd7ff5c349a"
/>
2025-11-27 14:52:19 -05:00
Jack Hsu 49fc6d54ff chore(misc): fix e2e tests for CNW + Nuxt 2025-11-27 14:01:20 -05:00
Caleb Ukle 5071217c30 docs(nx-dev): powerpack docs cleanup/deprecations (#33635)
closes: DOC-338

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-11-27 12:10:47 -05:00
Leosvel Pérez Espinosa 21783402b7 fix(core): kill child process tree in different running tasks (#33636)
## Current Behavior

When Nx commands finish or receive termination signals (SIGINT, SIGTERM,
SIGHUP), child processes spawned by continuous tasks (such as `nx
serve`) can remain orphaned in certain scenarios. This happens because
only the direct child process is killed using `childProcess.kill()`,
leaving grandchild processes running.

## Expected Behavior

When Nx terminates, all processes in the spawned process tree should be
properly terminated and no orphaned processes should remain.

## Related Issue(s)

Fixes #32438
Fixes #33460 

## Changes

- Updated signal handlers in `RunningNodeProcess` to use `this.kill()`
instead of `this.childProcess.kill()`, leveraging the existing
`tree-kill` implementation
- Added `tree-kill` to `NodeChildProcessWithNonDirectOutput` and
`NodeChildProcessWithDirectOutput` kill methods to ensure entire process
trees are terminated
2025-11-27 11:53:47 -05:00
Jack Hsu c08e83c73d chore(repo): remove hack that enables legacy peer deps so we can catch errors (#33634)
We missed a peer dep error in the Nuxt 4 PR since CI allowed install to
go through, but in a real repo it would have failed.

We _may_ need to still have the `prefer-frozen-lockfile=false` option,
but let's let CI run with this first.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-27 09:57:55 -05:00
Benjamin Cabanes 9fecf1416a docs(nx-dev): rename "Nx Enterprise" to "Enterprise" (#33641)
Rename "Nx Enterprise" to "Enterprise" across UI Header components.
2025-11-27 09:54:19 -05:00
Colum Ferry a0581d717f feat(nuxt): support nuxt v4 (#33611)
## Current Behavior
We currently do not support Nuxt 4. We still generate Nuxt 3.

## Expected Behavior
Support Nuxt 4.
New workspaces will get Nuxt 4.
Existing Workspaces that use Nuxt 3 intentionally will continue to use
Nuxt 3.
Add a migration to update users to Nuxt 4
Handle ESLint flat config

## Related Issue(s)

Closes NXC-3525
Closes NXC-3497

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-11-27 09:17:29 -05:00
Colum Ferry f87e20fe75 fix(linter): base eslint config should ignore out-tsc directories (#33639)
## Current Behavior
The base `eslint` config will ignore `**/dist` but not `**/out-tsc`.
This can cause issues if lint is run after a `typecheck` which has
placed `.d.ts` files into an `out-tsc` directory.

## Expected Behavior
Base eslint config should ignore `**/out-tsc`

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-11-27 13:50:15 +00:00
Colum Ferry 25b8550adc feat(storybook): support storybook 10.1 (#33637)
## Current Behavior
Storybook support is not explicitly set to 10.1 which has just been
released.

## Expected Behavior
Explicitly set storybook version to 10.1 to ensure support for Angular
21

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-11-27 13:13:26 +00:00
Jack Hsu 3558a4cdfe docs(testing): update atomizer documentation for Vite and Vitest plugins (#33620)
## Current Behavior

The atomizer/task splitting documentation for Vite and Vitest was
incomplete:
- The @nx/vite/plugin introduction page was missing the dual
configuration example for both E2E and unit tests
- The @nx/vitest introduction page was missing all atomizer-related
sections (splitting E2E tests, ciTargetName, ciGroupName)
- The split-e2e-tasks feature page only referenced @nx/vite for Vitest,
not the dedicated @nx/vitest plugin
- The @nx/vitest docs had incorrect option name (targetName instead of
testTargetName)

## Expected Behavior

- @nx/vitest introduction page now have complete atomizer documentation
- The split-e2e-tasks page now references both @nx/vitest and @nx/vite
options for Vitest users
- Configuration examples use the correct option names matching the
actual plugin interfaces
- Users can easily find how to configure task splitting for Vitest
whether they use @nx/vite or @nx/vitest
---

Affected pages:
-
https://deploy-preview-33620--nx-docs.netlify.app/docs/features/ci-features/split-e2e-tasks#update-an-existing-project-to-use-automated-task-splitting
-
https://deploy-preview-33620--nx-docs.netlify.app/docs/technologies/build-tools/vite/introduction
-
https://deploy-preview-33620--nx-docs.netlify.app/docs/technologies/test-tools/vitest/introduction

Closes DOC-346

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-26 09:49:56 -05:00
Jack Hsu e3a4233cfe chore(repo): add Node 24 to e2e nightly matrix (#33542)
- E2E nightly tests only run on Node 20 and 22.
- E2E nightly tests now also run on Node 24, 22, and 20 for linux. For
Windows and Mac run only 24.

Did a test run from this branch, and Node 24 passes where other versions
pass, and fails where other versions fail. It shouldn't make any golden
tests fail just due to Node 24, but it's possible that things will flake
more since the matrix has expanded. We just have to make them more
robust.

<img width="920" height="1089" alt="image"
src="https://github.com/user-attachments/assets/90ee4d04-68d5-4d0d-9729-60cacfbc99db"
/>


Close NXC-3491
2025-11-26 09:43:08 -05:00
Colum Ferry 1ecbd8082c fix(nextjs): make migration to next 16 optional (#33627)
## Current Behavior
The Next 16 AI Migration Instructions are always created, regardless of
existing Next version

## Expected Behavior
Make the Next 16 Migration optional

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-11-26 14:22:46 +00:00
Jack Hsu b6958b3e88 docs(linter): add custom workspace eslint rules guide (#33618)
There is no documentation on how to create and use custom ESLint rules
in Nx workspaces.

Users can follow a guide to create custom ESLint rules using either:
1. Package Manager Workspaces (npm/yarn/pnpm/bun) - create a dedicated
ESLint plugin package that's symlinked via the package manager
2. `loadWorkspaceRules` utility from `@nx/eslint-plugin` - load rules
from any directory with automatic TypeScript transpilation

The guide includes:
- Comparison table for choosing the right approach
- Step-by-step instructions for both approaches
- TypeScript execution options (build first, Node.js native support,
tsx)
- Rule testing with `@typescript-eslint/rule-tester`
- Best practices and troubleshooting tips

Page:
https://deploy-preview-33618--nx-docs.netlify.app/docs/technologies/eslint/guides/custom-workspace-rules

Closes DOC-339

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: jaysoo <jaysoo@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-11-26 09:20:25 -05:00
Colum Ferry 00e4c0c69a feat(vite): add vitest 4 migration for users using @nx/vite (#33630)
## Current Behavior
Despite @nx/vite depending on @nx/vitest it only does so in the same
version that introduces the migration for Vitest 4.
This means the user does not get any migrations for Vitest 4

## Expected Behavior
Add the Vitest 4 migrations to the @nx/vite package to allow users to
migrate.
2025-11-26 14:05:19 +00:00
Jack Hsu 017ad93d35 fix(bundling): replace rollup-plugin-copy with nx copy assets plugin (#33601)
There's a problem when `@nx/rollup` is installed with yarn@1.22, and
typechecks.

This is caused by the transitive dependency chain:

```
rollup-plugin-copy@3.5.0 -> globby@10.0.1 -> @types/glob@7.2.0 -> @types/minimatch
```

When users run tsc without explicit `types` configuration, TypeScript
auto-discovers `@types/minimatch` from `node_modules` but can't properly
resolve it.

Note: This doesn't happen with NPM and PNPM, nor newer yarn versions.

Verified fix with this repro: https://github.com/jaysoo/rollup-251124

Fixes #32398

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: jaysoo <jaysoo@users.noreply.github.com>
2025-11-26 08:55:46 -05:00
Philip Fulcher 081bec53cf docs(nx-dev): add 22.1 article and changlog (#33617)
https://nx-dev-git-philip-nx22-1-article-nrwl.vercel.app/blog/nx-22-1-release
2025-11-25 18:42:57 -05:00
Jack Hsu 67059ccf10 docs(storybook): update Storybook docs for version 10 (#33619)
## Current Behavior
- Storybook generator docs banner says "Nx uses Storybook 7"
- Separate storybook-9-setup.mdoc page exists
- No documentation for migrate-10 generator

## Expected Behavior
- Update banner to "Nx uses Storybook 10"
- Consolidate storybook-9-setup into upgrading-storybook guide
- Add migrate-10-generator-examples.md with AI-assisted migration docs
- Update all references to point to new consolidated guide

---

Main content is here:
https://deploy-preview-33619--nx-docs.netlify.app/docs/technologies/test-tools/storybook/guides/upgrading-storybook

Need to follow-up on the sidebar ordering as it doesn't seem to take it
into account for technologies section.

Fixes DOC-347
2025-11-25 18:42:05 -05:00
Colum Ferry 098d3ed9c9 fix(storybook): remove upper bound of migration requires (#33613)
## Current Behavior
The upper bound of the requires is too restrictive and causing issues

## Expected Behavior
Remove the upper bound
2025-11-25 18:41:10 -05:00
Jason Jean 9eb254c964 chore(repo): update nx to 22.2.0-beta.0 (#33614)
Updating Nx from 22.1.0-rc.5 to 22.2.0-beta.0

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-25 17:11:12 -05:00
Leosvel Pérez Espinosa 7e00ec431f fix(core): propagate continuous task failures to dependent tasks (#33492)
## Current Behavior

When a continuous task depends on another continuous task and the
dependent task exits with an error, the parent task continues running
indefinitely. The task execution never terminates, leaving processes
running in the background.

For example, if task `a` (continuous) depends on task `b` (continuous),
and task `b` exits with error code 1, task `a` will continue running
even though its dependency failed.

## Expected Behavior

When a continuous task exits (with any exit code), the failure should be
propagated to dependent tasks:

1. The failed continuous task should be marked as failed
2. Dependent continuous tasks should be marked as skipped
3. All affected continuous tasks should be killed
4. Task execution should terminate with an error

---

## Changes Made

### 1. Restore Error Handling in Continuous Task Exit Handlers

- Re-added the `cleaningUp` flag that was removed in a previous
TUI-related commit
- Modified `onExit` handlers for both regular and shared continuous
tasks to:
  - Check if the task exited during normal cleanup vs. unexpectedly
  - Call `complete()` with 'failure' status for unexpected exits
  - Log error messages for debugging

### 2. Fix `cleanUpUnneededContinuousTasks()` Logic

The previous implementation always added `initializingTaskIds` to the
needed set, even when those tasks were already completed. This prevented
dependency tasks from being killed when the top-level task exited.

Fixed by:

- Only adding tasks from `initializingTaskIds` if they are still
incomplete
- Keeping dependencies of incomplete tasks alive
- This ensures continuous tasks are killed when no longer needed,
whether a dependency fails or a top-level task exits

### 3. Prevent Status Overwrites

Added a check in `onExit` handlers to only set status to `Stopped` if
the task hasn't already been completed. This prevents the async `onExit`
callback from overwriting the correct status (like 'skipped' or
'failure') with 'Stopped'.

### 4. Fix Signal Handling in `PseudoTtyProcess.kill()`

The Rust pseudo-terminal defaults to SIGINT when no signal is provided,
which does not reliably terminate child processes in PTY sessions.

Fixed by:

- Defaulting to SIGTERM in the JavaScript wrapper (rather than changing
the Rust default)
- The JS wrapper is the API boundary that should match Node.js
semantics, where `childProcess.kill(undefined)` defaults to SIGTERM
- The Rust default of SIGINT is appropriate for interactive use
(Ctrl-C), while programmatic cleanup needs SIGTERM
- This ensures child processes are properly killed when
`runningTask.kill()` is called

**File:** `packages/nx/src/tasks-runner/pseudo-terminal.ts`

## Technical Details

The fix leverages the existing task failure propagation mechanism in
`complete()` instead of using `process.exit(1)`, which:

- Allows proper cleanup through normal execution flow
- Respects the `--bail` flag configuration
- Works correctly with both TUI and non-TUI modes
- Maintains consistency with how other task failures are handled
2025-11-25 09:49:11 -05:00
MaxKless 80322f921f fix(core): use nx-mcp for older nx versions instead of nx mcp (#33553)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Older versions don't support the `nx mcp` command yet - but they CAN use
the `nx-mcp` package via npx

## Expected Behavior
We generatee the proper command into their MCP config by matching on
their version

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-25 09:47:20 -05:00
Jason Jean 71470480bb feat(core): add multiple Nx version detection to nx report (#33599)
## Current Behavior

When multiple versions of the `nx` package are installed in a workspace
(e.g., due to a third-party package incorrectly depending on nx), users
have no visibility into
  this issue through `nx report`.

  ## Expected Behavior

The `nx report` command now detects when other packages depend on a
different version of nx than the workspace version and reports this
clearly:

  ⚠️ Multiple Nx versions detected

Your workspace uses nx@20.0.0, but other packages depend on a different
version:
  - some-package → @scope/tool → nx@19.0.0

These packages should not have nx as a dependency. Please report this
issue to the package maintainers.
  Run pnpm why nx@19.0.0 for more details.

This helps users identify and report problematic packages that bundle
their own version of nx.

  ## Related Issue(s)

N/A - This is a proactive improvement to help users diagnose workspace
issues.
2025-11-25 09:41:53 -05:00
MaxKless 7e51d85b1b cleanup(gradle): fix nightly e2e test where verbose was being called (#33610)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
nightly tests fail on gradle because of gradle parsing

## Expected Behavior
nightly tests should pass
2025-11-25 09:35:30 -05:00
Colum Ferry 1eea5edb50 feat(nextjs): add migration to add AI instructions for upgrading to Next 16 (#33608)
## Current Behavior
We do not generate AI Instructions to aid with upgrading from Next 15 to
Next 16

## Expected Behavior
Add a migration generator to create a file containing instructions for
an LLM to upgrade Next 15 to Next 16

## Related Issue(s)

Closes NXC-3418

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-11-25 13:33:03 +00:00
Colum Ferry cac7f6c3e8 fix(node): set generatePackageJson:false for TS Solution workspaces (#33606)
## Current Behavior
In TS Solution setups, we generate webpack config with
`generatePackageJson: true`. This is confusing and unneeded.
It should be set to false in TS Solution repos.

## Expected Behavior
Set `generatePackageJson: false` in webpack config for TS Solution
Setups


Closes NXC-3521
2025-11-25 08:13:22 -05:00
Kasper Christensen 3c5e40be68 fix(nest): set moduleResolution to node to prevent TS5095 error (#33607)
When generating NestJS applications in Angular workspaces, the base
tsconfig sets moduleResolution to 'bundler' which causes TS5095 errors
because 'bundler' requires module to be 'preserve' or 'es2015+'.

NestJS applications should use Node.js module resolution instead. This
fix sets moduleResolution to 'node' for NestJS applications (except when
using TS solution setup, which uses 'nodenext').

Fixes #33589
2025-11-25 12:23:25 +00:00
Colum Ferry 6c2b3ee37d fix(release): ensure emoji is not repeated in breaking changes summary (#33605)
## Current Behavior
The ⚠️ emoji at the beginning of bc commits is duplicated in the bc
section of the changelog.
This is unneeded.

## Expected Behavior
Ensure the ⚠️ is not repeated in the bc section of the changelog

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-11-25 11:14:48 +00:00
Chau Tran d70c888a93 fix(graph): surface task graph client error via error toast (#33600)
Close NXC-3516

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-25 09:12:40 +01:00
Jason Jean f31bef701a fix(core): make daemon socket path unique per process to prevent race condition (#33580)
## Current Behavior

1. **Socket Race Condition**: All daemon servers listen on the same
socket path, causing a race condition where shutting down daemons remove
sockets that newly started
  daemons are listening on.

2. **Daemon Console Check Blocks**: The daemon availability check runs
synchronously and blocks the main thread.

3. **Version Mismatch Issues**: Packages using a different nx version
than what's installed in the workspace could still use the daemon,
leading to potential issues.

  ## Expected Behavior

1. Each daemon server creates a unique socket path based on its process
ID, preventing race conditions.

  2. The daemon console check runs in the background without blocking.

3. The daemon is disabled when there's a version mismatch between the
running nx and the workspace's installed version.

  ## Changes

  ### 1. Unique Daemon Socket Paths
- Include `process.pid` in the socket directory hash to make each
daemon's path unique
- Store the socket path in `server-process.json` so clients know where
to connect
  - Clients read the socket path from the file instead of calculating it

  ### 2. Backgroundable Daemon Check
- Reapplied #33491 which makes the Nx Console install check run on the
daemon in the background
- This was previously reverted due to the socket race condition (now
fixed by change 1.)
- Running in background also allows pulling the latest check logic from
npm

  ### 3. Version Mismatch Check
  - Added `isNxVersionMismatch()` check in `DaemonClient.enabled()`
- Created shared utility `is-nx-version-mismatch.ts` for version
comparison
  - Refactored server.ts to use the shared utility
- Uses `require.resolve('nx/package.json', { paths: [workspaceRoot] })`
to properly resolve the workspace's installed nx version

  ## Related Issue(s)

Fixes daemon socket path race condition and improves daemon reliability.
2025-11-24 23:45:28 +00:00
Philip Fulcher 12f42ca798 chore(nx-dev): remove november webinar (#33598) 2025-11-24 16:17:39 -05:00
Colum Ferry 70bbbe9ff6 fix(js): ensure copy-workspace-modules copies transitive workspace dependencies (#33570)
## Current Behavior
`copy-workspace-modules` executor only copies workspace dependencies 1
level deep.
If that workspace library depends on another workspace library, it is
not copied correctly.

## Expected Behavior
Copy transitive workspace modules

## Related Issue(s)

Fixes NXC-3466
2025-11-24 09:16:37 -05:00
Jack Hsu b7cfee16e2 fix(testing): remove declare global wrapper from cypress commands.ts template (#33573)
When adding Cypress to a library, the generated commands.ts causes
TS2669 error because declare global requires the file to be a module.
Changed to use declare namespace Cypress directly.

Fixes #32930
2025-11-24 08:35:51 -05:00
Juri 8fcef1e81a docs(misc): fix listing of oxlint community plugin 2025-11-24 10:46:48 +01:00
Laney Pouzet 5fd57badb9 fix(core): filter out automated release commits in getCommitsRelevantToProjects (#33482) 2025-11-23 16:19:51 +04:00
Jason Jean 626fb0873e Revert "feat(core): make console daemon check backgroundable and pull… (#33578)
## Current Behavior
PR #33491 introduced a daemon call into every command and caused
unexpected issues...

  ## Expected Behavior
the change is reverted while we investigate a proper fix

  ## Changes
This reverts commit 9471207767 from PR
#33491.

  ## Related Issue(s)
  Fixes #33472
2025-11-21 23:14:11 +00:00
Austin Fahsl 68eee382dc docs(nx-cloud): use GitHub's default ref in manual DTE workflow (#33575)
## Current Behavior

The manual DTE workflow explicitly sets the `ref` parameter to `${{
github.event.pull_request.head.sha }}` to checkout the actual branch
HEAD instead of the merge commit.

## Expected Behavior

Use GitHub's default ref behavior instead of explicitly overriding it,
as the default behavior now handles this correctly.

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-21 14:47:52 -07:00
Jack Hsu 8750521b32 fix(react): exclude tailwind from CSS modules syntax in component generator (#33574)
## Current Behavior
When generating a React component with --style=tailwind, the component
template incorrectly includes `className={styles['container']}` and
attempts to import CSS modules.

## Expected Behavior
Components generated with --style=tailwind should not include CSS
modules imports or `styles['container']` references, since Tailwind
doesn't use CSS modules.

## Related Issue(s)
Closes NXC-3511

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-21 16:18:30 -05:00
Jason Jean 9a6c7adddf feat(nx-cloud): prepend nx version to stats metadata (#33568)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Stats don't come along with versions which makes it hard to see if it
was specific changes that make a difference.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Stats are tagged with the version so we can compare stats between
versions

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-21 12:19:58 -05:00
Jack Hsu 57f28bac5e fix(storybook): remove STORYBOOK_PROJECT_ROOT when running automigrate to prevent hanging (#33567)
This PR fixes an issue where migrations can hang due to out invocation
of `storybook automigrate`. We are passing both `--config-dir` and
`STORYBOOK_PROJECT_ROOT`, the latter causes hanging with Storybook v9.

https://www.loom.com/share/39bbb350595c4a13aef86ec29f4b748f

## Current Behavior
Hangs

## Expected Behavior
Does not hang

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #32492
2025-11-21 11:34:29 -05:00
Jack Hsu 1c8796a4d7 docs(misc): update migration docs to use supported markdown syntax (#33563)
This PR cleans up the markdown files under `packages/`. We previously
had to support Next.js docs and translate it for astro docs with proper
markdown syntax. This applies to generators, executors, and migrations.

Also removes the function to do the translation in astro app since it's
no longer needed.

## Code block (migrations)
<img width="1086" height="800" alt="Screenshot 2025-11-20 at 1 23 53 PM"
src="https://github.com/user-attachments/assets/bd9acb9b-7960-4e41-9d26-22d29da6658e"
/>

## Aside (generators)
<img width="802" height="443" alt="Screenshot 2025-11-20 at 1 43 17 PM"
src="https://github.com/user-attachments/assets/e2999821-8783-46ed-a984-2193f6f8eafa"
/>
2025-11-21 09:25:34 -05:00
Craigory Coppola 1eecf46e4a fix(core): provide error when nested graph construction would occur invoked during createNodes (#33541)
## Current Behavior
During createNodes, if a file is imported and a function in said file
invokes the Nx project graph creation process, there's an infinite loop
that results in all nx commands hanging with little feedback.
Theoretically this loop would terminate at around the 10 minute mark,
but throughout the loop we would be digging deeper and deeper into
recursive territory so its possible that the node process could become
overwhelmed and hang.

## Expected Behavior
If recursive graph creation is detected, Nx terminates and logs the call
stack so it can be investigated properly.

## Related Issue(s)

Fixes #29618

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: AgentEnder <AgentEnder@users.noreply.github.com>
2025-11-21 01:37:19 -05:00
Jack Hsu 239a4dbb2d feat(linter): add util to load eslint rules from a directory (#33543)
This PR adds the ability for users to import ESLint rules from arbitrary
location in the workspace rather than storing them in
`tools/eslint-rules`. This is useful for monorepo not using
npm/yarn/pnpm workspaces and need a mechanism to load from any custom
rules location without them being installed/symlinked.

It also handles TS files automatically.

Demo: https://www.loom.com/share/3c32af4555614eeab4f81fce8db0c955

Example:

```js
import baseConfig from "../../eslint.config.mjs";
import { loadWorkspaceRules } from "@nx/eslint-plugin";

const customRules = await loadWorkspaceRules("foo/bar/eslint-rules");

export default [
  ...baseConfig,
  {
    ignores: ["**/out-tsc"],
  },
  {
    files: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
    plugins: {
      custom: { rules: customRules },
    },
    rules: {
      "custom/valid-command-object": "error",
    },
  },
];
```

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-11-20 17:16:03 -05:00
Craigory Coppola 9f7414e32a fix(core): daemon command should exit at end (#33547)
## Current Behavior
Daemon command hangs at end instead of exiting

## Expected Behavior
Daemon command exits

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-20 16:54:32 -05:00
Craigory Coppola 236177b8a3 chore(repo): fixup some issues with jest config (#33549)
## Current Behavior
There's some issues with the jest configs in the repo, CJS files having
`import` in them, etc.

## Expected Behavior
CJS files don't have `import`

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-20 16:49:18 -05:00
Craigory Coppola 0e500dc64f fix(core): don't presume a task is long running if its marked cacheable (#33545)
## Current Behavior
`cache: true` is overridden if task name is dev

## Expected Behavior
`cache: true` has priority

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #32610

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-20 16:48:28 -05:00
MaxKless aa38b256a7 fix(graph): align exclude flag with others by using findMatchingProjects (#33550) 2025-11-19 18:18:51 -05:00
Jack Hsu 618c3344af fix(vite): generate .mts config files to force ESM (#33518)
Using .mts extension forces files to always be treated as ESM modules,
ensuring consistent behavior regardless of package.json or tsconfig
settings.

This matters for Node 24 because by default Node will strip types from
`.ts` files and then they are resolved through normal Node resolution.
In the past we can control CJS/ESM through tsconfig options, but now
only extension or `type` in `package.json` matters.

Changes:
- Updated all createOrEditViteConfig calls to pass useEsmExtension: true
- Updated normalizeViteConfigFilePathWithTree to check for .mts files
first
- Updated test files to expect .mts config files
- Updated snapshots to reflect new .mts extension

Closes NXC-3446
2025-11-19 16:49:25 -05:00
Jack Hsu 05bd3a4c16 fix(linter): handle various flat config override structures (#33548)
Flat config overrides util may fail when it isn't a plain JS object.
This PR makes the `hasOverrides` function more robust against these
cases.


Fixes #31796
2025-11-19 16:40:46 -05:00
MaxKless 3401c7ec78 cleanup(gradle): fix gradle dsl e2e test in verbose mode (#33546)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
the JSON parsing is broken because in verbose mode, the gradle plugin
returns more than just JSON.

## Expected Behavior
JSON parsing in the test should work

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-19 14:59:07 -05:00
Colum Ferry 7b9970f499 fix(release): ensure file change calculation matches nx affected #33413 (#33539)
## Current Behavior
We naively mark WholeFileChange for commits when getting the relevant
commits for projects.
There is already logic to perform better diff checking for lock files,
especially in the case of pnpm catalog usage

## Expected Behavior
Reuse existing logic to determine file changes more accurately

## Related Issue(s)

Fixes #33413
2025-11-19 17:35:09 +00:00
Craigory Coppola 219e82d4cd fix(core): default input should indeed be default (#33533)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior

If no inputs or named inputs are defined, this area of code was hit:

```
const DEFAULT_INPUTS: ReadonlyArray<InputDefinition> = [
  {
    fileset: '{projectRoot}/**/*',
  },
  {
    dependencies: true,
    input: 'default',
  },
];

export function getNamedInputs(
  nxJson: NxJsonConfiguration,
  project: ProjectGraphProjectNode
) {
  return {
    default: [{ fileset: '{projectRoot}/**/*' }],
    ...nxJson.namedInputs,
    ...project.data.namedInputs,
  };
}
```

This resulted in weird behavior when the user would define `default` in
named inputs, but it would seemingly only be applied to the project's
deps and not the project itself

## Expected Behavior
The `default` input is the default for both

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #https://github.com/nrwl/nx/issues/32924
2025-11-19 10:28:58 -05:00
Craigory Coppola f5c876b82e fix(core): avoid leaking memory due by creating an unref'd interval for each daemon connection (#33532)
## Current Behavior
Every time a daemon connection is opened, we create a new interval and
unref it. This results in the daemon checking its process termination at
an ever increasing rate, which presents as increased memory usage and
practically means the daemon is just doing a lot more work than it needs
to in this area.

## Expected Behavior
The interval is registered only on initial server startup.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #29836
2025-11-19 10:28:30 -05:00
Jack Hsu 6b56665857 docs(js): update dual format guide with correct types and hint to check arethetypeswrong tool (#33531)
This PR updates the guide here to also include type entries (which we
generate by default):
https://nx.dev/docs/technologies/typescript/guides/compile-multiple-formats

Update the content to account for the new inferred `@nx/rollup/plugin`
setup, but still mentions the executor. And also link to a tool that can
be used to check for types correctness.

Closes #33258

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: jaysoo <jaysoo@users.noreply.github.com>
2025-11-18 18:22:41 -05:00
Caleb Ukle f5915fa165 docs(nx-cloud): update private registry example script (#33528) 2025-11-18 23:14:42 +00:00
Caleb Ukle e418217dde fix(nx-dev): error out when failing to parse plugin manifests (#33498)
if there is an error parsing a schema file for generators/executors then
we should fully error out to prevent caching a "bad" build even if the
site techincally works with missing plugin info.
2025-11-18 16:19:54 -06:00
Jason Jean 3206c35fb2 chore(repo): re-enable metrics collection (#33508)
## Current Behavior

Metrics collection is currently disabled in the CI workflow via the
`NX_CLOUD_ENABLE_METRICS_COLLECTION` environment variable set to
'false'.

## Expected Behavior

Metrics collection should be enabled to gather build and performance
data from CI runs.

## Related Issue(s)

Reverts the change from #33497

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-18 13:36:49 -05:00
Rares Matei 40b99940f9 chore(repo): use recommended pnpm cache location (#33529)
This also fixes pnpm caching on the nx repo.
2025-11-18 18:07:20 +00:00
Caleb Ukle 0d84a6788f docs(webpack): update externalDependencies comment to correct reflect the defalt value (#33461)
default is not 'none' is now 'all'

https://github.com/nrwl/nx/blob/master/packages/webpack/src/plugins/nx-webpack-plugin/lib/apply-base-config.ts#L53
2025-11-18 17:57:46 +00:00
Leosvel Pérez Espinosa 6b3b0c679b fix(js): sync external references to project's tsconfig.json file if it includes any files (#33524)
## Current Behavior

The `@nx/js:typescript-sync` generator never syncs external project
references to `tsconfig.json` files if a runtime tsconfig file exists.

## Expected Behavior

The `@nx/js:typescript-sync` generator should sync external project
references to `tsconfig.json` files if it includes any files or a
runtime tsconfig file doesn't exist.
2025-11-18 14:24:43 +01:00
Jason Jean 2dc4cb53ac chore(repo): update nx to 22.1.0-rc.5 (#33519)
Updating Nx from 22.1.0-rc.3 to 22.1.0-rc.5

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-17 19:49:59 -05:00
Jason Jean 41dec8ee78 fix(core): resolve all lock ordering deadlocks in metrics collector (#33513)
## Summary
This PR fixes a critical deadlock issue in the metrics collector that
occurred due to inconsistent lock acquisition order between the
collection thread and registration threads. The fix involved
restructuring lock scopes across multiple functions to maintain a
consistent lock hierarchy.

## Changes
- Fixed lock acquisition order in 4 registration functions
(register_main_cli_process, register_main_cli_subprocess,
register_task_process, register_batch)
- Restructured collect_metrics() to minimize system lock scope and
release it before acquiring other locks
- Fixed collection helper methods to read PIDs in scoped blocks without
holding system lock
- Added comprehensive trace logging for debugging lock contentions
- Added concurrent test case to verify no deadlocks occur under stress

## Testing
- All 12 metrics tests pass
- Comprehensive concurrent stress test added:
test_concurrent_group_creation_with_subprocess_updates
- Lock ordering consistency test added:
test_lock_order_consistency_across_registration_threads

## Lock Ordering Rule
Established and enforced this hierarchy across all threads:
1. Acquire system lock first
2. Release system lock
3. Then acquire registration/PID locks

This prevents circular wait conditions (A→B / B→A) that cause deadlocks.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-11-17 17:02:52 -05:00
Benjamin Cabanes 02e5c4af8e docs(nx-dev): add click event to header navigation links (#33516)
Added `sendCustomEvent` calls to track clicks on primary header and
mobile header navigation links.
2025-11-17 15:38:20 -05:00
Jack Hsu ed3ddebde5 fix(storybook): normalize version range before comparison (#33515)
When Storybook is installed with a version range like `^10.0.0` or
`~8.5.3`, the configuration generator fails with error:
```
NX   Invalid Version: ^10.0.0
TypeError: Invalid Version: ^10.0.0
```

This occurs because `gte()` from semver doesn't accept version ranges on
the left-hand side - only valid semver versions are allowed there.

The Storybook configuration generator should work with version ranges by
extracting the actual version number before comparison.

Fixes #33514
2025-11-17 14:55:30 -05:00
Jack Hsu e8576a8bb2 docs(angular): update dynamic module federation to use enhanced modules (#33512)
This updates the MF dynamic remotes docs for Angular to match new setup.

Closes DOC-327
2025-11-17 13:48:10 -05:00
Miroslav Jonaš 4bfc1e8e29 feat(core): apply parent env to atomized target (#33013)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Env variables from the parent target are not propagated to the atomized
target e.g.
`.test-ci.env` will be only applied to **no-op** `test-ci` but not to
`test-ci--path/to/test/file`.

## Expected Behavior
Running an atomized target will load from the parent's env files.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-11-17 17:30:07 +01:00
Nas3nmann 961e2379fe chore(core): nx plugin submission nx-oxlint 2025-11-17 17:10:10 +01:00
MaxKless de8a0205fd feat(gradle): allow specifying project and task configuration from gradle build files (#33264)
## Current Behavior 
Gradle projects in Nx workspaces can only configure metadata through
Gradle's built-in mechanisms. There's no way to specify Nx-specific
project metadata (like tags) or customize task target configurations
other than overriding with `project.json`

 ## Expected Behavior

Developers can now configure Nx-specific metadata for both projects and
tasks using a type-safe Kotlin/Groovy DSL:

 ### Project-level metadata (in build.gradle.kts):
  ```
nx {
    set("name", "my-service")
    array("tags", "scope:backend", "type:api")
    set("description", "Payment processing service")
  }
```

 ### Task-level metadata (in build.gradle.kts):
```
  tasks.named("integrationTest") {
    nx {
      set("cache", false)
      array("tags", "integration", "slow")
    }
  }
```

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: MaxKless <MaxKless@users.noreply.github.com>
2025-11-17 10:44:46 -05:00
Craigory Coppola d86fb5d244 fix(core): prevent hanging between command end and process exit (#33500)
## Current Behavior

In certain scenarios, Nx commands would hang between command completion
and process exit. This was caused by inefficient message end detection
in the
daemon socket communication, where the check for `MESSAGE_END_SEQ` could
fail when TCP packets were fragmented.

  ## Expected Behavior

With this PR, the message end detection is more robust and handles TCP
packet fragmentation correctly, preventing the hanging issue. The
changes also
add better performance tracking and logging to help diagnose similar
issues in the future.

  ## Changes Made

- **Improved message end detection**
(`consume-messages-from-socket.ts`): Added a preliminary check of the
last character's code point before checking
the full MESSAGE_END_SEQ, which prevents false negatives when TCP
packets are fragmented
- **Enhanced performance tracking** (`daemon/client/client.ts`,
`daemon-socket-messenger.ts`): Added message-type-specific performance
marks and
  measures for better debugging
- **Added server-side logging** (`daemon/server/server.ts`): Added
logging for message receipt, serialization, and response to help
diagnose
  communication issues

  ## Related Issue(s)

This fix addresses hanging issues observed in daemon communication when
commands complete but the process doesn't exit.
2025-11-17 09:57:34 -05:00
Colum Ferry b96b8e32e3 feat(docker): add skipDefaultTag option to build target (#33477) (#33506)
Add a skipDefaultTag option to the DockerTargetOptions interface that
allows users to opt out of the automatic default tag that is prepended
to build targets.

This is useful for multi-platform builds that need to push during build
(e.g., using --platform linux/amd64,linux/arm64 --push), where the
default tag causes build failures because it attempts to push a tag that
was not configured.

- Add skipDefaultTag?: boolean to DockerTargetOptions interface
- Modify buildTargetOptions to conditionally skip default tag when
skipDefaultTag is true
- Inherit skipDefaultTag from parent target in configurations
- Add comprehensive unit tests for skipDefaultTag functionality
- Add e2e test to verify skipDefaultTag works end-to-end
- Maintains backward compatibility (default behavior unchanged when
option not specified)

Fixes #33477
2025-11-17 09:55:31 -05:00
Jason Jean f54364eb67 chore(repo): update nx to 22.1.0-rc.3 (#33496)
Updating Nx from 22.1.0-rc.2 to 22.1.0-rc.3

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: FrozenPandaz <FrozenPandaz@users.noreply.github.com>
2025-11-15 11:29:32 -05:00
Craigory Coppola c1b942fd1c fix(core): include require paths when resolving specified plugins (#33495)
## Current Behavior
Loading local plugins that are relative paths from workspace root, that
point to a JS file, still require preliminary data from default plugins
despite being resolvable. This is because we aren't passing `paths` to
`require.resolve`, so it is trying to resolve relative to the nx package
instead of the workspace.

## Expected Behavior
The straight JS path resolves

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-14 21:27:26 -05:00
Philip Fulcher a9def426a1 docs(nx-dev): add monorepo myths article (#32944)
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-11-14 16:35:05 -05:00
Chau Tran a1dcd09172 chore(repo): disable metrics collection (#33497)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-14 16:09:16 -05:00
Jason Jean b3e6b03d82 chore(core): restructure metrics collector for performance and maintainability (#33483)
## Current Behavior

The metrics collector has several inefficiencies and architectural
issues:
- Complex hierarchical data structure (`ProcessTreeMetrics`) that
doesn't align with how the data is consumed
- Separate `MetadataStore` struct with unnecessary indirection
- Full metadata resent to all subscribers on every collection cycle
- Mutable parameters passed through collection functions instead of
functional return values
- Repeated allocations and clones across collection cycles
- `CollectionRunner` tightly coupled to NAPI, making it untestable in
pure Rust

## Expected Behavior

This PR restructures the metrics collector for better performance,
testability, and maintainability:

### Architectural Changes

1. **Flat Process Model**: Replaced hierarchical `ProcessTreeMetrics`
with a flat `Vec<ProcessMetrics>`, simplifying data flow

2. **Group-Based Organization**: Introduced `GroupInfo` and `GroupType`
to logically organize processes:
   - `MainCLI` - Nx CLI process and its subprocesses
   - `Daemon` - Nx daemon and its children
   - `Task` - Individual task execution processes
   - `Batch` - Batch execution with multiple tasks

3. **Incremental Metadata Updates**:
- Track which groups and processes have been sent using
`Arc<DashMap<String, GroupInfo>>` and `Arc<DashMap<String,
ProcessMetadata>>`
- Only send new metadata to subscribers instead of full state every
cycle
- New subscribers receive full metadata on first update via
`needs_full_metadata` flag
   - Automatic cleanup of dead process/group metadata

4. **Shared State with Arc**:
- Metadata maps shared between `ProcessMetricsCollector` and
`CollectionRunner` using `Arc<DashMap>`
   - Eliminated duplicate metadata storage
   - Single source of truth for all metadata

5. **Functional Programming Pattern**:
- Collection functions now return `Result<MetricsCollectionResult>`
instead of mutating parameters
   - Cleaner error handling with `inspect_err` and `map`
   - Easier to reason about data flow
   - Removed ~100 lines of code by consolidating logic

6. **Channel-Based Communication**:
   - Decoupled `CollectionRunner` from NAPI using `crossbeam_channel`
   - Collection thread sends metrics via channel to listener thread
   - Listener thread receives metrics and notifies NAPI subscribers
   - `CollectionRunner` is now NAPI-free and fully testable in pure Rust
- Non-blocking collection (subscriber callbacks don't block metrics
collection)

### Performance Optimizations

- Pre-allocated `Vec` capacity when combining metrics from different
sources
- Eliminated unnecessary `HashMap` clones during metadata updates
- Single-pass insertion into `DashMap` during string key conversion
- Reduced memory allocations in hot paths
- Collection thread never blocks on JavaScript callbacks

### Code Quality Improvements

- **Testability**: Added 7 pure Rust unit tests for `CollectionRunner`:
  - Group creation with different registration types
  - Incremental metadata updates
  - Dead group cleanup
  - All tests pass without requiring NAPI/Node.js runtime
- Clearer separation of concerns between collection and notification
- Better comments explaining incremental update strategy
- More idiomatic Rust patterns throughout
- Updated TypeScript type exports to match new structure

### Threading Model

**Before:**
```
CollectionRunner (mixed collection + NAPI notification)
```

**After:**
```
CollectionRunner (pure Rust, testable)
  └─> Channel
      └─> Listener Thread
          └─> NAPI ThreadsafeFunction
              └─> Subscribers
```

## Testing

-  241 Rust tests passing (including 7 new `CollectionRunner` tests)
-  Native module builds successfully
-  TypeScript types updated and exports verified

## Related Issue(s)

Part of ongoing metrics collector optimization work.
2025-11-14 16:56:51 +00:00
MaxKless 9471207767 feat(core): make console daemon check backgroundable and pulling from latest (#33491)
## Current Behavior
The Nx Console install check for the prompt happens in the main process,
adding some overhead to each invocation of nx.

## Expected Behavior
We want this check to happen on the daemon so that it's running in the
background. If it's still running when nx is invoked, we can just skip
the prompt since it's non-critical.
Running it in the background also allows us to pull the latest version
of the logic from npm when executing - that way we can keep the logic
older versions up-to-date even when ppl don't migrate to latest.
2025-11-14 16:14:13 +00:00
Jason Jean 7fd2cb4e3b chore(maven): bump Maven plugin version to 0.0.10 (#33485)
## Current Behavior

The Maven plugin is currently at version 0.0.9.

## Expected Behavior

This PR bumps the Maven plugin to version 0.0.10 and creates the
necessary migration for users to automatically update their pom.xml
files.

## Related Issue(s)

N/A - Routine version bump
2025-11-14 10:59:05 -05:00
MaxKless 2088eaaf22 fix(maven): skip maven plugin computation on vercel/netlify (#33486)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-14 09:28:59 -05:00
Jack Hsu 001e2ba4bb fix(misc): handle ERR_USE_AFTER_CLOSE gracefully in nx init and create-nx-workspace (#33469)
https://www.loom.com/share/560ceccdad45462e9fd3e3f185fc9fa5

Node 24 has stricter readline behavior, and enquirer is not checking for
closed state when invoking operations, resulting in an
ERR_USE_AFTER_CLOSE error when users press Ctrl+C during interactive
prompts.

This commit fixes the issue by adding uncaughtException handler to
ignore ERR_USE_AFTER_CLOSE errors.

When users press Ctrl+C, the process now exits cleanly without showing
an ugly error stack trace.

Fixes NXC-3412

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-14 09:28:50 -05:00
Nicole Oliver 1ef2614519 docs(nx-cloud): remove references to standalone powerpack (#33471)
Updates the Nx Powerpack docs and marketing page to make it clear that
Powerpack packages are included with Nx Enterprise, and cannot be
purchased separately, and remove references to the Nx Powerpack trial.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: Caleb Ukle <caleb@nrwl.io>
2025-11-13 14:37:40 -08:00
Jack Hsu 54f6206f1b docs(js): clarify non-buildable libs can be in devDependencies for TS… (#33481)
The recipe for switching to TS project references states "If you
reference a local library project with its own `build` task" which
caused confusion. Users thought only buildable libraries should be
included in devDependencies, leading them to create unnecessary path
aliases for non-buildable libraries.

Closes DOC-149

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-13 17:29:34 -05:00
Jason Jean 20653ab15a chore(misc): record stat for initial invocation of create-nx-workspace (#33480)
## Current Behavior
Currently, telemetry stats are only recorded when `create-nx-workspace`
completes successfully. This doesn't capture how many times the command
is invoked vs completed.

## Expected Behavior
Record a stat when `create-nx-workspace` is first invoked (before any
prompts), enabling analysis of drop-off between initial invocation and
workspace completion.

## Changes Made

### Telemetry
- Added `recordStat()` call in `normalizeArgsMiddleware()` immediately
after welcome message and before any user prompts
- Records with command name `create-nx-workspace` and metadata
`['start']` to distinguish from completion stat
- Allows correlation of invocation and completion events for drop-off
analysis

### AI Agents Prompt
- This is being temporarily disabled because we noticed a dip in
create-nx-workspace completions that lines up when this was released.
Disabling it temporarily to see if the dip is recovered by disabling the
prompt.

### React Framework Selection
- Added early returns in `determineReactFramework()` for cases where
framework is already provided or interactive mode is disabled
- Improves performance by avoiding unnecessary prompt interactions

### Code Quality
- Reorganized imports in alphabetical order for better maintainability
- Removed unused import (`printSocialInformation`)

## Related Issue(s)
WIP - Draft for discussion
2025-11-13 20:16:58 +00:00
Louie Weng 0014ae66d8 fix(gradle): bump gradle migration version (#33479)
Ensure that we bump up Nx plugin for Gradle version to 0.1.9 when going
from 22.1.0-rc.3
2025-11-13 10:43:09 -08:00
Jack Hsu 4e3f475f63 fix(vite): support vitest v4 (#33478)
This PR ports the vitest v4 logic back to `@nx/vite` even though users
should be using `@nx/vitest`, we still support it until v23. Otherwise
running `@nx/vite:configuration --includeVitest` will always fail.

Generator working:
https://www.loom.com/share/246c401e114348818b998e0abed8754e
Suppressing warning:
https://www.loom.com/share/f769507de6684d4e9cb720cdc277e56a
2025-11-13 12:44:17 -05:00
Jason Jean 76c030a82e fix(core): capture stderr in nx add command for better error messages (#33462)
## Current Behavior

When `nx add @nx/s3-cache` fails due to incompatible peer dependencies
or other installation errors, users see only a generic error message
without the actual error details from the package manager.

## Expected Behavior

The command should display complete error messages from the package
manager (both stdout and stderr), including peer dependency conflicts
and other important diagnostic information.

## Changes

Fixed the exec callback in the `installPackage` function to:
1. Capture the `stderr` parameter (was previously ignored)
2. Log both stdout and stderr with a newline separator for clarity
3. Ensure users see all error information from package managers

## Why It Matters

Package managers write installation errors and peer dependency warnings
to stderr. By ignoring stderr, users had no visibility into what
actually failed, making it difficult to diagnose and fix issues.

Fixes issue with `nx add` not showing proper error messages.
2025-11-13 09:25:42 -05:00
Jason Jean 50cf84f758 chore(repo): update nx to 22.1.0-rc.2 (#33464)
Updating Nx from 22.1.0-beta.8 to 22.1.0-rc.2
2025-11-13 08:53:58 -05:00
Rares Matei 37cbdee1a2 docs(nx-cloud): recommend set sha action in manual dte (#33476)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-13 14:38:28 +01:00
Jason Jean 455891eaf5 fix(js): skip TS project references migration for non-TS-solution workspaces (#33467)
## Current Behavior

The `remove-redundant-ts-project-references` migration fails with an
error when run on workspaces that don't have a root `tsconfig.json`
file, such as nx-examples.

## Expected Behavior

The migration should skip workspaces that are not using TypeScript
solution setup instead of throwing an error.

## Related Issue(s)

Fixes the issue encountered when running the migration on
nrwl/nx-examples repo.

## Changes

- Added check to skip migration if workspace is not using TS solution
setup
- Updated test setup to properly configure TS solution for existing
tests
- Added new test cases to verify skip behavior

The migration now uses `isUsingTsSolutionSetup()` to detect if:
- `tsconfig.base.json` exists
- `tsconfig.json` exists and extends the base
- Package manager workspaces are configured
- Proper TS solution structure is in place

Workspaces missing any of these requirements will have the migration
skip silently.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-12 22:58:31 +00:00
Jack Hsu 1997d950af docs(misc): replace Java cup logo with Duke mascot (#33466)
Use Duke logo rather than the cup logo. Also fix an alignment issue for
sidebar icons.

<img width="1352" height="707" alt="image"
src="https://github.com/user-attachments/assets/dff634e8-3b51-48c6-bbdb-7898e671e118"
/>

<img width="1067" height="596" alt="image"
src="https://github.com/user-attachments/assets/3c2075fd-8577-4a99-bb6b-66f901dd8f1e"
/>


Closes DOC-297

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-12 16:37:14 -05:00
Jason Jean 26df170c54 chore(js): update migration version to 22.1.0-rc.1 (#33465)
## Current Behavior

The migration for removing redundant TypeScript project references is
set to version `22.1.0-beta.8`.

## Expected Behavior

The migration should be updated to version `22.1.0-rc.1` to align with
the release candidate version.

## Related Issue(s)

N/A - Version update as requested.
2025-11-12 20:17:27 +00:00
Leosvel Pérez Espinosa 36b9f7ab32 fix(js): remove redundant typescript project references (#33438)
## Current Behavior

The `@nx/js:typescript-sync` generator adds project dependencies as
TypeScript project references to each project's `tsconfig.json` and
runtime tsconfig file (e.g., `tsconfig.app.json`, `tsconfig.lib.json`,
etc.). This is redundant since projects' `tsconfig.json` files already
reference the runtime tsconfig file, which would reference the
dependencies.

## Expected Behavior

The `@nx/js:typescript-sync` generator should add project dependencies
as TypeScript project references to each project's runtime tsconfig file
(e.g., `tsconfig.app.json`, `tsconfig.lib.json`, etc.). If the project
only has a `tsconfig.json` file, it should add them to it.

We've observed some performance improvement with this change while
running the `typecheck` tasks.
2025-11-12 17:48:26 +00:00
Jason Jean 5c565ad37f fix(core): optimize batch task scheduling to prevent redundant traversals (#33455)
## Summary

This PR combines two critical performance optimizations for batch task
scheduling and task hashing:

### 1. Batch Scheduling Fix

Fixed a correctness bug in the batch scheduling optimization where the
`visitedInBatch` tracking happened too early. Now tasks are only marked
as visited AFTER all scheduling checks pass, ensuring tasks can be added
to the batch from any valid dependency path.

**Files Modified:**
- `packages/nx/src/tasks-runner/tasks-schedule.ts`

**Impact:**
- Prevents task splitting across unnecessary batch boundaries
- Maintains correctness while optimizing performance
- All batch scheduling tests pass

### 2. Task Output Hashing Optimization

Added a DashMap-based cache to the Rust TaskHasher to prevent redundant
hashing when multiple tasks depend on the same outputs.

**Files Modified:**
- `packages/nx/src/native/tasks/task_hasher.rs` - Added
task_output_cache field
- `packages/nx/src/native/tasks/hashers/hash_task_output.rs` - Implement
cache logic

## Root Cause of Issue #33366

Large project graphs with high dependency fanout exhibit slow
`hashMultipleTasks` because:
- 100+ tasks may depend on the same 10 build tasks' outputs  
- This generates 1,000+ separate `TaskOutput` hash instructions
- Each instruction independently:
  - Lists output files from disk (filesystem I/O)
  - Builds glob patterns
  - Hashes the same files
- Result: Same files hashed 100× redundantly

## Solution: Task Output Cache

The cache key combines glob pattern and sorted output paths. When
identical outputs are hashed with the same pattern:
- First task: computes hash (~milliseconds) and stores in cache
- Remaining 99 tasks: cache hits (~nanoseconds each)

### Cache Lifetime
- `TaskHasher` instantiated once per `hashMultipleTasks` call
- Cache persists for entire hashing session
- Discarded when `hashMultipleTasks` completes
- Optimal scope for cache hit maximization

## Performance Impact

**Expected Improvements:**
- Best case (100 tasks, 10 shared deps): 100× speedup
- Typical monorepo: 10-20× speedup
- No shared deps: No regression (cache lookup negligible)

**Issue #33366 Analysis:**
- Current: `Time for 'hashMultipleTasks' 49351.488518` (49 seconds)
- Expected with optimization: ~5-10 seconds (depending on actual
dependency structure)

## Testing

-  All task scheduling tests pass (2262 passed, 0 new failures)
-  Batch mode tests pass (6/6)
-  Native build completed successfully
-  No regressions in existing functionality

## Design Notes

- Task output cache follows same pattern as `workspace_files_cache`,
`external_cache`, `runtime_cache`
- Thread-safe using DashMap with Arc for Rayon parallel processing
- Instrumented with trace-level logging for cache hits/misses
- Cache automatically cleaned up when TaskHasher is dropped
2025-11-12 12:08:18 -05:00
Leosvel Pérez Espinosa ba893a13b0 cleanup(angular): handle ng-packagr changes to browserslist (#33457)
Updates the `ng-packagr` executors to support a breaking change in v21.
This needs to be done in advance because we use the published
`@nx/angular` executors to build the `@nx/angular` source code. To
update to Angular v21, we need this change to be merged, released, and
installed in the Nx repository so that we can build the `@nx/angular`
package containing the support for Angular v21.
2025-11-12 10:44:41 -05:00
Leosvel Pérez Espinosa 19dbf55206 fix(core): remove system metrics collection and reporting (#33456)
Removes system metrics collection and reporting.
2025-11-12 09:55:09 -05:00
Jack Hsu 3d48b75202 feat(core): export TypeScript schema definitions via wildcard patterns (#33454)
Users cannot import TypeScript schema definitions or schema.json files
from Nx packages due to strict package exports introduced in Nx 21.0.0.

Users can now import both TypeScript definitions and JSON schemas from
generator/executor/builder paths using wildcard export patterns. Both
first-level (`*`) and second-level (`*/*`) patterns are supported to
handle different import depths.

Note: For old plugins that had `src/...` deep imports we keep those in
`exports`, but for newer plugins that always used `exports` we skip
`src/` in the export path. So `@nx/nuxt/generators` instead of
`@nx/nuxt/src/generators`.

Fixes #33336
2025-11-12 09:43:12 -05:00
MaxKless 26a7e4fca7 feat(core): pull nx init from latest before executing (#33446)
## Current Behavior
nx init is executed with whatever version is installed globally by npm
(might be outdated)

## Expected Behavior
we pull down the latest version from npm (if it has provenance) and run
that when executing.
Also introduced a new `NX_USE_LOCAL` env var that will be respected by
all commands that have this pulling-from-latest behaviour.
2025-11-12 12:01:37 +01:00
Benjamin Cabanes 7ca6680e03 docs(nx-dev): add Pricing link to Nx Cloud navigation menus (#33452)
Added a "Pricing" link to the Nx Cloud navigation sections.
2025-11-11 20:11:11 +00:00
Jack Hsu 5fa1c18dea chore(repo): bump to Node 24 (#33441)
Update CI to Node 24. Note that the e2e-release changes are pulled from
the original PR.

Note: There are changes to NPM 11 (Node 24) to make it run slower than
NPM 10 (Node 20/22) for publish. (https://github.com/nrwl/nx/pull/31934)

e.g. https://github.com/npm/cli/releases/tag/v11.0.0-pre.1 (`Upon
publishing, in order to apply a default "latest" dist tag, the command
now retrieves all prior versions of the package.` which incurs more
network cost)
2025-11-11 15:10:09 -05:00
Jason Jean 647d75116b chore(repo): update nx to 22.1.0-beta.8 (#33451)
Updating Nx from 22.1.0-beta.7 to 22.1.0-beta.8
2025-11-11 14:26:09 -05:00
Jason Jean 12422ae3ea fix(graph): add nx:build-native dependency to typecheck target (#33428)
## Current Behavior

The typecheck target in graph/client/project.json only depends on
^typecheck targets from other projects.

## Expected Behavior

The typecheck target now includes nx:build-native as a dependency to
ensure native dependencies are built before type checking.

## Related Issue(s)

This fix resolves typecheck failures caused by missing native
dependencies.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: FrozenPandaz <FrozenPandaz@users.noreply.github.com>
2025-11-11 13:38:11 -05:00
Philip Fulcher db09e106e9 docs(nx-dev): add video link to task analytics article (#33450) 2025-11-11 12:20:24 -06:00
MaxKless ab7db78b04 feat(maven): add option to prefix all maven targets (#33420)
## Current Behavior
there is no way to generally influence how maven goals/phases are
represented as targets in nx. This could be useful though for organizing
targets in nx, for example through nx.json `targetDefaults`

## Expected Behavior
There's a `targetNamePrefix` plugin option that can be passed.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: MaxKless <MaxKless@users.noreply.github.com>
2025-11-11 13:16:01 -05:00
Jason Jean 6121a12368 chore(repo): update nx to 22.1.0-beta.7 (#33431)
Updating Nx from 22.1.0-beta.6 to 22.1.0-beta.7
2025-11-11 17:07:01 +00:00
Leosvel Pérez Espinosa 8f3b0b22a7 fix(core): resolve lockfile cache regression with keyMap state (#33448)
After PR #33256 split lockfile parsing into separate node and dependency
caches, a regression occurred where dependencies could be regenerated
without nodes, leaving a shared module-level variable (`keyMap`) empty
and causing incorrect dependency resolution.

Changes:
- Serialize `keyMap` with nodes cache to maintain state between phases
- Remove module-level shared state from pnpm, npm, and yarn parsers
- Move `keyMap` creation inside `getNodes` functions for better
encapsulation
- Update `readCachedExternalNodes` to deserialize `keyMap` internally
2025-11-11 16:52:05 +00:00
Jack Hsu 3c85af93af chore(misc): upgrade macOS GitHub Actions runners (#33444)
Update from the macos-13 is in brownout and will be gone soon.

- macos-15-intel for x86_64-apple-darwin (Intel) builds
- macos-latest for aarch64-apple-darwin (ARM64) builds

Closes NXC-3444
2025-11-11 11:51:49 -05:00
Colum Ferry 00a247be3f feat(vitest): support vitest 4 (#33424)
## Current Behavior
We currently only generate vitest projects using Vitest 3

## Expected Behavior
Use Vitest 4 when generating new projects

## Related Issue(s)

Closes NXC-3343
Closes NXC-3379

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-11-11 10:20:14 -05:00
Leosvel Pérez Espinosa 6d0523e326 fix(core): clean up dead processes from metrics (#33437)
Fixes a regression where dead processes were not being cleaned up from
the metrics reporting.
2025-11-11 09:53:37 -05:00
James Henry 3439ff10e7 feat(release): add resolveVersionPlans option to changelog CLI and API (#33435) 2025-11-11 18:53:14 +04:00
Nicole Oliver 806e9a83af docs(nx-cloud): clarify Github integration details (#33433)
Clarifies some details of the Nx Cloud GitHub integration, such as which
features are available when you use the base integration vs a GitHub
powered organization.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->
2025-11-11 09:33:43 -05:00
Colum Ferry 4509d95b3b fix(release): changelog renderer should render commit title with breaking changes (#33439)
## Current Behavior
We do not render the commit title in the BC section of generated
changelogs.

## Expected Behavior
We should render the commit title in the BC section of generated
changelogs along with the Remote Release Client reference to the commit.

## Related Issue(s)

Closes NXC-3290
2025-11-11 13:20:46 +00:00
Colum Ferry 9513a1f89c fix(vitest): do not fail when cleanedAngularVersion is of incorrect type (#33436)
## Current Behavior
There may be a scenario when `cleanedAngularVersion` is of type `object`
rather than `string` which proceeds to error when passed to
`semver.major()`.

## Expected Behavior
If `cleanedAngularVersion` is not `string`, assume the latest version
will be installed. Similar to how no found angular version is handled.

## Related Issue(s)

Fixes #33347
2025-11-11 11:25:33 +00:00
Leosvel Pérez Espinosa 843c041396 fix(js): improve typescript plugin performance (#33425)
- Fix for a bug with the external project references cache
- Add more caching for repeated operations
- Skip tsconfig files processing based on which targets should be
inferred

Fixes #33076
2025-11-11 10:04:43 +01:00
Jason Jean 93e0b21d97 fix(js): update vitest generator import in library generator (#33430)
## Current Behavior
The library generator has an unused import and incorrect import pattern
for the vitest generator.

## Expected Behavior
Clean imports with the correct way to access the configurationGenerator
from @nx/vitest.

## Changes
- Removed unused imports (logger, readJson)
- Updated vitest generator import to use direct require instead of
ensurePackage pattern for accessing the generator

Fixes #
2025-11-10 22:31:21 +00:00
Jack Hsu 98b2ab42e6 chore(repo): force storybook@9 so types resolve (#33429)
Master has v9 in lockfile, but it's not a guarantee. This forces v9
until we have a better solution to resolve v10 types.
2025-11-10 16:47:16 -05:00
Colum Ferry 6b54d6acf6 fix(storybook): remove optional nature of migration (#33427)
## Current Behavior
The Storybook 10 migration was originally intended to be optional.

## Expected Behavior
Make Storybook 10 migration add the migration generator to
migrations.json always. Users can remove it from here if they do not
want it, or they can use the Migrate UI from Nx Console to choose not to
run it.
2025-11-10 20:11:43 +00:00
Jason Jean 73ecb30491 chore(repo): update nx to 22.1.0-beta.6 (#33423)
Updating Nx from 22.1.0-beta.5 to 22.1.0-beta.6
2025-11-10 19:11:25 +00:00
Colum Ferry e581c3c437 feat(vitest): split entrypoint into plugin, generators, executors (#33426)
Split entry point of `@nx/vitest` into `index.ts` for the Inference
Plugin, `generators.ts` for Generators, `executors.ts` for the
Executors.
Ensure the `README.md` is copied to the correct output directory

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-11-10 18:29:37 +00:00
Colum Ferry 685e497c4f feat(vitest): split vitest into @nx/vitest plugin (#33311)
Split `vitest` out of `@nx/vite` and create a new `@nx/vitest`.

This allows for each plugin to have a single responsibility. One for
bundling, one for testing.

It should allow for lighter setups where Vite for Bundling is not
required, but users still want to use vitest for testing.

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-11-10 16:22:47 +00:00
Jason Jean 7a3179241e chore(repo): update storybook (#33422)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Storybook was accidentally downgraded to 9.1.9

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Storybook is upgraded back to 10.0

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-10 10:51:17 -05:00
Leosvel Pérez Espinosa 22618b6be9 feat(testing): support cypress v15 (#33393)
## Current Behavior

Cypress v15 is not supported.

## Expected Behavior

Cypress v15 should be supported.

## Related Issue(s)

Fixes #33304

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: leosvelperez <leosvelperez@users.noreply.github.com>
2025-11-10 10:50:50 -05:00
Jack Hsu 60089cc998 chore(expo): run export before e2e to mitigate timeout (#33414)
CI and nightlies can flake out during expo test if cypress or playwright
times out waiting for webserver. This makes is to the `export` that
powers `static-serve` is run before running e2e.

This is not usually a problem in new workspaces with inference, but this
legacy test uses executors so continuous task dependency isn't set up.
2025-11-10 10:19:57 -05:00
Louie Weng a0a3289112 chore(gradle): bump plugin for gradle version to 0.1.9 (#33419)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Nx plugin for Gradle is at version 0.1.8

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Nx plugin for Gradle is at version 0.1.9

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-10 09:53:48 -05:00
Leosvel Pérez Espinosa 373066a379 feat(core): track system metrics and link plugins to workers when possible (#33411)
- Track relevant CPU and memory system metrics.
- Link plugins to workers when possible.
- Refactor collector code by splitting it into two separate structs.
2025-11-07 23:29:36 +00:00
Caleb Ukle 7458b52b4e docs(nx-cloud): document new flaky tasks analytics (#33253)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-11-07 16:10:30 -05:00
Jack Hsu 4170c2f82b docs(js): update node compat matrix (#33415)
Update it for v22.
2025-11-07 16:10:03 -05:00
Caleb Ukle 2182cea451 cleanup(repo): use mise for agent toolchain installs (#33299)
also dedupe agent launch templates with yaml anchors for better
readability
2025-11-07 14:01:48 -06:00
Philip Fulcher 777217618e docs(nx-dev): add task analytics article (#33407)
https://nx-dev-git-philip-task-analytics-article-nrwl.vercel.app/blog/nx-cloud-release-introducing-enterprise-task-analytics
2025-11-07 13:37:39 -06:00
Jason Jean 746b89a901 feat(maven): bump version from 0.0.8 to 0.0.9 (#33405)
## Current Behavior

Maven plugin is currently at version 0.0.8.

## Expected Behavior

Maven plugin should be bumped to version 0.0.9 with a corresponding
migration for users.

## Changes Made

- Updated parent POM version to 0.0.9
- Updated package.json version to 0.0.9  
- Updated mavenPluginVersion constant to 0.0.9
- Added new migration (0-0-9) to update user pom.xml files from 0.0.8 to
0.0.9
- Scheduled migration for Nx v22.1.0-beta.6

## Testing

-  Maven package tests pass
-  Build succeeds
-  Linting passes
2025-11-07 13:07:36 -05:00
MaxKless b395cec4cd feat(maven): add ci-workflow generator (#33346)
Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
2025-11-07 16:21:15 +00:00
James Henry a6948665e6 fix(core): correctly identify local workspace dependencies on windows (#33408) 2025-11-07 15:08:45 +04:00
Philip Fulcher 790358af91 docs(nx-dev): add november 2025 webinar (#33403)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: philipjfulcher <philipjfulcher@users.noreply.github.com>
2025-11-06 14:13:29 -06:00
MaxKless e9146c7862 fix(core): prevent args from being split by spaces when executing through nx wrapper (#33362)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Because `./nx` is passing args with `$@`, args are being split by
spaces. Reference for this behaviour:
https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html#Special-Parameters-1

This results in this set of process args when running `./nx start-ci-run
--distribute-on="3 linux-medium-jvm"`

```
[
  "<user path>/.nvm/versions/node/v22.19.0/bin/node",
  "<user path>/Projects/OTW/mm-test/.nx/nxw.js",
  "start-ci-run",
  "--distribute-on=3",
  "linux-medium-jvm",
]
```

## Expected Behavior
the arg with whitespace should not be split before being passed to nx:
```
[
  "<user path>/.nvm/versions/node/v22.19.0/bin/node",
  "<user path>/.nx/nxw.js",
  "start-ci-run",
  "--distribute-on=3 linux-medium-jvm",
]
```
2025-11-06 13:42:07 -05:00
Jack Hsu 62d0ad7f25 chore(repo): rename jest.config.ts to jest.config.cts to be compat with Node 24 strip types (#33401)
This PR is just for the repo itself to use `.cts` to explicitly use CJS
for jest config. Node 24 strip types so having `.ts` files with ESM
syntax even though we're previously transpiling them to CJS is a
problem.
2025-11-06 13:36:44 -05:00
Leosvel Pérez Espinosa e470b2c64a feat(core): disable interactivity by default for run-one task outputs in tui (#33358)
Make run-one task terminal outputs in the TUI non-interactive by
default. Most tasks don't need interactivity, and it causes TUI to
ignore all its key bindings because it forwards them to the underlying
program. If interactivity is needed, users can press `i` to enable it.
2025-11-06 13:25:07 -05:00
Louie Weng 28e778a1f9 feat(gradle): use gitignore to determine dependant task output files (#33402)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Currently we detect if inputs are found in the build directory to
determine if they are considered dependent task output files. We can use
a simpler heuristic instead.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

If an input is gitignored (and therefore not hashed by Nx), then we
consider it a dependant task output file. This gitignore classifier will
be a mirror of the class used within the Maven plugin. There will be
another PR to move this classifier into a shared kotlin project that can
be used between both projects.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-06 13:20:06 -05:00
Jason Jean 61442118cf fix(maven): forward parameters through target dependencies (#33365)
## Current Behavior

Maven target dependencies are defined as simple strings that reference
other targets. Currently, parameters are not forwarded through these
dependencies when Maven goals are executed.

## Expected Behavior

Target dependencies in Maven should forward parameters (args) to their
dependency targets, enabling better parameter propagation through the
build pipeline.

## Changes Made

Modified `NxTargetFactory.kt` to transform simple string dependency
references into structured dependency objects with explicit parameter
forwarding:

- Install dependencies now forward parameters
- Phase dependencies now forward parameters  
- Test dependencies now forward parameters
- CI target dependencies now forward parameters

This ensures that when a Maven goal executes, any parameters passed to
it are properly forwarded to all transitive target dependencies.

## Related Issue(s)

This change enables parameter passing through Maven target dependencies
via the new dependency object format with `"params": "forward"`.
2025-11-06 11:56:14 -05:00
Jack Hsu 9b5768e7fe fix(testing): use .cts config files for Jest 30+ to fix __dirname issues (#33349)
When using Jest 30 with SWC, users are seeing an error where `__dirname`
is not defined for ESM modules. This is because the `.ts` extension is
type-stripped by Node 22.17/24+ via checking for
[`process.features.typescript`](https://github.com/jestjs/jest/blob/fe7f28c9d1941f5c2726831cd9d9e479b401610e/packages/jest-config/src/readConfigFileAndSetRootDir.ts#L46).

This means that instead of using the `commonjs` we set for `ts-node`,
normal Node resolution kicks in, and is now treating `jest.config.ts` as
ESM.

This PR fixes this issue by using an explicit `.cts` extension, which
forces CommonJS that we assume for Jest configs.

Note: For Jest 29 or earlier we need to keep `jest.config.ts` since the
`.cts` extension is not supported prior to Jest 30.

There's also a fix for an existing issue where using `module.exports` of
anything else from `@types/node` will error out if `tsconfig.json` has a
`types` field but does not include `node`. See:
https://www.loom.com/share/7ebe3c90a70e4ec7bfa53cbcccaaea7d

Fixes #32236

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-06 10:25:39 -05:00
MaxKless cde5ee8c83 docs(misc): add information about nx console debug logging (#33398) 2025-11-06 15:42:01 +01:00
Colum Ferry f2072f01f2 feat(storybook): generate ai instructions for converting from CJS to ESM after migration (#33395)
## Current Behavior
Storybook 10 Changelog states that CJS is no longer supported.
The migration does not do this automatically.

https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#the-storybookmain-file-and-other-presets-must-be-valid-esm

## Expected Behavior
Generate instructions for an AI Agent to find and convert CJS Storybook
Config files to ESM.

## Related Issue(s)

Fixes NXC-3409
Fixes NXC-3336
2025-11-06 14:28:18 +00:00
Juri 2e5844c61b docs(module-federation): change terminal output to shell frame 2025-11-06 14:52:17 +01:00
Juri 58cbbf20bd docs(nx-dev): link nx 22 release video 2025-11-06 14:51:56 +01:00
Jack Hsu 603e7c0bb6 docs(misc): fix ToC overflow and height stretching issues (#33384)
This PR fixes the ToC so it does not overflow to the footer. It adjusts
the height calculation such that it takes up the entire height of the
main frame.

The extra top margin is removed from the footer to remove the extra gap
between main frame and footer.

BEFORE: 

<img width="1387" height="915" alt="image"
src="https://github.com/user-attachments/assets/e7f4d31c-a206-48ab-81e6-9fddfee11b18"
/>


AFTER:

<img width="1385" height="916" alt="image"
src="https://github.com/user-attachments/assets/cf6e2662-3c3d-4d37-9769-235b901cc188"
/>

<img width="1382" height="918" alt="image"
src="https://github.com/user-attachments/assets/9e142edf-259b-482a-b676-9333857ed776"
/>



Fixes DOC-224

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-06 08:43:56 -05:00
Jack Hsu f5d97e3047 fix(nx-dev): fix GitHub star button styling in mobile view (#33385)
This PR fixes the GitHub star widget in the left sidebar such that it
only shows in smaller screens (e.g. mobile). For desktop we have it in
the ToC.

Also styles it to be consistent with the login and sign up buttons.

Large screen, don't show:

<img width="1483" height="881" alt="image"
src="https://github.com/user-attachments/assets/d3c88d87-4905-4c3f-85c4-b7b4c14546d4"
/>


Smaller screen, show:

<img width="1136" height="811" alt="image"
src="https://github.com/user-attachments/assets/22aa652f-c523-493f-a01e-87e55934e1c9"
/>

Mobile view, show:

<img width="511" height="880" alt="image"
src="https://github.com/user-attachments/assets/283ffca2-4e4e-4706-811f-ce27b02e607b"
/>


Fixes DOC-325
2025-11-06 08:43:26 -05:00
Juri a032099138 docs(dotnet): add paragraph about adding a .net app 2025-11-06 14:40:40 +01:00
Colum Ferry f549ef290f feat(vite): add vitest 4 to peerDep range to prevent conflicts (#33394)
## Current Behavior
`@nx/vite` has a peerDep range of only `1 | 2 | 3` for `vitest`.
This will cause peer dep conflicts for using wishing to use Vitest 4.

## Expected Behavior
Add Vitest 4 to the peerDep range of `@nx/vite` to prevent conflicts.
2025-11-06 10:36:10 +00:00
MaxKless a020954987 fix(core): handle various directories when importing prettier (#33383)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
when trying to format with prettier while outside of the workspace (for
example in a `tmp` nx installation like is created during
`configure-ai-agents`), resolving prettier could fail even though it's
present in the actual workspace.

## Expected Behavior
resolving prettier works if it's available in either the proper
workspace or the tmp one by specifying `paths` in `require.resolve`
2025-11-05 17:02:32 -05:00
Jason Jean cfcf109450 chore(repo): enable NX_CLOUD_ENABLE_METRICS_COLLECTION in CI (#33387)
Enables NX_CLOUD_ENABLE_METRICS_COLLECTION in the CI workflow.
2025-11-05 16:48:03 -05:00
Jason Jean ba6ca6c5ae chore(repo): update nx to 22.1.0-beta.5 (#33386)
Updating Nx from 22.1.0-beta.4 to 22.1.0-beta.5
2025-11-05 15:40:45 -05:00
Leosvel Pérez Espinosa a98b524f06 feat(core): collect resource usage (#32946)
Adds resource usage collection while running tasks.
2025-11-05 18:56:12 +00:00
Colum Ferry f6bc122c0b feat(nextjs): add support for next 16 (#33296)
## Current Behavior
We currently support Next 14 and 15.

## Expected Behavior
Add support for Next 16, bringing support to 14, 15, 16.
Existing workspaces will continue to use the version they are on.
New workspaces will use Next 16.

Refer to Next 16 Migration Guide for migrating from Next 15 to 16

## Related Issue(s)

Fixes #33207

---------

Co-authored-by: Eric Büttner <eric.buettner@tuffz.com>
2025-11-05 17:31:31 +00:00
Craigory Coppola b97f666a4e chore(repo): remove --fix-tasks config that exists to exclude removed task (#33371)
This pull request makes a minor update to the CI workflow configuration.
The change simplifies the `Start CI Run` step by removing the
`--fix-tasks="!*check-commit*"` option from the `npx nx-cloud@next
start-ci-run` command.
2025-11-05 10:46:31 -05:00
Colum Ferry 1b7d0955a2 fix(module-federation): update @module-federation packages to fix Koa vulnerability (#33285) (#33380)
Updates @module-federation packages from 0.18.0 to 0.21.2 and
@module-federation/node from 2.7.11 to 2.7.21 to address Koa Open
Redirect vulnerability (CVE: GHSA-g8mr-fgfg-5qpc).

The vulnerability was in transitive dependencies:
@nx/react → @nx/module-federation → @module-federation/enhanced →
@module-federation/dts-plugin → koa@3.0.1-3.0.2

Changes:
- Updated package.json dependencies in @nx/module-federation and
@nx/rspack
- Updated version constants in Angular and React utils/versions.ts
- Added 22.2.0 migrations to all affected packages

Fixes #33285
2025-11-05 10:41:28 -05:00
Jack Hsu bc47ab8ce9 docs(react): update SVGR documentation for Nx 22 (#33370)
This PR clarifies that Nx 22 removed SVGR support from Next.js and React
(Webpack/Rspack).

<img width="942" height="1185" alt="image"
src="https://github.com/user-attachments/assets/6ea8393f-b037-489f-804b-eb06d8d07e4c"
/>

Previously we had this option `svgr: true` but was configurable and
didn't align with current best practices like `import Logo from
'./logo.svg?react'`. We removed it from Nx 22, provided a migration, but
users will be confused by the docs.

Fixes DOC-326
2025-11-05 10:21:50 -05:00
Juri Strumpflohner 26aca9e5ec docs(nx-dev): fix broken URL to monorepo tools (#33381)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-05 09:32:30 -05:00
Juri Strumpflohner 18557f8af4 docs(misc): various updates embedding videos in docs pages 2025-11-04 21:54:36 +01:00
Leosvel Pérez Espinosa c933660b88 cleanup(core): remove unused mouse event listeners from tui (#33368)
Cleans up unused mouse event listeners from the TUI.
2025-11-04 13:21:10 -05:00
MaxKless c2fba1f6fc cleanup(core): update the nx orb version used in circle ci generators (#33364) 2025-11-04 14:47:56 +00:00
Colum Ferry 83051c5c62 fix(vite): ensure createVitest looks only from projectRoot (#33361)
## Current Behavior
`createVitest` is looking at the full workspace every time. It should
only look at the directory with the config file.

## Expected Behavior
Pass the root as the projectRoot of the config file found.
2025-11-04 09:11:45 -05:00
Jason Jean 2d78f571b4 chore(repo): update nx to 22.1.0-beta.4 (#33350)
Updating Nx from 22.1.0-beta.3 to 22.1.0-beta.4
2025-11-03 17:56:26 -05:00
Jason Jean 4017b61ede feat(core): add OSC 9;4 progress indicator support to TUI (#33325)
## Current Behavior

The Nx TUI doesn't provide any visual feedback about task progress
outside of the terminal window itself. Users need to keep the terminal
visible to see task completion status.

## Expected Behavior

With this PR, the TUI now displays real-time task completion progress in
the terminal window chrome (tabs, title bars, dock icons) using the OSC
9;4 escape sequence. This provides at-a-glance progress feedback even
when the terminal is minimized or in the background.

## Related Issue(s)

N/A - This is a new feature enhancement

## Implementation Details

### What is OSC 9;4?
OSC 9;4 is a terminal escape sequence for displaying progress
indicators, originally from ConEmu and now supported by multiple modern
terminals.

### Key Changes
- Added `update_ghostty_progress()` method to calculate and display task
completion percentage
- Added `clear_ghostty_progress()` method to hide progress when done
- Integrated progress updates into task lifecycle (start, status update,
exit)
- Uses ST terminator (`\x1b\\`) for maximum terminal compatibility
- Writes to stderr to avoid conflicts with TUI rendering on stdout

### Supported Terminals
- **Ghostty** - Full support
- **Windows Terminal** (v1.6+) - Full support
- **VTE-based terminals** (GNOME Terminal, Ptyxis) - Full support
- **Other terminals** - Gracefully ignore sequences (no errors)

### Terminal Compatibility Note
The implementation uses the ST (String Terminator) escape sequence
rather than BEL, as this is preferred by Ghostty and required by
VTE-based terminals, while remaining compatible with Windows Terminal.

## Testing

Tested with:
- Building the native module successfully
- Rust formatting and linting passes
- Running nx commands with the TUI active

The progress indicator updates in real-time as tasks complete and clears
automatically when the TUI exits.
2025-11-03 13:27:18 -05:00
Jason Jean 0acc8b0988 feat(core): batch hash tasks without custom hashers (#33327)
## Current Behavior

When processing scheduled batches, tasks are hashed one at a time even
though the hasher has a `hashTasks` method for batch hashing.

Results from a batch with 109 tasks.
```
hash batch: 8.297s
```

## Expected Behavior

Tasks without custom hashers should be batch-hashed using the hasher's
`hashTasks` method for better performance.

Results from a batch with 109 tasks.
```
hash batch: 991.725ms
```

## Related Issue(s)

This is a performance optimization for task hashing.

---

**Changes:**

- Added a new `hashTasks` function that intelligently separates tasks
with custom hashers from those without
- Tasks with custom hashers are hashed individually using `Promise.all`
- Tasks without custom hashers are batch-hashed using the hasher's
`hashTasks` method
- The function automatically filters out tasks that already have a hash
- Updated `processScheduledBatch` in task-orchestrator to use this new
function
2025-11-03 13:27:06 -05:00
Colum Ferry a084f205f9 fix(vite): ensure atomizer does not consider projects outside the project root (#33344)
## Current Behavior
Vitest's `createVitest` can be over-eager and include other projects in
the workspace when finding relevant test specifications.
This leads atomizer to look at relative paths outside the project root.

## Expected Behavior
Ensure that the plugin does not look at projects outside the project
root.
2025-11-03 16:46:57 +00:00
Jason Jean 8cc052f351 chore(repo): update nx to 22.1.0-beta.3 (#33341)
Updating Nx from 22.1.0-beta.2 to 22.1.0-beta.3
2025-11-03 11:30:25 -05:00
Jason Jean d64f45879b fix(maven): set migration version to 22.1.0-beta.4 (#33345)
## Current Behavior

The Maven migration version was incorrectly set to `0.0.8-beta.0` in the
migrations.json file.

## Expected Behavior

The migration version should be set to `22.1.0-beta.4` to align with the
Nx release version.

## Related Issue(s)

Fixes the migration version discrepancy in the Maven plugin.
2025-11-03 11:30:12 -05:00
Juri Strumpflohner 8f7c635894 docs(nx-cloud): embed self-healing ci videos (#33338)
Embeds videos about self-healing CI into the corresponding feature doc

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-11-03 11:25:03 -05:00
Jason Jean 7e0f66dbf3 feat(maven): upgrade to version 0.0.8 with automated migration (#33315)
## Current Behavior

The Maven plugin is at version 0.0.7 with no automated migration path
for users to upgrade their pom.xml files.

## Expected Behavior

Users can upgrade to Maven plugin 0.0.8 and have their pom.xml files
automatically updated via the Nx migration system.

## Changes Made

- Updated Maven plugin version from 0.0.7 to 0.0.8 in:
  - `packages/maven/package.json`
  - `packages/maven/src/utils/versions.ts`
  - `packages/maven/maven-plugin/pom.xml`

- Created `updateNxMavenPluginVersion()` utility function with:
  - Proper XML parsing using `@xmldom/xmldom` DOM API
  - Targeted updates only for `dev.nx.maven:nx-maven-plugin` elements
- Safe handling of all other version elements (dependencies, parent,
project, etc.)
  - Comprehensive error handling

- Added migration `0-0-8/update-pom-xml-version.ts` that:
  - Automatically runs when users upgrade to 0.0.8
  - Updates root pom.xml files via the utility function
  - Logs status of migrations performed

- Registered migration in `migrations.json`

- Added comprehensive unit tests (9 test cases):
  - Updates only the nx-maven-plugin version
  - Does not update other plugin versions
  - Handles missing files gracefully
  - Preserves XML formatting and structure
  - Handles multiple plugin references
  - Handles whitespace correctly
  - Only updates plugins, not parent/project versions
  - All tests passing (27/27)

## Test Plan

- [x] Unit tests pass (27 passing tests)
- [x] XML parsing correctly identifies and updates only
`dev.nx.maven:nx-maven-plugin`
- [x] Other version elements remain untouched
- [x] Migration registration validated
2025-11-03 10:49:18 -05:00
Craigory Coppola b401e6e348 feat(core): enable tui by default on windows (#33314)
## Current Behavior:

Tui is working, but only able to be enabled on windows via env vars or
explicit command line config

## Expected Behavior:

Tui is default on
2025-11-03 09:56:26 -05:00
Craigory Coppola a5d34fd9f9 chore(repo): add .NET format check + codeowners and unify native target handling (#33323)
## Current Behavior
Maven and .NET use a bespoke script to handle skipping an optional
native target in case a system is not setup on a dev's machine.

.NET isn't in codeowners

## Expected Behavior
This pull request introduces improvements to the build and formatting
workflows for the `.NET` and Maven plugins, streamlining the execution
of native targets and updating code ownership assignments. The changes
focus on refactoring build scripts to use a unified runner, adding new
formatting capabilities for .NET projects, and updating the CODEOWNERS
file for clearer team responsibilities.

**Build and Format Workflow Improvements**

* Refactored the `.NET` analyzer build command in
`packages/dotnet/project.json` to use the new `run-native-target.js`
script, replacing the previous direct script invocation.
[[1]](diffhunk://#diff-036c1a7f2e7d98f5a3207441f2ff1cb25b5b5a03343672ce473f4ff0189a5946L25-R25)
[[2]](diffhunk://#diff-42d990ddcbf8d3585553503097ee8b8d1fff8cb6e25e0cd545a87e11d64c03a8L1-L7)
* Added new `format-native` and `_format-native` targets to
`packages/dotnet/project.json`, enabling verification and fixing of code
formatting for the .NET analyzer using `dotnet format`.

**Unified Native Target Runner**

* Introduced the `scripts/run-native-target.js` script to standardize
running native build and install targets, controlled by environment
variables for skipping builds.

**Maven Plugin Build Refactor**

* Updated the Maven plugin's install workflow in
`packages/maven/maven-plugin/project.json` to use the new native target
runner, and removed the obsolete `scripts/build-maven-analyzer.js`
script.
[[1]](diffhunk://#diff-2763fe8a7c2989643f53370a14a08c06616e85c29340fd5bcfa1a67d0deaee7aL11-R11)
[[2]](diffhunk://#diff-972edab06956ad35145cbc20b8e250e7067fbb288b1f99c92661c24f64d3e69dL1-L7)

**Ownership Updates**

* Updated the `CODEOWNERS` file to assign `.NET`-related directories to
`@FrozenPandaz` and `@AgentEnder`, clarifying team responsibilities.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-11-01 13:30:41 -04:00
Colum Ferry 4507b5a03b feat(storybook): add support for storybook 10 (#33277)
## Current Behavior
We support Storybook 8 and 9


## Expected Behavior
Add support for Storybook 10, bringing Storybook support to 8, 9 and 10

## Related Issue(s)

Fixes #33141
2025-10-31 17:11:22 +00:00
Colum Ferry d7c8f6e772 chore(repo): add vitest scope (#33317) 2025-10-31 17:05:10 +04:00
Jason Jean 4fcdc9542e fix(maven): resolve maven dependencies from project roots (#33313)
## Current Behavior

Maven dependencies were not being resolved correctly from project roots,
which affected the dependency analysis in monorepos with Maven projects.

## Expected Behavior

Maven dependencies should be properly resolved from each project's root,
allowing Nx to correctly understand the project graph for Maven-based
projects.

## Changes Made

- Updated Maven plugin Kotlin code to properly resolve dependencies from
project roots
- Fixed devkit internal utilities to properly handle Maven dependency
resolution
- Updated TypeScript dependencies plugin to align with the new
resolution logic

## Files Changed

-
`packages/maven/maven-plugin/src/main/kotlin/dev/nx/maven/NxProjectAnalyzer.kt`
-
`packages/maven/maven-plugin/src/main/kotlin/dev/nx/maven/NxProjectAnalyzerMojo.kt`
- `packages/maven/src/plugins/dependencies.ts`
- `packages/dotnet/src/plugins/create-dependencies.ts`
- `packages/devkit/internal.ts`
- `packages/nx/src/devkit-internals.ts`

Fixes #XXXXX

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-30 18:17:48 -04:00
Craigory Coppola 29a61429a5 chore(repo): enable codeql for csharp code (#33301)
## Current Behavior
CodeQL is not enabled for C#, but C# is in the nx repo

## Expected Behavior
CodeQL is enabled on C#

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-30 17:33:30 -04:00
Jack Hsu b28366395f fix(vite): prevent race-condition when importing @vitejs/plugin-vue (#33307)
This PR primes the cache for `@vitejs/plugin-vue`, similar to how we
already do for `esbuild`. When `vite.config.ts` is compiled into CJS,
then doing `require('@vitejs/plugin-vue')` may error with a race
condition if an `import` of the same module is in progress.

Fixes #NXC-3289

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-30 12:33:47 -04:00
Colum Ferry 4ec3a99544 chore(node): do not have assertions around killPorts (#33294) 2025-10-30 10:35:33 -04:00
Jack Hsu 9c326bb8e9 chore(repo): use vitest.config.mts to force ESM (#33310)
If it is resolved as CJS it may run into issues?
2025-10-30 10:34:26 -04:00
MaxKless 0347e67334 feat(misc): remove CI investigation recommendations from agent rules (#33309)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
there are recommendations for using the CIPE fixing tools but they are
being removed

## Expected Behavior
removed tools should not be mentioned anymore.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-30 10:33:14 -04:00
Copilot ad0b44f05f docs(maven): add nx show projects, update command example to nx verify, and simplify configuration (#33302)
Completed Maven documentation updates:

- [x] Add `nx show projects` command to display Maven projects after
initialization
- [x] Change example from `nx build` to `nx verify` 
- [x] Simplify configuration section to use `plugins: ["@nx/maven"]`
with defaults
- [x] Update configuration description to accurately explain how targets
are created

## Summary

Successfully updated the Maven plugin documentation:

1. **Added `nx show projects` command** - Shows users how to list
discovered Maven projects after running `nx init`
2. **Changed example to `nx verify`** - Uses a more appropriate Maven
lifecycle phase that includes tests and verification
3. **Simplified configuration** - Updated the configuration section to
show the simpler string array syntax `plugins: ["@nx/maven"]`
4. **Corrected target creation description** - Updated the text to
accurately explain that `@nx/maven` automatically retrieves information
about projects from Maven and creates targets for each phase, goal, and
some additional targets for CI

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> Expand this section
https://nx.dev/docs/technologies/java/maven/introduction#add-nx-to-a-maven-workspace
> 
> With instructions to run the following
> 
> nx show projects
> 
> To see a list of Maven projects
> 
> And change nx build Maven project to nx verify Maven project
> 


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: FrozenPandaz <8104246+FrozenPandaz@users.noreply.github.com>
2025-10-30 10:05:00 -04:00
MaxKless ac8b58191a chore(repo): refactor dev container setup to work with mise (#33291)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
devcontainer wasn't working reliably

## Expected Behavior
devcontainer should work reliably and reuse the configuration setup we
have for all these different tools that are needed
2025-10-30 09:45:13 -04:00
MaxKless 56633a7b1b fix(core): also look in .nx installation when reading nx.json extends (#33306)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
in a `.nx` installation, `require.resolve` won't find the `extends`
preset nx.json file because there are no root `node_modules`

## Expected Behavior
in a `.nx` installation, the nested `.nx/installation/node_modules` are
also used to try and resolve the preset.
2025-10-30 09:10:50 -04:00
Eric Büttner 2f3b7d09b5 fix(nextjs): ensure eslint-config-next matches Next.js 14 and 15 versions (#30259)
This PR builds on the previous fix that ensured `eslint-config-next` was
correctly installed when using Next.js 15. #30258

Now, the logic has been further refined to dynamically determine the
installed Next.js version and install the corresponding
`eslint-config-next` version accordingly.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

### Current Behavior

- `next@~15.1.4` is installed
- `eslint-config-next@14.2.16` is installed (incorrect for Next.js 15)

### Expected Behavior

If Next.js 15 is detected -> eslint-config-next@15.1.4 is installed
If Next.js 14 is detected -> eslint-config-next@14.2.16 is installed

### GitHub Repo

https://github.com/tuffz/new-nx-with-preset-nextjs

### Steps to Reproduce

1. Run the following command from the official documentation:
`npx create-nx-workspace@latest --preset=next`
3. Open `package.json` and check the installed dependencies

- `next@~15.1.4` is installed
- `eslint-config-next@14.2.16` is installed

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #30257 (& #30258)
2025-10-29 22:53:04 +00:00
Copilot 4a07faf15c docs(nx-dev): add GitHub star widget back to documentation sidebar (#33289)
Adds the "Give us a star" CTA back to the Astro documentation in both
the left navigation sidebar and right table of contents sidebar.

## Implementation

- **Middleware** (`github-stars.middleware.ts`): Fetches star count from
`nrwl/nx` via GitHub GraphQL API with 1-hour cache. Exports
`DEFAULT_STAR_COUNT` (23k) for fallback when `GITHUB_TOKEN` unavailable.

- **Components**: Integrated existing `GitHubStarWidget` React component
into `Sidebar.astro` (bottom of nav) and `TableOfContents.astro` (above
"On this page") using `client:load` hydration.

- **Configuration**: Added middleware to `astro.config.mjs` route
middleware chain.

## Screenshot

![GitHub star widget in
documentation](https://github.com/user-attachments/assets/3d746408-d05b-429d-98ec-1fc8c886646d)

Widget appears in both sidebars showing star count and linking to
https://github.com/nrwl/nx with analytics tracking.

Fixes https://linear.app/nxdev/issue/DOC-268/add-give-us-a-star-cta-back

> [!WARNING]
>
> <details>
> <summary>Firewall rules blocked me from connecting to one or more
addresses (expand for details)</summary>
>
> #### I tried to connect to the following addresses, but was blocked by
firewall rules:
>
> - `api.npmjs.org`
> - `repo.gradle.org`
> - `staging.nx.app`
> - `telemetry.astro.build`
>
> If you need me to access, download, or install something from one of
these locations, you can either:
>
> - Configure [Actions setup
steps](https://gh.io/copilot/actions-setup-steps) to set up my
environment, which run before the firewall is enabled
> - Add the appropriate URLs or hosts to the custom allowlist in this
repository's [Copilot coding agent
settings](https://github.com/nrwl/nx/settings/copilot/coding_agent)
(admins only)
>
> </details>

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> Issue Title: Add "Give us a star" CTA Back
> Issue Description: e.g.
`nx-dev/ui-common/src/lib/github-star-widget.tsx`
> 
> This goes in the sidebar, but we can also see if we want to put it
elsewhere in the new docs.
> Fixes
https://linear.app/nxdev/issue/DOC-268/add-give-us-a-star-cta-back
> 
> 
> Comment by User 5261ea6c-c70c-4295-a64f-a792be93af22:
> [https://github.com/nrwl/nx](https://github.com/nrwl/nx)
> 
> Comment by User d484ef82-7f7d-4a95-be09-9d82ca3905dc:
> 📋 I wasn't able to determine which GitHub repository to work in.
> 
> I think it's one of these, but can you tell me which one is right?
> 
> Comment by User d484ef82-7f7d-4a95-be09-9d82ca3905dc:
> Waiting for https://linear.app/nxdev/profiles/james to link their
GitHub account. [Click to authorize
→](https://linear.business.githubcopilot.com/linear/auth)
> 
> Comment by User :
> This thread is for an agent session with githubcopilot.
> 
> 


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/nrwl/nx/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: JamesHenry <900523+JamesHenry@users.noreply.github.com>
Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-10-29 14:50:12 -04:00
Caleb Ukle 84b0debba8 docs(nx-cloud): re-split out vcs guides to prevent header overlap in ToC (#33282)
guides couldn't be merged into one page w/ tabs and keep consistent
headers. so we're back to splitting them out. but all under a
source-control-integration parent route. so we don't need to do any
redirects and such as the index route will contain the links to each one
2025-10-29 13:15:19 -05:00
Philip Fulcher b876ced24f docs(nx-dev): revise Nx 22 release article (#33287)
---------

Co-authored-by: Juri <juri.strumpflohner@gmail.com>
2025-10-29 11:59:59 -04:00
Philip Fulcher f52d58675a docs(nx-dev): remove webinar notifier for October webinar (#33295) 2025-10-29 10:06:29 -05:00
Ajit Panigrahi e56abcf517 docs(core): remove duplicate install instructions (#33278)
Removed duplicate information about installing Nx globally.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Duplicate line.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Removed duplicate line.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-29 08:37:31 -05:00
Juri 6b95de3ede docs(nx-dev): add article about Storybook and watching buildable libs 2025-10-29 14:30:34 +01:00
Craigory Coppola 3e6e0681d0 chore(repo): remove files accidentally committed while investigating socket issues (#33284)
Some investigation files were accidentally included in a merge
2025-10-28 18:40:27 -04:00
Jason Jean e97b3fa0e3 chore(repo): update nx to 22.1.0-beta.2 (#33283)
Updating Nx from 22.1.0-beta.1 to 22.1.0-beta.2
2025-10-28 18:24:29 -04:00
Caleb Ukle 221ad580d8 docs(nx-cloud): document missing env vars (#33281)
- add `NX_CLOUD_API` (and nxCloudUrl for nx.json)
- add `NX_NO_CLOUD`

https://6900e6fdb1379200085c29ca--nx-docs.netlify.app/docs/reference/environment-variables#nx-cloud-environment-variables
2025-10-28 15:56:49 -04:00
MaxKless eb4281d7dd fix(core): make sure that gemini contextFileName is string before trying to resolve (#33280)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
the implementation is brittle and will fail if `contextFileName` is not
a string

## Expected Behavior
we should just not handle other things that folks are putting in there.
but not fail

---------

Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-28 19:34:07 +00:00
Leosvel Pérez Espinosa f76f1ce3df chore(repo): dogfood pnpm catalogs (#33232)
Dogfoods the Pnpm Catalogs feature in the Nx repo. This is the first
step to move all dependencies to Pnpm Catalogs definitions. More work
will be done incrementally later as we consolidate package versions
across the repository.

The initial list of dependencies moved to Pnpm Catalogs is:

- Angular packages
- React packages
- TypeScript packages
- Jest packages
- Rspack packages
- Some common utilities
2025-10-28 19:09:07 +00:00
Jason Jean 54a4eb4da7 chore(repo): update nx to 22.1.0-beta.1 (#33271)
Updating Nx from 22.1.0-beta.0 to 22.1.0-beta.1

---------

Co-authored-by: Craigory Coppola <craigorycoppola@gmail.com>
2025-10-28 14:04:53 -04:00
Craigory Coppola d1653eca05 fix(core): turn v8 serializer off by default but fallback to it if json serialization fails (#33274)
## Current Behavior
We have tried to enable v8 serialization again... but it still seems
problematic. We don't want to revert again... so we evaluated some
options:

1. Disable by default
2. Disable for the single client method we think may be problematic
3. Fall back to JSON if v8 fails
4. Disable by default and still fall back if JSON fails

## Expected Behavior
We decided to update Nx such that the default behavior will be a
combination of #4, and #2. So by default we use JSON, if that
serialization fails we'll try v8... but there's an exception so the
method we know to be an issue will never try v8.

If you opt in to v8 by default, the combo changes to #3 + #2. So, by
default we'd use v8... if it fails try json... never try v8 for
processInBackground

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-28 14:03:58 -04:00
Juri Strumpflohner 160b4cce34 feat(nx-dev): add downloadable resources page and React book blog post 2025-10-28 16:12:39 +01:00
Emilio Heinzmann 1089ffc41b fix(docker): guard commitSha null in plugin interpolation (#33275)
## Current Behavior
Docker plugin assumed `commitSha` was always non-null; when `null`,
`shortCommitSha.slice` caused a runtime error during target
interpolation.

## Expected Behavior
Plugin should succeed even if latest commit SHA cannot be resolved,
simply omitting shortCommitSha-based substitutions.

## Changes
- Added null guard: `shortCommitSha` now set to `commitSha ?
commitSha.slice(0,7) : null`.
- Added test "should not throw when commitSha is null" verifying node /
target creation succeeds.
- No breaking changes; only broadens safe input surface.

## Additional notes
Logic only executes when `commitSha` was previously null (error case);
normal paths unchanged. If consumers interpolate `{shortCommitSha}`,
they should handle possible null (unchanged if interpolation is already
optional).
2025-10-28 13:43:06 +00:00
James Henry f2649cbaa6 feat(vite): add atomizer support for vitest (#33265) 2025-10-28 15:52:34 +04:00
Juri 43a5e163ce docs(nx-cloud): self-healing CI classification customization 2025-10-27 21:44:12 +01:00
Jack Hsu 39df8c9b76 chore(nx-dev): remove link checker from build so it is only checked during CI not deploy (#33272)
This PR removes the need to check links during deploy and instead
enforces it in CI. This removes the need to build astro-docs when
building next.js app.

Reduces Vercel build from 10-11 mins to 6.5 mins.

<img width="1231" height="94" alt="image"
src="https://github.com/user-attachments/assets/ad5d4459-f917-4609-8c00-151f61dc29d6"
/>
2025-10-27 15:58:15 -04:00
Louie Weng 29467dac05 docs(nx-cloud): edit release notes for 2025.07.3 (#33270)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Update release notes entry tor 2025.07.3 - short link support for DTE
summary

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-27 17:08:15 +00:00
Rares Matei 18b3c52a3c chore(repo): run workspace create and rollup tests serially (#33252)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

You can see the issue here:
https://staging.nx.app/cipes/68fba96042d3126ee8ec0d19/analysis?runGroup=18785923031-1-linux

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes BAC-1387
2025-10-27 16:35:43 +00:00
Jack Hsu f36c61f530 fix(webpack): prevent errors when importing @nx/webpack before typescript is installed (#33251)
This PR wraps one of the exports of `@nx/webpack` within a dynamic
function that ultimately requires `tsquery`. This causes an issue in
yarn v1 where `typescript` cannot be resolved thus causing an error when
`@nx/webpack` is imported.

The errors happens on every new workspace that starts from empty:

```
npx create-nx-workspace --preset=ts --pm=yarn
nx add @nx/web
nx g @nx/web:app apps/demo --bundler=webpack
```

Results in:

```

 NX   Cannot find module 'typescript'

Require stack:
- /private/var/folders/p4/6tvkdn_11xlc_2j999ybhbkr0000gn/T/tmp-59809-4kedkj5a1XsO/node_modules/@phenomnomnominal/tsquery/dist/src/ast.js
- /private/var/folders/p4/6tvkdn_11xlc_2j999ybhbkr0000gn/T/tmp-59809-4kedkj5a1XsO/node_modules/@phenomnomnominal/tsquery/dist/src/index.js
- /private/var/folders/p4/6tvkdn_11xlc_2j999ybhbkr0000gn/T/tmp-59809-4kedkj5a1XsO/node_modules/@nx/webpack/src/generators/convert-config-to-webpack-plugin/lib/extract-webpack-options.js
- /private/var/folders/p4/6tvkdn_11xlc_2j999ybhbkr0000gn/T/tmp-59809-4kedkj5a1XsO/node_modules/@nx/webpack/src/generators/convert-config-to-webpack-plugin/convert-config-to-webpack-plugin.js
- /private/var/folders/p4/6tvkdn_11xlc_2j999ybhbkr0000gn/T/tmp-59809-4kedkj5a1XsO/node_modules/@nx/webpack/index.js
- /private/tmp/web4/node_modules/@nx/devkit/src/utils/package-json.js
- /private/tmp/web4/node_modules/@nx/devkit/src/generators/to-js.js
- /private/tmp/web4/node_modules/@nx/devkit/public-api.js
- /private/tmp/web4/node_modules/@nx/devkit/index.js
- /private/tmp/web4/node_modules/@nx/web/src/generators/application/application.js
- /private/tmp/web4/node_modules/nx/src/config/schema-utils.js
- /private/tmp/web4/node_modules/nx/src/command-line/run/executor-utils.js
- /private/tmp/web4/node_modules/nx/src/project-graph/utils/project-configuration-utils.js
- /private/tmp/web4/node_modules/nx/src/utils/package-json.js
- /private/tmp/web4/node_modules/nx/bin/nx.js
Pass --verbose to see the stacktrace.

error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
```

Note: Other generators like React/Vue are fine since they have
dependency on tsquery, which installs typescript.

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-27 12:31:56 -04:00
Craigory Coppola 98e510b47e fix(core): split lockfile cache and other performance improvements (#33256)
## Summary
This PR includes three performance and correctness improvements:

1. **Split lockfile cache into separate node and dependency caches** -
Previously, both createNodes and createDependencies would read/write the
entire cache. Now each manages its own cache independently:
   - `parsed-lock-file.nodes.json` for external nodes
   - `parsed-lock-file.dependencies.json` for dependencies

2. **Prevent duplicate plugin resolution calls with promise cache** -
Added a promise cache to prevent concurrent duplicate calls to
`retrieveProjectConfigurationsWithoutPluginInference` when multiple
plugins fail to resolve simultaneously

3. **Normalize targets in separate loop after validation** - Moved
target normalization out of the validation loop to ensure proper
sequencing

## Test plan
- [ ] Tests pass (currently failing in CI - needs investigation)
- [ ] Build succeeds
- [ ] Lint passes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-27 10:33:18 -04:00
Jack Hsu 514005a7c9 fix(core): prevent undefined importer crash in pnpm lockfile parsing (#33223)
When stringifying a pnpm v9 lockfile with workspace packages, Nx crashes
with: "Cannot destructure property 'specifiers' of 'projectSnapshot' as
it is undefined."

This occurs when:
- The lockfile has a root importer with `link:` references to workspace
packages
- But the lockfile is missing the workspace package importer entries
- The code tries to access `importers[importerPath]` which returns
undefined
- This undefined value gets added to the output lockfile
- During serialization, it crashes when trying to destructure undefined

Workspace packages with missing importers are now silently skipped
during lockfile serialization. This prevents the crash and allows Nx to
continue operating with out-of-sync lockfiles.

The fix adds a null check before adding workspace dependency importers
to the output lockfile.

Closes NXC-3244
2025-10-27 10:27:38 -04:00
Craigory Coppola a52e7b0f6e Reapply "fix(core): add option to use v8 for daemon message serialization (#33192)
This reverts commit 54db861b72.

## Current Behavior
Daemon messaging is all done over JSON messages

## Expected Behavior
Daemon messages use v8 serialization to avoid string length issues

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-27 10:11:54 -04:00
Sander Boelhouwers 3f7119a821 fix(core): add accept header to http remote cache get (#33093)
With the Accept header in place during the retrieval of cache, the
client always expects an octet-stream from the server.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
When the `Accept` header is missing, you might not get the correct data
depending on the underlying implementation of a self hosted cache
solution. We use AWS API Gateway which has a hard requirement for
`Accept` to determine how it should convert the data.


Fixes #33092
2025-10-26 20:52:04 -04:00
Juri a082693838 docs(misc): add webinar banner to astro docs 2025-10-25 19:06:57 +02:00
Caleb Ukle 630d227a5f docs(gradle): update gradle links and improve graph comps (#33255)
- **docs(gradle): make sure gradle refs point to /java/gradle now**
- **docs(gradle): add syntax highlighting for diff codeblock**
- **fix(nx-dev): improve graph loading behavior to prevent pop-in
flash**
2025-10-24 19:48:48 -04:00
Jack Hsu 66a437a42a docs(misc): add nx-cloud start-agent command to CLI reference (#33250)
This PR adds the `nx-cloud start-agent` command used for manual DTEs to
the reference page.

Also update table code elements such that they don't wrap.

<img width="872" height="584" alt="image"
src="https://github.com/user-attachments/assets/b73a038d-e0de-421a-b430-2d76c0ec4345"
/>


Closes DOC-273, DOC-310

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-24 16:08:49 -05:00
Philip Fulcher 7712d2a656 docs(nx-dev): update Nx 22 release article (#33245) 2025-10-24 13:35:31 -04:00
Louie Weng 215876c398 feat(gradle): add custom installation path to options (#33187)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

We search for the gradle wrapper of a project by first looking at the
project root, then traversing upwards to the workspace root. If a
workspace has a separate gradle project defined that does not contain a
wrapper, then Nx will error.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Add a field to the gradle plugin that will allow users to specify a
custom gradle installation within their workspace. Nx will check for a
gradle wrapper that the specified location when executing gradle tasks.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes NXC-3147
2025-10-24 17:14:33 +00:00
Craigory Coppola 7021056fae fix(core): ensure daemon writes project graph cache to disk consistently (#33217)
## Current Behavior

When the Nx daemon returns a cached project graph from memory (without
recomputing), it does not write the graph to disk. This creates a
cache/daemon mismatch scenario:

1. Daemon has valid project graph in memory
2. A non-daemon process (fallback when daemon fails) encounters errors
and writes cache to disk with those errors
3. Parent process gets clean graph from daemon
4. Forked executor processes read from disk cache which contains errors
5. The errors cause `readProjectGraphCache()` to return `null` (when no
`minimumComputedAt` is provided)
6. This triggers a misleading "No cached ProjectGraph is available"
error instead of surfacing the actual errors

This issue manifests intermittently in CI environments, especially when:
- Daemon connection timeouts occur
- Multiple concurrent processes are running (DTE scenarios)
- File system latency is high

## Expected Behavior

The daemon should always write its current project graph to disk
whenever it returns it, ensuring the disk cache stays synchronized with
the daemon's in-memory cache. This prevents stale or errored caches from
persisting when the daemon has a valid graph.

## Related Issue(s)

Fixes NXC-3030

## Implementation Details

Modified `getCachedSerializedProjectGraphPromise()` in
`packages/nx/src/daemon/server/project-graph-incremental-recomputation.ts`
to write the project graph cache to disk after retrieving the result,
even when reusing the in-memory cached graph.

The fix ensures that:
- Any errored cache written by a non-daemon process gets overwritten by
the daemon's valid graph
- Forked executor processes always read a consistent cache that matches
what the daemon served to the parent process
- Real errors are properly surfaced instead of being hidden by a generic
"no cache available" message

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-24 16:56:40 +00:00
Jack Hsu 442f745b23 fix(vite): nxViteTsPaths supports local path aliases (#33241)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Local `tsconfig.app.json` is never picked up due to wrong resolved path.

## Expected Behavior
Local `tsconfig.app.json` is picked up and the path aliases are added to
Vite.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #33231
2025-10-24 12:53:57 -04:00
Benjamin Cabanes 7c978ed8c9 docs(nx-dev): sunset Explain with AI for Self-Healing CI (#33243)
Removed "Explain with AI" feature documentation and redirected all URLs
to Self-Healing CI. Added sunset notice to blog posts, updated
configuration files, and preserved historical content for reference.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-24 12:45:27 -04:00
Colum Ferry e57c8a71b2 fix(docker): handle dockerfile at project root tag (#33236)
## Current Behavior
When `Dockerfile` is at project root, we attempt to append `--tag .`
which is invalid for docker.

## Expected Behavior
Ensure that if `Dockerfile` is at project root, we use `workspaceRoot`
to determine the `--tag`.
Note, this tag is primarily used as a deterministic method for Nx to
find the correct docker image when calling `docker run` and `nx release`
2025-10-24 17:36:49 +01:00
Hugo Burton 4a4b780685 fix(core): stream without prefixes showing tui (#33194)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
When using `--output-style=stream-without-prefixes` nx incorrectly shows
the TUI instead of streaming

## Expected Behavior
When using `--output-style=stream-without-prefixes`, nx should stream
with no prefixes just like it does with `--output-style=stream`

## Related Issue(s)


Fixes #32535

Co-authored-by: Hugo Burton <hugo.burton@westpac.com.au>
2025-10-24 12:31:31 -04:00
Jason Jean 1cf2c6665f chore(core): improvements to native build and error handling (#33238)
## Current Behavior

`node_modules` are being copied during copy-local-native

## Expected Behavior

`node_modules` are not being copied during `copy-local-native`
2025-10-24 12:13:18 -04:00
Jason Jean 2f1712f894 chore(repo): update nx to 22.1.0-beta.0 (#33244)
Updating Nx from 22.0.0-rc.0 to 22.1.0-beta.0
2025-10-24 12:11:44 -04:00
Jason Jean 81fd8b4170 chore(maven): only run nx-maven-plugin:install for maven e2e tests (#33242)
## Current Behavior

Maven is installed as a global dependency for all e2e targets
(`e2e-local`, `e2e-ci--**/**`, and `e2e-macos-ci--**/*`), even when only
the Maven e2e tests need it.

## Expected Behavior

Maven should only be installed as a dependency for the Maven e2e tests
that actually use it, avoiding unnecessary installations for other e2e
test projects.

## Changes Made

- Removed `nx-maven-plugin:install` from the global e2e target defaults
in `nx.json`
- Added `nx-maven-plugin:install` as a specific dependency to the Maven
e2e project targets in `e2e/maven/project.json`

This optimization ensures Maven is only installed when needed, reducing
unnecessary build overhead for other e2e tests.
2025-10-24 11:39:20 -04:00
Colum Ferry 3047fbda9e fix(core): should find dockerfiles to suggest installing docker plugin (#33234)
## Current Behavior
`nx init` does not search for `Dockerfile` patterns to suggest adding
the `@nx/docker` plugin.

## Expected Behavior
`nx init` finds and suggests `@nx/docker` plugin

Fixes NXC-3319
2025-10-24 11:23:50 -04:00
Colum Ferry 09fb0b693a chore(repo): update codeowners for docker (#33240) 2025-10-24 15:45:13 +01:00
Leosvel Pérez Espinosa 6788fccbd6 fix(core): fix swapped arguments when resolving catalog references from the filesystem (#33237)
Fixes the order of the arguments in invocations to
`resolveCatalogReference` when resolving catalog references from the
filesystem (not using a `Tree`).
2025-10-24 13:52:58 +00:00
Leosvel Pérez Espinosa f1fe6c0e24 fix(misc): handle null exit codes from crashed child processes (#33163)
## Current Behavior

In some scenarios, when some processes terminate unexpectedly (e.g.
crashed due to OOM), the task runner will incorrectly determine their
exit code to be 0. This results in Nx storing the task results as a
success, which can cause cache hits with false positive successes.

## Expected Behavior

When processes terminate unexpectedly (e.g. crashed due to OOM), the
task runner should correctly determine their exit code from the signal,
and it should never be 0. The stored task result should not be marked as
successful.

## Related Issue(s)

Fixes #29204
2025-10-24 09:26:34 -04:00
Colum Ferry 54bd3c498f fix(docker): handle undefined options when creating graph (#33235)
## Current Behavior
When `@nx/docker` is registered via string only (`nxJson.plugins:
["@nx/docker"]`, project graph creation fails because we try to access
`options.buildTarget`.

## Expected Behavior
Handle undefined `options` gracefully, and still create the default
target.

## Related Issue(s)

Fixes NXC-3320
2025-10-24 09:13:08 -04:00
Craigory Coppola fa45d79e55 chore(repo): remove check commit (#33227)
check-commit is superceded by the pr title target
2025-10-23 22:51:23 +00:00
Jason Jean b1a33ee608 feat(core): update rust (#33220)
## Current Behavior
Dependencies are outdated and Rust tooling needs to be updated.

## Expected Behavior
Rust dependencies are updated to their latest compatible versions.

## Changes
- Updated Rust dependencies
- Rebased with latest `origin/master`
- Updated pnpm lock file

## Related Issue(s)
None
2025-10-23 18:45:00 -04:00
Craigory Coppola b9af6a74b8 docs(dotnet): add migration guide from @nx-dotnet/core (#33206)
## Current Behavior
No docs describing migration path

## Expected Behavior
Docs describing migration path

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Caleb Ukle <caleb@nrwl.io>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-23 18:20:14 -04:00
Craigory Coppola c4f1f53b70 chore(repo): mark dotnet e2e as parallel 1 (#33226)
## Current Behavior
.NET sometimes bails on a failed mutex in e2e

## Expected Behavior
it runs only 1 at a time

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-23 17:27:22 -04:00
Craigory Coppola a4d9ad9c66 chore(gradle): format files (#33225) 2025-10-23 21:10:47 +00:00
Jack Hsu d3058a726f docs(core): update search filter on createnodes compat page (#33216)
This PR updates one filter from `Reference` to `References` to keep
consistency with our other pages.

Before (Both Reference and References show up):

<img width="137" height="206" alt="image"
src="https://github.com/user-attachments/assets/729379b6-0315-4b99-af90-fd96b3e96830"
/>


After (Just References, and every filter is plural):

<img width="736" height="535" alt="image"
src="https://github.com/user-attachments/assets/9c2ecbcd-67c4-4923-9d05-e2081b0e9dba"
/>

Closes DOC-309
2025-10-23 16:47:53 -04:00
Jack Hsu 97d38f75ee fix(nx-dev): add copy-docs back as a dep of serve (#33215)
It was removed when the scripts were cleaned up during next.js->astro
migration. Adding this back since blog posts need to be synced first
before serving.
2025-10-23 16:47:46 -04:00
Craigory Coppola d717414ec2 fix(core): prevent error message containing [object Object] for invalid {workspaceRoot} placement (#33203)
## Current Behavior

When project configuration errors occur due to invalid token usage
(e.g., `{workspaceRoot}` in the middle of a path), error messages don't
provide sufficient context about where the error occurred.

## Expected Behavior

Error messages should include:
- For project-level errors: the project and target context (e.g.,
"libs/my-app:build")
- For nx.json targetDefaults errors: the nx.json context (e.g.,
"nx.json[targetDefaults]:test")

This makes it much easier for users to locate and fix the configuration
issue.

## Changes

This PR adds comprehensive integration tests to verify the improved
error messaging:
- Test for project-level invalid token usage showing project:target
context
- Test for nx.json targetDefaults invalid token usage showing nx.json
context

Tests use mock plugins to simulate realistic scenarios where invalid
`{workspaceRoot}` token usage would occur, ensuring the error messages
contain the expected context information.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
2025-10-23 20:41:38 +00:00
Chau Tran b59fb033b9 docs(nx-cloud): add SCIM section for SAML Okta (#33222)
- [x] add SCIM for SAML okta
- [x] break up SAML Auth into Azure SAML Auth and Okta SAML Auth

---
Azure SAML Auth and Okta SAML Auth as cards under Single Tenant
<img width="777" height="649" alt="image"
src="https://github.com/user-attachments/assets/3353e804-ea03-468b-82e5-acf28a76bddd"
/>

---
Azure SAML Auth and Okta SAML Auth on sidebar
<img width="242" height="286" alt="image"
src="https://github.com/user-attachments/assets/27365e7f-82ba-4335-9f8d-45b4d61aa3a4"
/>

---
Okta SCIM docs ToC
<img width="1023" height="872" alt="image"
src="https://github.com/user-attachments/assets/9221b31f-004b-4026-9430-9ed12fa7d0dc"
/>
2025-10-23 15:27:45 -05:00
Caleb Ukle 4073537270 fix(nx-dev): update docs code blocks usage (#32998)
by default code blocks will get text as the lang if not set or the lang
is not supported
but we should be so I don't have to look at the warnings in the terminal
output 😅
also remove the frame=none since the team preferred to have the terminal
frame

Example of invalid codeblock messages

![wm_2025-10-15T11-26-05@2x](https://github.com/user-attachments/assets/33161287-3fa3-4897-a5dd-0de3a47b37fe)

Also added conformance rule for validating image pages for public and
src/assets/ directory

examples of incorrect absolute path ref from "public" folder and
incorrect absolute path:


![wm_2025-10-15T10-23-41@2x](https://github.com/user-attachments/assets/354800a4-6628-4236-87d9-2590cb56fe54)



fixes DOC-242
fixes DOC-259
2025-10-23 16:22:20 -04:00
Philip Fulcher 59cf495fe1 docs(nx-dev): add nx 22 release article (#33219) 2025-10-23 19:09:10 +00:00
Colum Ferry 0a8272d7e7 feat(docker): support inferring additional args for targets with interpolation support (#32892)
## Current Behavior
Currently, when configuring the `@nx/docker` plugin, we only set the
target name and a basic command.
The intention was that targetDefaults might be able to be used to
configure additional args, but this falls short in some places.


## Expected Behavior
Allow setting additional args when configuring the `@nx/docker` plugin
that supports interpolated values, similar to `versionSchemes`.

This will allow additional flexibility when setting up the docker build
command such as:

```json
{
  "plugin": "@nx/docker",
  "options": {
     "buildTarget": {
       "name": "docker:build",
       "args": ["-t {projectName}"]
     }
  }
}
```

This means that we can use `nx run-many -t docker:build` and it will
successfully add the name of the projects into the tag.

This is one example, other examples include being able to set individual
Docker Layer Caching where each registry needs a unique name.
2025-10-23 14:48:47 -04:00
Jason Jean 500a4c92ee fix(maven): use File.isAbsolute for cross-platform path detection (#33195)
## Current Behavior

The Maven plugin currently checks if a path is absolute by using
`outputFile.startsWith("/")`. This only works on Unix-like systems and
fails on Windows where absolute paths start with a drive letter (e.g.,
`C:\`).

## Expected Behavior

The Maven plugin should correctly identify absolute paths on all
platforms (Windows, macOS, Linux) using the platform-agnostic
`File.isAbsolute()` method.

## Related Issue(s)

<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

N/A - This is a proactive bug fix for cross-platform compatibility.

---

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-23 14:04:48 -04:00
Emilio Heinzmann b2ba8c2770 feat(release): support {versionActionsVersion} in docker version scheme (#33178) 2025-10-23 21:00:47 +04:00
Colum Ferry 87c8d49b7e fix(core): continue execution when cloud client is unavailable (#33214)
## Current Behavior
When Nx Cloud is used, but the Nx Cloud client is unavailable, an error
is thrown and commands are not run.

## Expected Behavior
When Nx Cloud is used, but the client is unavailable, continue execution
without Nx Cloud.

## Related Issue(s)

Fixes NXC-3175
2025-10-23 17:48:47 +01:00
Rares Matei 516db5c43d chore(repo): fix task flakiness (#33109)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Tests either cause agents to run out of memory: 
<img width="956" height="358" alt="image"
src="https://github.com/user-attachments/assets/e55bae05-7757-46e7-88ed-158f72411195"
/>
<img width="1278" height="336" alt="image"
src="https://github.com/user-attachments/assets/40dc8dd6-4409-461e-b75a-5c1c36551da5"
/>

Or setup tasks fail due to network flakiness:
https://staging.nx.app/runs/J1qWVZA7K5



## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

A fully affected, cache busted task graph should run without any
failures.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-23 12:32:07 -04:00
MaxKless 44187bde41 fix(misc): add explanatory footer to ai agents prompts (#33182) 2025-10-23 18:08:39 +02:00
Craigory Coppola a8d6b0ad65 docs(dotnet): improve dotnet docs around option types (#33210)
This pull request updates the documentation for configuring .NET target
types in the `nx.json` file to provide clearer instructions and
examples. The changes make it easier to understand how to customize
target names and configurations for the `@nx/dotnet` plugin.

Improvements to configuration documentation:

* Added a section describing how each target type can be configured,
including renaming targets, customizing options, disabling targets, and
specifying additional properties.
* Updated the example configuration to show how to rename targets (e.g.,
"build" to "compile"), add configurations (e.g., production
optimization), set dependencies between targets, and disable targets
(e.g., disabling "pack").
* Clarified that targets are created with the configuration specified in
the `nx.json` `plugins` array, rather than just with custom names.
2025-10-23 11:55:59 -04:00
Colum Ferry 1002ad5198 fix(node): migrate to koa 3.0.3 (#33208)
Update `koa` to `3.0.3`
2025-10-23 16:10:45 +01:00
Jack Hsu b3c3e40490 docs(misc): update nx release documentation for v22 changes (#33189)
Changes:
- Update all Nx Release guides to show the config for v22 and prior
verisons
- Update `nx.json` reference page to show `releaseTag` property and what
they are prior to v22
- Add example showing all releaseTag options in v22 and < v22 (pattern,
requireSemver, strictPreid, preferDockerVersion, checkAllBranchesWhen)
- Update asides to use "Nx 22 Changes" instead of "Breaking Changes"
(properties deprecated, not breaking until v23)
- Fix `version.generatorOptions.updateDependents` →
`version.updateDependents` reference

Closes DOC-261

<img width="781" height="513" alt="image"
src="https://github.com/user-attachments/assets/3b8a13c4-e863-40da-87cb-ae5a6264bb9e"
/>

<img width="866" height="626" alt="image"
src="https://github.com/user-attachments/assets/e02fd179-80d7-42ea-993c-5da0ed793eaa"
/>

<img width="796" height="408" alt="image"
src="https://github.com/user-attachments/assets/14bb5c54-089c-4ed3-8774-731cbdaa37a5"
/>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-23 10:30:29 -04:00
James Henry ab82c7b1be docs(nx-dev): add guides for Release Groups and Update Dependents (#33200)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-23 09:08:57 -04:00
James Henry 7c2f3511e2 docs(nx-dev): add dedicated guide for nx release programmatic API (#33198)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

The first-class programmatic API of nx release is only documented within
the manage releases introduction and is incomplete (`ReleaseClient` is
not covered at all).

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The programmatic API has its own in depth guide, which is then
cross-referenced from the manage releases guide. `ReleaseClient` is now
documented including its new Nx 22 features.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-23 08:47:17 -04:00
Colum Ferry 2402ecb576 docs(release): update docs to use correct releaseTag object notation (#33202)
Update docs to match new API

---------

Co-authored-by: James Henry <james@henry.sc>
2025-10-23 13:37:49 +01:00
James Henry 3847528d44 chore(repo): remove unused typedoc-theme (#33196)
Deletes the unused typedoc-theme project from the root of the workspace
2025-10-23 08:15:29 -04:00
James Henry b92df85b97 chore(repo): clean up images (#33197) 2025-10-23 15:55:12 +04:00
Craigory Coppola 083b97255a docs(dotnet): refresh docs after adding run / watch config (#33190)
## Current Behavior
`run`/`watch` are not mentioned in docs

## Expected Behavior
`run`/`watch` docs are accurate

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-22 18:29:37 -04:00
Jason Jean b9a0f36d5f fix(maven): add support for unbound goals in plugin targets (#33191)
## Current Behavior

Maven plugin targets are only created for goals explicitly bound to
executions in the POM. Goals defined in a plugin but not bound to any
execution are not available as Nx targets.

## Expected Behavior

All available Maven goals should be accessible as Nx targets, including:
- Goals bound to executions (existing behavior)
- Unbound goals defined in the plugin (new behavior)

## Changes Made

1. **Added unbound goal support**: The `NxTargetFactory` now creates
targets for goals defined in a plugin but not bound to any execution.
These targets are created with the format `goalPrefix:goalName` without
an execution ID.

2. **Added continuous build tracking**: 
- Added `continuous` property to `NxTarget` data class to track whether
a goal supports continuous builds
- Updated `MojoAnalyzer` to detect continuous goals from the cache
configuration
   - All targets now properly propagate continuous mode information

3. **Code improvements**:
   - Improved formatting and indentation for consistency
- Made `execution` parameter optional in `createSimpleGoalTarget` to
support both bound and unbound goals
   - Updated command generation to work with or without execution IDs

## Related Issue(s)

This change enables better Maven goal discovery and execution in Nx
monorepos.
2025-10-22 18:16:50 -04:00
Zachary DeRose 4fcd1d22b2 fix(core): adding output error reason (#33159)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

When an invalid output exists we report:

```
 NX   The following outputs are invalid: 

 - foo.txt

Run `nx repair` to fix this.
```

Without specifying the reason, we tell to run `nx repair`.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

More feedback provided to the user as to the error with their output:

```
 NX   The following outputs are invalid: 

 - foo.txt
   ** Reason: Outputs must start with either "{workspaceRoot}/" or "{projectRoot}/".

Run `nx repair` to fix this.
```

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-22 16:04:37 -04:00
Jack Hsu 681825e6be docs(dotnet): add experimental warning for @nx/dotnet (#33188)
Closes DOC-308
2025-10-22 14:36:17 -04:00
Jack Hsu 1c3434fc32 docs(misc): update GitLab project ID location in integration guide (#33186)
This PR updates the GitLab integration guide to reflect where `Copy
Project ID` is in the updated GitLab UI.
<img width="758" height="572" alt="image"
src="https://github.com/user-attachments/assets/ea400064-f3d4-4cd8-b5ba-a6b0bc884e81"
/>

## Related Issue(s)
Closes DOC-269
2025-10-22 12:32:45 -04:00
Jack Hsu ce2586aed8 docs(misc): fix bad line higlighting in docs (#33185)
This PR fixes some pages that don't use the proper markdoc syntax for
line lighting in code blocks. The `{% meta %}` tag is needed and it is
missing in some places.

Closes DOC-2790
2025-10-22 12:32:37 -04:00
James Henry 420091d9df fix(release): breaking change contents extraction (#33184) 2025-10-22 15:11:45 +00:00
Jason Jean cddb2ef2d0 fix(core): store reason when marking daemon as disabled (#33172)
## Current Behavior

When the daemon is disabled due to an error, the reason isn't captured,
making it harder to debug why the daemon was disabled.

## Expected Behavior

The error message/reason is now stored when marking the daemon as
disabled, allowing better visibility into what caused the daemon to be
disabled.

## Related Issue(s)
2025-10-22 10:40:36 -04:00
Andrew Ovens 28e681b99c fix(js): ensure node execute completes before exit (#32629)
Node tool executions (non-watch) were exiting before completing. This
change ensures they complete before exit.

closes #32385

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Node tool executions are not completing since #32356 

## Expected Behavior
Node tool executions complete before exit

## Related Issue(s)
#32385 

Fixes #32385
2025-10-22 15:01:23 +01:00
Colum Ferry c9d20c78f1 chore(repo): update daily canary releases schedule to 1 hour earlier (#33181)
Update canary release schedule to 1 hour earlier
2025-10-22 09:22:49 -04:00
Colum Ferry da88c80a7f fix(angular-rspack): bubble errors correctly (#33183)
## Current Behavior
When errors happen in earlier stages of compilation process, such as
processing global styles, these errors are not printed and the rspack
build process hangs at the Sealing phase.

## Expected Behavior
Ensure that errors that have occurred that would cause the process to
hang are printed and process exits correctly.

Part of this happens because the usual printing of errors happens in the
`afterDone` hook, which is never reached when the above occurs.

## Related Issue(s)

Fixes NXC-3268
2025-10-22 13:14:43 +01:00
Philip Fulcher 585a8ef1a9 docs(nx-dev): fixes for blog and webinar banner (#33179)
- **docs(nx-dev): update copy on webinar banner**
- **fix(nx-dev): handle missing profile links for blog authors**
2025-10-22 07:42:57 -04:00
MaxKless 03cde99faa chore(repo): drop unused and outdated nx-mcp hard dependency in package.json (#33180) 2025-10-22 13:04:23 +02:00
James Henry 8819dccb94 fix(release)!: better respect version plan file contents for changelog entries (#33166)
BREAKING CHANGE: config.conventionalCommitsConfig for `DefaultChangelogRenderer` is no longer nullable.
2025-10-22 09:27:35 +00:00
Jason Jean bbfd0a3c12 chore(repo): prevent readme templates from being published (#33177)
## Current Behavior
Readme template files are being published to npm with inconsistent
naming conventions.

## Expected Behavior
Readme template files should be excluded from npm publication and
consistently named as `readme-template.md`.

## Changes
- Renamed all readme template files to `readme-template.md` across
angular-rspack-compiler, angular-rspack, dotnet, and maven packages
- Updated .npmignore files to exclude readme-template.md from npm
publication
- Updated package.json build commands to reference the new
readme-template.md paths
- Removed `!README.md__tpl__` exceptions from package.json files array
entries
2025-10-21 23:11:24 -04:00
Caleb Ukle 3d8658cbcd docs(devkit): document the createNodes compat for Nx versions (#33102)
add new page for the createNodes api compat
add callouts to extending project graph and tooling plugin page

fixes DOC-255

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-21 19:08:34 -05:00
Caleb Ukle 8dacb26ea1 docs(core): correctly parse alias args with single dash (#33176)
@alberturria fixed this issue for the old docs as we migrated to astro,
so applied their change to the astro part of the docs as well. Original
PR: https://github.com/nrwl/nx/pull/33085
made sure to co-author alberturria as well

Thanks! 

![wm_2025-10-21T16-07-56@2x](https://github.com/user-attachments/assets/8bfb8a8c-d8eb-4892-8642-06c3c882e958)

Fixes #32723

Co-authored-by: alberturria <albertoherreravargas@gmail.com>
2025-10-21 23:32:09 +00:00
Colum Ferry 042915418c chore(repo): remove unused @rspack/plugin-minify from root (#33161)
Remove unused @rspack/plugin-minify from root package.json
2025-10-21 18:06:26 -04:00
Leosvel Pérez Espinosa c4b063d403 chore(repo): fix the pnpm caching in the main-macos job (#33162)
Fixes the pnpm caching setup for the `main-macos` job. It can currently
fail when the pnpm cache directory doesn't exist. We need to handle the
pnpm cache conditionally and separately from the node setup.
2025-10-21 21:21:55 +00:00
Jason Jean 10c64c804d chore(repo): update nx to 22.0.0-rc.0 (#33165)
Updating Nx from 22.0.0-beta.8 to 22.0.0-rc.0
2025-10-21 16:43:46 -04:00
Craigory Coppola 6934445fd9 fix(dotnet): fixup various issues + missing functionality (#33132)
…as testing projects<!-- Please make sure you have read the submission
guidelines before posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
- Microsoft.Testing.Platform projects are not detected as having a test
target
- `serve` does not have an equivalent

## Expected Behavior
- Test projects are properly detected
- `serve` has been split into 2 targets:
  -  `watch`
  - `run`
  
The split of `serve` mirrors the`dotnet` cli in the same way that we
mirrored `vite` when adding `preview` and `dev` targets when we moved
with project crystal. `watch` can be used for a variety of cases, but
provides hot reload + run a 'la `dev` / `serve`. `run` is more of a fire
and forget target that starts up the app. Both targets would only really
be used in local dev.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
…as testing projects

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-21 16:31:55 -04:00
Jack Hsu 81da1e0ec4 docs(misc): add PNPM catalog support documentation (#33170)
<img width="784" height="196" alt="image"
src="https://github.com/user-attachments/assets/45702b02-a97f-4d75-a67b-76eacdfb56ff"
/>

## Current Behavior
The dependency management documentation does not mention PNPM catalogs
as an option for maintaining single version policy.

## Expected Behavior
Documentation includes information about PNPM catalogs, explaining how
they can be used to maintain a single version policy when using PNPM as
the package manager. This helps if user searches for PNPM catalogs.

## Related Issue(s)
Fixes DOC-302

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-21 16:15:48 -04:00
Jack Hsu 5cf5186ec9 docs(nx-dev): update Java introduction page structure (#33171)
This PR adds a bit more content to the Java intro page so users can see
how to install Nx, add the plugins, etc. Links to the Gradle and Maven
intro pages, and also the Gradle tutorial.

Fixes DOC-301

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-21 16:15:31 -04:00
James Henry 9eace13cee feat(release): allow conventional commit style aliases in version plan release types (#33167) 2025-10-21 20:14:36 +00:00
Caleb Ukle 8b88f61df6 fix(nx-dev): add docker to build-tools tech section (#33164)
- add docker to sidebar
- sidebar only shows when there are non-hidden
executor/generator/migration impls to prevent linking to 404 pages

fixes DOC-299

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-21 15:08:18 -05:00
Jack Hsu 86d1b39ba4 docs(nx-dev): fix redirect for gradle and java overview/intro pages (#33168)
This PR fixes a bad redirect where Java intro page went to Angular
Rspack. Also update original Gradle API redirect to go to the Gradle
page rather than the generic Java one.

Closes DOC-298

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-21 15:40:42 -04:00
Mike Cebrian 4b4ad66a01 fix(vite): add logic to prevent overwriting generated package.json (#30705)
The nxViteTsPaths plugin currently always copys the package.json file at
the end of the build and does not check if the file was generated from
the build process. This adds logic to check if the package.json file
already exists in the dist path before copying to prevent overwriting
generated files.

Closes #30312

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
nxViteTsPaths always copies package.json at end of build.

## Expected Behavior
nxViteTsPaths only copies package.json at end of build if package.json
not generated during build.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #30312
2025-10-21 19:34:43 +01:00
Rares Matei 390343c16b chore(repo): revert nx back to staging (#33062)
This reverts commit d37d8252e4.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-21 13:53:07 -04:00
Leosvel Pérez Espinosa 893ac599d2 fix(core): revert changes to the db connection initialization (#33156)
Revert changes to the DB connection initialization that don't consider
multiple processes holding a connection and, therefore, are not safe.
2025-10-21 17:28:56 +02:00
Jason Jean eaec2aaa2a docs(nx-dev): update Java landing page to include Maven support (#33157)
## Current Behavior

The Java landing page at nx.dev/java only mentions Gradle support and
indicates that Maven support is coming soon.

## Expected Behavior

The Java landing page should reflect that Maven is now available
alongside Gradle.

https://nx-dev-git-mvn-follow-nrwl.vercel.app/java

## Related Issue(s)

Updates the documentation to reflect the Maven plugin introduced in
#32947

---

**Changes:**
- Updated hero section to state "Nx supports both Gradle and Maven"
- Modified getting started instructions to mention both `@nx/gradle` and
`@nx/maven`
- Updated features description to include Maven builds
- Combined Gradle and Maven documentation links into a single "Learn
More" section with buttons for both
- Updated call-to-action links to point to
`/docs/technologies/java/{gradle,maven}/introduction`
2025-10-21 11:23:58 -04:00
Jason Jean 7c87157340 chore(maven): bump version to 0.0.6 (#33160)
## Summary

Update Maven plugin version from 0.0.6-SNAPSHOT to 0.0.6 for release.

## Changes

- Root pom.xml (nx-parent)
- packages/maven/maven-plugin/pom.xml
- packages/maven/src/utils/versions.ts

## Test plan

- Maven plugin builds correctly with the new version
- No breaking changes to Maven integration
2025-10-21 11:23:38 -04:00
Miroslav Jonaš 3d7e59a072 fix(core): add wrappers for start and stop agent nx-cloud commands (#33140)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-21 11:18:25 -04:00
Leosvel Pérez Espinosa 2f2bbb4cf6 chore(repo): reduce computation in the macos job when there are no e2e tests to run (#33139)
## Current Behavior

The `main-macos` in the CI verification workflow runs some setup only
needed by the e2e tests unconditionally. This means that even when the
tests are not run, up to ~9 minutes can be spent setting up things that
will not be used.

## Expected Behavior

The `main-macos` in the CI verification workflow should only run the
minimal steps needed to verify whether the tests will be run. If the
tests are to be run, the job should proceed with the remaining required
setup steps; otherwise, it should skip them.

The job will now check whether tests will be run as early as possible
and gate the rest of the steps based on the result.

## Example similar runs

Before: 10m 48s
(https://github.com/nrwl/nx/actions/runs/18625394891/job/53102778452)
After: 1m 3s
(https://github.com/nrwl/nx/actions/runs/18654449747/job/53189013526)
2025-10-21 09:27:07 -04:00
Colum Ferry 6dd80b9578 fix(release): replace local dependency protocols of unchanged dependencies #30995 (#33151)
## Current Behavior
When independent versioning with conventional commits, and only one
project in a release group needs bumped, but it depends on another
project via local dependency protocols such as `file://` or `workspace:`
protocol, the local protocol dependency is not replaced.

## Expected Behavior
local protocol is replaced with the current version of the dependency.

## Related Issue(s)

Fixes #30995
2025-10-21 13:51:02 +01:00
Leosvel Pérez Espinosa 767aafa951 fix(core): do not print flaky tasks guidance when nx cloud is already enabled (#33149)
## Current Behavior

When there are flaky tasks in a local run for a workspace that has Nx
Cloud enabled, a help message is displayed, advising users to use Nx
Cloud and pointing them to documentation on how to do so. Given that the
workspace is already using Nx Cloud, the message is redundant.

## Expected Behavior

When there are flaky tasks in a local run for a workspace that has Nx
Cloud enabled, no help message should be shown advising users to use Nx
Cloud and pointing them to documentation on how to do so. If the
workspace doesn't have Nx Cloud set up, the message should still be
shown.
2025-10-21 11:34:06 +00:00
Colum Ferry 64fefe2d8f fix(angular): ensure ngpackagr tsconfig options set correctly based on version #33081 (#33150)
- **fix(angular): prevent outputting inline source maps when building an
Angular package**
- **fix(angular): set ng-packagr tsconfig options based on ng-packagr
version**

## Current Behavior
TsConfig options are being set based on older versions of ng-packagr.
These values changed in Angular 20.

## Expected Behavior
Ensure TsConfig options are set based on the version of `ng-packagr`
installed.

## Related Issue(s)

Fixes #33081


Kudos to @daiscog for the initial work on this 🚀

---------

Co-authored-by: David Scourfield <daiscog@users.noreply.github.com>
2025-10-21 10:56:12 +01:00
Leosvel Pérez Espinosa 84813dca53 fix(angular): improve message for unsupported typescript project references (#33148)
## Current Behavior

The `@nx/angular` plugin doesn't support generating any project or
artifact when the workspace is using TypeScript project references
because the Angular framework doesn't support it. The message logged to
the users is very generic and slightly misleading. It's not clear enough
and doesn't provide relevant information to allow users to understand
the exact limitation.

## Expected Behavior

The generators from the `@nx/angular` plugin should log a clear error
message with information pointing to the specific issue in the Angular
framework preventing the setup from working for Angular projects.
2025-10-21 11:10:33 +02:00
Leosvel Pérez Espinosa 6c03f624ff fix(core): do not remove wal files manually for existing databases (#33143)
- Remove problematic manual deletion of WAL files for existing
compatible database
- Simplified some code:
  - Reuse `set_busy_handler` and replace remaining duplicated logic
  - Inlined single-use helper functions
2025-10-21 07:56:20 +00:00
Jason Jean 823758f22e chore(repo): fix ai config (#33115)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

The AI config is out of date.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The AI config is up to date

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-20 21:38:08 -04:00
Jason Jean 135019b443 feat(maven): introduce maven plugin (#32947)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

There is no first-party Maven support for Nx

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Maven Support is ready for usage.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Caleb Ukle <caleb@nrwl.io>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-20 18:52:31 -04:00
Colum Ferry 998fb98da8 fix(angular-rspack): ensure root node_modules included when resolving packages (#33144)
## Current Behavior
When configuring `resolve` config for the `rspack` config with Angular
Rspack, we only consider `node_modules` local to the application.

## Expected Behavior
Ensure workspace root node_modules are also considered and added to the
`resolve` config.

## Related Issue(s)

Closes NXC-3267
Fixes #33026
2025-10-20 17:14:39 +01:00
Miroslav Jonaš 16c4b2bd8c feat(core): enhance spinner handling and add spinner to inferred conversion (#33031)
This PR creates a global spinner handler and adds the runtime
information to the `convert-to-inferred` migration process.

The global spinner ensures a single instance of the `ora` spinner. The
ora cannot run several instances in parallel, so running multiple
instances causes flickering due to message deletion.

The `covert-to-inferred` plugin migration will now show the loading
spinner and progress indicator specifying how many projects have been
converted.

Additional changes:
- DelayedSpinner will not show if there is another (parent) spinner
already running.

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Craigory Coppola <craigorycoppola@gmail.com>
2025-10-20 17:35:49 +02:00
Jason Jean a61bef75bf chore(repo): update nx to 22.0.0-beta.8 (#33130)
Updating Nx from 22.0.0-beta.7 to 22.0.0-beta.8
2025-10-20 17:25:19 +02:00
Jason Jean ed1a03468b chore(repo): add mise config to simplify installing all the languages (#33129)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Developers may have to install several languages manually to work in the
Nx repo.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Developers can use https://mise.jdx.dev/ to automatically install the
versions of languages necessary to work in the nx repo

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-20 10:37:47 -04:00
Leosvel Pérez Espinosa d17b7d1aab cleanup(misc): fix nightly e2e test failures due to npm peer deps conflicts (#33112)
Fix a few failing e2e nightly tests due to npm peer dep conflicts.

Reduced nightly run with the fixed test suites:
https://github.com/nrwl/nx/actions/runs/18651446735. Most of them still
fail, but with existing failures unrelated to npm peer deps issues.
These are not part of the Golden nightly tests yet.
2025-10-20 10:15:22 -04:00
Colum Ferry 23aabf78b4 fix(module-federation): ensure angular rspack module federation supports live reload (#33137)
## Current Behavior
Angular Rspack outputs to CJS for Module Federation. It also has
potential issues to cause infinite live reload loops.

## Expected Behavior
Angular Rspack with Module Federation should work as expected

This PR also adds:
- example of Module Federation with Angular Rspack in
`examples/angular-rspack/module-federation`
2025-10-20 09:14:55 -04:00
Leosvel Pérez Espinosa d01bcb4dd0 chore(repo): fix quotes in e2e matrix workflow (#33138)
Fixes wrong single quotes in the E2E matrix workflow file that were
preventing variable expansion in bash.
2025-10-20 08:46:08 -04:00
Craigory Coppola 3f7e152685 feat(dotnet): add initial draft of .NET plugin (#32869)
## Current Behavior
@nx-dotnet/core is recommended plugin for .NET

## Expected Behavior
@nx/dotnet is new .NET plugin

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Vijay Ramakrishnan <vramak@microsoft.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-18 01:46:46 -04:00
Craigory Coppola 6549d2a2d8 fix(core): avoid changing existing project name if a project.json file is added to a project (#33114)
## Current Behavior
When adding a `project.json` file to configure certain aspects of an
existing Nx project, that project's name will be changed. We had to fix
this for package-json based projects a while back, and as we expand
polyglot its coming up again.

## Expected Behavior
The "default name" behavior stamped into the project.json plugin doesn't
trample existing names. To do this, it had to be moved out of the
project.json plugin and into the validate + normalize flow

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-17 23:21:48 +00:00
Craigory Coppola 678619f4a8 fix(core): restore migrations used by nx repair (#33124)
## Current Behavior
Some migrations used by `nx repair` are missing

## Expected Behavior
Migrations used by `nx repair` are only removed when deemed applicable.

This reverts a portion of commit
a637f9eef9.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-17 15:34:36 -04:00
Jason Jean 6d8694560d chore(repo): update nx to 22.0.0-beta.7 (#33118)
Updating Nx from 22.0.0-beta.6 to 22.0.0-beta.7
2025-10-17 15:19:40 -04:00
Jack Hsu d8e2a6b8f0 docs(misc): fix an issue where devkit types are not pointed to the latest d.ts files but what's installed in root node_modules (#33125)
Use tsconfig path aliases to point devkit to the `dist/packages/nx`
folder rather than `node_modules/nx` (which is installed from NPM).

Closes DOC-188
2025-10-17 15:19:18 -04:00
Jack Hsu 2e4d5d3167 fix(core): allow prerelease versions of nx to be used with devkit (#33123)
This PR fixes an issue where due to the removal or `--legacy-peer-deps`
for NPM, you can no longer install prerelease versions of Nx. This also
means `npx create-nx-workspace@next` cannot be used with NPM.

For example, if you have this `package.json`:

```json
{
  "dependencies": {
    "nx": "22.0.0-beta.4",
    "@nx/devkit": "22.0.0-beta.4"
  },
  "license": "MIT"
}
```

And tried `npm install`, it will error out with:

```
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error
npm error While resolving: undefined@undefined
npm error Found: nx@22.0.0-beta.1
npm error node_modules/nx
npm error   nx@"22.0.0-beta.1" from the root project
npm error
npm error Could not resolve dependency:
npm error peer nx@">= 21 <= 23" from @nx/devkit@22.0.0-beta.1
npm error node_modules/@nx/devkit
npm error   @nx/devkit@"22.0.0-beta.1" from the root project
```

By allowing prereleases via `^22.0.0-0` NPM can work again.

Note: pnpm and yarn are fine.
2025-10-17 14:51:20 -04:00
Juri deb10f2818 feat(storybook): add watch-deps and build-deps targets 2025-10-17 20:17:15 +02:00
Jack Hsu ace274d58b fix(graph): prevent content from overflowing in the PDV component (#33120)
This PR fixes and issue where content was overflowing in PDV when the
command is too long.

<img width="809" height="518" alt="image"
src="https://github.com/user-attachments/assets/113285fe-8d93-4ad2-bbac-b2992a065a4e"
/>


Fixes DOC-243
2025-10-17 14:12:49 -04:00
Caleb Ukle 5f72bf3f36 docs(repo): update CONTRIBUTING.md w/ new docs info (#33121)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-17 14:12:18 -04:00
Leosvel Pérez Espinosa c327a00b29 fix(core): format catalog definition files when appropriate in nx migrate (#33105)
Formats the `pnpm-workspace.yaml` when catalog definitions are updated
after running `nx migrate`. Like the rest of the Catalog feature, it's
agnostic to the package manager, allowing for an easier addition of
support for future package managers.
2025-10-17 12:17:27 -04:00
Jack Hsu 7d61470c15 docs(nx-dev): add package.json linking instructions to TypeScript tutorial (#33117)
The TypeScript packages tutorial shows how to import shared local
libraries but doesn't mention that users need to add dependencies to
package.json and run npm install.

This PR instructs users to link packages properly. Also fixes line
highlighting.

<img width="787" height="718" alt="image"
src="https://github.com/user-attachments/assets/03ec8cca-eab0-4514-8c07-c7d4d316a606"
/>
2025-10-17 11:23:47 -04:00
Leosvel Pérez Espinosa 3b69f0fccf fix(linter): install correct deps in eslint convert to flat config generator (#33078)
Installs the correct dependencies after converting to the ESLint Flat
configuration. This was highlighted after removing the npm
`--legacy-peer-deps` flag from default usage in Nx.

Additionally, it fixes nightly e2e failures:

- `e2e-esbuild`
- `e2e-eslint`
- `e2e-gradle`
- `e2e-js`
- `e2e-web`
- `e2e-webpack`

Nightly run where all pass:
https://github.com/nrwl/nx/actions/runs/18592750415
2025-10-17 10:16:59 -04:00
Juri c4a32560a0 docs(nx-cloud): update self-healing CI config instructions 2025-10-17 16:10:27 +02:00
Jack Hsu dce77c164d feat(nx-dev): add v22 to version picker (#33110)
In preparation for v22, add the new version to the docs header.
2025-10-17 10:06:59 -04:00
Craigory Coppola ebc46e3a7b fix(core): enhance tui summary output to fix misc issues (#33057)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Terminal output is all logged in one chunk, resulting in a somewhat
jarring experience for lots of output that can cause issues in the
extreme cases.

Task cache status is missing from the run-many outputs

Outputs are sometimes missing

## Expected Behavior
The above are fixed.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-17 09:44:27 -04:00
Colum Ferry 6bd1a1835f feat(vue): migrate @vitejs/plugin-vue to 6.0.1 (#33097)
## Current Behavior

- We currently install `@vitejs/plugin-vue` verion `^5` which only
supports `Vite 5 | 6`. This causes peerDep conflicts with `Vite 7`.
- Vue and Nuxt always install v7 version of TypeScript ESLint packages.
This causes peer dep conflicts when ESLint v9 is installed.

## Expected Behavior

- Migrate to `@vitejs/plugin-vue` version `^6` which supports `Vite 5 |
6 | 7`.
- Vue and Nuxt should install a version of the TypeScript ESLint
packages that works for the installed ESLint version.

Nightly run where the previously failing `e2e-vue` tests pass with these
changes:
https://github.com/nrwl/nx/actions/runs/18591984947/job/53009089023

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-10-17 15:33:55 +02:00
Colum Ferry ea63c79b52 chore(node): use nestjs/swagger@11 in e2e (#33108)
Update e2e to use `@nestjs/swagger@^11`
2025-10-17 12:37:57 +01:00
Jack Hsu 8c52f626bc chore(nx-dev): remove unused docs pages and scripts (#33101)
This PR removes `nx documentation` and old docs pages from the next.js
app. This improves CI times since we no longer need to check `nx
documentation`, and the next.js app is faster to build.

## Changes
- `.github/workflows/ci.yml` no longer runs `nx documentation`
- Remove `documentation` target from root `project.json` and
corresponding scripts in `scripts/documentation/generators`
- Remove old docs pages from next.js app (e.g.
`nx-dev/nx-dev/pages/[...segments].tsx`)
- Remove manifest JSON files for old docs
- Remove old `og:image` generator for docs (blog, and other pages handle
it differently, this was just for old docs).
- Update bad links in `docs/blog` and `docs/changelog` since we no
longer match them to their manifest JSON files -- the redirects were
already working so just pointed to the new Astro URL

## Notes
- There were some missing dependencies like `ai` for `nx-dev/nx-dev`
that worked previously due to hoisting, but was failing build in this PR
I fixed those.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-16 21:12:59 -04:00
Jack Hsu 849f356e65 docs(nx-dev): fix java og image url (#33103)
When we renamed the file earlier we did not update this page.
2025-10-16 16:28:24 -04:00
Juri Strumpflohner a20bbd5533 docs(nx-dev): update more blogs list rendering (#33071)
- **docs(nx-dev): show all blogs in the list below highlighted**
- **docs(nx-dev): adjust ai label on blog posts**
- **docs(nx-dev): adjust how labels are rendered on blog list**
- **docs(nx-dev): swap podcasts tag to ai tag**

Preview:
https://nx-dev-git-nxdev-update-blog-list-page-nrwl.vercel.app/blog
2025-10-16 21:19:04 +02:00
Leosvel Pérez Espinosa 4f31a03c52 fix(core): prioritize in-progress tasks section visibility in tui (#33053)
## Current Behavior

When a task is selected and its outputs are displayed in the terminal
pane, the TUI always tracks a task by name regardless of its status.

## Expected Behavior

- When a task is selected, its outputs are displayed in the terminal
pane, and the terminal pane is focused, we track the selected task by
name.
- When a task is in progress, the TUI should track it by name while in
progress.
- When it finishes, it should switch to track another in-progress task
at the same index or in a close index if there is none in progress at
the same index.
  - If it's the last task that finished, keep tracking it by name.
- When a task is pending or finished:
- When it's selected and its outputs are displayed in the terminal pane,
the TUI should track it by name.
- When it's selected and its outputs are not displayed in the terminal
pane, the TUI should track the index.

This allows the relevant in-progress section to be visible in more
scenarios than before. The TUI wouldn't blindly follow all tasks by
name.

Additionally, this PR updates the sorting of in-progress tasks to
prioritize start time first, followed by alphabetical order. This
stabilizes the section more (reduces extra movement due to alphabetical
sorting) and aligns with a similar sorting done for finished tasks
(based on the end time).
2025-10-16 15:12:40 -04:00
James Henry 449e396962 feat(release): allow ignoring nx.json release config with ReleaseClient (#33099) 2025-10-16 23:05:38 +04:00
James Henry c031db1721 feat(release): new replaceExistingContents CLI and API option for changelog (#33096) 2025-10-16 23:04:55 +04:00
Benjamin Cabanes 8aa2874452 docs(nx-dev): add what to expect video in contact sections (#33086)
Add new video explaining what to expect from Nx Enterprise, Nx Labs and
general Contact.
2025-10-16 12:52:15 -04:00
James Henry fd3c08724f feat(release): allow changelog.renderer to be set to an implementation directly (#33095) 2025-10-16 20:04:27 +04:00
Leosvel Pérez Espinosa 42b553cd2e fix(core): improve db connection initialization and error messages (#33054)
## Summary

Improved database initialization with better error handling, automatic
recovery from stale files, and cache preservation during error recovery.

## Changes Made

### 1. Iterative Retry Logic with Explicit State

Converted initialization from recursive calls to an iterative loop with
a state flag (`cleaned_up_stale_files`) that limits retries to 2
attempts. This makes retry conditions explicit and self-documenting
while preventing potential stack overflow.

### 2. Complete Auxiliary File Cleanup

Now removes all SQLite database files during cleanup (`.db`, `.db-wal`,
`.db-shm`) instead of just the main `.db` file. This prevents stale
Write-Ahead Logging auxiliary files from causing initialization failures
after version upgrades.

### 3. Smart Compatible Database Handling

Compatible databases (matching version) are now reconfigured based on
their current journal mode:

- **DELETE mode**: Attempts opportunistic upgrade to WAL for better
performance, cleans up any orphaned WAL files from previous runs
- **WAL mode**: Verifies WAL still works; if it fails, removes only
auxiliary files (preserving cache), retries, and falls back to DELETE
mode if still failing
- **Unknown/query failed**: Full reconfiguration with complete cleanup
on failure

This preserves cached build outputs when possible while recovering from
stale file issues automatically.

### 4. WSL1 Proactive Detection

Detects WSL1 environments by reading `/proc/version` and automatically
uses DELETE journal mode instead of attempting WAL (which WSL1 doesn't
support), preventing initialization failures.

### 5. Enhanced Error Messages

Replaced generic error messages with context-specific, platform-agnostic
guidance:

- Permission errors: Explains how to check file/directory permissions
and ownership without platform-specific commands
- Disk full: Suggests freeing space or moving workspace
- Missing directories: Explains unexpected condition with
troubleshooting steps
- All errors: Include debug instructions (`NX_NATIVE_LOGGING=trace`) and
reporting link

Error messages work consistently across Windows, macOS, and Linux
without suggesting commands that may not be available on the user's
platform.

### 6. Code Quality Improvements

Extracted helper functions to reduce duplication:

- `query_journal_mode()` - Query database's current journal mode
- `set_busy_handler()` - Configure connection-level busy handler
- `remove_wal_files()` - Remove only WAL auxiliary files
- `remove_all_database_files()` - Complete database cleanup
- `create_io_error()` / `create_db_error()` - Generate helpful error
messages

## Problems Solved

### Stale WAL Files After Version Upgrades

Leftover `.db-wal` and `.db-shm` files from previous versions no longer
cause initialization to fail. These files are now cleaned up
automatically during initialization.

### Cache Loss on Recoverable Errors

When WAL mode issues occur on otherwise healthy databases, only
auxiliary files are removed, preserving the main database and all cached
build outputs. Full wipes only happen for genuine corruption or version
mismatches.

### WSL1 Compatibility

WSL1 environments now work without initialization failures by
proactively detecting the environment and using DELETE mode instead of
attempting WAL.

### Performance Optimization

Databases in DELETE mode automatically attempt upgrading to WAL when the
environment supports it (e.g., after moving workspace from network drive
to local disk), providing better performance without manual
intervention.

### Poor Debugging Experience

Error messages now provide specific, actionable guidance based on the
error type, helping users resolve issues without needing to ask for
help.

## Impact

-  Users no longer need manual `nx reset` for stale file issues
-  Cache and build outputs preserved during error recovery
-  WSL1 works out of the box
-  Automatic performance improvements when environment changes
-  Better error messages reduce support burden

## Related Issue(s)

Fixes #28640 
Fixes #30856
Fixes #32894
2025-10-16 11:35:44 -04:00
Colum Ferry 45e420c55b fix(remix): ensure supported version of vite is used (#33089)
## Current Behavior
`@nx/remix` depends on `@nx/react` which depends on `@nx/vite`. 
`@nx/vite` has a `peerDependency` on `vite: 5 || 6 || 7`

This direct dependency chain causes an issue wherein vite 7 is installed
and causes a conflicting peer dependency between `@remix-run: 2`

## Expected Behavior
Remix should use `Vite 5 | 6`. Break the chain between `@nx/react` and
`@nx/vite` causing `Vite 7` to be installed.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-16 09:43:37 -04:00
Jason Jean 698e51b0d5 chore(repo): update nx to 22.0.0-beta.6 (#33087)
Updating Nx from 22.0.0-beta.4 to 22.0.0-beta.6
2025-10-16 09:32:36 -04:00
Leosvel Pérez Espinosa e8bd83e3e0 feat(core): add support for pnpm catalogs (#32978)
## Current Behavior

Pnpm Catalogs is not supported.

## Expected Behavior

Pnpm Catalogs should be supported.

## Related Issue(s)

Fixes #30035 
Fixes #29772
2025-10-15 18:54:16 -04:00
Benjamin Cabanes 3d1177fe06 docs(nx-dev): replace custom PlayButton with VideoPlayer integration (#33084)
Replaced legacy custom `PlayButton` with the `VideoPlayer` component for
a consistent video playback experience. Applied changes across multiple
components and integrations.
2025-10-15 17:06:40 -04:00
Jack Hsu f37c13b5a8 docs(nx-dev): add missing custom events back (#33082)
This PR adds 404 and header custom events back for docs. These were
previously in the Next.js docs pages, but were missing when we migrated
to Astro.

The `sendCustomEvent` and `sendPageEvent` functions did not account for
the way that Astro is configured via `window.__CONFIG` object, so this
PR fixes those too.

## Screenshots

I ran these in preview mode with the site built with
`COOKIEBOT_DISABlED=true`.

Custom page view on 404:

<img width="2672" height="1527" alt="Screenshot 2025-10-15 at 3 10
05 PM"
src="https://github.com/user-attachments/assets/5bbe30fc-56cb-4427-b138-56edcf3bbc71"
/>

Header docs CTA event:
<img width="2672" height="1527" alt="Screenshot 2025-10-15 at 3 13
02 PM"
src="https://github.com/user-attachments/assets/246cb99d-0a30-4d94-a4a3-8f8659062f23"
/>

Header `Try Cloud` CTA event:
<img width="2672" height="1527" alt="Screenshot 2025-10-15 at 3 10
10 PM"
src="https://github.com/user-attachments/assets/addd2645-cf3e-4c83-ae39-9f00a434a21d"
/>
2025-10-15 15:50:14 -04:00
Colum Ferry fde5908aa7 feat(module-federation): support TS Soln and Package Manager workspaces paradigms (#33056)
## Current Behavior
Using TS Soln Workspaces and/or Packaage Manager Workspaces, handling of
certain workflows and scenarios is not correct.

Detecting and Sharing Workspace Libraries relies entirely on TS Path
Aliases existing in the base TSConfig file.
All guidance also points towards adding Workspace Libraries as
dependencies or devDependencies within the consuming application's
package.json file.
This also does not allow correct configuration of sharing.

Meanwhile, TS Path Aliases are added for remote applications such that
TS can find them in consuming applications, while also being able to
provide Typing Support.
However, this has an increased build-time cost for TS compilation as it
will follow the path in source.

## Expected Behavior
Allow attaching Workspace Libraries as deps in the package.json of host
and remote applications.
Configure packages added in such a manner correctly for share scope in
Module Federation.

Attach Remote applications to Host applications via devDependencies in
package.json.
Configure the `exports` and `main, types` properties in the remote
application's package.json to point to the `src/remote-entry.ts` file
such that node resolution can correctly follow the paths.
Bundler will continue to strip this out of compilation and replace with
Module Federation Module Loading code.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-15 19:56:40 +01:00
Colum Ferry 762685ce88 fix(release): ensure multilines in breaking changes are rendered by changelog renderer (#33070)
## Current Behavior

When rendering changelogs for releases, breaking changes with multi-line
explanations
  are not formatted correctly:

1. Only the first line of a breaking change explanation is captured and
rendered
2. PR references (like `#33014`) are missing from breaking change
entries, making it
  difficult to trace back to the original PR
3. Multi-paragraph breaking changes lose their formatting and structure

  For example, a breaking change with this format:
  BREAKING CHANGE: The --legacy-peer-deps behavior is no longer forced.
  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:

1. Capture and render all lines of a breaking change explanation, not
just the first
  line
  2. Include PR/commit references in the breaking change section (e.g.,
  `([#33014](url))`)
3. Properly indent multi-line and multi-paragraph breaking changes for
better
  readability
4. Maintain consistent formatting between the feature/fix entry and its
corresponding
  breaking change entry

  Example of correct output:
  ```markdown
  ### ⚠️  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.
```
2025-10-15 16:54:47 +01:00
Louie Weng ffe85e9a56 chore(gradle): add verbose logging flag specifically for gradle plguin (#33049)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

`NX_VERBOSE_LOGGING` turns on/off the debug logs for the gradle plugin

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

`NX_GRADLE_VERBOSE_LOGGING` turns on/off the debug logs for the gradle
plugin

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-15 09:31:27 -04:00
Juri Strumpflohner 9cefa648f2 docs(nx-dev): restore GA event tracking (#33074)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-15 09:23:57 -04:00
Craigory Coppola 82acc84b3c fix(core): ensure --help works properly with infix notation (#32662)
## Current Behavior
Running `nx run nx:test --help` and `nx test nx --help` behave
differently

## Expected Behavior
They are equivalent

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-14 17:17:50 -04:00
Craigory Coppola 60b353a54f fix(core): temporarily disable tui for run-one (#33048)
## Current Behavior
The tui is enabled even for a single task, and it currently doesn't
bring a lot of value for those single-task use cases

## Expected Behavior
The tui is disabled for single task runs.
2025-10-14 17:12:13 -04:00
Juri 807e2d2c24 docs(nx-dev): blog post about pr bottleneck problem 2025-10-14 18:46:43 +02:00
Leosvel Pérez Espinosa 8881e4233c fix(core): display bottom corner indicator of tui in progress section correctly (#32985)
## Current Behavior

The bottom corner indicator of the in-progress section in the TUI is not
displayed when there are more tasks in progress than the maximum
parallel capacity (this can occur when there are continuous tasks).

## Expected Behavior

The bottom corner indicator of the in-progress section in the TUI should
always be displayed at the end of the running tasks.
2025-10-14 11:45:20 -04:00
Leosvel Pérez Espinosa 6a104c520e fix(misc)!: don't set legacy-peer-deps by default (#33014)
## Current Behavior

The `--legacy-peer-deps` behavior is forced by Nx to try to account for
potential incompatible peer deps users might have.

## Expected Behavior

Nx shouldn't force the `--legacy-peer-deps` behavior. Users can easily
set this up by configuring the package manager they use.

## Related Issue(s)

Fixes #22066
Fixes #29537

BREAKING CHANGE: The `--legacy-peer-deps` behavior is no longer forced.
If you need it, configure your package manager to enforce it.
2025-10-14 11:42:57 -04:00
Caleb Ukle 61b2796257 fix(nx-dev): handle null github data (#33061)
technically the fix to plugin stats now showing up was expired GH token.
But refactored the plugin stats fetching to skip locally unless
NX_DOCS_PLUGIN_STATS env var is set to help speed up local serves/builds
since 99% of the time we're not concerned with the plugin-registry page.
along with trying to centralized the logic between 1st/3rd party plugins
since it was a little confusing from my initial impl.
2025-10-14 09:46:36 -05:00
Colum Ferry aac830971d fix(react): dynamic module federation should not initialize remoteUrlDefinitions to empty object (#33059)
## Current Behavior

The `remoteUrlDefinitions` variable in
`packages/react/mf/dynamic-federation.ts` is
  initialized as an empty object (`{}`), which causes:
1. The `resolveRemoteUrl` callback is never called because
`remoteUrlDefinitions` is
  always truthy
2. When `loadRemoteModule` is called before `setRemoteDefinitions`,
users get a cryptic
error "Cannot read properties of undefined (reading 'endsWith')" instead
of the
  helpful error message

  ## Expected Behavior

- `resolveRemoteUrl` should be called when provided and
`remoteUrlDefinitions` hasn't
  been set
- The helpful error message should be shown when `loadRemoteModule` is
called before
  setup

  ## Changes Made

Applied the same fix from PR #27927 (for Angular) to the React
implementation:
- Changed `remoteUrlDefinitions` initialization to be `undefined` by
default
- Added nullish coalescing operator (`??=`) in `setRemoteDefinition` to
initialize only
   when needed

  ## Related Issue(s)

  Fixes #33055

This follows the same pattern as PR #27927 which fixed #27793 and #27842
for Angular.
2025-10-14 15:04:16 +01:00
Juri a150d9fd4c docs(nx-dev): self-healing ci update blog post 2025-10-14 11:14:13 +02:00
Philip Fulcher c802c6f1e5 docs(nx-dev): fixes for recent posts (#33065)
- **docs(nx-dev): fix typo in webinar title**
- **docs(nx-dev): remove reference to right click context menu in
highlights article**
2025-10-13 17:11:00 -05:00
Philip Fulcher 14efeffb9d docs(nx-dev): add october 2025 webinar (#33064)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-13 17:03:29 -04:00
Rares Matei ddccfaa549 docs(nx-cloud): update release notes (#33043)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-13 16:54:22 +00:00
Philip Fulcher af74f824ff docs(nx-dev): add 21.6 changelog and october highlights article (#33036) 2025-10-13 11:27:01 -04:00
Caleb Ukle f425526fd2 fix(nx-dev): respect NX_DEV_URL in sitemap checker (#33058)
Sitemap in CI can have different `NX_DEV_URL` values which can make the
link checker work locally but not in CI
2025-10-13 09:52:07 -05:00
Rares Matei d37d8252e4 chore(repo): temporarily point repo to snapshot (#33046)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-13 13:03:55 +01:00
Rares Matei 31765c6995 docs(nx-cloud): remove note about saml license (#33034)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-13 11:15:10 +01:00
Caleb Ukle bfaa91bbc3 fix(nx-dev): update nextjs internal-link-checker to include astro urls (#33045)
blog and marketing pages will still link to astro docs, so depend on the
astro sitemap to check all links available to be used.
NOTE: the specific header links (url fragments) are skipped for pages
that come from astro docs (prefixed with /docs) due to not having a
simple way to create these lists without parsing all the build html
files out and that's not the part we really care about

confirmed working https://github.com/nrwl/nx/pull/33042 and
https://github.com/nrwl/nx/pull/33036 which are blocked until this
change merges

Fixes DOC-264
2025-10-10 14:25:43 -04:00
Caleb Ukle f85fdff1a9 docs(angular): update ng tutorial to match nx cloud templates (#33027)
fixes DOC-233
2025-10-10 13:28:52 -04:00
James Henry f35cfc1c82 fix(release): skip filtered out groups when processing (#33044) 2025-10-10 20:41:08 +04:00
Colum Ferry 0ba5f2d9de feat(release)!: refactor releaseTag* properties to a releaseTag object (#33020)
## Current Behavior

The Nx release configuration currently uses 5 separate flat properties
for release tag
  configuration:
  - `releaseTagPattern`
  - `releaseTagPatternCheckAllBranchesWhen`
  - `releaseTagPatternRequireSemver`
  - `releaseTagPatternPreferDockerVersion`
  - `releaseTagPatternStrictPreid`

This flat structure makes the configuration verbose and harder to
organize, especially
  as more release tag options are added.

  Example of current configuration:
  ```json
  {
    "release": {
      "releaseTagPattern": "{projectName}@{version}",
      "releaseTagPatternRequireSemver": true,
      "releaseTagPatternStrictPreid": false
    }
  }
```

## Expected Behavior

  After this PR, all release tag-related configuration is consolidated into a single
  nested releaseTag object with the following structure:
  - releaseTag.pattern (was releaseTagPattern)
  - releaseTag.checkAllBranchesWhen (was releaseTagPatternCheckAllBranchesWhen)
  - releaseTag.requireSemver (was releaseTagPatternRequireSemver)
  - releaseTag.preferDockerVersion (was releaseTagPatternPreferDockerVersion)
  - releaseTag.strictPreid (was releaseTagPatternStrictPreid)

  Example of new configuration:
```
  {
    "release": {
      "releaseTag": {
        "pattern": "{projectName}@{version}",
        "requireSemver": true,
        "strictPreid": false
      }
    }
  }
```

  Migration & Backward Compatibility:
  - An automatic migration transforms old configurations to the new structure
  - Old flat properties are deprecated but still supported during the migration period
  - The deprecated properties will be removed in Nx 23
  - All internal code has been updated to use the new nested structure

BREAKING CHANGE: 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.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-10 14:11:56 +01:00
Colum Ferry 6c024a2207 feat(release)!: set updateDependents to always by default (#33029)
## Current Behavior

When versioning independent projects in Nx release, the updateDependents
configuration
defaults to 'auto'. This means that dependents are updated (with a patch
version bump)
when a dependency is versioned, as long as a group or projects filter is
not applied
  that does not include them.

With 'auto', if you apply a filter that excludes dependents, they won't
be updated even
   though their dependencies have been versioned.

## Expected Behavior

The updateDependents configuration now defaults to 'always'. This means
that dependents
will always be updated (with a patch version bump) when a dependency is
versioned,
  even if they are not included in the group or projects filter.

This provides more predictable behavior and ensures that versioned
dependencies don't
cause version mismatches with their dependents, which could lead to
broken builds or
  runtime issues.

BREAKING CHANGE: Users who relied on the previous 'auto' behavior can
explicitly set `updateDependents: 'auto'` in their nx.json:
```json
  {
    "release": {
      "version": {
        "updateDependents": "auto"
      }
    }
  }
```
2025-10-10 14:11:35 +01:00
MaxKless 0050a811ab feat(core): expose registerProjectGraphRecomputationListener from daemon client (#33005) 2025-10-10 12:40:05 +02:00
Miroslav Jonaš a8c266f5b8 docs(nx-dev): improve stop-agents-on-failure info (#32969)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The current `stop-agents-on-failure` description is confusing customers
as they are expecting agents to be shut down after the first failure

## Expected Behavior
The `stop-agents-on-failure` description clearly distincts between task
and command failure.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-10 12:23:15 +02:00
Caleb Ukle 451572afd3 docs(nx-cloud): update docs for conformance v4 (#32988)
update docs to include information over conformance v4 including new
testing guide
fixes DOC-226
fixes DOC-182
2025-10-09 23:57:15 -05:00
Victor Savkin e2eb44ca40 chore(repo): auto apply more fixes (#33039)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-09 21:36:37 -04:00
Jack Hsu d6a4caa9b5 docs(linter): show options for module boundary rule in flat config (#33038)
Show the same options for flat config as we do for legacy config.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-09 18:05:42 -04:00
Caleb Ukle 475e7277f6 docs(nx-dev): update merge-reports guide to account for stricter tsconfigs (#33037)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-09 17:05:25 -05:00
Jack Hsu 4a62cbecd2 docs(misc): allow embeddings to generate from new docs (#33035)
This PR adds support for generating embeddings using docs in the
`astro-docs` folder. The embeddings are used for `docs_search` MCP tool,
and we currently do not populate new content into it.

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-09 17:51:18 -04:00
Jason Jean 3417e78460 chore(repo): update nx to 22.0.0-beta.4 (#33016)
Updating Nx from 22.0.0-beta.2 to 22.0.0-beta.4
2025-10-08 16:50:52 -04:00
Colum Ferry 05ab516eb7 chore(release): move workspace specific tests to own file (#33006)
Add additional e2e tests for Nx Release to ensure functionality with
both workspace-enabled repos and non-workspce enabled repos.
2025-10-08 17:56:44 +01:00
Jack Hsu 412a55d012 docs(nx-dev): skip check for NEXT_PUBLIC_ASTRO_URL during graph creation just in case (#33019)
This PR skips check for the required env var during graph creation.
Although it only happens when `NODE_ENV === 'production'` it is possible
that this is set as such, which would cause an error.
2025-10-08 12:49:46 -04:00
Jack Hsu ea1f1cb4d0 fix(testing): show warning instead of error when no blob outputs found during merge (#33022)
The blob outputs could be missing because CI or user ran `affected -t
e2e-ci` and the changeset did not affect e2e tests, thus no reports
generated. In this case, intead of erroring we should just log out a
warning so users know what happened.
<img width="1252" height="212" alt="image"
src="https://github.com/user-attachments/assets/a90f1f93-0d49-4976-8fa6-a40d2a46161a"
/>
2025-10-08 12:49:36 -04:00
Caleb Ukle c24a76bc3e docs(nx-cloud): fix invalid use of yaml anchors (#33017)
cannot use yaml anchors in merging arrays, only objects
init-steps is an array of steps therefore cannot use the `<<*` syntax

Fixes DOC-262
2025-10-08 10:23:18 -05:00
Jack Hsu 6cf618efaf docs(misc): update Tailwind CSS guides for React and Angular to not mention the generator (#33015)
The generator `setup-tailwind` is outdated and not necessary. You can
easily set up Tailwind yourself in 1 minute. Keep the pages around
because people do search for tailwind in our docs.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-08 11:12:49 -04:00
Craigory Coppola b7a291f8c1 chore(repo): add dotnet commit scope (#32975)
## Current Behavior
The PR to add the .NET plugin is failing because it uses the scope
`dotnet`, and that has to be present in master since the pr-title-checks
workflow validates against scopes in master.

## Expected Behavior
The scope is in master

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-08 11:08:39 -04:00
Shai Reznik 82b26adb8a feat(vite): add buildable libs support for vitest (#32973)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
In the vite nxTsConfigPaths plugin, when using `buildLibsFromSource:
false`, it has no effect when running vitest.

This is an issue especially in large nx projects when running vitest
browser mode because it has a potential to load all the files from the
entire project using the vite dev server (if no modules mocking is being
used).

This increases the amount of time vitest runs substantially.

Plus, there is no way for vite plugin authors to reuse the same
generated tsconfig file (the one generated by nx that points to the
`dist/` folder path) and reuse this information to configure TypeScript
for example.

One example that comes to mind is analog's angular-vite-plugin, meaning
even if nx supported it, that plugin wouldn't be able to know where is
the generated tsconfig is.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

I expect to be able to use `buildLibsFromSource: false` in my vitest
browser mode tests and reduce the amount of time it takes to run those
tests in large scale projects.

In one of my benchmarks I managed to reduce tests from over 1 minute to
9 seconds (!) with this option enabled.

In order to share the generated tsconfig path I've added another
environment variable called `process.env.NX_GENERATED_TSCONFIG_PATH`

Please let me know if this should be added to the documentation
somewhere and if so where, and I'll add it.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->
2025-10-08 15:35:17 +01:00
James Henry 55c0ce2685 feat(release)!: release graph aware filtering, updateDependents can now be "always" (#32971)
When release groups changed to become more flexible and powerful, with
`updateDependents` tracing across any number of transitive release
groups, the logic for filtering (e.g. `--projects` and `--groups` on the
CLI) was never updated to reflect this new dynamism and complexity.

Now in this PR, release graph construction has been fully separated out
from the release-group-processor. It now lives in the new
`ReleaseGraph`. This is also now where filtering takes place so that the
filters can be fully graph aware.

There is additionally a new `always` option available for
`updateDependents` in addition to `auto` and `never` which are
unchanged. `always` means that a project's dependents will be updated
wherever they may live in the graph, regardless of whether or not they
were directly included within a project or graph filter. We feel that
this is what people want most of the time so this is also going to
become the default in a follow up breaking change PR. In order to be
easier to review, and to increase confidence in this refactor, this PR
does not yet make that change to leave as many tests as possible
untouched (other than utilities changing).

BREAKING CHANGE: The signature of `init()` on `VersionActions` has
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 new `ReleaseGraph`. For
the most part, users do not need custom `VersionActions` so only a small
percentage of consumers should be impacted.

Fixes https://github.com/nrwl/nx/issues/31273
2025-10-08 18:22:30 +04:00
Juri 897e2ea6f6 docs(nx-cloud): de-emphasize console because it is not a requirement 2025-10-08 14:09:48 +02:00
Colum Ferry fd0a1f65af fix(release): ensure schema for release.groups is correct (#33007)
## Current Behavior
Currently the `nx-schema.json` is enforcing a `groups: properites` type
when it should be `groups: Record<string, properties>`

## Expected Behavior
Update `nx-schema.json` to have `release.groups: Record<string,
propeties>`
2025-10-08 12:42:37 +01:00
Colum Ferry 58b666aa55 feat(release): add releaseTagPatternPreferDockerVersion to specify version to use for git tag #32900 (#32972) 2025-10-08 14:31:35 +04:00
Colum Ferry 90f908579e feat(nest): ensure dependencies are added to project's package.json #32548 (#32986)
## Current Behavior
NestJS dependencies are not added to the project's package.json leading
to issues when pruning lockfile for dockerfiles.

## Expected Behavior
Ensure NestJS dependencies are added to the project's package.json.

## Related Issue(s)

Fixes #32548
2025-10-08 10:30:36 +01:00
Nikola Kalinov 8f8f804823 fix(vite): enable build watch mode by default for preview (#31604) (#31623)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
`nx preview <app>` does not enable watch mode on the build.
This used to be the case until (I think)
https://github.com/nrwl/nx/pull/20367

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
`nx preview <app>` should also enable watch mode and rebuild on files
change.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

FYI: I also had to apply [this config
change](https://github.com/vitejs/vite/issues/19410#issuecomment-2655507784)
for Vite 6 to unstuck from "Rebuilding project...". Maybe it's just my
project, not sure but in any case those are 2 separate issues.

Fixes #31604
2025-10-08 09:32:22 +01:00
MaxKless 95fee9f718 feat(core): add --check=all flag to configure-ai-agents (#32968) 2025-10-08 09:17:24 +02:00
Jack Hsu 895d7da162 docs(nx-dev): remove NEXT_PUBLIC_ASTRO_URL environment variable checks (#32999)
The codebase contains conditional logic based on `NEXT_PUBLIC_ASTRO_URL`
environment variable to support both old Next.js docs and new Astro docs
paths.

Since the migration to Astro is complete, the checks aren't needed.

Also add support for different `NX_DEV_URL` avalues for the Astro docs
so canary docs don't point to prod website, for example. (`footer.tsx`
and `Header.astro`).

Note: The changes are largely just removing the var check. Some files of
interest are:
- astro-docs/src/components/layout/Header.astro
- nx-dev/ui-common/src/lib/footer.tsx
- nx-dev/nx-dev/next.config.js
- nx-dev/nx-dev/redirect-rules.js

Also note that plugin registry and doc viewer should no longer be used.
Once we don't need the Next.js app anymore, we can just delete the
project rather than removing it right now. For now, just set `noindex`.

Closes DOC-161, DOC-230

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-07 20:51:12 -04:00
Louie Weng 48f24566c2 feat(nx-cloud): update description on nx login and logout (#31344)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Fixed the description of the commands to not have raw markdown when
running `npx nx login help`. Also updated the description such that we
don't specifically mention `cloud.nx.app` as not all users will be using
this environment by default.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-07 22:02:42 +00:00
Leosvel Pérez Espinosa bcaeed7b3a fix(core): remove duplicated "Running" string from tui title (#32991)
## Current Behavior

The TUI title displays `Running Running ...` in its title.

## Expected Behavior

The TUI title should not display `Running` duplicated in its title.
2025-10-07 16:34:57 -04:00
Jason Jean 01d5f3fe42 fix(repo): fix pr releases to not depend on a broken range (#32993)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

PR releases are being released with a range of `-1 - 1` which is
incorrect

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

PR releases have a peer dependency on just that PR release.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-07 19:25:25 +00:00
Craigory Coppola b96cfd325a feat(core)!: remove CreateNodes v1 types for Nx 22 (#32951)
Remove the old CreateNodes v1 signature and related types from the
public API.
This standardizes on CreateNodesV2 as the primary interface.

Related to Nx 22 createNodes v2 compatibility work.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com><!-- Please make sure you
have read the submission guidelines before posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-07 15:22:47 -04:00
Juri 91f517e819 chore(repo): enable astro-docs validate-links to be autofixed 2025-10-07 21:19:29 +02:00
Jason Jean 756a538775 fix(core): remove requirement to be in a package manager workspace (#32992)
## Current Behavior
<!-- This is the behavior we have today -->

Workspaces that did not use package manager workspaces lost some
dependencies with the other fix.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Workspaces that do not use package manager workspaces will still get the
correct dependencies.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-07 15:14:27 -04:00
Colum Ferry ef563d80a6 fix(vite): ensure tsconfig file is resolved from workspaceRoot #31987 (#32990)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
When resolving the tsconfig file, project root is always used,
regardless of cwd.
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Prepend workspaceRoot to force absolute path resolution 

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31987
2025-10-07 18:03:23 +01:00
Rares Matei 24a703e4b8 chore(repo): run hanging e2e tests serially (#32982)
- **chore(repo): split remaining long e2e tests (#32948)**
- **chore(repo): run hanging tests serially**
- **chore(repo): bust cache to test changes**

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

https://linear.app/nxdev/issue/CLOUD-3753/hanging-tests

Fixes CLOUD-3753
2025-10-07 12:26:37 -04:00
Caleb Ukle 08b0dfd9c1 docs(testing): add generic guide over feature based testing (#32979)
- add feature based testing guide
- add option to show all nodes w/ affected styles
2025-10-07 11:35:49 -04:00
MaxKless 7ed71e58bc fix(core): repair repo root on setupAiAgents in nx init (#32984) 2025-10-07 14:39:09 +02:00
Colum Ferry ff4426205f feat(release)!: set preserveMatchingDependencyRanges to true by default (#32983) 2025-10-07 16:16:14 +04:00
Caleb Ukle 7d19ba7027 docs(nx-plugin): add callout for local plugin name (#32976)
Clarify which name should be used when calling a local plugin

Fixes DOC-232

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-06 15:29:29 -05:00
Jack Hsu 738b06b30a feat(bundling): add excludeFromExternal option to esbuild executor (#32980)
This PR adds an option to allow users to include certain third-party
deps in the bundle by specifying the `excludeFromExternal` option. There
is an existing `thirdParty: true` option that Nx Console uses to bundle
_all_ third-party deps in the bundle, but the new option is more
granular.

## Current Behavior
Nx automatically detects certain dependencies (like optional peer
dependencies) and marks them as external. Users have no way to override
this behavior when they want to bundle these packages instead.

## Expected Behavior
Users can specify an `excludeFromExternal` option to exclude specific
packages from the external list, allowing them to be bundled even if Nx
automatically detected them as external.

## Related Issue(s)
Closes #NXC-2532

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-06 20:12:48 +00:00
Rares Matei e642155ac5 chore(repo): split remaining long e2e tests (#32948)
e2e-react: 19m 44s → 11m 04s | -8m 40s (43.9% faster)
e2e-workspace-create: 9m 36s → 6m 27s | -3m 9s (32.8% faster)
e2e-esbuild: 7m 48s → 4m 34s | -3m 14s (41.5% faster)
2025-10-06 19:29:03 +01:00
Colum Ferry 8f2220036d fix(nextjs): update entrypoints for buildable library with vite to include server entry #31457 (#32977)
## Current Behavior
When creating a buildable library for Next w/ Vite, we do not configure
an additional entry point for server components.

## Expected Behavior
Ensure additional server entry point is configured.

## Related Issue(s)

Fixes #31457
2025-10-06 18:19:41 +01:00
Colum Ferry 975c4c387c feat(release)!: switch defaults for fixed release group tag pattern, preserve matching dependency ranges and strictPreid (#32878)
Behaviour changes introduced:
- `preserveMatchingDependencyRanges` set to `true` by default
- `releaseTagPatternStrictPreid` set to `true` by default
- `releaseTagPattern` for fixed release groups set to
`{releaseGroupName}-v{version}`

BREAKING CHANGE
2025-10-06 16:20:27 +01:00
nx-cloud[bot] 0149fac877 fix(nx-cloud): update broken documentation links to AI features 2025-10-06 16:37:15 +02:00
Juri 1e0bfc698e docs(nx-cloud): refactor nx-cloud ai concept page 2025-10-06 16:37:15 +02:00
Juri e77293876b docs(nx-cloud): update various AI docs pages 2025-10-06 16:37:15 +02:00
Juri 6e137262ea docs(core): update AI setup instructions 2025-10-06 16:37:15 +02:00
Colum Ferry 48e17bc53c fix(angular-rspack): do not parse json with babel #32690 (#32966)
## Current Behavior
JSON files are not being filtered from transform with the
JavascriptTransformer.

## Expected Behavior
Only handle JS/TS files with the JavascriptTransformer.

## Related Issue(s)

Fixes #32690
2025-10-06 13:02:40 +01:00
Colum Ferry a09bb0020e chore(release): cleanup leftovers after removing legacy versioning (#32964) 2025-10-06 14:45:06 +04:00
Terry Mun-Andersen 9ca711fb85 fix(core): upgrade axios to 1.12.0 to address CVE-2025-58754 (#32712)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Nx is currently using a vulnerable version of axios (<1.12.0) which has
a reported high-level vulnerability
[CVE-2025-58754](https://www.cve.org/CVERecord?id=CVE-2025-58754). This
is being flagged by GitHub Advanced Security on a Nx-powered monorepo:

<img width="1260" height="712" alt="Screenshot 2025-09-12 at 09 42 56"
src="https://github.com/user-attachments/assets/251b47c7-07d1-4c21-aafb-0811554d8861"
/>

## Expected Behavior
Nx should be using a patched version of axios (≥1.12.0) that addresses
said vulnerability.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-10-06 11:20:34 +01:00
Mischa Fischer 8670f2df97 fix(remix): @nx/remix/package.json export typo fixed #32810 (#32940)
## Current Behavior
Error on install in node_modules folder.
[ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in
/Volumes/ssd/user/Dev/project/node_modules/@nx/remix/package.json
      at exportsNotFound (node:internal/modules/esm/resolve:313:10)

## Expected Behavior
Can install without error.

## Related Issue(s)
* [@nx/remix package.json is broken due to export
misspelling](https://github.com/nrwl/nx/issues/32810)

Fixes #32810
2025-10-06 10:32:17 +01:00
Jack Hsu 844bbb213d docs(linter): show flat config in docs (#32953)
We show legacy eslintrc format that's been deprecated and shouldn't be
used anymore. We still want to document the legacy format in case users
haven't switched yet.

---------

Co-authored-by: Caleb Ukle <caleb@nrwl.io>
2025-10-04 01:19:31 +00:00
Juri 1d687c4994 fix(nextjs): remove whitespace for newly generated server component 2025-10-03 19:25:39 +02:00
Colum Ferry 6f1086f1ec feat(release)!: remove deprecated legacy versioning (#32888)
Remove deprecated legacy versioning support

BREAKING CHANGE

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-03 12:01:01 -04:00
Jack Hsu 836034172c chore(repo): disable duplicated typecheck targets if the project already uses tsc to build (#32926)
This PR removes redundant `typecheck` targets from projects already
building with `tsc`.

- Add `addTypecheckTarget: false` to projects using `tsc` as
`build-base`.
- Exclude `e2e` and `nx-dev` projects from having `tsc` build inferred
but leave the `typecheck` target

Note: angular-rspack and angular-rspack-compiler has an issue where
`@nx/vite/plugin` is inferring the typecheck target. We may want to
check `addTypecheckTarget` for that plugin as well.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->
Closes NXC-3208
2025-10-03 11:38:05 -04:00
Colum Ferry a520306949 feat(release)!: match nx affected behavior to determine relevant conventional commits (#32915)
## Current Behavior
Nx Release currently only checks for commits with affected files changed
under the root of projects configured for release.
However, changes to other files may affect and invalidate these projects
also.

## Expected Behavior
Reuse Nx's affected logic to determine when commits contain changes that
affect the projects configured for release.

BREAKING CHANGE: More files are now being used to determine relevant
commits, meaning there is higher chance for projects to receive version
bumps

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-03 16:01:48 +01:00
Jack Hsu fcf01c9579 docs(core): align remote cache docs with implementation (#32945)
Fix docs so it aligns with remote cache implementation.
## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #32870
2025-10-03 10:28:49 -04:00
Jack Hsu edec724e5d docs(nx-dev): add missing redirect (#32941)
Add a redirect that we missed.

Closes #32532
2025-10-03 09:07:11 -04:00
Jason Jean c7e9941b4f chore(repo): fix task inputs for nx:build (#32939)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

The inputs for nx:build did not have transitive true for it's node
inputs

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The inputs for nx:build did not have transitive true for it's node
inputs

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-03 08:13:21 -04:00
Jack Hsu 57d9ca98c7 chore(repo): prevent conflicts when more than one process runs npx playwright install (#32934)
The install command will fail on Linux machines due to `apt` command
only allowing one invocation at a time. This PR solves this by writing
lock and status files to coordinate between potentially many tests on
the same machine.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-02 21:13:55 -04:00
Jonathan Cammisuli c99ac81d39 chore(misc): do not ai fix "check-commit" tasks (#32925) 2025-10-02 17:45:39 -04:00
Jason Jean 2f55bcb70b chore(repo): update nx to 22.0.0-beta.2 (#32936)
Updating Nx from 22.0.0-beta.1 to 22.0.0-beta.2
2025-10-02 16:21:44 -04:00
Jack Hsu 3bac12451e docs(misc): add search tracking to replace Algolia analytics (#32937)
Set up search analytics for docs.
## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Closes DOC-220

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-02 16:20:26 -04:00
Zoran Kokeza 07e3166ab6 fix(bundling): postcss-cli-resources should handle relative deploy url #32714 (#32762)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Relative deploy URL is not being handled correctly in the
postcss-cli-resources Plugins for Webpack and Rspack after switching to
use WHATWG URL in favour of the url.resolve() method.

## Expected Behavior
Ensure the relative deploy URL is properly resolved when using relative
paths

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #32714
2025-10-02 16:55:05 +01:00
Rares Matei 15e3ed53f5 chore(repo): split slow e2e tests (#32893)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-02 09:17:09 -04:00
Leosvel Pérez Espinosa f198e9218a fix(core): ensure nx is published with the correct dependency version for the native packages (#32928)
## Current Behavior

The `nx` package is being published with the native package dependencies
using an invalid version range `"*"`.

## Expected Behavior

The `nx` package should be published with the native package
dependencies pointing to the same version as the `nx` package.

A recent change to `nx release` requires workspace packages to be
identified as such when deciding to replace the version.

## Related Issue(s)

Fixes #32898
2025-10-02 08:54:10 -04:00
MaxKless 359f08d6af fix(core): tweak configure-ai-agents prompt (#32914)
Co-authored-by: Juri <juri.strumpflohner@gmail.com>
2025-10-02 13:15:46 +02:00
Leosvel Pérez Espinosa f303577805 chore(repo): update binary versions in lockfile (#32927)
Update the outdated binary versions in the lockfile.
2025-10-02 09:03:03 +00:00
Jason Jean 385a62a918 chore(repo): update nx to 22.0.0-beta.0 (#32918)
Updating Nx from 21.6.1-rc.0 to 22.0.0-beta.0
2025-10-02 08:31:24 +02:00
Jason Jean e28a97aaeb cleanup(core): clean up file change type for affected (#32920)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

These fields were not being used and it takes time to calculate.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The fields are removed.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-01 16:03:57 -04:00
Jack Hsu 58231a5a1a docs(misc): improve conformance documentation discoverability (#32922)
This PR updates our module boundary feature/rule pages such that:
- It is clear that the feature is for both JS/TS projects (ESLint) and
any language (conformance)
- Update links to the ESLint rule from feature page to the actual ESLint
rule page (since feature covers both ESLint and Conformance now)
- Add a "Why" section to the conformance overview page

The conformance page (`docs/enterprise/powerpack/conformance`) is meant
to be the main landing page that we send to users. Also updates the
Enterprise page so link to the overview page.

<img width="1024" height="459" alt="image"
src="https://github.com/user-attachments/assets/c24f110d-cc44-41c8-b448-56d4a246a7b6"
/>

## Updated Pages

- /docs/features/enforce-module-boundaries
- /docs/enterprise/powerpack/conformance
-
/docs/technologies/eslint/eslint-plugin/guides/enforce-module-boundaries
- /docs/reference/powerpack/conformance/overview
- /docs/enterprise/polygraph#conformance
- /enterprise

## Notes
The `/docs/enterprise/powerpack/conformance` and
`/docs/reference/powerpack/conformance/overview` have some overlaps,
where the latter documents all the API options. We should look at
cleaning both the conformance and owners reference pages such that they
are just API docs.

## Related Issue(s)
Closes DOC-206

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-01 15:50:30 -04:00
Jason Jean f04ac29215 cleanup(devkit): move the ignore object creation to nx (#32907)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Devkit creates the ignore object using the `ignore` package. Nx also
creates the ignore object.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Only `nx` creates the ignore object using the `ignore` package. Devkit
utilizes a util from nx.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-01 14:32:21 -04:00
Jason Jean e5ac4a8024 fix(core): optimize task hashing with BFS and performance logging (#32911)
## Summary

Optimizes `get_dep_output` by replacing recursive traversal with BFS +
parallel processing.

**Key optimization**: The old recursive implementation processed the
same task multiple times when it appeared in multiple dependency paths
(diamond dependencies). The new implementation:
- Uses BFS with a visited HashSet to process each task exactly once
- Collects all tasks first, then processes them in parallel with Rayon
- Returns task references directly, eliminating redundant HashMap
lookups

This deduplicates work and leverages parallelism, significantly
improving performance on large task graphs.

**Note**: Only processes regular dependencies, not
continuous_dependencies, since continuous tasks (like watch/serve) don't
produce outputs that need to be hashed.

The same test on my machine without these changes takes many minutes
before crashing my editor. Now it takes <3ms.

## Test plan

-  All Rust tests passing
-  Native module builds successfully  
-  Added 4 unit tests covering direct dependencies, transitive
dependencies, diamond deduplication, and task output filtering
-  Added performance test verifying large graphs (depth 30 = 90 tasks)
complete in <10ms
2025-10-01 13:27:28 -04:00
Jason Jean ac711feeaa chore(misc): remove committed tsbuildinfo files and add to gitignore (#32921)
## Current Behavior

TypeScript build info files (*.tsbuildinfo) are currently committed to
git in several e2e test directories:
- e2e/release/tsconfig.tsbuildinfo
- e2e/remix/tsconfig.tsbuildinfo
- e2e/rollup/tsconfig.tsbuildinfo
- e2e/storybook/tsconfig.tsbuildinfo

These are generated build artifacts that should not be tracked in
version control.

## Expected Behavior

Build info files should be ignored by git and not committed to the
repository.

## Related Issue(s)

N/A - General housekeeping to clean up committed build artifacts
2025-10-01 13:06:51 -04:00
MaxKless b863bc1686 fix(core): improve provenance error with custom registry information (#32903)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The provenance error pops up frequently for custom registries and it can
be confusing.

## Expected Behavior
With an updated error message, it's clearer what's going on and how to
fix it. This is what it looks like for a custom registry:
``` 
NX   The migrate command failed.


NX   An error occurred while checking the provenance of nx@21.10.5-provenance.
This might be due to a custom registry configuration (http://localhost:4874/). Please check whether provenance is correctly configured for your registry. 
To disable this check at your own risk, you can set the NX_SKIP_PROVENANCE_CHECK environment variable to true.
 ```
2025-10-01 12:23:53 -04:00
Leosvel Pérez Espinosa c7400eb08c fix(js): temporarily hash all external dependencies for tasks inferred by the @nx/js/typescript plugin (#32912)
## Current Behavior

Tasks inferred by the `@nx/js/typescript` plugin can result in a cache
hit when the public API (`.d.ts` files) of external deps changes. This
is incorrect.

Those tasks correctly have an input `dependentTasksOutputFiles:
'**/*.d.ts'`, but that only covers local workspace dependencies, not
external dependencies.

## Expected Behavior

Tasks inferred by the `@nx/js/typescript` plugin should result in a
cache miss when the public API (`.d.ts` files) of external deps changes.
The `tsc -b` command would invalidate its own cache when any dependency
(local or external) `.d.ts` files change, and the Nx cache should do the
same.

This is a temporary workaround that will more aggressively invalidate
the cache, but it's safer than having false positives. We'll work on a
proper solution that will only hash `.d.ts` files from external
dependencies. Once we have it, we'll revert this change so that the
inputs are as surgical as possible while still being safe.
2025-10-01 16:22:43 +00:00
Caleb Ukle ecfc503532 fix(nx-dev): update credit pricing link to new docs page (#32899)
fix bad link to the credit pricing page from next site -> astro docs

Fixes DOC-245
2025-10-01 12:19:33 -04:00
Caleb Ukle 443b714095 fix(nx-dev): watch for theme changes for project/task graph components (#32885)
markdoc graph components were not updating the theme if the user changed
their theme preference causing contrast issues with graph content.
now the graph components will update the selected them when the system
theme or pages theme changes

also do not render title bar if no title is provided

fixes: DOC-237
2025-10-01 12:19:20 -04:00
Caleb Ukle a9b7ea5cd5 fix(nx-dev): provide message to check previous docs w/ empty migrations (#32919)
Since Nx only keeps the last 2 majors listed in a plugins
migration.json, it's possible migrations can be defined and a valid
link, but a new nx version will removed those migrations now causing the
page to 404 a link that previously worked.

instead of 404-ing when plugin migrations delete old versions of
migrations we provide a message stating that there are no migrations,
but you can check the previous versions of the docs to check if the
migration you need is listed here.

We still will not include the migrations link in the sidebar when the
migration.json does not contain any migrations.

Example:
<img width="780" height="425" alt="image"
src="https://github.com/user-attachments/assets/de27c4f7-1442-44e6-9005-970450cabe1e"
/>


Fixes DOC-251

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-01 14:34:26 +00:00
Colum Ferry 783380c801 chore(release): cleanup parseGitCommit to separate version plan commit into parseVersionPlanCommit (#32902)
Split `parseGitCommit` version plan functionality into
`parseVersionPlanCommit`
2025-10-01 15:18:13 +01:00
Caleb Ukle ae37f0bc39 fix(nx-dev): improve default zoom level of graph nodes in docs (#32910)
- remove side_by_side and the usage of cards grid for graph views
- re-center project/task graphs on render to better fit into view
- also updating the height of a few usages of the graph for when there
was a tall stack of nodes to better fit
- NOTE: we can still apply custom node styles if we want, but since the
complaint was just the default render size bc zoom level, I decided to
just resize the view for the elements.

before: 

![wm_2025-09-30T16-49-08@2x](https://github.com/user-attachments/assets/fb740063-6cff-4892-b164-e0a5cc168a8a)


after: 

![wm_2025-09-30T16-48-41@2x](https://github.com/user-attachments/assets/c2d54dd2-13bf-45bb-b8c0-153fb277526a)


fixes: DOC-248
2025-10-01 09:01:47 -05:00
Jack Hsu 0ef9be8295 feat(webpack)!: remove SVGR option and provide withSvgr composable function (#32917)
This reverts commit 5f4a0fe852.

The previous PR was erroneously merged into `master` for 21.6.x, so we
had to revert it. This PR brings it back for 22.
2025-10-01 09:54:56 -04:00
Jason Jean 54dc25978d feat(misc): remove migrations prior to v20 (#32904)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

There are migrations for v19.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Migrations prior to v20 (v19 and below) are cleaned up. Users migrating
from Nx 19 will have to do it piece meal by going to Nx 20 first, then
they will be able to go straight to Nx 22.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-01 09:45:21 -04:00
Leosvel Pérez Espinosa 22c57e465c feat(misc)!: remove deprecated decorate-cli script and stop sorting tsconfig paths by default (#32781)
- Remove the deprecated `decorate-cli` script.
- Stop sorting TypeScript path mappings by default in `nx format` and
generators.

BREAKING CHANGE: The long-deprecated `decorate-cli` script has been
removed.
BREAKING CHANGE: The `nx format` command and generators no longer
default to sorting TypeScript path mappings. To keep the previous
behavior, pass the `--sort-root-tsconfig-paths` flag to the command or
set `NX_FORMAT_SORT_TSCONFIG_PATHS=true`.
2025-10-01 06:40:58 +00:00
Caleb Ukle 1bea9138b7 docs(nx-dev): require description for doc pages (#32908)
add description to all docs and make required to make index views not
render differently

<img width="804" height="669" alt="image"
src="https://github.com/user-attachments/assets/4ecf6a24-13b7-4223-bcd3-c3db50007740"
/>


closes: DOC-246
2025-09-30 16:48:13 -05:00
Leosvel Pérez Espinosa e14440857a feat(core)!: remove NX_DISABLE_DB environment variable (#32887) 2025-09-30 15:53:43 -04:00
Benjamin Cabanes 726594c286 docs(nx-dev): integrate Calendly forms with Hubspot forms (#32906)
Added support for Calendly form integration within Hubspot forms across
multiple components.
2025-09-30 19:43:03 +00:00
FrozenPandaz 6b86c33c30 feat(devkit): bump compatibility to Nx 21 - 23 2025-09-30 13:50:10 -04:00
MaxKless d651d17a06 feat(core): prompt for ai agent files on nx init (#32889) 2025-09-30 17:46:47 +00:00
Benjamin Cabanes 9a038e9b8e chore(nx-dev): update team (#32896)
Update the team.
2025-09-30 10:30:38 -04:00
Jack Hsu 9660df4352 docs(testing): update task splitting docs to be more generic rather t…han just for e2e tasks (#32897)
Update language on task splitting docs. Fix broken anchor link for
Java/Gradle test distribution.
2025-09-30 14:25:10 +00:00
Jack Hsu bcfdd01e85 docs(nx-dev): add missing redirects (#32895)
This PR adds redirects that we missed when we did the
technologies/core-api reorg, so now they're not redirecting correctly to
astro docs.
2025-09-30 10:02:14 -04:00
Colum Ferry a24f4167b7 chore(core): update workspace snapshot tests to be correct (#32890)
Fix snapshots
2025-09-30 12:17:53 +01:00
Leosvel Pérez Espinosa a9a17be0e0 feat(js)!: remove the experimental and deprecated inlining feature from the tsc and swc executors (#32783)
## Current Behavior

The experimental inlining feature in the `@nx/js:tsc` and `@nx/js:swc`
executors is deprecated.

## Expected Behavior

The experimental inlining feature in the `@nx/js:tsc` and `@nx/js:swc`
executors should be removed.

BREAKING CHANGE: The experimental inlining feature in the `@nx/js:tsc`
and `@nx/js:swc` executors was removed. A migration will remove the
related options (`external` and `externalBuildTargets`). Still, if you
use or rely on the feature, you need to make your dependencies buildable
or use a different build tool with bundling capabilities.
2025-09-29 18:24:57 -04:00
Colum Ferry 264593b46b fix(bundling): ensure tsconfig options are respected with rollup-typescript-plugin (#32816)
## Current Behavior
The configuration of the `@rollup/typescript-plugin` is incorrect and
overrides options provided by tsconfig.
It also doesn't respect options from the tsconfig file.

## Expected Behavior
Ensure tsconfig options are respected and not implicitly overriden.
2025-09-29 18:24:57 -04:00
Jack Hsu 4f9eeb4fb1 feat(webpack)!: remove deprecated deleteOutputPath and sassImplementation options (#32828)
The webpack package contains deprecated options that were marked with
TODO(v22) comments for removal:
- deleteOutputPath option
- sassImplementation option

These deprecated options were still being referenced in the codebase and
schema files, potentially causing confusion for users.

Remove the deprecated options from the webpack package to clean up the
API for v22:
- Remove deleteOutputPath option from the webpack executor and related
configurations (use Webpack's output.clean option instead)
- Remove sassImplementation option from the webpack executor and related
configurations (sass-embedded is now the default)
- Add a migration to automatically update existing workspaces that use
these deprecated options

Closes NXC-3108

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-29 18:24:57 -04:00
Colum Ferry 92ab08882c feat(rspack)!: remove deprecated deleteOutputPath and sassImplementation options (#32756)
## Current Behavior

The rspack package contains deprecated options that were marked with
TODO(v22) comments for
  removal:
- deleteOutputPath option in the rspack executor schema (Line 79 in
models.ts)
- sassImplementation option in the rspack executor schema (Line 164 in
models.ts)

These deprecated options were still being referenced in the codebase and
schema files,
  potentially causing confusion for users.

 ## Expected Behavior

Remove the deprecated options from the rspack package to clean up the
API for v22:
- Remove deleteOutputPath option from the rspack executor and related
configurations
- Remove sassImplementation option from the rspack executor and related
configurations
- Add a migration to automatically update existing workspaces that use
these deprecated options

##  Related Issue(s)
Resolves NXC-3112

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-29 18:24:57 -04:00
Jack Hsu 45681f30ba feat(react): keep deprecated @nx/react/bundle-rollup module since there is not a replacement when using @nx/rollup:rollup executor (#32821)
There isn't a replacement for `bundle-rollup` since the rollup executor
does not support isolated configs. This module ensures that existing
projects will continue to work.
2025-09-29 18:24:57 -04:00
Jack Hsu 29707d6e79 feat(react): remove support for non-isolated webpack config in ponentTestingPreset (#32787)
This PR removes an unnecessary logic for React component testing via
Cypress. We've made it not possible to have optional webpack configs a
while back (i.e. non-isolated config support). This means that even
legacy users _must_ have a webpack config using `composePlugin(...)`.
Thus, pass the options to that plugin function and things will continue
to work as usual for those users.
2025-09-29 18:24:57 -04:00
Colum Ferry 1b4b64d1d3 feat(rspack)!: remove application generator in favour of framework-specific options (#32755)
Remove the Rspack Application Generator in favour of generators from
`@nx/react`, `@nx/angular` and other plugins with app generators.

Resolves NXC-3109
2025-09-29 18:24:57 -04:00
Colum Ferry ccd33ba5c7 feat(bundling)!: change default useLegacyTypescriptPlugin to false for v22 (#32754)
The default TypeScript plugin for Rollup has changed from
rollup-plugin-typescript2 to @rollup/plugin-typescript. To continue
using the legacy plugin, explicitly set useLegacyTypescriptPlugin: true
in your configuration.

Resolves NXC-3094

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-29 18:24:57 -04:00
Jack Hsu 856d7d2b46 fix(core)!: remove deprecated simpleName option from library generators (#32716)
The deprecated simpleName option has been removed from the library
generators for Angular, React, Nest, and JS packages. Use the --name
option to provide the exact name for the library.

BREAKING CHANGE: simpleName option is no longer supported in library
generators

Closes NXC-3107, NXC-3098, NXC-3093, NXC-3111
2025-09-29 18:24:57 -04:00
Jack Hsu 5f4a0fe852 Revert "feat(webpack)!: remove SVGR option and provide withSvgr composable function (#32843) (#32882)
This reverts commit 2e9b5430bb. This is
meant for v22 not 21.6.
2025-09-29 16:35:12 -04:00
Jack Hsu 405d91d977 docs(misc): fix graph/pdv tags to not conflict with other code blocks (#32881)
This PR fixes an issue with new docs where graph or PDV tag with inner
JSON content will cause formatting issues with other code blocks on the
page.

Rather than using `<slot/>` to render the inner code fence, which seems
to not play well with the rest of the page, we instead skip rendering
the inner content altogether, and pass the data as `astroRawData` to the
underlying React component. This removes the need to handle
HTML/attribute parsing, so it is much cleaner in addition to resolving
conflicts.

Note: Also fixed some of the previous JSON content as they were invalid.
2025-09-29 15:43:05 -04:00
Jason Jean a8373f1a74 chore(repo): update nx to 21.6.1-rc.0 (#32873)
Updating Nx from 21.6.1-beta.4 to 21.6.1-rc.0
2025-09-29 13:54:37 -04:00
Jack Hsu 2e9b5430bb feat(webpack)!: remove SVGR option and provide withSvgr composable function (#32843)
BREAKING CHANGE: The svgr option has been removed from withReact,
NxReactWebpackPlugin, and withNx (for Next.js). Projects that need SVGR
support should now use the new withSvgr composable function from
@nx/react.

For React webpack projects:
- Import withSvgr from '@nx/react'
- Add withSvgr() to your composePlugins chain after withReact()

For Next.js projects:
- Add SVGR webpack configuration directly to your next.config.js

Migrations have been provided to automatically update existing
configurations.

Closes NXC-3106

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-29 13:48:58 -04:00
Jason Jean 8887ae0e08 fix(core): spinner shows correct plugin count during project graph creation (#32871)
## Current Behavior

The spinners shown during project graph creation display incorrect
plugin counts. They show the total number of registered plugins instead
of the actual number of plugins being processed for each specific phase.

For example, if there are 10 total plugins but only 3 have
`createDependencies`, the spinner would incorrectly show "Creating
project graph dependencies with 10 plugins" instead of "Creating project
graph dependencies with 3 plugins".

## Expected Behavior

Spinners should show accurate counts reflecting the actual number of
plugins being executed for each phase of project graph creation.

## Related Issue(s)

This fixes a misleading user experience where users see progress
indicators that don't match the actual work being performed.

## Changes Made

### 1. Dependencies Phase
- Use `createDependencyPlugins.length` instead of `plugins.length` for
spinner count

### 2. Metadata Phase  
- Filter plugins once for `createMetadata` capability
- Use filtered count for spinner
- Eliminate double filtering by using filtered array directly in
processing

### 3. Create Nodes Phase
- Filter plugins once for `createNodes[0]` pattern existence
- Use filtered count for spinner
- Eliminate redundant pattern check in loop

## Benefits

- **Accurate Progress**: Users see correct plugin counts during each
phase
- **Better Performance**: Eliminated redundant filtering operations
- **Consistent Code**: All three phases now follow the same pattern of
filter-once-use-everywhere
2025-09-29 13:47:07 -04:00
MaxKless cd32388903 fix(core): tweak messaging if vscode / cursor aren't installed (#32877)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The messaging can be confusing if vscode/cursor are installed but not
added to PATH.

## Expected Behavior
The messaging is clearer.
2025-09-29 13:46:54 -04:00
Caleb Ukle d09b519d7a docs(nx-dev): cleanup nx-cloud cli ref doc (#32866)
- fix usage of asides mdoc syntax
- updated codeblock frames
- added assignment-rules arg
2025-09-29 10:10:16 -05:00
Colum Ferry 5be7b38619 fix(rspack): mark svgr support as deprecated (#32861)
## Current Behavior
`svgr` support has been deprecated in `webpack` for some time, but it
was never marked as deprecated for `rspack`.

## Expected Behavior
Mark `svgr` support as deprecated with aim for removal in v23
2025-09-29 14:15:38 +01:00
Jason Jean 7f4a8eaf86 fix(repo): remove duplicate permissions block in publish workflow (#32868)
## Current Behavior

The publish workflow has a duplicate `permissions` block incorrectly
nested under a GitHub script action step, which causes a syntax error in
the GitHub Actions workflow.

## Expected Behavior

The workflow should run without syntax errors. The `permissions` block
should only be defined at the job level, not within individual steps.

## Related Issue(s)

This fixes a GitHub Actions workflow syntax issue where permissions were
incorrectly nested under a step action.

The `pull-requests: write` permission is already correctly defined at
the job level (lines 510-513), so the duplicated permissions block under
the step was unnecessary and causing errors.

🤖 Generated with [Claude Code](https://claude.ai/code)
2025-09-26 15:38:38 -04:00
Colum Ferry ad032add38 fix(core): project graph creation processes project dependencies correctly (#32784)
## Current Behavior

The project graph build process incorrectly handles dependencies when
workspace projects have
different versions or are referenced via specific version ranges. This
causes several issues:

1. NPM lockfile parser crashes when encountering symlinked nested
dependencies in workspaces
  (which don't have versions)
2. Package.json dependencies that reference workspace projects with
specific versions (e.g.,
"proj4": "1.0.0" when workspace has "version": "2.0.0") incorrectly
resolve to the workspace
  project instead of the installed npm package
3. Version ranges and file references to workspace projects are not
properly validated

 ## Expected Behavior

  The dependency resolution should:
- Handle symlinked workspace packages in npm lockfiles without crashing
- Correctly differentiate between workspace projects and npm packages
when specific versions are
   referenced
- Properly validate version ranges against workspace package versions
using semver
- Support file references (e.g., "file:../proj6") for workspace
dependencies
- Only resolve to workspace projects when the version constraint is
satisfied or when using
  wildcards

## Notes
This has inadvertently caused issues when calculating which manifest
files need to be updated in the JSVersionActions / Nx Release for Npm
Packages

## Related Issues

Fixes #31454

---------

Co-authored-by: FrozenPandaz <jasonjean1993@gmail.com>
2025-09-26 14:13:11 -04:00
Colum Ferry 5d953a42c2 fix(nest): setup tsconfig to use decorators #30749 (#32859)
## Current Behavior
NestJS libraries using decorators in constructor, or otherwise, are
causing TS errors due to missing configuration for decorators.

## Expected Behavior
Ensure decorator config settings are set in `tsconfig.lib.json`.

## Related Issue(s)

Fixes #30749
2025-09-26 14:10:28 -04:00
Jack Hsu e2a79862a6 chore(repo): restore PR release functionality (#32839)
This PR brings back PR releases.

---------

Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-09-26 17:30:24 +00:00
MaxKless c54727dd53 feat(core): add configure-ai-agents command (#32825)
This pull request introduces support for configuring specific AI agents
in Nx workspaces, allowing users to select which agents to set up and
generating only the relevant configuration files for those agents. It
also updates documentation, schemas, and tests to reflect this new, more
flexible approach.

The most important changes are:

**Agent Selection and Configuration:**
* Added the ability to specify which AI agents to configure via an
`agents` array, both in the setup schema (`schema.json`) and the
`CreateWorkspaceOptions` type. The supported agents are: `claude`,
`gemini`, `codex`, `cursor`, and `copilot`. The generator only creates
configuration files for the selected agents, rather than all by default.
[[1]](diffhunk://#diff-f4d0a6778d70986b54028fb1a5a9338ad4db252edd6db4066e7ee87e8d7f28a5R22-R30)
[[2]](diffhunk://#diff-8141dbb37440f99a460b1e23d0c7229cd16338984832faf528d0ff23de179766R40-R50)
[[3]](diffhunk://#diff-ed4e3e85dbc5d3358491bcef52a8f403a9607df8c874ec9dadef7cd2a1eba6c7R89-R121)

* Implemented prompt logic for selecting AI agents interactively during
workspace creation, and exposed available agent types for use in prompts
and configuration.
[[1]](diffhunk://#diff-672af9097acda13d133130b660df34e6ddf6a61a74f9a6d66832255123e8f9b9R16)
[[2]](diffhunk://#diff-672af9097acda13d133130b660df34e6ddf6a61a74f9a6d66832255123e8f9b9R75-R119)

**File Generation Logic:**
* Refactored the `setupAiAgentsGenerator` implementation to generate
only the files relevant to the specified agents (e.g., `CLAUDE.md`,
`.mcp.json` for Claude; `.gemini/settings.json` for Gemini; `AGENTS.md`
for others), and to append to existing files rather than overwrite them.
[[1]](diffhunk://#diff-ed4e3e85dbc5d3358491bcef52a8f403a9607df8c874ec9dadef7cd2a1eba6c7R1-R45)
[[2]](diffhunk://#diff-ed4e3e85dbc5d3358491bcef52a8f403a9607df8c874ec9dadef7cd2a1eba6c7R89-R121)

* Added new utility functions for determining config file paths and
reading agent-specific configuration, improving maintainability and
clarity of file handling logic.
2025-09-26 13:17:43 -04:00
Miroslav Jonaš 05227d73c5 feat(core): add id, start and end time to lifecycle hooks (#32583)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Pre and post hooks lack corellation Id which might make it difficult to
culculate stats for task using pre and post hooks.
Additionally, post hook does not expose the duration or time span for
the task. Using pre/post hook might not be precise enough.

## Expected Behavior
Hooks expose the unique taskId so we can corellate pre hook of a task to
the post hook of the same task. Post hook should expose start and end
time of the task run.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Resolves discussion
[31076](https://github.com/nrwl/nx/discussions/31076)
2025-09-26 17:55:51 +02:00
Benjamin Cabanes 65a216bfe2 feat(nx-dev): enhance UI animations & statistics display (#32863)
Refactored multiple components to integrate `motion` animations for a
smoother UI experience. Implemented `AnimateValue` for animated
statistic values across various sections and improved readability by
replacing `JSX.Element` with `ReactElement` where applicable.
2025-09-26 11:03:48 -04:00
Miroslav Jonaš 65fab5bb4c feat(core): improve split target to support Gradle format (#32766)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-26 14:55:49 +00:00
Colum Ferry 3bcf014cb3 chore(web): ensure readme is published (#32858)
## Current Behavior
The `README.md` file for `@nx/web` is currently not copied into the
publish directory for release.

## Expected Behavior
Ensure the `README.md` file is copied into the publish directory.

## Related Issue(s)

Fixes NXC-3055
2025-09-26 14:54:20 +01:00
Leosvel Pérez Espinosa 6c109d2c20 fix(core): add env var to disable fetching migration metadata from registry (#32850)
Add a new `NX_MIGRATE_SKIP_REGISTRY_FETCH` environment variable to opt
out of fetching package versions and migrations metadata from the
registry and instead, use package installation to get the information.
2025-09-26 14:10:57 +02:00
Jonathan Gelin 5ea2e47acf fix(core): display prettier valid errors (#32771)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
When running `nx format:check`, if there is an error, it is considered
as files not formatted correctly
But if Prettier is throwing a real error, it is not diplayed. We just
see an empty result without information

For example:

Format check failing with empty result
```
nx format:check


```

But when running the command, we can see the error:
```
node "/node_modules/prettier/bin/prettier.cjs" --list-different "packages/lib/.spec.swcrc" 
packages/lib/.spec.swcrc
[error] No parser could be inferred for file "/packages/lib/.spec.swcrc".
```

## Expected Behavior
I should see the prettier error to understand why it is failing

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-25 21:38:32 -04:00
Jack Hsu b6d5f38691 fix(gradle): skip targets on Netlify since the Java version is too old (#32852)
Building on Netlify fails.

```
3:03:48 PM: FAILURE: Build failed with an exception.
3:03:48 PM: * What went wrong:
3:03:48 PM: A problem occurred configuring root project 'nx'.
3:03:48 PM: > Could not resolve all artifacts for configuration 'classpath'.
3:03:48 PM:    > Could not resolve dev.nx.gradle:project-graph:0.1.7.
3:03:48 PM:      Required by:
3:03:48 PM:          root project : > dev.nx.gradle.project-graph:dev.nx.gradle.project-graph.gradle.plugin:0.1.7
3:03:48 PM:       > Dependency requires at least JVM runtime version 17. This build uses a Java 8 JVM.
3:03:48 PM:    > Could not resolve com.ncorti.ktfmt.gradle:plugin:0.24.0.
3:03:48 PM:      Required by:
3:03:48 PM:          root project : > com.ncorti.ktfmt.gradle:com.ncorti.ktfmt.gradle.gradle.plugin:0.24.0
3:03:48 PM:       > Dependency requires at least JVM runtime version 17. This build uses a Java 8 JVM.
3:03:48 PM: * Try:
3:03:48 PM: > Run this build using a Java 17 or newer JVM.
3:03:48 PM: > Run with --stacktrace option to get the stack trace.
3:03:48 PM: > Run with --debug option to get more log output.
3:03:48 PM: > Run with --scan to get full insights.
3:03:48 PM: > Get more help at https://help.gradle.org.
3:03:48 PM: BUILD FAILED in 30s
```

## Current Behavior
Gradle plugin needs Java 17, but Netlify uses 8.

## Expected Behavior
Skip targets on Netlify just like on Vercel.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #NXC-3175
2025-09-25 16:30:35 -04:00
Jason Jean 6480d3d6d1 chore(repo): update nx to 21.6.1-beta.4 (#32848)
Updating Nx from 21.6.1-beta.3 to 21.6.1-beta.4
2025-09-25 15:01:48 -04:00
Philip Fulcher a6755caff8 chore(nx-dev): remove September webinar notifiers (#32846) 2025-09-25 13:38:43 -05:00
Caleb Ukle 2a6bb23701 docs(nx-dev): explain how to correctly re-run jobs with manual DTE (#32844)
fixes: DOC-201
2025-09-25 10:34:37 -05:00
Caleb Ukle c0ad4843d1 docs(nx-dev): small docs cleanup (#32822)
- add prettier overrides for mdoc files to be treaded as markdown (along
with running format)
- update links to nx-commands refs to use correct header links
- fix link on quickstart page to point to CI feature overview
2025-09-24 15:39:08 -05:00
Louie Weng 5856e01a2c chore(repo): update publish pipelines with java (#32795)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

- Bump version of gradle plugin to V2
- Add java to publish pipelines so that we can build the gradle plugin.
- Removed files from freeBSD VM to prevent disk storage limit issues
- Bumped up the kotlin version of gradle projects such that kotlin can
build on freeBSD

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-24 13:07:16 -07:00
Jack Hsu bd1b689b06 docs(misc): minor styling fixes (#32840)
This PR fixes a few styling issues

## Anchor links colors being consistent inside asides:

https://github.com/user-attachments/assets/13ba7892-50ee-4429-b9f5-8587f65869de

## Mobile login border color on light theme (make it lighter and same as
other border colors):
<img width="325" height="279" alt="Screenshot 2025-09-24 at 10 34 56 AM"
src="https://github.com/user-attachments/assets/b2ca3246-5a11-491c-8240-68a0e4430c81"
/>

## Decrease font size for tabs:
<img width="676" height="319" alt="Screenshot 2025-09-24 at 10 38 38 AM"
src="https://github.com/user-attachments/assets/5a7dc828-f049-4b25-9b28-144969fd810f"
/>

## Remove extra margin-bottom for code lines in asides:
Before:

<img width="743" height="387" alt="image"
src="https://github.com/user-attachments/assets/55312f0a-acc5-48e2-bcb2-3370d00ed05f"
/>

After:
<img width="828" height="467" alt="image"
src="https://github.com/user-attachments/assets/537f688a-61cf-444a-a512-84c611b80c43"
/>


Closes #DOC-227 #DOC-225
2025-09-24 15:21:22 -04:00
Leosvel Pérez Espinosa c9aa288d11 fix(core): prevent terminal pane scrolling on tasks list events (#32818)
## Current Behavior

The TUI had two distinct scrolling issues:

1. **Tasks List Events Scrolling**: Any tasks list event (scrolling,
arrow keys, task status changes) would cause the terminal pane to scroll
down exactly 8 lines in two batches of 4 - one immediately and another
after ~200ms delay.

2. **New Task Initial Positioning**: When navigating to a task for the
first time, the task output would render 4 lines above the bottom
position, then automatically scroll to the correct bottom position after
a short delay.

## Expected Behavior

1. Tasks list navigation and events should not cause any scrolling in
the terminal pane
2. Task output should appear correctly positioned at the bottom from the
first render without any delayed scroll adjustments

---

## Technical Details

### Root Cause

**Issue 1 - Tasks List Events Scrolling (8 lines)**

- Task list events triggered `debounce_pty_resize()` calls
- This caused immediate resize + 200ms delayed resize
- Each resize applied 4-line scroll adjustments due to dimension
recalculations
- Result: 8 lines total scroll (4 immediate + 4 delayed)

**Issue 2 - New Task Initial Positioning (4 lines)**

- New PTY instances created with default dimensions (24×80)
- Terminal panes had different calculated dimensions (e.g., 22×137)
- Viewport height mismatch caused content to appear 4 lines up from
bottom
- Delayed resize would correct positioning, causing visible
scroll-to-bottom

### Solution

**Architectural Improvement**: Migrated from individual dimension fields
to shared dimensions using `Arc<RwLock<(u16, u16)>>` to ensure
consistency across all PTY references.

**Issue 1 Fix**: Removed redundant `debounce_pty_resize()` calls during
task navigation events, eliminating the double-resize pattern.

**Issue 2 Fix**: Added immediate dimension correction in
`render_terminal_pane_internal()` to ensure correct positioning from
first render.

### Changes Made

- **pty.rs**: Replaced individual `rows`/`cols` fields with shared
`dimensions: Arc<RwLock<(u16, u16)>>`
- **app.rs**: Added immediate resize in
`render_terminal_pane_internal()` for correct initial positioning
- **app.rs**: Removed redundant `debounce_pty_resize()` calls during
task navigation events
- Improved error handling and eliminated potential deadlock risks in
resize operations

### Performance Impact

- Eliminated double-resize pattern during navigation (~67% reduction in
resize operations)
- No more visible scrolling delays or positioning issues
- Maintained all layout change functionality while removing unnecessary
operations
2025-09-24 16:55:05 +00:00
Leosvel Pérez Espinosa 72dd9fe0b6 fix(core): do not add cache_outputs foreign key to task_details when NX_DISABLE_DB=true (#32824)
## Current Behavior

The `cache_outputs` table is always created with a foreign key to the
`task_details` table. When `NX_DISABLE_DB=true` is set, the
`task_details` table is not created, and this results in an error when
trying to insert any records in the `cache_outputs` table.

## Expected Behavior

When `NX_DISABLE_DB=true` is set, the `cache_outputs` table should not
have a foreign key to the non-existent `task_details` table.

## Related Issue(s)

Fixes #32208
2025-09-24 10:12:26 -04:00
Leosvel Pérez Espinosa a0e0e1ce1f fix(core): do not show placeholder parallel entries in tui when filtering (#32837) 2025-09-24 09:44:33 -04:00
MaxKless c915527eee fix(core): move from execFile to exec for windows support (#32836)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
provenance checks fail on latest on windows because `npm.cmd` is only
executable with a shell. That removes the entire security aspect of
using `execFile` so we just go back to `exec`.

## Expected Behavior
provenance checks shouldn't fail on windows.

## Related Issue(s)

Fixes #32713
2025-09-24 09:34:48 -04:00
Caleb Ukle 57c5c6acd2 docs(nx-dev): document playwright output merging w/ atomizer (#32830)
fixes: DOC-208

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-09-24 07:04:26 -05:00
Benjamin Cabanes 146f57748c chore(nx-dev): update active contributors (#32831)
Increased the maximum number of active contributors mentioned in the
pricing description from 30 to 50 in the `Pricing` component
(`nx-dev/ui-cloud/src/lib/pricing.tsx`).
2025-09-23 15:27:48 -04:00
Chau Tran 19fff53cd2 fix(graph): update graph package (#32829)
- update project list control to have checkbox style
- remove selection animation
2025-09-23 14:19:23 -05:00
Caleb Ukle 9e47fed9c9 docs(nx-dev): mention saml is ent feature in google auth doc (#32823)
fixes: DOC-228
2025-09-23 12:44:03 -05:00
Juri 5e0bcae9ef feat(nx-dev): change login button to try nx cloud 2025-09-23 18:09:37 +02:00
Juri 7fa83cd416 chore(repo): enable auto-apply fixes for self-healing 2025-09-23 16:44:40 +02:00
Colum Ferry e4ec3b3c97 fix(react): only add react router plugin when using react router #32525 (#32814)
## Current Behavior

The React init generator unconditionally adds the
@nx/react/router-plugin to the nx.json plugins
array whenever addPlugin is true. This causes the React Router plugin to
be added even for
React applications that don't use React Router, which is unnecessary and
can lead to unwanted
  behavior.

## Expected Behavior

  The React Router plugin should only be added to nx.json when:
1. The React application is actually using React Router (specifically
for SSR/RSC scenarios)
  2. The addPlugin option is true

  This ensures that:
  - Applications without React Router don't get the plugin unnecessarily
- Applications with React Router for SSR/RSC get the plugin
automatically when created with the
  --useReactRouter flag
  - Libraries never get the React Router plugin as they don't need it

## Related Issue(s)

  Fixes #32525
2025-09-23 14:17:01 +01:00
Leosvel Pérez Espinosa 79ac44d078 fix(misc): remove unnecessary bust property from plugin hashes (#32807)
Remove the manually maintained and unnecessary `bust` property from
plugin hashes.
2025-09-23 09:31:09 +02:00
Philip Fulcher ec07bfb843 docs(core): add changelogs for 21.4 and 21.5 (#32774)
https://nx-dev-git-philip-september-changelogs-nrwl.vercel.app/changelog
2025-09-22 20:49:07 -04:00
Caleb Ukle dbcafa0e8b docs(nx-dev): sync content from docs/ into astro docs (#32812)
- add missing NxModuleFederationPlugin page
2025-09-22 14:07:04 -05:00
Jack Hsu 4c17346bdb docs(misc): mark docs pages as noindex when using Astro docs (#32811)
If new docs are enabled, then mark the old ones as `noindex`. They
should already be redirected to new docs as well, but this helps
anything missed.
2025-09-22 14:06:18 -04:00
Jason Jean 5964b4a04c chore(repo): update nx to 21.6.1-beta.3 (#32799)
Updating Nx from 21.6.1-beta.2 to 21.6.1-beta.3

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-22 11:37:29 -04:00
Caleb Ukle ee6de8fae7 docs(nx-dev): initial round of search improvements (#32768)
update pagefind config to improve search hits
add weight and filter properties for docs to control individual pages

filter` allows selecting "type" of docs being searched

![wm_2025-09-18T16-48-23@2x](https://github.com/user-attachments/assets/13bc38b8-a52f-4efc-8eaf-3aef792357aa)

where weight can set the given pages search weight
unfortunately this will set the weight of the whole page content instead
which can make performance worse so important to use it sparingly.
current set values are trial and error based. and subject to change over
time really just depends on feedback over time of the search
performance.


fixes DOC-159
2025-09-22 13:38:24 +00:00
Juri f1b00ca610 fix(nx-dev): fix client-side redirect issue for OSS cloud plan form 2025-09-22 14:46:17 +02:00
MaxKless 6cf1d7a34d chore(repo): set up AGENTS.md with recommended rules (#32782)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
only claude has dedicated setup in the nx repo.

## Expected Behavior
Claude, Gemini and things that use AGENTS.md have dedicated setup in the
nx repo.
2025-09-19 22:27:46 -04:00
Miroslav Jonaš e3df4d2d86 chore(repo): add missing tsx (#32785)
## Current Behavior
The `tsx` package is missing causing TUI to hang in interactive mode.

## Expected Behavior
The `tsx` package is installed so commands running `npx tsx` don't need
to ask for a permission to install it.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-19 22:27:22 -04:00
Louie Weng 816fa2b9a9 chore(repo): revert gradle v2 plugin (#32797)
Reverting gradle v2 plugin from Nx due to issues with publish pipelines
not being able to handle the new changes. Will re-apply once the kinks
in publish are ironed out.
2025-09-19 23:04:31 +00:00
James Henry bd6d5c8e66 fix(core): update tui title text structure (#32793) 2025-09-19 18:12:57 -04:00
Jack Hsu 369f162474 docs(nx-dev): fix AI chat streaming parse error by pinning ai package to v3.0.19 (#32792)
The AI chat on nx.dev shows an error 'Failed to parse stream string. No
separator found.' after successfully receiving a response from the API.

The AI chat should work without showing streaming parse errors after
successful responses.

Also fixed tailwind pruning by including `feature-ai` in the globs to
check.



https://github.com/user-attachments/assets/2517d856-7a45-48f4-b71b-885f3714fb44



Fixes DOC-216
2025-09-19 15:39:30 -04:00
Jack Hsu 133730b276 docs(nx-dev): add Algolia search to blog index when Astro docs are enabled (#32794)
When NEXT_PUBLIC_ASTRO_URL is set, the blog index now includes a
dedicated search box that filters results to only blog posts. This
ensures blog search functionality is maintained when the main docs
search is moved to the Astro site.

Blog index page has no search functionality when Astro docs are enabled,
making it difficult to find specific blog posts.

Blog index page displays a search box that searches only within blog
posts (using Algolia facet filter for 'Nx | Blog') when Astro docs are
enabled, preserving the ability to search blog content.

Without astro docs:

<img width="1162" height="733" alt="Screenshot 2025-09-19 at 2 26 34 PM"
src="https://github.com/user-attachments/assets/a499fb03-ecc6-4a4f-9303-2198e32f9a77"
/>

With astro docs:

<img width="1143" height="784" alt="Screenshot 2025-09-19 at 2 27 42 PM"
src="https://github.com/user-attachments/assets/4d0bfa7e-0ca6-4694-bba0-fc5e63d1b140"
/>


https://github.com/user-attachments/assets/fe96bc49-dafe-4bc6-9b89-578f29f93cf7



Fixes DOC-221
2025-09-19 15:39:20 -04:00
Jack Hsu 4d57e62ce8 chore(repo): disable pnpm install cache resolve-required-data job (#32791)
Fix publish pipeline by running `pnpm install` when using `setup-node`.
2025-09-19 17:30:25 +00:00
Louie Weng 55a16e625f chore(gradle): move all dependencies into version catalog and update gradle plugin (#32773)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

We were managing disparate versions across all gradle projects.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Centralize all plugins and dependencies into one location for easier
maintenance.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-19 12:39:27 -04:00
Jack Hsu 575e6a0534 feat(nx-dev): disable Algolia search on non-docs pages when Astro docs are enabled (#32789)
Algolia search appears on all nx-dev pages, including non-documentation
pages like AI chat and changelog, even when the new Astro documentation
site is enabled. This creates confusion as search should only be
available on documentation pages.

- When NEXT_PUBLIC_ASTRO_URL is set (indicating new docs are enabled),
Algolia search is disabled on all nx-dev pages
- Non-documentation pages (AI chat, changelog) use the non-documentation
header without search
- Documentation header only shows search when Astro docs are not enabled
- Clean up existing styling issues and ensure consistent header usage
across the site

- Updated documentation-header.tsx to conditionally hide search when
NEXT_PUBLIC_ASTRO_URL is set
- Updated header.tsx to pass showSearch prop based on
NEXT_PUBLIC_ASTRO_URL
- Modified AI chat page to use non-documentation header and fixed
styling issues
- Modified changelog page to use non-documentation header-
- Fixed astro header such that `Office Hours` and `Live Streams` are
replaced with `Nx Live` (already done on Next.js side)
- Fixed astro sidebar reference updater middleware formatting

## Examples

Non-docs headers (for homepage, blog, cloud, enterprise, etc.):

<img width="1349" height="103" alt="Screenshot 2025-09-19 at 11 49
06 AM"
src="https://github.com/user-attachments/assets/5a9e6355-43b9-4142-9c76-b30ccc4982b1"
/>

Changelog (with astro docs):

<img width="1467" height="1401" alt="Screenshot 2025-09-19 at 11 48
36 AM"
src="https://github.com/user-attachments/assets/8e135ca7-fe36-4b44-b181-633d3dc5890d"
/>

AI Chat (with astro docs):

<img width="1246" height="952" alt="Screenshot 2025-09-19 at 11 48
24 AM"
src="https://github.com/user-attachments/assets/866c7e4d-8eac-40ab-9c77-5d125135d4e9"
/>


Changelog (without astro docs);

<img width="1180" height="1132" alt="image"
src="https://github.com/user-attachments/assets/eccdeb17-08fc-4f90-949d-5c7879abe3d3"
/>

AI Chat (without astro docs):

<img width="1172" height="1407" alt="image"
src="https://github.com/user-attachments/assets/2ad6b797-32bc-498b-93cb-29cc368030f1"
/>


Astro docs header with updated `Nx Live` link:

<img width="685" height="434" alt="Screenshot 2025-09-19 at 11 48 51 AM"
src="https://github.com/user-attachments/assets/48facc87-2c90-4195-97c7-024b11112001"
/>




Fixes DOC-219

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-19 12:26:46 -04:00
Leosvel Pérez Espinosa af7ebee21e cleanup(graph): remove non-existent prop causing typecheck/build issues (#32780) 2025-09-19 09:10:56 -05:00
Jack Hsu fa5a1bf781 docs(misc): fix JSON parsing for project details with escaped quotes (#32778)
Fixed the `parseAstroHtmlWrappedJson` function used by PDV and graph tag
components to render code fence properly.

The problem was that inner HTML with code fence caused escaped
double-quotes (`\"`) to be improperly handled. By the time we read the
HTML via React props, the escape character is already done (`\`). Thus,
use code fence to let Starlight render the full block, and then parse
out the JSON object from the `[data-code]` attribute on the div.

For example, previously this would fail:

```
{% project_details %}
{ "foo": "\"bar\"" }
{% /project_details %}
```

That doesn't work because the HTML is just ""bar"", which is invalid.
But changing the above to this works:

````
{% project_details %}
```json
{ "foo": "\"bar\"" }
```
{% /project_details %}
````

This works because you get something like `data-code="&quot;foo&quot;:
&quot;\&quot;bar\&quot;&quot;"` set on the `div`. So we can use regexp
to match everything within that attribute and parse it out as JSON once
we convert some entities.

Check the
[`nx-dev/ui-markdoc/src/lib/utils/parse-astro-html-wrapped-json.ts`](https://github.com/nrwl/nx/pull/32778/files#diff-c3d8e90b624e30217beaa44c46a16b9053533cf9a8542a4f7301ccaf3dbdab58)
file for the full logic.

Also added JSON code fences to all graph tags in mdoc files to ensure
proper parsing.

<img width="709" height="866" alt="Screenshot 2025-09-18 at 3 41 26 PM"
src="https://github.com/user-attachments/assets/fdae86a6-929a-4a1f-82fe-7d4052de5db5"
/>

Closes #DOC-217
2025-09-19 09:01:48 -04:00
Caleb Ukle af12d6c1ee docs(nx-dev): fix broken blog/img links (#32777)
fixes DOC-218
2025-09-18 18:04:52 +00:00
Chau Tran c8ae15f08c feat(graph): unified graph UI and controls (#32724)
This PR migrates to the unified `@nx/graph` with UI and persisted url
graph state.
- new UI components 
- remove obsolete state machines code
- remove obsolete URL query parameters handling
2025-09-18 12:44:52 -05:00
Caleb Ukle befc6243b8 docs(nx-dev): small clean up items for styling and content (#32760)
remove duplicate installation tabs
<img width="826" height="598" alt="image"
src="https://github.com/user-attachments/assets/b3cef8e8-bb7e-4c5f-a734-fb7b3376dedc"
/>
add description to nx cloud getting started page
<img width="794" height="329" alt="image"
src="https://github.com/user-attachments/assets/6ea1ceeb-ab33-4a11-85b8-3073668d8bec"
/>
add spacing for graph component

![wm_2025-09-17T08-54-55@2x](https://github.com/user-attachments/assets/99aab88f-9dbc-4d29-8df2-dc42eb489b0e)
fix footer to link to correct site when astro url is configured

![wm_2025-09-17T08-58-47@2x](https://github.com/user-attachments/assets/3038d701-3bed-494a-9f8e-63d687b8fd7f)


Fixes DOC-211
Fixes DOC-214
Fixes DOC-212
2025-09-18 12:06:59 -05:00
Caleb Ukle 1542d9c822 docs(nx-dev): remove duplicated gh button (#32769)
![wm_2025-09-17T16-41-13@2x](https://github.com/user-attachments/assets/5e7cdd34-13b9-465b-92bc-ed5a577e86ba)


fixes DOC-215
2025-09-18 12:06:22 -05:00
Leosvel Pérez Espinosa dd5daeae0c fix(misc): add typescript output to the eslint ignore when needed (#32775)
## Current Behavior

When generating workspaces or projects with ESLint and using the TS
solution setup, the generated `out-tsc` directory for TS output is not
ignored in the ESLint configuration. This results in the lint task
processing and potentially reporting errors from that directory.

## Expected Behavior

When generating workspaces or projects with ESLint and using the TS
solution setup, the generated `out-tsc` directory for TS output should
be ignored in the ESLint configuration.
2025-09-18 16:57:21 +00:00
Leosvel Pérez Espinosa c73b2aada9 feat(testing): forward e2e-ci task options to their atomized tasks (#32765)
## Current Behavior

Options configured in the `e2e-ci` tasks are not forwarded to their
atomized tasks.

## Expected Behavior

Options configured in the `e2e-ci` tasks can be forwarded to their
atomized tasks.

The `@nx/cypress/plugin` and `@nx/playwright/plugin` plugins will infer
their `e2e-ci` dependencies to atomized tasks with `"options":
"forward"`.
2025-09-18 16:54:00 +00:00
Leosvel Pérez Espinosa 14e2bec60a fix(core): fix misc db-related issues (#32745)
This resolves multiple database-related race conditions that cause
"database is locked" errors and `BorrowMutError` panics during task
cleanup and service initialization.

## Issues Fixed

1. **Task cleanup race condition**: Exit handlers and cleanup methods in
the task orchestrator simultaneously attempted to remove the same task
record, causing SQLite lock contention
2. **Missing database retry logic**: Native operations bypassed the
existing retry mechanism, making them vulnerable to concurrent access
failures
3. **SQLite connection borrowing conflicts**: Direct connection access
in `NxTaskHistory::setup()` violated Rust's borrowing rules when other
services held concurrent borrows

## Solution

### Application-level coordination
- Added atomic check-and-remove pattern using `Map.delete()` return
value
- Only the process that successfully removes from the task map performs
the database operation
- Eliminates duplicate database calls entirely

### Database-level robustness
- Fixed `RunningTasksService` methods to use retry-enabled database
operations
- Replaced `prepare() + stmt.execute()` pattern with direct
`db.execute()` calls
- Ensures all operations benefit from exponential backoff retry logic
(up to 20 attempts)

### Connection access safety
- Moved `array::load_module` from service setup to centralized database
connection opening
- Removed direct `.conn` access that bypassed safe wrapper patterns
- Load array module once per connection instead of per service
instantiation

## Files Changed
- `packages/nx/src/tasks-runner/task-orchestrator.ts` - Race condition
prevention
- `packages/nx/src/native/tasks/running_tasks_service.rs` - Retry logic
fixes
- `packages/nx/src/native/db/initialize.rs` - Centralized array module
loading
- `packages/nx/src/native/tasks/task_history.rs` - Removed unsafe
connection access

Provides comprehensive concurrency safety through defense-in-depth:
prevents race conditions at the application level while ensuring
database operations are resilient to concurrent access.
2025-09-18 11:31:21 -04:00
Louie Weng 9d004a2783 fix(gradle): support custom test targets (#32728)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Currently we do not support overwriting the default test target since
with custom tests from Gradle. This means you cannot use a test suite
other than the default `test`.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

- We can now detect custom test suites via the Gradle API, which
receives the test tasks via the task type rather than the test name.
- We can atomize against test targets without having to set these
targets in the gradle plugin configuration
- Setting a custom test target that conflicts with a defined test suite
in Gradle now throws an error
- Check-ci correctly depends on all atomized targets of test targets

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #NXC-2962
2025-09-18 07:35:40 -07:00
Colum Ferry 36741d08d2 fix(angular-rspack): ensure assets extracted from stylesheets correctly #32487 (#32759)
## Current Behavior

When Angular components reference assets in their stylesheets using
`url()` (e.g., `background-image: url('../assets/test-pattern.svg')`),
the Nx Angular Rspack plugin processes the CSS but fails to extract and
copy the referenced asset files to the output directory. This results
in:

- CSS is processed and URLs may be rewritten to reference output paths
(e.g., `url('./media/test-pattern.svg')`)
- The actual asset files are never copied to the output directory
- Browser shows 404 errors for missing asset files when the application
runs
- No `media` directory is created in the build output

## Expected Behavior

With this fix, assets referenced in component stylesheets are now
properly extracted and emitted to the output directory:

- Asset files referenced in component stylesheets are extracted and
copied to the output directory
- CSS URLs are correctly rewritten to point to the copied assets
- No 404 errors occur for asset files
- A `media` directory is created in the output with the extracted assets
- Both inline and external component styles properly handle asset
extraction

## Related Issue(s)

Fixes #32487

## Changes Made

### Core Fix
- Modified the Angular Rspack plugin to properly collect and emit
stylesheet assets during the compilation process
- Added asset collection during both bundle file and inline style
processing in `setup-compilation.ts` and
`setup-with-angular-compilation.ts`
- Implemented asset emission in the `processAssets` hook of the Angular
Rspack plugin

### Test Coverage
- Added comprehensive example application
(`examples/angular-rspack/csr-css-assets`) that demonstrates:
  - External component stylesheets with asset references
  - Inline component styles with asset references
  - Various asset types (SVG, images)
  - Proper asset extraction and URL rewriting

### Technical Details
The fix addresses the gap between Angular's `ComponentStylesheetBundler`
which correctly processes assets and generates `outputFiles`, and the Nx
Angular Rspack plugin which now properly emits these files using
`compilation.emitAsset()` during the build process.
2025-09-18 11:19:36 +01:00
Jason Jean 63b5baae3a fix(core): do not shutdown daemon for project graph errors (#32764)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

All errors.. even Project Graph errors cause the daemon to shutdown.
This meant that showing partial graphs in the graph application no
longer worked.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Shutting down the daemon won't help for project graph errors. In this
case, we should not shutdown the daemon. And showing partial project
graphs will work again.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-17 16:33:55 -04:00
Philip Fulcher 6eab2d0c71 docs(nx-dev): add biome plugin creation article (#32742) 2025-09-17 16:09:40 -04:00
Jason Jean 93fcc48344 chore(repo): update nx to 21.6.1-beta.2 (#32753)
Updating Nx from 21.6.1-beta.1 to 21.6.1-beta.2
2025-09-17 10:23:57 -04:00
Leosvel Pérez Espinosa e5a7460e65 cleanup(core): do not detect the terminal theme unnecessarily when running native tests (#32757)
## Current Behavior

When running `pnpm nx test-native nx`, OSC (Operating System Command)
escape sequences appear after the test completes, displaying as random
characters like `10;rgb:f8f8/f8f8/f2f2` and `11;rgb:0000/2b2b/3636`.

## Expected Behavior

Test execution should complete cleanly without any escape sequences
appearing in the terminal.

## Root Cause

The issue occurs because:
1. Tests in `tasks_list.rs` create `TasksList` components for testing UI
functionality
2. `TasksList` accesses the `THEME` static for styling (e.g.,
`THEME.secondary_fg`)
3. `THEME` is a `LazyLock` that initializes by calling `is_dark_mode()`
4. `is_dark_mode()` uses `terminal_colorsaurus::color_scheme()` which
sends OSC queries to detect terminal colors
5. The test process often exits before the terminal responds, leaving
orphaned responses that appear as escape sequences

## Solution

Added compile-time conditional compilation to skip terminal color
detection during tests:
- `#[cfg(test)]`: Returns `true` (dark mode) without sending OSC
queries. Tests run in virtual buffers and don't need the terminal theme.
It's also less deterministic to have tests relying on the terminal
theme.
- `#[cfg(not(test))]`: Performs normal terminal detection for production
use

This approach:
-  Eliminates OSC sequences during test execution
-  Preserves normal color detection in production
-  Provides deterministic test behavior regardless of terminal theme
-  Improves test performance by avoiding I/O operations
2025-09-17 10:23:42 -04:00
Colum Ferry e4f1d267fb fix(angular-rspack): show correct file sizes in build stats for i18n builds (#32758)
When i18n localization is enabled, rspack generates assets with locale
prefixes
(e.g., 'fr/main.abc123.js'), but chunk.files array is empty. This caused
the
stats reporting to show 0 bytes for all files.

Updated the asset filtering logic in stats.ts to:
- Try exact match first (preserves existing behavior for non-i18n
builds)
- Match assets by chunk names when chunk.files is empty (i18n builds)
- Handle assets with locale prefixes and hash values in filenames

Fixes #32277
2025-09-17 14:14:55 +01:00
Jack Hsu d345362bd6 docs(misc): strip Markdoc tags when processing API docs/examples (#32747)
Raw Markdoc tags ({% tabs %}, {% callout %}, {% graph %}) appear in
rendered Astro documentation pages, breaking the display.

Markdoc tags are transformed to Starlight-compatible syntax:
- {% tabs %} blocks converted to headers with content
- {% callout %} blocks converted to Starlight asides
- {% graph %} blocks removed entirely

Also fixed four example `.md` files that did not have closing `{% /tabs
%}` tag, which led to issues when stripping them.

## Callout example (swapped with aside)

BEFORE:
<img width="962" height="453" alt="Screenshot 2025-09-16 at 2 21 20 PM"
src="https://github.com/user-attachments/assets/12013b51-42dd-47f7-8290-cfa792532392"
/>

AFTER:
<img width="707" height="495" alt="Screenshot 2025-09-16 at 2 21 34 PM"
src="https://github.com/user-attachments/assets/f0d21811-e6cb-4189-b65d-43a0851fbf0f"
/>


## Tab example (inlined)

BEFORE:
<img width="971" height="464" alt="Screenshot 2025-09-16 at 2 20 15 PM"
src="https://github.com/user-attachments/assets/dcbc1491-762a-431d-891a-488b54bc7c36"
/>

AFTER:
<img width="681" height="1000" alt="Screenshot 2025-09-16 at 2 19 41 PM"
src="https://github.com/user-attachments/assets/898fff61-a553-420c-aa1e-4cfa46bfbd57"
/>

Fixes DOC-102
2025-09-17 08:42:13 -04:00
Jack Hsu 3334c9aa60 docs(misc): update header menu items per Linear task DOC-209 (#32749)
This PR fixes the header links so they don't point to old Next.js docs.
Also cleaned up outdated links.

<img width="805" height="671" alt="Screenshot 2025-09-16 at 4 06 11 PM"
src="https://github.com/user-attachments/assets/78123e6b-3421-4a0d-b114-0e43bc70356e"
/>


The sidebar is also updated to include links to Changelog and Plugin
Registry.
<img width="2672" height="1527" alt="Screenshot 2025-09-16 at 4 06
03 PM"
src="https://github.com/user-attachments/assets/dd097a40-666c-49d6-8a9b-9cf63523eb2f"
/>


## Related Issue(s)
Fixes DOC-209
2025-09-17 08:24:49 -04:00
Louie Weng 88f192827a chore(gradle): bump gradle plugin version to 0.1.8 (#32752)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Bump version of gradle plugin to 0.1.8

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-16 21:56:59 +00:00
Jason Jean a429972481 Revert "feat(core): add NX_PROJECT_ROOT environment variable to runti… (#32736)
…me cache inputs (#31428)"

This reverts commit 5679b3ea

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This commit caused a major perf regression.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This commit is reverted for now.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-16 15:10:27 -04:00
Caleb Ukle 08dcd682b8 docs(nx-dev): make sure ToC doesn't overflow page and is scrollable (#32746)
Fix pages with long ToC that overflow without scrolling and overlap with
footer

desktop:

https://github.com/user-attachments/assets/55065c70-dc16-4b72-be7d-e9dd919987c9

mobile:



https://github.com/user-attachments/assets/3fd225e8-c4f9-4caa-92a8-250c10736caa



Fixes DOC-191
2025-09-16 12:33:25 -05:00
Louie Weng 688ff139dd chore(gradle): bump version to 0.1.8 (#32741)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Gradle plugin is at version 0.1.7

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Bump version to 0.1.8

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-16 09:51:36 -07:00
Jack Hsu f87001cb66 docs(nx-dev): respect NEXT_PUBLIC_NO_INDEX variable for app router (#32667)
We already have `NEXT_PUBLIC_NO_INDEX` supported in pages router, so
canary.nx.dev does not get indexed. However, we missed this in the app
router, so `/blog` is not setting `noindex` in preview environments.
2025-09-16 11:46:47 -04:00
Leosvel Pérez Espinosa 5d7ba935d6 fix(core): kill child process correctly when run-script executor process is killed and not using pseudoterminal (#32699)
## Current Behavior

When running an npm script through nx and not using the PseudoTerminal,
child processes might not be killed when the `nx:run-script` executor is
killed.

## Expected Behavior

When running an npm script through nx and not using the PseudoTerminal,
child processes should be killed when the `nx:run-script` executor is
killed.
2025-09-16 09:44:32 -04:00
Leosvel Pérez Espinosa 040d7d7746 fix(angular): install a compatible version of jest for angular (#32744)
## Current Behavior

Generating Angular projects with Jest results in Jest v30 being used,
which is not supported by Angular and causes peer dependency errors.

## Expected Behavior

Generating Angular projects with Jest should install a compatible
version of Jest (Angular currently supports `^29.5.0`).
2025-09-16 14:50:29 +02:00
MaxKless 7ba9a24809 feat(core): generate AI files in create-nx-workspace (#32442) 2025-09-16 09:34:31 +00:00
Jack Hsu 98c47f004f docs(misc): add API docs for nx, workspace, web, plugin (#32739)
This PR adds the missing API docs for nx, workspace, web, and plugin.

## What's changed

- Added missing plugins to `astro-docs/src/pages/references/`
- Update sidebar with new API docs
- Hide deprecated docs from sidebar (these should not be shown)
- Redirects are updated with the new API docs

<img width="1379" height="1210" alt="image"
src="https://github.com/user-attachments/assets/e590a74a-d427-4c6c-b253-a96af9d2c7b3"
/>


<img width="1382" height="1207" alt="image"
src="https://github.com/user-attachments/assets/3c607cd3-9acd-4461-8c8f-9395228951d3"
/>

<img width="1363" height="1205" alt="image"
src="https://github.com/user-attachments/assets/4de36af2-9e58-4579-bca1-4e2a792ab79b"
/>


Closes #DOC-205
2025-09-15 19:24:36 +00:00
Jack Hsu afe5d17c9f chore(repo): fix slack notifcation to use mention_users (#32738)
It was incorrectly using `mention_groups` but should be `mention_users`.
2025-09-15 14:53:21 -04:00
Jack Hsu 86b3285b02 docs(misc): add missing guides and fix all redirects (#32735)
Add missing Nx Cloud documentation pages.

Files added:
- astro-docs/src/content/docs/reference/Nx Cloud/config.mdoc
- astro-docs/src/content/docs/reference/Nx Cloud/release-notes.mdoc
- astro-docs/src/content/docs/guides/Nx Cloud/optimize-your-ttg.mdoc

Redirects fixed:
- 8 CI/concepts pages now point to correct locations

Closes DOC-204

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-15 14:33:11 -04:00
Caleb Ukle 81010ac16a docs(nx-dev): update self-healing ci supported vcs providers (#32722)
clarify gh vcs required right now, with other providers coming soon.
2025-09-15 12:44:14 -04:00
Leosvel Pérez Espinosa 27b14a75c3 feat(testing): support inferring atomized tasks for cypress component tests (#32733)
## Current Behavior

There's no way to distribute Cypress Component Tests.

## Expected Behavior

Cypress Component Tests can be distributed.

Users can choose to infer individual tasks per Cypress Component Test
files that can be distributed across Nx Agents using DTE, by setting the
`ciComponentTestingTargetName` option for the `@nx/cypress/plugin`:

```json
// nx.json
{
  ...
  "plugins": [
    {
      "plugin": "@nx/cypress/plugin",
      "options": {
        ...
        "componentTestingTargetName": "component-test",
        "ciComponentTestingTargetName": "component-test-ci"
      }
    },
    ...
  ]
}
```
2025-09-15 11:57:23 -04:00
MaxKless 537bb4258c fix(gradle): use project configurations to determine project dependencies (#32704)
## Current Behavior
gradle dependencies are hardcoded to included builds & subprojects

## Expected Behavior
we use project configurations to determine dependencies like the tooling
api does

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: lourw <56288712+lourw@users.noreply.github.com>
2025-09-15 10:42:20 -04:00
Rares Matei 910ea7cc44 docs(nx-cloud): add release notes (#32731)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-15 15:36:09 +01:00
Leosvel Pérez Espinosa e574baf2aa feat(angular): support angular v20.3.0 (#32730)
## Current Behavior

Angular v20.3.0 is not supported.

## Expected Behavior

Angular v20.3.0 should be supported.
2025-09-15 10:07:43 -04:00
MaxKless 44fdc7ae6e fix(core): add missing view command to npm (#32729) 2025-09-15 08:56:12 +00:00
Caleb Ukle e3fcad3f30 docs(nx-dev): clean up duplicate docs for react and MF (#32710)
remove remix and react-native guides and redirect to their intro pages
since they functionally covered the same content already

remove the Module federation concepts since those were already
removed/redirected in the main nx.dev and didn't need to be copied over
to astro site.

fixes: DOC-183
2025-09-12 15:21:09 -05:00
Jack Hsu 99d3d2aebf docs(misc): fix tab alignment on mobile devices (#32720)
Tabs were not aligning properly on mobile, causing visual
inconsistencies. Added align-items: end to tablist elements to ensure
proper vertical alignment.

<img width="528" height="614" alt="image"
src="https://github.com/user-attachments/assets/b9a1d9b3-c051-43ac-9454-21b16c7f21b5"
/>


Fixes DOC-168

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-12 14:08:37 -04:00
Colum Ferry 67f60e729f feat(release): new option preserveMatchingDependencyRanges to not update matching version ranges (#32556)
## Current Behavior
When updating manifests, Nx Release will replace explicit peerDependency
ranges with the new version that is being created.
i.e.

```json
"peerDependencies": {
  "nx": ">= 20 <= 22"
}
```

`nx release version 21.6.0`

```json
"peerDependencies": {
  "nx": "21.6.0"
}
```

## Expected Behavior
When processing dependency updates, check for
`preserveMatchingDependencyRanges`.
If this is set to `true` or an array with explicit `dependencyTypes`
check if a valid range is set.
If so, do not update the range.

i.e.
`preserveMatchingDependencyRanges: true`

```json
"peerDependencies": {
  "nx": ">= 20 <= 22"
}
```

`nx release version 21.6.0`

```json
"peerDependencies": {
  "nx": ">= 20 <= 22"
}
```

If the new version breaks the range, throw an error asking user to
update the range.

i.e.

```json
"optionalDependencies": {
  "nx": ">= 20 <= 22"
}
```

`nx release version 23.2.0`

```
The version "23.2.0" is not a valid range for optionalDependencies "nx" in manifest "dist/packages/devkit/package.json". Please update to a valid range.
```

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-09-12 18:07:25 +01:00
Jack Hsu c193928f41 fix(nx-dev): implement client-side routing for documentation URLs (#32708)
Update all documentation links in nx-dev UI components to conditionally
use the new /docs
structure when NEXT_PUBLIC_ASTRO_URL is set. This prevents landing on
the old docs page due to the lack of redirect support in Next.js'
`<Link>` when used with pages router.

Note: Blog pages are not updated in `docs/blog` because blog is using
app router which supports redirects. For example, on
https://canary.nx.dev/blog/nx-self-healing-ci the link at the end for
`Nx AI Docs` point to https://canary.nx.dev/features/enhance-AI and is
correctly redirected to https://canary.nx.dev/docs/features/enhance-ai.

## Logic

- When NEXT_PUBLIC_ASTRO_URL is set: links point to /docs/* URLs
- When NEXT_PUBLIC_ASTRO_URL is not set: links use legacy URLs (current
production behavior)

## Pages and components updated

### Pages router pages and components

These are critical since pages router does not support redirects in next
config.

  - Homepage (/) components
  - AI Page (/ai) components
  - Enterprise Page (/enterprise) components
  - NX Cloud (/nx-cloud) components
  - Pricing (/pricing) components
  - Community (/community) components
  - Contact (/contact) components
  - Powerpack (/powerpack) components
  - Gradle pages components
  - Common UI components (footer, headers, sidebar)
  - Solution pages (engineering, leadership, management)
  - Changelog (/changelog)

### App router pages

These pages would have worked regardless since app router supports
redirects in next config.

  - React Page (/react):
    - ui-react/src/lib/hero.tsx - 1 link
    - ui-react/src/lib/features.tsx - 4 links
    - ui-react/src/lib/feature-sections.tsx - 3 links
  - Powerpack Page (/powerpack):
    - ui-powerpack/src/lib/powerpack-features.tsx - 2 links
  - Remote Cache Page (/remote-cache):
    - ui-remote-cache/src/lib/remote-cache-solutions.tsx - 2 links
    - ui-remote-cache/src/lib/faq.tsx - 1 link

---

Verified with NEXT_PUBLIC_ASTRO_URL=https://canary.nx.dev:
- All links now point to /docs URLs (no 308 redirects)
- Old URLs still redirect for backward compatibility
- Pages load successfully with updated links

Fixes DOC-184
2025-09-12 12:26:35 -04:00
Colum Ferry bb6f60b7c5 docs(module-federation): update outdated module federation docs (#32624)
## Current Behavior
The Module Federation docs had out of date code snippets

## Expected Behavior
Bring the Module Federation docs in line with recent developments
2025-09-12 17:20:45 +01:00
Colum Ferry 459dc88b4e feat(docker): ensure docker:build dependsOn build (#32697)
## Current Behavior
The inferred `docker:build` target does not depend on the build target.
Given that most `docker build` commands rely on the initial application
itself to be built first, it makes sense to depend on the build target.

## Expected Behavior
`docker:build` dependsOn `build`
2025-09-12 12:20:14 -04:00
Jack Hsu e1fb42327d docs(misc): mobile menu icon respects theme color (#32717)
The mobile menu icon (hamburger menu) in astro-docs does not properly
respect the theme color, making it hard to see in dark mode.

The mobile menu icon should be visible in both light and dark themes
with appropriate colors, transparent background, and no box shadow.

<img width="633" height="431" alt="image"
src="https://github.com/user-attachments/assets/30e170d7-4eac-4933-84ab-7f3150747721"
/>

<img width="632" height="375" alt="image"
src="https://github.com/user-attachments/assets/ad095dc9-8c9c-4b26-b13a-8cfabdd9ba99"
/>
<img width="597" height="430" alt="image"
src="https://github.com/user-attachments/assets/25caf367-aa10-4ddb-b08a-5ebaa662addc"
/>
<img width="596" height="391" alt="image"
src="https://github.com/user-attachments/assets/6dc566b7-3559-45a6-a4a8-c21a8121143e"
/>


Fixes DOC-169
2025-09-12 12:16:33 -04:00
MaxKless d02b7f46b0 fix(core): improve error messages for provenance checks (#32680) 2025-09-12 16:38:31 +02:00
Caleb Ukle 12b472548a docs(nx-dev): add astro sitemap to nx.dev (#32709)
see new entry here:
https://nx-dev-git-cu-doc-155-sitemaps-nrwl.vercel.app/sitemap.xml as
exmaple
Fixes DOC-155
2025-09-12 07:47:23 -05:00
Jack Hsu b9c9054903 chore(repo): add Slack notifications for canary publish status (#32707)
This PR adds notification through Slack when the canary release fails,
so that we are alerted to errors earlier.

Closes NXC-3131
2025-09-12 08:20:44 -04:00
Caleb Ukle 3dda99e4a6 fix(nx-dev): correctly link to url fragments for devkit (#32565)
switch to making typedoc to the rendering and then pull in the generated
file contents instead of manually parsing the reflection metadata.

Fixes: DOC-63

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-12 08:09:02 -04:00
Jason Jean cfc03a2a9c chore(repo): update nx to 21.6.1-beta.1 (#32702)
Updating Nx from 21.5.1-beta.5 to 21.6.1-beta.1

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-11 14:04:44 -04:00
Jack Hsu c90fee04e0 docs(misc): add sidebar icons for Technologies section (#32698)
Add SVG icons to the Technologies section sidebar items to improve
visual hierarchy and navigation. Icons are displayed next to technology
labels like TypeScript, Angular, React, Vue, Node.js, Java, etc.

`Sidebar` is now using a custom `SidebarSublist` that uses `data-icon`
(if it exists) to render the SVG images. A middleware is used since
`attrs` cannot be set on sidebar items with children. Alternatively, we
could cast the sidebar config to avoid type errors.

<img width="746" height="410" alt="image"
src="https://github.com/user-attachments/assets/4da0385b-e38b-4a58-b83f-19c517c79bac"
/>

<img width="529" height="509" alt="image"
src="https://github.com/user-attachments/assets/f9c00af7-5ed6-40dc-b99c-6ef78ebdd5ba"
/>


Closes #DOC-197
2025-09-11 13:32:03 -04:00
Jack Hsu 3695fc9067 docs(misc): add CTA buttons to header matching Next.js implementation (#32687)
The astro-docs header lacks the CTA buttons (Contact and Login) that are
present in the Next.js version, missing important navigation elements
for user engagement.

Added Contact and Login buttons to the astro-docs header with responsive
design:
- Desktop (≥1280px): CTA buttons visible in header
- Mobile (<1280px): CTA buttons appear in mobile menu at bottom
- Proper element priority to prevent overflow: Theme switcher (always
visible) > CTAs > Social icons
- Visual ordering: CTA buttons, social icons, divider, theme switcher


https://www.loom.com/share/34feb737d11342b19f3ef2df0174a5dc?fromJoinRequest=true

Closes DOC-142
2025-09-11 13:07:02 -04:00
Caleb Ukle 111a94304a docs(nx-dev): update CTA variants (#32670)
add `simple` variant to CTA markdoc component and make CTA in tutorials
to the point.
2025-09-11 17:03:06 +00:00
Craigory Coppola d81861d4aa fix(repo): move codeql to yml based config s.t. it runs properly on forks (#32659)
## Current Behavior
We are using the default codeql setup, which refuses to run on PRs from
forks

## Expected Behavior
We use the yml based codeql setup, which should run correctly

> [!IMPORTANT]  
> This is only the first half of this effort. After this is merged, PRs
will need to be rebased and the repo will need a settings update from
@FrozenPandaz
2025-09-11 12:45:53 -04:00
Philip Fulcher 7534d1dafb docs(nx-dev): add september webinar (#32694) 2025-09-11 10:54:50 -04:00
Philip Fulcher b86f9afb93 fix(nx-dev): correct courses page og image (#32700) 2025-09-11 10:53:29 -04:00
Leosvel Pérez Espinosa 555c69caf4 fix(core): exit fork process and children when ipc connection closes (#32681)
Fixes orphaned `fork.js` processes that occur when the parent Rust
PseudoTerminal process terminates faster than the fork process can
complete its cleanup, causing the fork to hang during Node.js socket
cleanup.
2025-09-11 10:00:19 -04:00
Omer dc901917bb feat(rspack): respect deleteOutputPath option in rspack executor (#32609)
- Add deleteOutputPath option to rspack executor schema
- Modify rspack executor to only clean output directory when
deleteOutputPath is not explicitly set to false
- This aligns rspack executor behavior with webpack executor and allows
users to control output cleaning
- Fixes issue where rspack.output.clean configuration was being bypassed

Fixes #32015

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-09-11 08:58:45 -04:00
Colum Ferry 980573a515 feat(docker): add env var for providing docker registry (#32676)
## Current Behavior
There is no method for overriding the repo config for Container Registry
and Repository Name per environment.

## Expected Behavior
Allow an environment variable `NX_DOCKER_IMAGE_REF` to be set to modify
the full image reference

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-11 08:07:38 -04:00
MaxKless 7b9b42b3c3 fix(core): detect vscode insiders as separate editor (#32679) 2025-09-11 09:00:47 +00:00
Jason Jean dea784f343 fix(core): move git utilities to fix WASM build (#32695)
## Summary
- Moved git utilities that depend on `ignore-files` crate from
`utils/git.rs` to `watch/git_utils.rs`
- Made `find_git_root` and `collect_workspace_gitignores` functions
private since they're only used internally
- Fixed WASM build failure caused by `ignore-files` dependency not being
available for WASM targets

## Test plan
- [x] Verified `pnpm build:wasm` now succeeds
- [x] Verified regular `nx build nx` still works
- [x] Confirmed watch functionality remains intact

The `ignore-files` crate is conditionally excluded from WASM builds in
Cargo.toml, but the git utilities were trying to import it
unconditionally. Moving these utilities to the watch module (which is
already excluded from WASM) provides a cleaner solution than conditional
compilation.
2025-09-11 03:49:18 +00:00
Jason Jean cf7cf8bac5 chore(core): remove unused import (#32691)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Import is unused

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Import is removed

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-10 22:51:57 +00:00
Craigory Coppola c51d247cc9 chore(repo): fixup rust setup action after pinning (#32692)
This pull request makes minor updates to the GitHub Actions workflow
configuration for Rust toolchain installation. The main change is the
addition of an explicit (empty) `rustflags` parameter to the
`actions-rust-lang/setup-rust-toolchain` steps in both the CI and
publish workflows, and a correction of the `targets` parameter to
`target` in the publish workflow.

* CI workflow updates:
* Added `rustflags: ''` to the Rust toolchain setup steps in
`.github/workflows/ci.yml` to ensure no custom Rust flags are set during
installation.
[[1]](diffhunk://#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03fR72-R73)
[[2]](diffhunk://#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03fR277-R278)

* Publish workflow updates:
* Changed `targets` to `target` and added `rustflags: ''` for the Rust
toolchain setup in `.github/workflows/publish.yml` to fix parameter
usage and clarify Rust flags.
2025-09-10 22:45:54 +00:00
Jason Jean bc35921690 fix(core): filter task duration estimation by successful tasks only (#32688)
## Current Behavior

Task duration estimation includes all task runs regardless of their
status (success, failure, cancelled), which can lead to inaccurate
timing predictions.

## Expected Behavior

Task duration estimation should only consider successful task runs to
provide more accurate timing estimates for future task execution
planning.

## Related Issue(s)

Fixes inaccurate task duration estimation by filtering out
failed/cancelled tasks from the calculation.

## Changes Made

- Modified SQL query in `get_estimated_task_timings` to filter by
`status = 'success'`
- Added database index on `status` column to improve query performance
- Updated both the WHERE clause condition and table schema
initialization
2025-09-10 21:20:31 +00:00
Jason Jean 3d6e304580 chore(core): remove unused import (#32689)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

The import is unused

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The import is removed 
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-10 21:07:37 +00:00
Craigory Coppola b582e1f761 chore(repo): turn off pm cache from setup-node in pr-title-validation (#32684)
This pull request updates the workflow configuration for PR title
validation to simplify the setup and improve caching behavior.

Workflow configuration updates:

* Removed the explicit installation step for `pnpm` using
`pnpm/action-setup`, as this workflow doesn't install packages
* Updated the Node.js setup step to disable package manager caching by
setting `package-manager-cache: false`, which replaces the previous
`cache: 'pnpm'` option.…. as this workflow doesn't install packages
2025-09-10 16:13:52 +00:00
Leosvel Pérez Espinosa 0805d4eb1e feat(testing): infer task to merge reports from playwright atomized tasks (#31615)
## Current Behavior

When using Atomizer with Playwright, test reports are generated per
atomized tasks, and Nx doesn't offer a way to merge them into a single
report. This requires the user to handle multiple reports for a single
test file or run a manual/custom aggregation.

## Expected Behavior

When using Atomizer with Playwright, Nx offers an extra target that can
be run separately to merge/aggregate the Atomized task reports.

The "blob" reporter must be configured in the Playwright configuration
so that it can be generated and used to merge and generate a unified
report. For that purpose, the Nx Playwright preset includes the blob
reporter by default when in CI. An option called `generateBlobReports`
can be used to opt out.

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Leosvel Pérez Espinosa <leosvelperez@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-10 17:27:42 +02:00
Leosvel Pérez Espinosa 1782e8c746 feat(core): replace the pagination from the tui tasks list with scrolling (#32560)
## Current Behavior

The TUI tasks list uses pagination when it has many tasks that don't fit
in the viewport.

## Expected Behavior

The TUI tasks list should be scrollable and not use pagination.

Additionally, this PR includes a fix so that when a task is selected in
the task list, it's always ensured that the task is visible if resizing
the terminal or when the task is moved due to a different status.
2025-09-10 16:59:54 +02:00
Craigory Coppola 44b0c61a29 chore(repo): add CI check to prevent tracked files being listed in .gitignore (#32460)
> [!NOTE]
> CI is failing on this PR right now, its expected. We don't currently
adhere to this advice, and its causing issues. This PR should represent
a sync of this, and future protection


## Current Behavior

Previously, we had no automated check to detect when files tracked by
Git were inadvertently listed in `.gitignore`. This could lead to
inconsistent behavior in Nx's caching system.

## Expected Behavior

With this PR, the CI pipeline now includes a check
(`check-git-ignored-tracked-files`) that identifies tracked files that
would be ignored by Git if they weren't already being tracked. This
ensures consistency in Nx's cache hash calculation.

## Why This Matters for Nx

This check is critical for Nx's caching system because:

**Hash Calculation Consistency**: Nx calculates cache hashes based on
the files that Git tracks. When a file is both tracked by Git and listed
in `.gitignore`, it creates an inconsistency where:
- Git includes the file in operations (and Nx hash calculations)  
- `.gitignore` indicates the file should be ignored
- This can lead to different hash calculations depending on timing and
environment

**Impact on Cache Performance**:
- **Cache Misses**: Valid cache entries may be missed due to hash
discrepancies
- **Unreliable Builds**: Tasks may not re-run when they should, or may
re-run unnecessarily
- **Cross-Environment Issues**: Different developers or CI environments
may calculate different hashes for identical code

**The Solution**: The new script identifies these problematic files and
provides clear remediation steps:
- For files that shouldn't be tracked: `git rm --cached <file>`
- For files that should be tracked: Update `.gitignore` to be more
specific

This ensures that Nx's intelligent caching system works as designed,
providing fast, reliable builds across the entire development workflow.

## Related Issue(s)

Fixes the inconsistency between Git tracking and ignore patterns that
can affect Nx cache hash calculations.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 10:42:27 -04:00
Jack Hsu 3a4b2752f2 chore(repo): update Node e2e test to be less flaky (#32678)
This PR updates a test such that it doesn't just wait 1 second for
output, but waits until the expected output either prints or times out.
2025-09-10 10:17:09 -04:00
MaxKless 25c2001caf fix(core): handle uninstalled nx console case in autoinstall logic (#32673) 2025-09-10 16:13:59 +02:00
MaxKless 1ff26dde52 fix(core): check nx packages for provenance config before running nx migrate (#32557) 2025-09-10 10:56:41 +02:00
Jason Jean 27cfc7efa1 fix(core): resolve watcher infinite loops from missing parent gitignore support (#32604)
## Current Behavior

Nx watcher ignores parent `.gitignore` files, causing infinite loops
when `.nx` folders are ignored only by parent gitignores outside
workspace root. Tasks hang indefinitely with no error messages.

## Expected Behavior

Watcher respects parent `.gitignore` files up to git repository
boundaries, preventing infinite loops.

## Changes Made

- **Fixed watcher**: Now traverses parent directories and respects
`.gitignore` files up to git root
- **Centralized logic**: New `git.rs` module eliminates duplicate, buggy
implementations
- **Path handling**: Fixed absolute vs relative path issues causing
filter failures
- **Git boundaries**: Added proper git root detection for traversal
limits

## Files Modified

- `packages/nx/src/native/utils/git.rs` - New module with git utilities
- `packages/nx/src/native/utils/mod.rs` - Export git module  
- `packages/nx/src/native/walker.rs` - Use shared utilities
- `packages/nx/src/native/watch/utils.rs` - Remove duplicate functions
- `packages/nx/src/native/watch/watch_filterer.rs` - Use centralized
functions

## Related Issue(s)

Fixes #30313

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-09 14:57:08 -04:00
Copilot c586749a93 fix(core): add bold styling to terminal pane title when focused (#32462)
## Current Behavior

Terminal panes in the TUI show focus state through color changes only -
focused panes display the task name in primary foreground color while
unfocused panes use secondary foreground color.

## Expected Behavior

Terminal panes should provide stronger visual feedback when focused by
making the title bold in addition to the existing color change,
consistent with other TUI components like the dependency view.

## Related Issue(s)

This enhancement improves the visual hierarchy and makes it easier for
users to identify which terminal pane currently has focus, especially in
multi-pane layouts.

## Changes Made

- Modified the title styling logic in `TerminalPane::render()` to
conditionally apply `Modifier::BOLD` when the pane is focused
- Added a test to verify the focus state behavior is correctly
implemented
- The change follows the existing pattern used in other components and
maintains backward compatibility

The implementation uses a conditional modifier that applies bold styling
only when `state.is_focused` is true, leaving unfocused panes unchanged.
This provides consistent visual feedback across the TUI while preserving
existing functionality.

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: AgentEnder <6933928+AgentEnder@users.noreply.github.com>
2025-09-09 18:51:43 +00:00
Jack Hsu 4299d82b9b docs(misc): update links on plugin-registry to point to intro pages when they exist (#32611)
This PR updates the the plugin registry links to point to intro since
the API docs aren't useful as a discovery page.

Since we use the API path to build generator, executor, etc. links I
added a new `introPath` property instead.
2025-09-09 14:43:14 -04:00
Jack Hsu 6eb1d21384 chore(repo): pin actions to shas (#32657)
This PR pins our publish actions to specific SHAs, and removes unused
logic tied to the previous PR release support.

Note: `dtolnay/rust-toolchain` cannot be pinned since will treat the SHA
as the Rust version. e.g. `@abc` will try to install Rust version `abc`,
which is invalid.
2025-09-09 14:10:47 -04:00
Jack Hsu 8fe7b0b066 feat(misc): add Cookiebot global scripts to astro-docs (#32660)
Adds cookie consent management and analytics tracking to the astro-docs
project:
- Cookiebot consent script integration with COOKIEBOT_ID environment
variable
- GlobalScripts React component reused from nx-dev for consistency
- Head.astro component override to integrate scripts into Starlight
- Cookie consent categories: statistics (GA, GTM) and marketing
(HubSpot, Apollo, Hotjar, Twitter)
- Production-only script loading with COOKIEBOT_DISABLE bypass option

Fixes DOC-95

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-09 08:30:21 -04:00
Jack Hsu ec78ef1928 docs(misc): add opengraph image support for astro docs (#32636)
This PR adds `og:image` meta tags to documentation pages for the new
docs.

The images are provided for pages under `docs` and `plugin-docs`
collections, with a fallback for pages not in those collections. We can
add more in the future as well if needed.

Examples:

<img width="1200" height="630" alt="releases"
src="https://github.com/user-attachments/assets/52322296-6048-4f40-8a78-7878406aa053"
/>

<img width="1200" height="630" alt="generators"
src="https://github.com/user-attachments/assets/cb238f9f-28c6-4c3d-83aa-ee231d99d72e"
/>

---

Closes #DOC-1164
2025-09-09 08:30:05 -04:00
Miguel 383f3aa8ce fix(release): optimize release version internals (#32534)
ReleaseGroupProcessor already iterates through all release groups, and
sometimes change is anyways not propagated.

## Current Behavior

All release groups are iterated in a way that, if group A depends on
group B:
- A will
[propagate](https://github.com/nrwl/nx/blob/53bb276a39a2de09938ed1161fadbbe92a96e596/packages/nx/src/command-line/release/version/release-group-processor.ts#L832)
changes to B
- B will
[check](https://github.com/nrwl/nx/blob/53bb276a39a2de09938ed1161fadbbe92a96e596/packages/nx/src/command-line/release/version/release-group-processor.ts#L894)
if it should be bumped by its dependencies

This means there is redundant double-checking in the code.

However, propagation doesn't always work. The linked
[snippet](https://github.com/nrwl/nx/blob/53bb276a39a2de09938ed1161fadbbe92a96e596/packages/nx/src/command-line/release/version/release-group-processor.ts#L1626-L1661)
selects a random project of group *A*, and if that project doesn't have
dependencies to projects in group *B*, it doesn't consider *B* as
bumped.

## Expected Behavior

### Ideally
There would be no double loops. 

### Otherwise 
If there are, they should consider all projects when deciding what to
bump. For instance, with something like:
```typescript
      const hasDependencyInChangedGroupV2 = Array.from(releaseGroupFilteredProjects).some(
        (project) => {
          const dependencies = this.projectGraph.dependencies[project] || [];
          return dependencies.some(
            (dep) =>
              this.getReleaseGroupNameForProject(dep.target) ===
              changedDependencyGroup
          )
      })
```

## Notes

- I know it's a bold move to simply delete code. I wanted to highlight
that, if tests pass, we are either missing tests or we are doing
unnecessary work. I would like to replicate locally with a bit more
confidence, but `jest` tests seem to be flaky
- I would need to pick @JamesHenry 's brain about what's the intention
with this "double" propagation in order to have the full context here
2025-09-09 14:38:56 +04:00
Craigory Coppola fdc3e39899 fix(core): check if daemon process is actually alive before trying to kill it (#32661)
## Current Behavior
If the daemon shuts down, and the user tries to run `nx reset`, an ESRCH
error is thrown since the pid in server-process.json doesn't match up to
a process

## Expected Behavior
We check if the process is alive before terminating it

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-08 19:39:52 -04:00
Colum Ferry 95e7b49967 fix(bundling): postcss-cli-resources should handle relative urls #32582 (#32658)
## Current Behavior
Relative urls are not being handled correctly in the
`postcss-cli-resources` Plugins for Webpack and Rspack after switching
to use WHATWG URL in favour of the deprecated `url.parse()` method.

## Expected Behavior
Ensure relatives are handled appropriately by resolving them based on
the context of the current resource being loaded.

## Related Issue(s)

Fixes #32582
2025-09-08 15:34:47 -04:00
Leosvel Pérez Espinosa 5011ecd0a1 fix(core): invalidate project graph when external nodes change (#32626)
## Current Behavior

When external nodes change, the project graph cache is not invalidated.
This can sometimes lead to missing dependencies due to reusing cached
dependencies for nodes that no longer exist.

## Expected Behavior

When external nodes change, the project graph cache should be
invalidated.
2025-09-08 15:33:06 -04:00
Copilot f91420d7c5 fix(repo): update broken CI documentation link in README (#32633)
## Current Behavior

The README.md file contains a broken link to the CI documentation that
points to `/ci/intro`, which no longer exists.

## Expected Behavior

The README.md file should contain the correct link to the CI
documentation pointing to `/ci/getting-started/intro`.

## Related Issue(s)

Fixes #32549

Credits to @MeAkib for originally identifying and addressing this issue.

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 Share your feedback on Copilot coding agent for the chance to win a
$200 gift card! Click
[here](https://survey3.medallia.com/?EAHeSx-AP01bZqG0Ld9QLQ) to start
the survey.

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: FrozenPandaz <8104246+FrozenPandaz@users.noreply.github.com>
2025-09-08 11:44:23 -04:00
Colum Ferry ceaa58e36c fix(core): ensure only supported bundlers are used for angular fallback to default (#32655)
## Current Behavior
If an invalid bundler is provided to `create-nx-workspace` for the
`angular-monorepo` preset, it defaults to `webpack`.

## Expected Behavior
Invalid bundler option should default to the default provided within in
the angular app generator
2025-09-08 16:39:11 +01:00
Miroslav Jonaš 46c26280e6 fix(vite): handle config server properly for libs (#32608)
## Current Behavior
The `Vite`'s `resolveConfig` always adds default server settings to the
config:

```
server: {
    preTransformRequests: true,
    sourcemapIgnoreList: [Function: isInNodeModules$1],
    middlewareMode: false,
    fs: {
      strict: true,
      allow: [Array],
      deny: [Array],
      cachedChecks: undefined
    }
  },
```

This leads to `libs` always ending up with serve targets even if we
don't define `serve` configuration

## Expected Behavior
The serve targets should only exist if we explicitly set port or host.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-08 16:39:28 +02:00
Miroslav Jonaš 727d431ef5 chore(repo): update core team in readme (#32585)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-08 16:30:56 +02:00
Jason Jean 9bccff918d chore(repo): update nx to 21.5.1-beta.5 (#32631)
Updating Nx from 21.5.1-beta.3 to 21.5.1-beta.5
2025-09-05 22:38:37 +00:00
Louie Weng b12d4218ea chore(gradle): migrate plugin to 0.1.7 (#32638)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Migrate gradle project graph plugin to 0.1.7

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-05 16:44:23 -04:00
Louie Weng 0c90f2c38a Revert "fix(gradle): allow test target name to be configured from nx.json" (#32637)
Reverts nrwl/nx#32416

Picking up tests via test name is fragile and breaks workspaces where
nx-expected task names do not have exact named counterparts.
2025-09-05 20:27:53 +00:00
Jason Jean 43d2c712a4 Revert "fix(core): exclude non-cacheable tasks from flaky detection (… (#32635)
…#32435)"

This reverts commit 2c678a1d51.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This causes a regression in Nx Cloud

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

There is no regression in Nx Cloud.. gotta find a different way.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-05 18:59:28 +00:00
Juri 02580f626e docs(nx-dev): add article about s1ngularity 2025-09-05 20:03:06 +02:00
Jack Hsu 106cc65269 docs(core): add Node 24 to compat matrix (#32630)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Closes #32526
2025-09-05 12:51:37 -04:00
Rares Matei 13367dee2e fix(nx-cloud): forward --help to nx-cloud aliases (#32627)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

`--help` behaviour is defined in the Nx alias entrypoints, and doesn't
show the correct output:

```
npx nx start-ci-run --help
nx start-ci-run [options]

Starts a new CI run for distributed task execution. This command is an alias for [`nx-cloud start-ci-run`](/ci/reference/nx-cloud-cli#npx-nxcloud-start-ci-run).

Options:
  --help     Show help                                                                                                                                                                                                                   [boolean]
  --version  Show version number                                                                                                                                                                                                         [boolean]
  --verbose  Prints additional information about the commands (e.g., stack traces).   
```

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

When running `npx nx start-ci-run --help` the help from the file in the
NxCloud repo should be displayed:

```
npx nx start-ci-run --help
Usage: npx nx-cloud start-ci-run [options]

Starts an Nx Cloud CI Pipeline Execution and configures distribution.

Options:
  --distribute-on <config>        Configure how to distribute with Nx Agents. Accepts:
                                  - "<count> <launchTemplate>" (e.g., "8 linux-medium-js")
                                  - path to a .yaml/.yml file for dynamic changesets
                                  - "manual" to disable the warning for legacy DTE setups
  --stop-agents-after <targets>   Comma-separated targets that signal agents can stop.
                                  Include configuration when needed, e.g., "build:locale-en".
  --require-explicit-completion   Require explicitly completing the CI run with
                                  "npx nx-cloud complete-ci-run".
  --stop-agents-on-failure        Stop all agents when a command fails (default: true).
  --with-env-vars <CSV>           Extra env vars to forward to agents in addition to NX_* (e.g., "VAR1,VAR2").
  --use-dte-by-default            Use this to disable auto-distribution of Nx tasks (default: true)
  --no-distribution               Disable distribution for this run
  --assignment-rules <file>       YAML file with assignment rules (for manual DTE only, see docs)
  --fix-tasks <csv>               Task names to auto fix
  --force                         Force start a CIPE even when a CI environment is not detected.
  --help, -h                      Show this help and exit.

Notes:
  - Do not run this command locally. If run accidentally, clean up with "npx nx-cloud cleanup".
  - For legacy manual DTE setups, you can pass "--distribute-on=manual".

Examples:
  npx nx-cloud start-ci-run --distribute-on="8 linux-medium-js" --stop-agents-after=lint,test,build
  npx nx-cloud start-ci-run --distribute-on=".nx/workflows/dynamic-changesets.yaml" --stop-agents-after=e2e
  npx nx-cloud start-ci-run --distribute-on="manual" --stop-agents-after=e2e
  npx nx affected -t lint,test,build

Docs:
  https://nx.dev/ci/reference/nx-cloud-cli#npx-nxcloud-startcirun
  https://nx.dev/ci/reference/assignment-rules
```

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #CLOUD-3580
2025-09-05 16:28:35 +03:00
Jason Jean 27e8ce0771 fix(core): reduce CPU usage by adding 20ms interval to daemon process check (#32618)
## Current Behavior

The daemon process check in `startServer()` was running continuously
without any interval, causing excessive CPU usage. The `setInterval()`
call was missing the timing parameter, making it run as fast as
possible.

## Expected Behavior

With this change, the daemon process check runs every 20ms,
significantly reducing CPU overhead while maintaining responsive daemon
process monitoring.

## Related Issue(s)

This change optimizes CPU usage in the Nx daemon server by preventing a
continuous polling loop.

## Changes Made

- Added `20` as the interval parameter to the `setInterval()` call in
`packages/nx/src/daemon/server/server.ts:572`
- The daemon process ID check now runs every 20ms instead of
continuously
- Maintains the same functionality while dramatically reducing CPU
consumption
2025-09-04 20:28:26 -04:00
Leosvel Pérez Espinosa 37b806a8bd fix(devkit): remove nx as direct dependency (#32614)
## Current Behavior

The `@nx/devkit` package has `nx` as a direct dependency.

## Expected Behavior

The `@nx/devkit` package should not have `nx` as a direct dependency.
2025-09-04 23:54:36 +00:00
Leosvel Pérez Espinosa 636c6ecf3c feat(angular-rspack): do not rely on postinstall >20.2 (#32613)
Update `postinstall` script to only be needed for Angular versions lower
than v20.2.0, for which the relevant entry points are patched to expose
needed functionality.
2025-09-04 23:35:52 +00:00
Jason Jean 41887866bd Revert "chore(core): support node 24 (#31934)" (#32619)
This reverts commit f3bc2b207a.

# Testing

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Many CI runs are running out of memory causing Agents to get OOM killed.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This change is reverted and CI runs.. only sometimes run out memory
😅

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-04 23:03:34 +00:00
Craigory Coppola 1a2582e477 chore(repo): install cargo deps separately from first access (#32617)
## Current Behavior
Cargo deps get fetched on first usage, which is when graph computes +
cargo metadata runs under @monodon/rust

## Expected Behavior
Cargo deps are fetched separately.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-04 16:37:36 -04:00
Craigory Coppola 5679b3ea8c feat(core): add NX_PROJECT_ROOT environment variable to runtime cache inputs (#31428)
Add NX_PROJECT_ROOT environment variable to runtime cache inputs

## Current Behavior

Runtime cache input commands do not have access to project-specific
context, making it impossible to create project-aware runtime inputs.

## Expected Behavior

Runtime cache input commands can access `$NX_PROJECT_ROOT` environment
variable containing the project's root directory path.

## Related Issue(s)

Fixes #20949

Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: AgentEnder <AgentEnder@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-04 16:04:55 -04:00
Jason Jean 2c678a1d51 fix(core): exclude non-cacheable tasks from flaky detection (#32435)
## Current Behavior

Currently, the flaky task detection considers ALL tasks that have mixed
success/failure results as "flaky", including non-cacheable tasks like
development servers (`nx serve`) which are expected to have inconsistent
behavior.

## Expected Behavior

With this PR, only explicitly cacheable tasks (`cache: true`) are
considered for flaky detection. Non-cacheable tasks with mixed results
will no longer trigger flaky warnings.

## Related Issue(s)

This addresses the issue where non-cacheable tasks like development
servers were incorrectly being flagged as flaky, creating noise in the
flaky task detection system.

## Implementation Details

### Changes Made

1. **Database Schema Updates**
   - Added `cache` column to `task_details` table 
   - Updated `HashedTask` struct to include `cache: Option<bool>` field

2. **Query Logic Enhancement**
- Modified flaky task detection query to JOIN with `task_details` table
- Added filter condition `AND task_details.cache = 1` to exclude
non-cacheable tasks
   - Added clear comments explaining the query logic

3. **Data Flow Updates**
- Updated TypeScript code in `hash-task.ts` to pass `cache` information
from Task objects to native layer
- Both batch and individual task detail recording now include cache
property

4. **Comprehensive Testing**
   - Updated existing tests to include cache information
- Added new test "should not consider non-cacheable tasks as flaky" that
verifies:
     - Tasks with `cache: false` are NOT marked as flaky
     - Tasks with `cache: undefined` are NOT marked as flaky  
- Only explicitly cacheable tasks with mixed results are marked as flaky

### Test Results
- **Rust tests**: 202 passed 
- **TypeScript tests**: 4 passed  (all NxTaskHistory tests)

## Benefits

- **Improved Accuracy**: Flaky detection now focuses only on tasks where
consistency is expected
- **Reduced Noise**: Development servers and other non-cacheable tasks
no longer create false positives
- **Better Developer Experience**: More relevant and actionable flaky
task warnings

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-04 15:57:11 -04:00
Jack Hsu 27769450b8 fix(nx-dev): remove self-referencing redirects causing infinite loops (#32615)
When NEXT_PUBLIC_ASTRO_URL is set and nx-dev serves docs through Astro,
certain URLs cause infinite redirect loops due to self-referencing
redirect rules. Specifically:
- /docs/guides/nx-cloud/setup-ci redirected to itself
- /docs/reference/devkit redirected to itself

There is also a missing redirect from `/docs` to
`/docs/getting-started/intro` in the Next.js app, leading to a
client-side redirect from Astro website. Plus, `/getting-started/:path*`
was being redirected to the intro page instead of the the more specific
pages.

URLs should either redirect to their proper destinations or serve
content without infinite loops. Removed the two self-referencing
redirect rules that were causing the problem.

`/docs` redirects on server-side not client-side, and `/getting-started`
URLs are redirected to specific pages e.g.
/getting-started/start-new-project ->
/docs/getting-started/start-new-project

Fixes DOC-196
2025-09-04 14:26:50 -04:00
Jason Jean 246b5c808d chore(gradle): add dynamic clean and testClasses tasks for CodeQL compatibility (#32593)
## Current Behavior

CodeQL analysis fails for Java projects in Gradle workspaces because the
required build tasks (clean and testClasses) are not available for
included builds.

## Expected Behavior

CodeQL can successfully analyze Java code by having access to the
necessary Gradle build tasks for all included builds in the workspace.

## Related Issue(s)

This change ensures CodeQL compatibility for Java projects by
dynamically adding clean and testClasses tasks to all included builds.

Fixes #
2025-09-04 12:47:25 -04:00
Jonathan Cammisuli 2f1dae2154 chore(repo): include fix-ci command in the workflow (#32326)
Co-authored-by: James Henry <james@henry.sc>
2025-09-04 12:31:26 -04:00
Craigory Coppola a1b25894f8 fix(core): use more reasonable scroll speed on trackpads (#32603)
## Current Behavior
Scrolling via trackpad is way too fast in comparison with scrolling via
arrow keys / mouse wheel

## Expected Behavior
Scrolling via trackpad is analogous to mouse / arrow keys. Additionally,
home + end can jump to the beginning / end of terminal outputs.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-04 12:02:59 -04:00
Jason Jean 4bc5540a65 chore(repo): update nx to 21.5.1-beta.3 (#32601)
Updating Nx from 21.5.0-beta.2 to 21.5.1-beta.3
2025-09-04 12:02:06 -04:00
MaxKless 5ecf4cbea7 fix(graph): repair theme detection for nx console components (#32607)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Themes are not picked up correctly from Nx Console
<img width="1128" height="637" alt="image"
src="https://github.com/user-attachments/assets/8dad4935-6d98-49f3-95a9-34f4880e2551"
/>


## Expected Behavior
Theme is applied
<img width="856" height="543" alt="image"
src="https://github.com/user-attachments/assets/aa7e21ae-a243-4399-b351-a85be339fd4b"
/>
2025-09-04 11:56:24 -04:00
Nicholas Cunningham f3bc2b207a chore(core): support node 24 (#31934)
### Changes
- Fix builtin module test to avoid duplicate `node:` prefixes

### Testing
- Update ci pipeline to use node v24
- Update agents to use node v24

### MISC
Requires: https://github.com/nrwl/nx/pull/32223

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-09-04 08:54:18 -04:00
Caleb Ukle 8e34d066f6 docs(nx-cloud): update description of neverConnectToCloud (#32602)
`neverConnectToCloud` can be confusing due to 2 aspects
1. the setup of nx cloud is named via the command `nx connect`
2. network connectsion to external services i.e. nx cloud

`neverConnectToCloud` is meant to control 1 and not 2
this means if you have previously connected to nx cloud and have an
access token configures. nx cloud will still be used since you're not
trying to "setup up nx cloud" aka `nx connect` but are instead using nx
cloud (i.e. making network requests to nx cloud)

Instead using `--no-cloud` or `NX_NO_CLOUD=true` would be how you
prevent network access to nx cloud

Fixes: DOC-194
2025-09-04 08:43:02 -04:00
Jack Hsu 7ec6f4e725 docs(misc): update styling for plugin registry cards (#32563)
This PR updates the cards on `/docs/plugin-registry` for the new Astro
docs.

<img width="830" height="286" alt="image"
src="https://github.com/user-attachments/assets/942e6764-3f7f-4986-85a1-3b6c603078c6"
/>

With the PR changes it looks like this:

(dark theme)
<img width="897" height="811" alt="image"
src="https://github.com/user-attachments/assets/06ed3045-d0f2-4c5c-88bd-eb39b0dd7b0b"
/>

(light theme) 

<img width="803" height="811" alt="image"
src="https://github.com/user-attachments/assets/7347402c-0829-450d-b85d-5b0b0b541b9c"
/>

**Changes:**

- Use `<div>` rather than cards so we can match production styles more
closely
- Customize the badge colors to match existing production 


Fixes #DOC-172
2025-09-03 16:46:46 -04:00
Leosvel Pérez Espinosa ec1f1a4559 fix(js): store stale references correctly in typescript-sync generator (#32596)
## Current Behavior

The `@nx/js:typescript-sync` wrongly identifies stale project
references.

## Expected Behavior

The `@nx/js:typescript-sync` should correctly identify stale project
references.
2025-09-03 10:28:06 -04:00
Miguel 4e1708861d fix(release): ensure versionData is accurate for all transitive dependencies (#32531) 2025-09-03 16:40:33 +04:00
Leosvel Pérez Espinosa 5bb824c074 fix(testing): log the correct installed cypress version when erroring due to using an unsupported version (#32598) 2025-09-03 16:00:58 +04:00
Jason Jean 1fcec26224 chore(repo): disable claude workflow (#32592)
## Current Behavior

The Claude Code workflow is currently enabled and responds to @claude
mentions in issues and PRs.

## Expected Behavior

The Claude Code workflow should be disabled by removing the workflow
file.

## Related Issue(s)

This change disables the automated Claude responses on the repository.
2025-09-02 21:48:26 +00:00
Juri c7d540614c docs(misc): update new subtagline 2025-09-02 23:43:24 +02:00
Juri 2af5446fba feat(nx-dev): update homepage subtagline 2025-09-02 23:43:24 +02:00
5068 changed files with 167525 additions and 216469 deletions
+87
View File
@@ -0,0 +1,87 @@
---
name: run-nx-generator
description: Run Nx generators with prioritization for workspace-plugin generators. Use this when generating code, scaffolding new features, or automating repetitive tasks in the monorepo.
allowed-tools: Bash, Read, Glob, Grep, mcp__nx-mcp__nx_generators, mcp__nx-mcp__nx_generator_schema
---
# Run Nx Generator
This skill helps you execute Nx generators efficiently, with special focus on workspace-plugin generators from your internal tooling.
## Generator Priority List
Use the `mcp__nx-mcp__nx_generator_schema` tool to get more information about how to use the generator
Choose which generators to run in this priority order:
### 🔥 Workspace-Plugin Generators (High Priority)
These are your custom internal tools in `tools/workspace-plugin/`
### 📦 Core Nx Generators (Standard)
Only use these if workspace-plugin generators don't fit:
- `nx generate @nx/devkit:...` - DevKit utilities
- `nx generate @nx/node:...` - Node.js libraries
- `nx generate @nx/react:...` - React components and apps
- Framework-specific generators
## How to Run Generators
1. **List available generators**:
2. **Get generator schema** (to see available options):
Use the `mcp__nx-mcp__nx_generator_schema` tool to get more information about how to use the generator
3. **Run the generator**:
```bash
nx generate [generator-path] [options]
```
4. **Verify the changes**:
- Review generated files
- Run tests: `nx affected -t test`
- Format code: `npx prettier --write [files]`
## Best Practices
- ✅ Always check workspace-plugin first - it has your custom solutions
- ✅ Use `--dry-run` flag to preview changes before applying
- ✅ Format generated code immediately with Prettier
- ✅ Test affected projects after generation
- ✅ Commit generator changes separately from manual edits
## Examples
### Bumping Maven Version
When updating the Maven plugin version, use the workspace-plugin generator:
```bash
nx generate @nx/workspace-plugin:bump-maven-version \
--newVersion 0.0.10 \
--nxVersion 22.1.0-beta.7
```
This automates all the version bumping instead of manual file edits.
### Creating a New Plugin
For creating a new create-nodes plugin:
```bash
nx generate @nx/workspace-plugin:create-nodes-plugin \
--name my-custom-plugin
```
## When to Use This Skill
Use this skill when you need to:
- Generate new code or projects
- Scaffold new features or libraries
- Automate repetitive setup tasks
- Update internal tools and configurations
- Create migrations or version updates
-8
View File
@@ -1,8 +0,0 @@
{
"mcpServers": {
"nx-mcp": {
"command": "npx",
"args": ["-y", "nx-mcp@latest"]
}
}
}
+4 -4
View File
@@ -8,11 +8,11 @@
// Try a more recent distribution, if your are having build issues related to GLIBC version
// Here we use 'bookworm', which is based on `Debian-12`, which comes with `GLIBC v2.36`
// (Nx tools currenlty requires `GLIBC v2.33` or higher)
"image": "mcr.microsoft.com/devcontainers/typescript-node:20-bookworm",
// Note: Using base debian image instead of typescript-node since mise will manage all tools
"image": "mcr.microsoft.com/devcontainers/base:bookworm",
"features": {
"ghcr.io/devcontainers/features/rust:1": {}
},
// All tools (Node, Java, Rust, Dotnet) are managed by mise via mise.toml
"features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// 4211 = nx graph port
+23 -5
View File
@@ -1,12 +1,30 @@
#!/bin/sh
#!/bin/bash
# Update the underlying (Debian) OS, to make sure we have the latest security patches and libraries like 'GLIBC'
# Update the underlying (Debian) OS, to make sure we have the latest security patches and libraries like 'GLIBC'
echo "⚙️ Updating the underlying OS..."
sudo apt-get update && sudo apt-get -y upgrade
# Uninstall globally installed PNPM (required version will be reinstalled through corepack)
echo "❌ Uninstalling globally installed PNPM..."
npm uninstall -g pnpm
# Install mise for managing development tools (Node, Java, Rust, Dotnet)
echo "⚙️ Installing mise..."
curl https://mise.run | sh
# Add mise to PATH
export PATH="$HOME/.local/bin:$PATH"
# Trust the mise.toml configuration file
echo "⚙️ Trusting mise.toml configuration..."
mise trust
# Install all tools from mise.toml (node, java, rust, dotnet)
echo "⚙️ Installing tools via mise (node, java, rust, dotnet)..."
mise install
# Activate mise to make tools available in current shell
eval "$(mise activate bash)"
# Add mise activation to bashrc for future shell sessions
echo "⚙️ Configuring mise activation in shell..."
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
# Prevent corepack from prompting user before downloading PNPM
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
+1 -1
View File
@@ -9,7 +9,7 @@ end_of_line = lf
insert_final_newline = true
# 4 space indentation
[*.{js,ts,jsx,tsx}]
[*.{kts,kt,js,ts,jsx,tsx}]
indent_style = space
indent_size = 2
+1 -1
View File
@@ -4,7 +4,7 @@
"env": {
"node": true
},
"ignorePatterns": ["**/*.ts"],
"ignorePatterns": ["**/*.ts", "**/test-output"],
"plugins": ["@typescript-eslint", "@nx"],
"extends": ["plugin:storybook/recommended"],
"rules": {
+10
View File
@@ -0,0 +1,10 @@
{
"mcpServers": {
"nx-mcp": {
"type": "stdio",
"command": "npx",
"args": ["nx", "mcp"]
}
},
"contextFileName": "AGENTS.md"
}
@@ -28,12 +28,12 @@ Note: We reserve the right to remove unmaintained plugins from the registry. If
## Steps to Submit Your Plugin
- Use the following commit message template: `chore(core): nx plugin submission [PLUGIN_NAME]`
- Update the `community/approved-plugins.json` file with a new entry for your plugin that includes `name`, `url`, `description`:
- Update the `astro-docs/src/content/approved-community-plugins.json` file with a new entry for your plugin that includes `name`, `url`, `description`:
Example:
```json
// community/approved-plugins.json
// astro-docs/src/content/approved-community-plugins.json
[{
"name": "@community/plugin",
@@ -42,7 +42,7 @@ Example:
}]
```
Once merged, your plugin will be available when running the `nx list` command, and will also be available in the Plugin Registry on [nx.dev](https://nx.dev/plugin-registry)
Once merged, your plugin will be available when running the `nx list` command, and will also be available in the Plugin Registry on [nx.dev](https://nx.dev/docs/plugin-registry)
-->
# Community Plugin Submission
+72 -99
View File
@@ -11,6 +11,7 @@ on:
env:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
NX_CLOUD_ENABLE_METRICS_COLLECTION: 'true'
PNPM_HOME: ~/.pnpm
jobs:
@@ -31,7 +32,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
@@ -41,12 +42,12 @@ jobs:
if: ${{ github.event_name == 'pull_request' }}
- name: Set SHAs
uses: nrwl/nx-set-shas@v4
uses: nrwl/nx-set-shas@1859e66a83ac9be0dceecbd9a023702e27ac47f4 # v4.3.3
with:
main-branch-name: 'master'
- name: Start CI Run
run: npx nx-cloud@next start-ci-run --distribute-on="./.nx/workflows/dynamic-changesets.yaml" --stop-agents-after="e2e"
run: npx nx-cloud@next start-ci-run --auto-apply-fixes="*format:check*,*sync:check*,*conformance:check*,*format-native*,*lint-native*,*lint*,*astro-docs:validate-links*" --distribute-on="./.nx/workflows/dynamic-changesets.yaml" --stop-agents-after="e2e"
- name: Install dependencies
run: |
@@ -54,52 +55,27 @@ jobs:
sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev
- name: Install Chrome
uses: browser-actions/setup-chrome@v1
uses: browser-actions/setup-chrome@2dbff04819ebbfd5c974947148805a825b8a07fd # v2.1.0
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 10.11.1
run_install: false
- name: Setup dev tools with mise
uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Cache Rust toolchain and cargo registry
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Enable corepack and install pnpm
run: |
corepack enable
corepack prepare --activate
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
uses: gradle/actions/setup-gradle@48b5f213c81028ace310571dc5ec0fbbca0b2947 # v4.4.3
- name: Install project dependencies
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- name: Check Documentation
run: pnpm nx documentation
timeout-minutes: 20
- name: Nx Report
run:
pnpm nx report
- name: Run Checks/Lint/Test/Build
run: |
@@ -114,16 +90,19 @@ jobs:
pnpm nx-cloud record -- nx-cloud conformance:check
pids+=($!)
pnpm nx run-many -t check-imports check-commit check-lock-files check-codeowners --parallel=1 --no-dte &
pnpm nx run-many -t check-imports check-lock-files check-codeowners --parallel=1 --no-dte &
pids+=($!)
pnpm nx affected --targets=lint,test,build,e2e,e2e-ci,format-native,lint-native &
pnpm nx affected --targets=lint,test,test-kt,build,e2e,e2e-ci,format-native,lint-native &
pids+=($!)
for pid in "${pids[@]}"; do
wait "$pid"
done
timeout-minutes: 100
- name: Fix CI
run: pnpm nx-cloud fix-ci
if: failure()
main-macos:
runs-on: macos-latest
@@ -147,7 +126,7 @@ jobs:
if: always()
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
@@ -156,8 +135,34 @@ jobs:
run: git fetch origin master:master
if: ${{ github.event_name == 'pull_request' }}
- name: Setup dev tools with mise
uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3
- name: Enable corepack and install pnpm
run: |
corepack enable
corepack prepare --activate
- name: Set SHAs
uses: nrwl/nx-set-shas@1859e66a83ac9be0dceecbd9a023702e27ac47f4 # v4.3.3
with:
main-branch-name: 'master'
- name: Check for React Native changes
id: check-changes
run: |
HAS_CHANGED=$(node ./scripts/check-react-native-changes.js $NX_BASE $NX_HEAD);
if $HAS_CHANGED; then
echo "has_changes=true" >> $GITHUB_OUTPUT
echo "React Native projects are affected, will run macOS tests"
else
echo "has_changes=false" >> $GITHUB_OUTPUT
echo "No React Native projects affected, skipping macOS tests"
fi
- name: Restore Homebrew packages
uses: actions/cache@v4
if: steps.check-changes.outputs.has_changes == 'true'
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
/opt/homebrew
@@ -165,11 +170,12 @@ jobs:
key: nrwl-nx-homebrew-packages
- name: Configure Detox Environment, Install applesimutils
if: steps.check-changes.outputs.has_changes == 'true'
run: |
# Ensure Xcode command line tools are installed and configured
xcode-select --print-path || sudo xcode-select --reset
sudo xcode-select -s /Applications/Xcode.app
# Install or update applesimutils with error handling
if ! brew list applesimutils &>/dev/null; then
echo "Installing applesimutils..."
@@ -183,44 +189,45 @@ jobs:
echo "Updating applesimutils..."
HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade applesimutils || true
fi
# Verify applesimutils installation
applesimutils --version || (echo "applesimutils installation failed" && exit 1)
# Configure environment for M-series Mac
echo "DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer" >> $GITHUB_ENV
echo "PLATFORM_NAME=iOS Simulator" >> $GITHUB_ENV
# Set additional environment variables for better debugging
echo "DETOX_DISABLE_TELEMETRY=1" >> $GITHUB_ENV
echo "DETOX_LOG_LEVEL=trace" >> $GITHUB_ENV
# Verify Xcode installation
xcodebuild -version
# List available simulators
xcrun simctl list devices available
timeout-minutes: 10
continue-on-error: false
- name: Reset iOS Simulators
if: steps.check-changes.outputs.has_changes == 'true'
id: reset-simulators
run: |
echo "Resetting iOS Simulators..."
# Kill simulator processes
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService 2>/dev/null || true
killall "Simulator" 2>/dev/null || true
killall "iOS Simulator" 2>/dev/null || true
# Wait for processes to terminate
sleep 3
# Shutdown and erase all simulators (ignore failures)
xcrun simctl shutdown all 2>/dev/null || true
sleep 5
xcrun simctl erase all 2>/dev/null || true
# If erase failed, try the nuclear option
if xcrun simctl list devices | grep -q "Booted" 2>/dev/null; then
echo "Standard reset failed, using nuclear option..."
@@ -228,25 +235,25 @@ jobs:
launchctl remove com.apple.CoreSimulator.CoreSimulatorService 2>/dev/null || true
sleep 3
fi
# Clean up additional directories
rm -rf ~/Library/Developer/CoreSimulator/Caches/* 2>/dev/null || true
rm -rf ~/Library/Logs/CoreSimulator/* 2>/dev/null || true
rm -rf ~/Library/Developer/Xcode/DerivedData/* 2>/dev/null || true
echo "Simulator reset completed"
timeout-minutes: 5
continue-on-error: true
- name: Verify Simulator Reset
if: ${{ steps.reset-simulators.outcome == 'success' }}
if: steps.check-changes.outputs.has_changes == 'true' && steps.reset-simulators.outcome == 'success'
run: |
# Verify CoreSimulator service restarted
pgrep -fl "CoreSimulator" || (echo "CoreSimulator service not running" && exit 1)
# Check simulator list is clean
xcrun simctl list devices
# Verify simulator runtime paths exist and are writable
test -d ~/Library/Developer/CoreSimulator/Devices || (echo "Simulator devices directory missing" && exit 1)
touch ~/Library/Developer/CoreSimulator/Devices/test || (echo "Simulator devices directory not writable" && exit 1)
@@ -254,7 +261,7 @@ jobs:
timeout-minutes: 5
- name: Diagnose Simulator Reset Failure
if: ${{ steps.reset-simulators.outcome == 'failure' }}
if: steps.check-changes.outputs.has_changes == 'true' && steps.reset-simulators.outcome == 'failure'
run: |
echo "Simulator reset failed. Collecting diagnostic information..."
xcrun simctl list
@@ -262,55 +269,21 @@ jobs:
ls -la ~/Library/Logs/CoreSimulator/ || echo "No simulator logs found"
- name: Save Homebrew Cache
uses: actions/cache@v4
if: steps.check-changes.outputs.has_changes == 'true'
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
/opt/homebrew
~/Library/Caches/Homebrew
key: nrwl-nx-homebrew-packages
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 10.11.1
run_install: false
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Cache Rust toolchain and cargo registry
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install project dependencies
if: steps.check-changes.outputs.has_changes == 'true'
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- name: Set SHAs
uses: nrwl/nx-set-shas@v4
with:
main-branch-name: 'master'
- name: Run E2E Tests for macOS
if: steps.check-changes.outputs.has_changes == 'true'
run: |
HAS_CHANGED=$(node ./scripts/check-react-native-changes.js $NX_BASE $NX_HEAD);
if $HAS_CHANGED; then
pnpm nx affected -t e2e-macos-local --parallel=1 --base=$NX_BASE --head=$NX_HEAD
else
echo "Skip E2E tests for macOS as there are no changes in React Native projects."
fi
pnpm nx affected -t e2e-macos-local --parallel=1 --base=$NX_BASE --head=$NX_HEAD
-93
View File
@@ -1,93 +0,0 @@
name: Claude Code
env:
PNPM_HOME: ~/.pnpm
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
jobs:
claude:
if: |
contains(fromJson('["AgentEnder", "barbados-clemens", "Cammisuli", "Coly010", "FrozenPandaz", "JamesHenry", "jaysoo", "leosvelperez", "MaxKless", "meeroslav", "nartc", "philipjfulcher", "vsavkin"]'), github.actor) &&
((github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))))
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
actions: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 250
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev
- name: Install Chrome
uses: browser-actions/setup-chrome@v1
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 10.11.1
run_install: false
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
.cargo-cache
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Install project dependencies
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@beta
timeout-minutes: 90
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
allowed_tools: "Bash,Edit,Read,Write,Glob,Grep,LS,MultiEdit,NotebookRead,NotebookEdit"
+114
View File
@@ -0,0 +1,114 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "master" ]
schedule:
- cron: '20 14 * * 6'
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: actions
build-mode: none
# We would like to test our Java / Kotlin... but its currently failing. We can follow up.
# - language: java-kotlin
# build-mode: autobuild
- language: javascript-typescript
build-mode: none
- language: rust
build-mode: none
- language: csharp
build-mode: autobuild
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Setup Language Tooling
uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3
- name: Enable corepack and install pnpm
run: |
corepack enable
corepack prepare --activate
# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
# or others). This is typically only required for manual builds.
# - name: Setup runtime (example)
# uses: actions/setup-example@v1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@15403aac29bd91419968e066cded66bde56b0283 # v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@15403aac29bd91419968e066cded66bde56b0283 # v3
with:
category: "/language:${{matrix.language}}"
+111
View File
@@ -0,0 +1,111 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
pull_request:
branches: [ "**" ]
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: actions
build-mode: none
# See comment in @./codeql-master.yml about Java / Kotlin
# - language: java-kotlin
# build-mode: autobuild
- language: javascript-typescript
build-mode: none
- language: rust
build-mode: none
- language: csharp
build-mode: autobuild
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Setup Language Tooling
uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3
- name: Enable corepack and install pnpm
run: |
corepack enable
corepack prepare --activate
# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
# or others). This is typically only required for manual builds.
# - name: Setup runtime (example)
# uses: actions/setup-example@v1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@15403aac29bd91419968e066cded66bde56b0283 # v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@15403aac29bd91419968e066cded66bde56b0283 # v3
with:
category: "/language:${{matrix.language}}"
upload: 'never'
upload-database: false
+87 -106
View File
@@ -2,7 +2,7 @@ name: E2E matrix
on:
schedule:
- cron: "0 5 * * *"
- cron: '0 5 * * *'
workflow_dispatch:
inputs:
debug_enabled:
@@ -14,12 +14,14 @@ on:
env:
CYPRESS_CACHE_FOLDER: ${{ github.workspace }}/.cypress
permissions: { }
permissions: {}
jobs:
preinstall:
if: ${{ github.repository_owner == 'nrwl' }}
runs-on: ${{ matrix.os }}
timeout-minutes: 20
env:
NODE_VERSION: ${{ matrix.node_version }}
strategy:
matrix:
os:
@@ -28,46 +30,44 @@ jobs:
# - windows-latest Windows fails to build gradle wrapper which always runs when we build nx.
## https://staging.nx.app/runs/LgD4vxGn8w?utm_source=pull-request&utm_medium=comment
node_version:
# TODO(v23): remove node 20 - EOL April 2026
- 20
- 22
# - 23
- 24
exclude:
# run just node v20 on macos and windows
# run just node v24 on macos and windows
- os: macos-latest
node_version: 20
- os: macos-latest
node_version: 22
# - os: macos-latest
# node_version: 23
# - os: windows-latest TODO (emily): Windows fails to build gradle wrapper which always runs when we build nx. Re-enable when we fix this.
# node_version: 22
# - os: windows-latest TODO (emily): Windows fails to build gradle wrapper which always runs when we build nx. Re-enable when we fix this.
# node_version: 23
# - os: windows-latest TODO(Jack): Windows fails to build gradle wrapper which always runs when we build nx. Re-enable when we fix this.
# node_version: 20
# - os: windows-latest TODO (Jack): Windows fails to build gradle wrapper which always runs when we build nx. Re-enable when we fix this.
# node_version: 22
name: Cache install (${{ matrix.os }}, node v${{ matrix.node_version }})
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 10.11.1
run_install: false
- name: Setup dev tools with mise
uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3
- name: Set node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node_version }}
cache: 'pnpm'
- name: Enable corepack and install pnpm
run: |
npm install -g corepack@latest
corepack enable
corepack prepare --activate
- name: Get pnpm store directory
id: pnpm-cache
run: echo "path=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Cache pnpm store
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: ${{ steps.pnpm-cache.outputs.path }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
@@ -91,7 +91,7 @@ jobs:
- name: Cache Homebrew
if: ${{ matrix.os == 'macos-latest' }}
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
lookup-only: true
path: ${{ steps.homebrew-cache-dir-path.outputs.dir }}
@@ -101,7 +101,7 @@ jobs:
- name: Cache Cypress
id: cache-cypress
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
lookup-only: true
path: '${{ github.workspace }}/.cypress'
@@ -120,15 +120,14 @@ jobs:
matrix: ${{ steps.process-json.outputs.MATRIX }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
- name: Process matrix data
id: process-json
run:
echo "MATRIX=$(npx tsx .github/workflows/nightly/process-matrix.ts | jq -c .)" >> $GITHUB_OUTPUT
run: echo "MATRIX=$(npx tsx .github/workflows/nightly/process-matrix.ts | jq -c .)" >> $GITHUB_OUTPUT
e2e:
if: ${{ github.repository_owner == 'nrwl' }}
@@ -138,7 +137,9 @@ jobs:
permissions:
contents: read
runs-on: ${{ matrix.os }}
timeout-minutes: 200 # <- cap each job to 200 minutes
timeout-minutes: 200 # <- cap each job to 200 minutes
env:
NODE_VERSION: ${{ matrix.node_version }}
strategy:
matrix: ${{fromJson(needs.prepare-matrix.outputs.matrix)}} # Load matrix from previous job
fail-fast: false
@@ -146,7 +147,7 @@ jobs:
name: ${{ matrix.os_name }}/${{ matrix.package_manager }}/${{ matrix.node_version }} ${{ join(matrix.project) }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
@@ -154,34 +155,14 @@ jobs:
- name: Prepare dir for output
run: mkdir -p outputs
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 10.11.1
run_install: false
- name: Setup dev tools with mise
uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node_version }}
cache: 'pnpm'
- name: Install Rust
if: ${{ matrix.os != 'windows-latest' }}
- name: Enable corepack and install pnpm
run: |
curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y
source "$HOME/.cargo/env"
rustup toolchain install 1.70.0
- name: Load Cargo Env
if: ${{ matrix.os != 'windows-latest' }}
run: echo "PATH=$HOME/.cargo/bin:$PATH" >> $GITHUB_ENV
- name: Install bun
if: ${{ matrix.os != 'windows-latest' }}
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
npm install -g corepack@latest
corepack enable
corepack prepare --activate
- name: Install packages
run: |
@@ -195,7 +176,7 @@ jobs:
# https://github.com/actions/virtual-environments/issues/2840
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf '/usr/local/share/boost'
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
sudo apt-get install lsof
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
@@ -207,7 +188,7 @@ jobs:
- name: Cache Homebrew
if: ${{ matrix.os == 'macos-latest' }}
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: ${{ steps.homebrew-cache-dir-path.outputs.dir }}
key: brew-${{ matrix.node_version }}
@@ -216,7 +197,7 @@ jobs:
- name: Cache Cypress
id: cache-cypress
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: '${{ github.workspace }}/.cypress'
key: ${{ runner.os }}-cypress
@@ -231,35 +212,35 @@ jobs:
# Ensure Xcode command line tools are installed and configured
xcode-select --print-path || sudo xcode-select --reset
sudo xcode-select -s /Applications/Xcode.app
# Install or update applesimutils with error handling
if ! brew list applesimutils &>/dev/null; then
echo "Installing applesimutils..."
echo 'Installing applesimutils...'
HOMEBREW_NO_AUTO_UPDATE=1 brew tap wix/brew >/dev/null
HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils >/dev/null || {
echo "Failed to install applesimutils, retrying with update..."
echo 'Failed to install applesimutils, retrying with update...'
brew update
HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils
}
else
echo "Updating applesimutils..."
echo 'Updating applesimutils...'
HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade applesimutils || true
fi
# Verify applesimutils installation
applesimutils --version || (echo "applesimutils installation failed" && exit 1)
applesimutils --version || (echo 'applesimutils installation failed' && exit 1)
# Configure environment for M-series Mac
echo "DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer" >> $GITHUB_ENV
echo "PLATFORM_NAME=iOS Simulator" >> $GITHUB_ENV
echo 'DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer' >> $GITHUB_ENV
echo 'PLATFORM_NAME=iOS Simulator' >> $GITHUB_ENV
# Set additional environment variables for better debugging
echo "DETOX_DISABLE_TELEMETRY=1" >> $GITHUB_ENV
echo "DETOX_LOG_LEVEL=trace" >> $GITHUB_ENV
echo 'DETOX_DISABLE_TELEMETRY=1' >> $GITHUB_ENV
echo 'DETOX_LOG_LEVEL=trace' >> $GITHUB_ENV
# Verify Xcode installation
xcodebuild -version
timeout-minutes: 10
continue-on-error: false
@@ -267,35 +248,35 @@ jobs:
if: ${{ matrix.os == 'macos-latest' }}
id: reset-simulators
run: |
echo "Resetting iOS Simulators..."
echo 'Resetting iOS Simulators...'
# Kill simulator processes
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService 2>/dev/null || true
killall "Simulator" 2>/dev/null || true
killall "iOS Simulator" 2>/dev/null || true
killall 'Simulator' 2>/dev/null || true
killall 'iOS Simulator' 2>/dev/null || true
# Wait for processes to terminate
sleep 3
# Shutdown and erase all simulators (ignore failures)
xcrun simctl shutdown all 2>/dev/null || true
sleep 5
xcrun simctl erase all 2>/dev/null || true
# If erase failed, try the nuclear option
if xcrun simctl list devices | grep -q "Booted" 2>/dev/null; then
echo "Standard reset failed, using nuclear option..."
if xcrun simctl list devices | grep -q 'Booted' 2>/dev/null; then
echo 'Standard reset failed, using nuclear option...'
rm -rf ~/Library/Developer/CoreSimulator/Devices/* 2>/dev/null || true
launchctl remove com.apple.CoreSimulator.CoreSimulatorService 2>/dev/null || true
sleep 3
fi
# Clean up additional directories
rm -rf ~/Library/Developer/CoreSimulator/Caches/* 2>/dev/null || true
rm -rf ~/Library/Logs/CoreSimulator/* 2>/dev/null || true
rm -rf ~/Library/Developer/Xcode/DerivedData/* 2>/dev/null || true
echo "Simulator reset completed"
echo 'Simulator reset completed'
timeout-minutes: 5
continue-on-error: true
@@ -303,27 +284,27 @@ jobs:
if: ${{ matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'success' }}
run: |
# Verify CoreSimulator service restarted
pgrep -fl "CoreSimulator" || (echo "CoreSimulator service not running" && exit 1)
pgrep -fl 'CoreSimulator' || (echo 'CoreSimulator service not running' && exit 1)
# Verify simulator runtime paths exist and are writable
test -d ~/Library/Developer/CoreSimulator/Devices || (echo "Simulator devices directory missing" && exit 1)
touch ~/Library/Developer/CoreSimulator/Devices/test || (echo "Simulator devices directory not writable" && exit 1)
test -d ~/Library/Developer/CoreSimulator/Devices || (echo 'Simulator devices directory missing' && exit 1)
touch ~/Library/Developer/CoreSimulator/Devices/test || (echo 'Simulator devices directory not writable' && exit 1)
rm ~/Library/Developer/CoreSimulator/Devices/test
timeout-minutes: 5
- name: Diagnose Simulator Reset Failure
if: ${{ matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'failure' }}
run: |
echo "Simulator reset failed. Collecting diagnostic information..."
echo 'Simulator reset failed. Collecting diagnostic information...'
xcrun simctl list
echo "Checking simulator logs..."
ls -la ~/Library/Logs/CoreSimulator/ || echo "No simulator logs found"
echo 'Checking simulator logs...'
ls -la ~/Library/Logs/CoreSimulator/ || echo 'No simulator logs found'
- name: Configure git metadata (needed for lerna smoke tests)
if: ${{ (matrix.os != 'macos-latest') || (matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'success') }}
run: |
git config --global user.email test@test.com
git config --global user.name "Test Test"
git config --global user.name 'Test Test'
- name: Set starting timestamp
if: ${{ (matrix.os != 'macos-latest') || (matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'success') }}
@@ -352,18 +333,18 @@ jobs:
npm_config_registry: http://localhost:4872
YARN_REGISTRY: http://localhost:4872
CI: true
- name: Run e2e tests with npm (macOS)
id: e2e-run-npm
if: ${{ matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'success' }}
run: |
# Run the tests
if [[ "${{ matrix.project }}" == "e2e-detox" ]] || [[ "${{ matrix.project }}" == "e2e-react-native" ]] || [[ "${{ matrix.project }}" == "e2e-expo" ]]; then
if [[ '${{ matrix.project }}' == 'e2e-detox' ]] || [[ '${{ matrix.project }}' == 'e2e-react-native' ]] || [[ '${{ matrix.project }}' == 'e2e-expo' ]]; then
NX_E2E_VERBOSE_DEBUG=1 pnpm nx run ${{ matrix.project }}:e2e-macos-local
else
NX_E2E_VERBOSE_DEBUG=1 pnpm nx run ${{ matrix.project }}:e2e-local
fi
env:
NX_E2E_CI_CACHE_KEY: e2e-gha-${{ matrix.os }}-${{ matrix.node_version }}-${{ matrix.package_manager }}
NX_PERF_LOGGING: 'false'
@@ -387,17 +368,17 @@ jobs:
before=${{ steps.before-e2e.outputs.timestamp }}
now=$(date +%s)
delta=$(($now - $before))
# Determine the outcome based on which step ran
outcome="${{ matrix.os == 'macos-latest' && steps.e2e-run-npm.outcome || steps.e2e-run-pnpm.outcome }}"
outcome='${{ matrix.os == 'macos-latest' && steps.e2e-run-npm.outcome || steps.e2e-run-pnpm.outcome }}'
matrix=$((
echo '${{ toJSON(matrix) }}'
) | jq --argjson delta $delta -c '. + { "status": "'"$outcome"'", "duration": $delta }')
echo "$matrix" > 'outputs/matrix.json'
- name: Upload matrix config
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: ${{ always() }}
with:
name: ${{ matrix.os_name}}-${{ matrix.node_version}}-${{ matrix.package_manager}}-${{ matrix.project }}
@@ -407,7 +388,7 @@ jobs:
- name: Setup tmate session
if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled && failure() }}
uses: mxschmitt/action-tmate@v3.8
uses: mxschmitt/action-tmate@1fb8b1023602bf1fd0e2994d7f1e93015cb5bbec # v3.22
timeout-minutes: 15
with:
sudo: ${{ matrix.os != 'windows-latest' }} # disable sudo for windows debugging
@@ -425,7 +406,7 @@ jobs:
has_golden_failures: ${{ steps.process-json.outputs.has_golden_failures }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
@@ -434,7 +415,7 @@ jobs:
run: mkdir -p outputs
- name: Load outputs
uses: actions/download-artifact@v4
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
path: outputs
@@ -457,7 +438,7 @@ jobs:
timeout-minutes: 10
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: 'failure'
message_format: '${{ needs.process-result.outputs.message }}'
@@ -475,7 +456,7 @@ jobs:
timeout-minutes: 10
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: 'success'
message_format: '${{ needs.process-result.outputs.message }}'
@@ -492,7 +473,7 @@ jobs:
name: Report duration per package manager
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: 'skipped'
message_format: '${{ needs.process-result.outputs.pm_duration }}'
@@ -508,7 +489,7 @@ jobs:
name: Report duration per project
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: 'skipped'
message_format: '${{ needs.process-result.outputs.proj_duration }}'
+12 -8
View File
@@ -3,26 +3,27 @@ name: Generate embeddings
on:
schedule:
- cron: "0 5 * * 0,4" # sunday, thursday 5AM
workflow_dispatch:
jobs:
cache-and-install:
if: github.repository == 'nrwl/nx'
runs-on: ubuntu-latest
strategy:
matrix:
node-version: ['20.19.0']
node-version: ['24']
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Install Node.js
uses: actions/setup-node@v3
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: '20.19.0'
node-version: '24'
package-manager-cache: false
- name: Install pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
id: pnpm-install
with:
version: 10.11.1
@@ -35,7 +36,7 @@ jobs:
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
@@ -45,8 +46,11 @@ jobs:
- name: Install dependencies
run: pnpm install --no-frozen-lockfile
- name: Build docs
run: npx nx build astro-docs
- name: Run embeddings script
run: pnpm exec nx run tools-documentation-create-embeddings:run-node
run: node --import tsx tools/documentation/create-embeddings/src/main.mts --mode=astro
env:
NX_NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.NX_NEXT_PUBLIC_SUPABASE_URL }}
NX_SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.NX_SUPABASE_SERVICE_ROLE_KEY }}
+9 -8
View File
@@ -16,21 +16,21 @@ jobs:
name: Report status
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
with:
version: 10.11.1
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v3
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: '20.19.0'
node-version: '24'
cache: 'pnpm'
- name: Cache node_modules
id: cache-modules
uses: actions/cache@v3
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
lookup-only: true
path: '**/node_modules'
@@ -41,11 +41,12 @@ jobs:
- name: Download artifact
id: download-artifact
uses: dawidd6/action-download-artifact@v2 # Needed since we are downloading artifact from a different workflow run, official actions/download-artifact doesn't support this.
uses: dawidd6/action-download-artifact@268677152d06ba59fcec7a7f0b5d961b6ccd7e1e # v2 # Needed since we are downloading artifact from a different workflow run, official actions/download-artifact doesn't support this.
with:
name: cached-issue-data
path: ${{ github.workspace }}/scripts/issues-scraper/cached
search_artifacts: true
allow_forks: false
continue-on-error: true
- name: Collect Issue Data
@@ -54,14 +55,14 @@ jobs:
env:
GITHUB_TOKEN: ${{ github.token }}
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: cached-issue-data
path: ./scripts/issues-scraper/cached/data.json
- name: Send GitHub Action trigger data to Slack workflow
id: slack
uses: slackapi/slack-github-action@v1.23.0
uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1
with:
payload: ${{ steps.collect.outputs.SLACK_MESSAGE }}
env:
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
if: ${{ github.repository_owner == 'nrwl' }}
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v4
- uses: dessant/lock-threads@7de207be1d3ce97a9abe6ff1306222982d1ca9f9 # v5.0.1
id: lockthreads
with:
github-token: ${{ github.token }}
+8 -4
View File
@@ -67,6 +67,7 @@ const matrixData: MatrixData = {
{ name: 'e2e-storybook', codeowners: 'S04SVQ8H0G5' },
{ name: 'e2e-nuxt', codeowners: 'S04SJ6PL98X' }
],
// TODO(v23): remove node 20 - EOL April 2026
nodeTLS: 20,
setup: [
{
@@ -74,12 +75,15 @@ const matrixData: MatrixData = {
os_name: 'Linux',
os_timeout: 60,
package_managers: ['npm', 'pnpm', 'yarn'],
node_versions: ['20.19.0', '22.12.0'],
node_versions: ['20.19.0', '22.12.0', '24.0.0'],
excluded: ['e2e-detox', 'e2e-react-native', 'e2e-expo']
},
{ os: 'macos-latest', os_name: 'MacOS', os_timeout: 90, package_managers: ['npm'], node_versions: ['20.19.0'] }
// TODO (emily): Fix Windows support as gradle fails when running nx build https://staging.nx.app/runs/LgD4vxGn8w?utm_source=pull-request&utm_medium=comment
// { os: 'windows-latest', os_name: 'WinOS', os_timeout: 180, package_managers: ['npm'], node_versions: ['20.19.0'], excluded: ['e2e-detox', 'e2e-react-native', 'e2e-expo'] }
// Docker is not supported on ARM-based macOS runners (no nested virtualization)
// See: https://github.com/docker/setup-docker-action and https://github.com/douglascamata/setup-docker-macos-action
// We may want to look into adding intel only for this docker case, at least until vm-in-vm works on latest macos
{ os: 'macos-latest', os_name: 'MacOS', os_timeout: 90, package_managers: ['npm'], node_versions: ['24.0.0'], excluded: ['e2e-docker'] }
// TODO (Jack): Fix Windows support as gradle fails when running nx build https://staging.nx.app/runs/LgD4vxGn8w?utm_source=pull-request&utm_medium=comment
// { os: 'windows-latest', os_name: 'WinOS', os_timeout: 180, package_managers: ['npm'], node_versions: ['24.0.0'], excluded: ['e2e-detox', 'e2e-react-native', 'e2e-expo'] }
]
};
+3 -3
View File
@@ -14,9 +14,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
with:
version: 10.11.1 # Aligned with root package.json (pnpm/action-setup will helpfully error if out of sync)
@@ -30,7 +30,7 @@ jobs:
name: Report status
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: ${{ needs.audit.result }}
message_format: '{emoji} Audit has {status_message}'
+7 -6
View File
@@ -12,18 +12,19 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
# Ensure's validate-pr-title.js is the copy from master
ref: master
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: 20
node-version: 24
package-manager-cache: false
- name: Validate PR title
env:
PR_TITLE: ${{ github.event.pull_request.title }}
PR_BODY: ${{ github.event.pull_request.body }}
run: node ./scripts/validate-pr-title.js
run: node ./scripts/validate-pr-title.js
+213 -93
View File
@@ -3,7 +3,14 @@ name: publish
on:
# Automated schedule - canary releases from master
schedule:
- cron: "0 20 * * 1-5" # Monday - Friday, at 20:00 UTC (8pm UTC)
- cron: "0 19 * * 1-5" # Monday - Friday, at 19:00 UTC (7pm UTC)
# Manual trigger - PR releases or dry-runs (based on workflow inputs)
workflow_dispatch:
inputs:
pr:
description: "PR Number - If set, a real release will be created for the branch associated with the given PR number. If blank, a dry-run of the currently selected branch will be performed."
required: false
type: number
release:
types: [ published ]
@@ -30,7 +37,7 @@ jobs:
# ref resolution in actions/checkout. The exact version will be generated within scripts/nx-release.ts.
#
# - workflow_dispatch:
# - We are either running a dry-run on the current branch, in which case the version will be statica and we can use
# - We are either running a dry-run on the current branch, in which case the version will be static and we can use
# default ref resolution in actions/checkout, or we are creating a PR release for the given PR number, in which case
# we should generate an applicable version number within publish-resolve-data.js and use a custom ref of the PR branch name.
resolve-required-data:
@@ -44,24 +51,23 @@ jobs:
publish_branch: ${{ steps.script.outputs.publish_branch }}
ref: ${{ steps.script.outputs.ref }}
repo: ${{ steps.script.outputs.repo }}
pr_number: ${{ steps.script.outputs.pr_number }}
pr_author: ${{ steps.script.outputs.pr_author }}
steps:
# Default checkout on the triggering branch so that the latest publish-resolve-data.js script is available
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Setup node
uses: actions/setup-node@v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
check-latest: true
package-manager-cache: false
- name: Resolve and set checkout and version data to use for release
id: script
uses: actions/github-script@v7
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
PR_NUMBER: ${{ github.event.inputs.pr }}
with:
@@ -72,7 +78,7 @@ jobs:
- name: (PR Release Only) Check out latest master
if: ${{ steps.script.outputs.ref != '' }}
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
# Check out the latest master branch to get its copy of nx-release.ts
repository: nrwl/nx
@@ -81,24 +87,31 @@ jobs:
- name: (PR Release Only) Check out PR branch
if: ${{ steps.script.outputs.ref != '' }}
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
# Check out the PR branch to get its copy of nx-release.ts
repository: ${{ steps.script.outputs.repo }}
ref: ${{ steps.script.outputs.ref }}
path: pr-branch-checkout
- name: (PR Release Only) Ensure that nx-release.ts has not changed in the PR being released
- name: (PR Release Only) Ensure that release scripts have not changed in the PR being released
if: ${{ steps.script.outputs.ref != '' }}
env:
FILE_TO_COMPARE: "scripts/nx-release.ts"
run: |
if ! cmp -s "latest-master-checkout/${{ env.FILE_TO_COMPARE }}" "pr-branch-checkout/${{ env.FILE_TO_COMPARE }}"; then
echo "🛑 Error: The file ${{ env.FILE_TO_COMPARE }} is different on the ${{ steps.script.outputs.ref }} branch on ${{ steps.script.outputs.repo }} vs latest master on nrwl/nx, cancelling workflow. If you did not modify the file, then you likely just need to rebase/merge latest master."
exit 1
else
echo "✅ The file ${{ env.FILE_TO_COMPARE }} is identical between the ${{ steps.script.outputs.ref }} branch on ${{ steps.script.outputs.repo }} and latest master on nrwl/nx."
fi
# List of files that must not change in PR releases
FILES_TO_CHECK=(
"scripts/nx-release.ts"
"scripts/publish-resolve-data.js"
)
for FILE in "${FILES_TO_CHECK[@]}"; do
if ! cmp -s "latest-master-checkout/$FILE" "pr-branch-checkout/$FILE"; then
echo "🛑 Error: The file $FILE is different on the ${{ steps.script.outputs.ref }} branch on ${{ steps.script.outputs.repo }} vs latest master on nrwl/nx, cancelling workflow."
echo "If you did not modify the file, then you likely just need to rebase/merge latest master."
exit 1
else
echo "✅ The file $FILE is identical between the ${{ steps.script.outputs.ref }} branch on ${{ steps.script.outputs.repo }} and latest master on nrwl/nx."
fi
done
build:
needs: [ resolve-required-data ]
@@ -107,16 +120,21 @@ jobs:
fail-fast: false
matrix:
settings:
- host: macos-13
- host: macos-latest
target: x86_64-apple-darwin
setup: |-
rustup target add aarch64-apple-darwin
rustup target add x86_64-apple-darwin
build: |
pnpm nx run-many --target=build-native -- --target=x86_64-apple-darwin
- host: windows-latest
setup: |-
choco install openjdk --version=21.0.0 -y
rustup target add aarch64-pc-windows-msvc
build: pnpm nx run-many --target=build-native -- --target=x86_64-pc-windows-msvc
build: |
export JAVA_HOME="C:\Program Files\OpenJDK\jdk-21"
export PATH="$JAVA_HOME\bin:$PATH"
java -version
pnpm nx run-many --target=build-native -- --target=x86_64-pc-windows-msvc
target: x86_64-pc-windows-msvc
# Windows 32bit (not needed)
# - host: windows-latest
@@ -130,16 +148,22 @@ jobs:
set -e
apt-get update
# Install Java 21
apt-get install -y openjdk-21-jdk
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
java --version
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs=22.16.0-1nodesource1
export PATH="/usr/local/bin:$PATH"
node --version
npm --version
npm i -g pnpm@${PNPM_VERSION} --force
pnpm --version
pnpm install --frozen-lockfile
rustup target add x86_64-unknown-linux-gnu
pnpm nx run-many --verbose --target=build-native -- --target=x86_64-unknown-linux-gnu
@@ -150,27 +174,32 @@ jobs:
bash -c "
set -e
echo 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories
apk add --no-cache curl xz
apk add --no-cache curl xz openjdk21
# Set up Java 21
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
export PATH=\"\$JAVA_HOME/bin:\$PATH\"
java --version
curl -fsSL https://unofficial-builds.nodejs.org/download/release/v22.16.0/node-v22.16.0-linux-x64-musl.tar.xz -o node.tar.xz
tar -xJf node.tar.xz
mv node-v22.16.0-linux-x64-musl /usr/local/node
export PATH=\"/usr/local/node/bin:\$PATH\"
echo Node: \$(node -v)
echo NPM: \$(npm -v)
# Install PNPM
npm i -g pnpm@${PNPM_VERSION} --force
pnpm --version
# Install deps and run native build
pnpm install --frozen-lockfile
rustup target add x86_64-unknown-linux-musl
pnpm nx run-many --verbose --target=build-native -- --target=x86_64-unknown-linux-musl
"
- host: macos-13
- host: macos-latest
target: aarch64-apple-darwin
setup: |-
rustup target add aarch64-apple-darwin
@@ -187,17 +216,23 @@ jobs:
build: |
set -e
apt-get update
# Install Java 21
apt-get install -y openjdk-21-jdk
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
java --version
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs=22.16.0-1nodesource1
export PATH="/usr/local/bin:$PATH"
node --version
npm --version
npm i -g pnpm@${PNPM_VERSION} --force
pnpm --version
pnpm install --frozen-lockfile
rustup target add aarch64-unknown-linux-gnu
pnpm nx run-many --verbose --target=build-native -- --target=aarch64-unknown-linux-gnu
@@ -225,59 +260,61 @@ jobs:
bash -c "
set -e
echo 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories
apk add --no-cache curl xz
apk add --no-cache curl xz openjdk21
# Set up Java 21
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
export PATH=\"\$JAVA_HOME/bin:\$PATH\"
java --version
curl -fsSL https://unofficial-builds.nodejs.org/download/release/v22.16.0/node-v22.16.0-linux-x64-musl.tar.xz -o node.tar.xz
tar -xJf node.tar.xz
mv node-v22.16.0-linux-x64-musl /usr/local/node
export PATH=\"/usr/local/node/bin:\$PATH\"
echo Node: \$(node -v)
echo NPM: \$(npm -v)
# Install PNPM
npm i -g pnpm@${PNPM_VERSION} --force
pnpm --version
# Install deps and run native build
pnpm install --frozen-lockfile
rustup target add aarch64-unknown-linux-musl
pnpm nx run-many --verbose --target=build-native -- --target=aarch64-unknown-linux-musl
rustup target add aarch64-unknown-linux-musl
pnpm nx run-many --verbose --target=build-native -- --target=aarch64-unknown-linux-musl
"
- host: windows-latest
target: aarch64-pc-windows-msvc
setup: |-
choco install openjdk --version=21.0.0 -y
rustup target add aarch64-pc-windows-msvc
build: pnpm nx run-many --target=build-native -- --target=aarch64-pc-windows-msvc
build: |
export JAVA_HOME="C:\Program Files\OpenJDK\jdk-21"
export PATH="$JAVA_HOME\bin:$PATH"
java -version
pnpm nx run-many --target=build-native -- --target=aarch64-pc-windows-msvc
name: stable - ${{ matrix.settings.target }} - node@22.16.0
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: ${{ needs.resolve-required-data.outputs.repo }}
ref: ${{ needs.resolve-required-data.outputs.ref }}
repository: ${{ needs.resolve-required-data.outputs.repo || github.repository }}
ref: ${{ needs.resolve-required-data.outputs.ref || github.ref }}
- uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}
- name: Setup node
uses: actions/setup-node@v4
- name: Setup dev tools with mise
uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3
if: ${{ !matrix.settings.docker }}
with:
node-version: ${{ env.NODE_VERSION }}
check-latest: true
cache: 'pnpm'
- name: Install
uses: dtolnay/rust-toolchain@stable
- name: Enable corepack and install pnpm
if: ${{ !matrix.settings.docker }}
with:
targets: ${{ matrix.settings.target }}
run: |
corepack enable
corepack prepare --activate
- name: Cache cargo
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
~/.cargo/registry/index/
@@ -287,7 +324,7 @@ jobs:
target/
key: ${{ matrix.settings.target }}-cargo-registry
- uses: goto-bus-stop/setup-zig@v2
- uses: goto-bus-stop/setup-zig@abea47f85e598557f500fa1fd2ab7464fcb39406 # v2.2.1
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }}
with:
version: 0.10.0
@@ -308,7 +345,7 @@ jobs:
timeout-minutes: 30
- name: Setup node x86
uses: actions/setup-node@v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
if: matrix.settings.target == 'i686-pc-windows-msvc'
with:
node-version: ${{ env.NODE_VERSION }}
@@ -317,7 +354,7 @@ jobs:
architecture: x86
- name: Build in docker
uses: addnab/docker-run-action@v3
uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3
if: ${{ matrix.settings.docker }}
with:
image: ${{ matrix.settings.docker }}
@@ -330,7 +367,7 @@ jobs:
shell: bash
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: bindings-${{ matrix.settings.target }}
path: |
@@ -345,14 +382,14 @@ jobs:
name: Build FreeBSD
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: ${{ needs.resolve-required-data.outputs.repo }}
ref: ${{ needs.resolve-required-data.outputs.ref }}
repository: ${{ needs.resolve-required-data.outputs.repo || github.repository }}
ref: ${{ needs.resolve-required-data.outputs.ref || github.ref }}
- name: Build
id: build
uses: cross-platform-actions/action@v0.25.0
uses: cross-platform-actions/action@462ed697694d2ac9aa49e1225f395f7bb6dd49fe # v0.29.0
env:
DEBUG: napi:*
RUSTUP_IO_THREADS: 1
@@ -368,8 +405,12 @@ jobs:
run: |
env
whoami
sudo pkg install -y -f node libnghttp2 www/npm git
sudo pkg install -y -f node libnghttp2 www/npm git openjdk17
sudo npm install --location=global --ignore-scripts pnpm@10.11.1
# Set up Java 17
export JAVA_HOME=/usr/local/openjdk17
export PATH="$JAVA_HOME/bin:$PATH"
java --version
curl https://sh.rustup.rs -sSf --output rustup.sh
sh rustup.sh -y --profile minimal --default-toolchain stable
source "$HOME/.cargo/env"
@@ -386,6 +427,54 @@ jobs:
freebsd-version
echo "Installing dependencies"
pnpm install --frozen-lockfile --ignore-scripts
echo "Checking disk space before cleanup"
df -h
echo "Removing unnecessary preinstalled packages"
# List all packages first to see what's installed
sudo pkg info -a
echo "Cleaning up to free disk space"
# Clean package caches
sudo pkg clean -a -y
sudo pkg autoremove -y
# Remove unnecessary system files
sudo rm -rf /usr/local/lib/*.a
sudo rm -rf /usr/local/share/doc/*
sudo rm -rf /usr/local/share/man/*
sudo rm -rf /usr/local/share/examples/*
sudo rm -rf /usr/local/share/locale/*
sudo rm -rf /usr/local/share/gtk-doc/*
sudo rm -rf /usr/local/share/info/*
sudo rm -rf /usr/src/*
sudo rm -rf /usr/obj/*
sudo rm -rf /usr/tests/*
sudo rm -rf /usr/lib/debug/*
# Clean var directories
sudo rm -rf /var/cache/pkg/*
sudo rm -rf /var/db/pkg/*.tbz
sudo rm -rf /var/log/*.log
sudo rm -rf /var/log/*.old
# Clean temporary files
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# Remove Python cache if present
sudo find /usr/local -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
sudo find /usr/local -name "*.pyc" -delete 2>/dev/null || true
sudo find /usr/local -name "*.pyo" -delete 2>/dev/null || true
# Clean npm/pnpm caches
npm cache clean --force || true
pnpm store prune || true
rm -rf ~/.npm || true
rm -rf ~/.pnpm-store || true
# Remove Rust build artifacts if any
rm -rf ~/.cargo/registry || true
rm -rf ~/.cargo/git || true
rm -rf ~/.rustup/toolchains/*/share || true
# Remove other development tool caches
rm -rf ~/.cache/* || true
echo "Checking disk space after cleanup"
df -h
echo "Building FreeBSD bindings"
pnpm nx run-many --verbose --outputStyle stream --target=build-native -- --target=x86_64-unknown-freebsd
echo "Cleaning up"
@@ -397,7 +486,7 @@ jobs:
echo "COMPLETE"
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: bindings-freebsd
path: |
@@ -420,23 +509,19 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: ${{ needs.resolve-required-data.outputs.repo }}
ref: ${{ needs.resolve-required-data.outputs.ref }}
repository: ${{ needs.resolve-required-data.outputs.repo || github.repository }}
ref: ${{ needs.resolve-required-data.outputs.ref || github.ref }}
- uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}
- name: Setup dev tools with mise
uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3
- name: Enable corepack and install pnpm
run: |
corepack enable
corepack prepare --activate
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
check-latest: true
cache: 'pnpm'
- name: Use npm 11.5.2
run: npm install -g npm@11.5.2
@@ -444,7 +529,7 @@ jobs:
run: pnpm install --frozen-lockfile
- name: Download all artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
path: artifacts
@@ -456,6 +541,7 @@ jobs:
run: |
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-23/wasi-sdk-23.0-x86_64-linux.tar.gz
tar -xvf wasi-sdk-23.0-x86_64-linux.tar.gz
rustup toolchain install nightly-2025-05-09
pnpm build:wasm
- name: Publish
env:
@@ -480,11 +566,11 @@ jobs:
- name: (PR Release Only) Create comment for successful PR release
if: success() && github.event.inputs.pr
uses: actions/github-script@v7
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
SUCCESS_COMMENT: ${{ needs.resolve-required-data.outputs.success_comment }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# github-token defaults to ${{ github.token }} so we don't need to specify it
script: |
const successComment = JSON.parse(process.env.SUCCESS_COMMENT);
await github.rest.issues.createComment({
@@ -494,22 +580,55 @@ jobs:
body: successComment
});
report-pending-publish:
name: Report Pending Publish to Slack
if: ${{ github.repository_owner == 'nrwl' }}
needs:
- resolve-required-data
- build-freebsd
- build
runs-on: ubuntu-latest
timeout-minutes: 10
continue-on-error: true # Don't fail the workflow if notification fails
steps:
- name: Send Slack notification
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: ${{ job.status }}
notification_title: >-
${{ needs.resolve-required-data.outputs.pr_number &&
format('📦 PR #{0} Publish Pending Review', needs.resolve-required-data.outputs.pr_number) ||
'📦 Publish Pending Review' }}
message_format: >-
${{ needs.resolve-required-data.outputs.pr_number &&
format('Version {0} from PR #{1} by @{2} is being published to NPM - manual review is required',
needs.resolve-required-data.outputs.version,
needs.resolve-required-data.outputs.pr_number,
needs.resolve-required-data.outputs.pr_author) ||
format('Version {0} is being published to NPM - manual review is required',
needs.resolve-required-data.outputs.version) }}
footer: '<{run_url}|View Workflow Run>'
mention_users: 'U9NPA6C90' # Jason
env:
SLACK_WEBHOOK_URL: ${{ secrets.ACTION_MONITORING_SLACK }}
pr_failure_comment:
# Run this job if it is a PR release, running on the nrwl origin, and any of the required jobs failed
if: ${{ github.repository_owner == 'nrwl' && github.event.inputs.pr && always() && contains(needs.*.result, 'failure') }}
needs: [ resolve-required-data, build, build-freebsd, publish ]
name: (PR Release Failure Only) Create comment for failed PR release
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Create comment for failed PR release
uses: actions/github-script@v7
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# This script is intentionally kept inline (and e.g. not generated in publish-resolve-data.js)
# to ensure that an error within the data generation itself is not missed.
script: |
const message = `
Failed to publish a PR release of this pull request, triggered by @${{ github.triggering_actor }}.
Failed to publish a PR release of this pull request, triggered by @${{ github.triggering_actor }}.
See the failed workflow run at: https://github.com/nrwl/nx/actions/runs/${{ github.run_id }}
`;
await github.rest.issues.createComment({
@@ -518,3 +637,4 @@ jobs:
issue_number: ${{ github.event.inputs.pr }},
body: message
});
+5 -5
View File
@@ -19,7 +19,7 @@ jobs:
# This handles issues that need more info
- name: stale-more-info-needed
id: stale-more-info-needed
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 7
@@ -37,7 +37,7 @@ jobs:
# This handles PRs that need to be rebased
- name: stale-needs-rebase
id: stale-needs-rebase
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 7
@@ -56,7 +56,7 @@ jobs:
# This handles issues that do not have a repro
- name: stale-repro-needed
id: stale-repro-needed
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 7
@@ -75,7 +75,7 @@ jobs:
- name: stale-retry-with-latest
id: stale-retry-with-latest
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 7
@@ -95,7 +95,7 @@ jobs:
# This handles issues are really old and were made with a previous major
- name: stale-bug
id: stale-bug
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 180
+23 -8
View File
@@ -13,7 +13,8 @@ tmp
jest.debug.config.js
.tool-versions
/.nx-cache
/.nx
/.nx/cache
/.nx/workspace-data
/.verdaccio/build/local-registry
/graph/client/src/assets/environment.js
/graph/client/src/assets/dev/environment.js
@@ -51,8 +52,6 @@ out
# Fix for issue when working on the repo in a dev container
.pnpm-store
.nx
!.nx/workflows
.cargo/.package-cache
.cargo/bin/
@@ -63,6 +62,8 @@ out
.profile
.rustup/
target
.flattened-pom.xml
dependency-reduced-pom.xml
*.wasm
/wasi-sdk*
@@ -75,10 +76,9 @@ storybook-static
.kotlin
.claude/settings.local.json
CLAUDE.local.md
.cursor/rules/nx-rules.mdc
.cursor/mcp.json
.github/instructions/nx.instructions.md
# Added by Claude Task Master
# Logs
@@ -91,6 +91,7 @@ dev-debug.log
node_modules/
# Environment variables
.env
!e2e/dotnet/.env
# Editor directories and files
.idea
.vscode
@@ -103,18 +104,32 @@ node_modules/
.cursorindexingignore
# OS specific
# Task files
tasks.json
tasks/
/tasks.json
/tasks
# Upstream docs local configuration (machine-specific)
.upstreamdocs.local.json
astro-docs/.netlify
coverage
# Angular Rspack Specific Options
packages/angular-rspack/coverage
packages/angular-rspack-compiler/coverage
# Angular Rspack Packages use a template to generate the correct README
# Some Packages use a template to generate the correct README
packages/angular-rspack/README.md
packages/angular-rspack-compiler/README.md
packages/dotnet/README.md
packages/maven/README.md
test-output
test-results
# TypeScript build info files
*.tsbuildinfo
# .NET build output
/packages/dotnet/analyzer/bin
/packages/dotnet/analyzer/obj
+1
View File
@@ -0,0 +1 @@
NX_USE_V8_SERIALIZER=false
+4 -4
View File
@@ -1,9 +1,9 @@
{
"mcpServers": {
"nx": {
"command": "pnpm",
"args": ["nx-mcp"],
"env": {}
"nx-mcp": {
"type": "stdio",
"command": "npx",
"args": ["nx", "mcp"]
}
}
}
+3
View File
@@ -0,0 +1,3 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/4.0.0-rc-5/apache-maven-4.0.0-rc-5-bin.zip
+68 -147
View File
@@ -1,155 +1,76 @@
common-env-vars: &common-env-vars
GIT_AUTHOR_EMAIL: test@test.com
GIT_AUTHOR_NAME: Test
GIT_COMMITTER_EMAIL: test@test.com
GIT_COMMITTER_NAME: Test
SELECTED_PM: 'pnpm'
NX_NATIVE_LOGGING: 'nx::native::db'
# These are need for build and link validation for next.js and astro apps
NEXT_PUBLIC_ASTRO_URL: 'https://master--nx-docs.netlify.app'
NX_DEV_URL: 'https://canary.nx.dev'
common-init-steps: &common-init-steps
- name: Checkout
uses: 'nrwl/nx-cloud-workflows/v5/workflow-steps/checkout/main.yaml'
- name: Cache restore
uses: 'nrwl/nx-cloud-workflows/v5/workflow-steps/cache/main.yaml'
inputs:
key: 'pnpm-lock.yaml'
paths: ~/.local/share/pnpm/store
base-branch: 'master'
# reads mise.toml and installs toolchains needed for repo
- name: Setup toolchains
uses: 'nrwl/nx-cloud-workflows/v5/workflow-steps/install-mise/main.yaml'
- name: Verify toolchain versions
script: |
echo "mise: $(mise --version)"
echo "node: $(node --version)"
echo "pnpm: $(pnpm --version)"
echo "bun: $(bun --version)"
echo "rust: $(rustc --version) - $(cargo --version)"
echo "dotnet: $(dotnet --version)"
echo "java: $(javac --version)"
- name: Install system deps
script: |
sudo apt-get update
sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev zip unzip
- name: Pnpm Install from lockfile
script: |
pnpm install --frozen-lockfile
- name: Install browsers
script: |
pnpm exec cypress install
pnpm exec playwright install --with-deps
- name: Install rust deps
script: |
cargo fetch
- name: Setup gradle
script: |
./gradlew wrapper
./gradlew --version
- name: Configure git metadata (needed for lerna smoke tests)
script: |
git config --global user.email test@test.com
git config --global user.name "Test Test"
launch-templates:
linux-large:
resource-class: 'docker_linux_amd64/large'
image: 'us-east1-docker.pkg.dev/nxcloudoperations/nx-cloud/nx-agents-base-images:ubuntu22.04-node20.19-v1'
env:
GIT_AUTHOR_EMAIL: test@test.com
GIT_AUTHOR_NAME: Test
GIT_COMMITTER_EMAIL: test@test.com
GIT_COMMITTER_NAME: Test
SELECTED_PM: 'pnpm'
NX_NATIVE_LOGGING: 'nx::native::db'
init-steps:
- name: Checkout
uses: 'nrwl/nx-cloud-workflows/v5/workflow-steps/checkout/main.yaml'
- name: Check Node Version
script: node --version
- name: Cache restore
uses: 'nrwl/nx-cloud-workflows/v5/workflow-steps/cache/main.yaml'
inputs:
key: 'pnpm-lock.yaml'
paths: .pnpm-store
base-branch: 'master'
- name: Install zip and unzip
script: sudo apt-get -yqq install zip unzip
- name: Install bun
script: |
curl -fsSL https://bun.sh/install | bash
echo "BUN_INSTALL=$HOME/.bun" >> $NX_CLOUD_ENV
echo "PATH=$HOME/.bun/bin:$PATH" >> $NX_CLOUD_ENV
- name: Check bun
script: |
bun --version
- name: Install e2e deps
script: |
sudo apt-get update
sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev
- name: Pnpm Install from lockfile
script: |
pnpm install --frozen-lockfile
- name: Install Browsers
script: |
pnpm exec cypress install
pnpm exec playwright install --with-deps
- name: Install Rust
script: |
curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y
source "$HOME/.cargo/env"
rustup toolchain install 1.70.0
- name: Configure git metadata (needed for lerna smoke tests)
script: |
git config --global user.email test@test.com
git config --global user.name "Test Test"
- name: Load Cargo Env
script: echo "PATH=$HOME/.cargo/bin:$PATH" >> $NX_CLOUD_ENV
- name: Setup Java 21
script: |
sudo apt update
sudo apt install -y openjdk-21-jdk
sudo update-alternatives --set java /usr/lib/jvm/java-21-openjdk-amd64/bin/java
java -version
- name: Setup Gradle
script: |
./gradlew wrapper
./gradlew --version
env: *common-env-vars
init-steps: *common-init-steps
linux-extra-large:
resource-class: 'docker_linux_amd64/extra_large'
image: 'us-east1-docker.pkg.dev/nxcloudoperations/nx-cloud/nx-agents-base-images:ubuntu22.04-node20.19-v1'
env:
GIT_AUTHOR_EMAIL: test@test.com
GIT_AUTHOR_NAME: Test
GIT_COMMITTER_EMAIL: test@test.com
GIT_COMMITTER_NAME: Test
SELECTED_PM: 'pnpm'
NX_NATIVE_LOGGING: 'nx::native::db'
init-steps:
- name: Checkout
uses: 'nrwl/nx-cloud-workflows/v5/workflow-steps/checkout/main.yaml'
- name: Check Node Version
script: node --version
- name: Cache restore
uses: 'nrwl/nx-cloud-workflows/v5/workflow-steps/cache/main.yaml'
inputs:
key: 'pnpm-lock.yaml'
paths: .pnpm-store
base-branch: 'master'
- name: Install zip and unzip
script: sudo apt-get -yqq install zip unzip
- name: Install bun
script: |
curl -fsSL https://bun.sh/install | bash
echo "BUN_INSTALL=$HOME/.bun" >> $NX_CLOUD_ENV
echo "PATH=$HOME/.bun/bin:$PATH" >> $NX_CLOUD_ENV
- name: Check bun
script: |
bun --version
- name: Install e2e deps
script: |
sudo apt-get update
sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev
- name: Pnpm Install from lockfile
script: |
pnpm install --frozen-lockfile
- name: Install Browsers
script: |
pnpm exec cypress install
pnpm exec playwright install --with-deps
- name: Install Rust
script: |
curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y
source "$HOME/.cargo/env"
rustup toolchain install 1.70.0
- name: Configure git metadata (needed for lerna smoke tests)
script: |
git config --global user.email test@test.com
git config --global user.name "Test Test"
- name: Load Cargo Env
script: echo "PATH=$HOME/.cargo/bin:$PATH" >> $NX_CLOUD_ENV
- name: Setup Java 21
script: |
sudo apt update
sudo apt install -y openjdk-21-jdk
sudo update-alternatives --set java /usr/lib/jvm/java-21-openjdk-amd64/bin/java
java -version
- name: Setup Gradle
script: |
./gradlew wrapper
./gradlew --version
env: *common-env-vars
init-steps: *common-init-steps
+43 -15
View File
@@ -1,24 +1,50 @@
distribute-on:
default: auto linux-large, 1 linux-extra-large
default: auto linux-large, 3 linux-extra-large
assignment-rules:
# e2e-release tests must run sequentially due to shared git state and publishing operations
- projects:
- e2e-release
targets:
- e2e-ci**
run-on:
- agent: linux-large
parallelism: 1
- projects:
- e2e-gradle
targets:
- e2e-ci**
run-on:
- agent: linux-large
parallelism: 1
- agent: linux-extra-large
parallelism: 1
- agent: linux-extra-large
parallelism: 1
- projects:
- nx
- workspace
- remix
- nx-maven-plugin
targets:
- install
- test
run-on:
- agent: linux-large
parallelism: 1
- agent: linux-extra-large
parallelism: 1
- projects:
- e2e-release
- e2e-angular
- e2e-react
- e2e-next
- e2e-web
- e2e-eslint
- e2e-remix
- e2e-cypress
- e2e-docker
- e2e-js
- e2e-nx-init
- e2e-dotnet
- e2e-workspace-create
- e2e-rollup
targets:
- e2e-ci**
run-on:
- agent: linux-large
parallelism: 1
- agent: linux-extra-large
parallelism: 1
# All other e2e tests can run in parallel
- targets:
@@ -51,9 +77,11 @@ assignment-rules:
run-on:
- agent: linux-large
parallelism: 6
- agent: linux-extra-large
parallelism: 6
- targets:
- '*'
- "*"
run-on:
- agent: linux-large
parallelism: 3
+10 -1
View File
@@ -1,5 +1,14 @@
{
"singleQuote": true,
"endOfLine": "lf",
"plugins": ["prettier-plugin-tailwindcss"]
"trailingComma": "es5",
"plugins": ["prettier-plugin-tailwindcss"],
"overrides": [
{
"files": "*.mdoc",
"options": {
"parser": "markdown"
}
}
]
}
+223
View File
@@ -0,0 +1,223 @@
When responding to queries about this repository:
1. Suggest relevant commands from the "Essential Commands" section when applicable
2. Highlight Nx's focus on monorepos and its key features like smart task execution, code generation, and project graph
analysis
3. Mention the plugin ecosystem and support for various frameworks when relevant
4. Emphasize the importance of running the full validation suite before committing changes
Always strive to provide accurate, helpful responses that align with the best practices and workflows described in this
file.
## Documentation Contributions
When working on Nx documentation, all documentation content lives in the `astro-docs/` folder. This is the new Astro-based documentation site built with Starlight.
**Important**: Before making any documentation changes, read the `astro-docs/README.md` file for detailed guidance on:
- Project structure and architecture
- Content types (regular docs, dynamic plugin docs, CLI docs)
- Available Markdoc tags for rich content
- Development workflow and commands
- Sidebar management
### Quick Reference
- Documentation content: `astro-docs/src/content/docs/`
- Use `.mdoc` (Markdoc) or `.mdx` format for documentation files
- Run `nx serve astro-docs` to start the local dev server
- Sidebar structure is defined in `astro-docs/sidebar.mts`
## GitHub Issue Response Mode
When responding to GitHub issues, determine your approach based on how the request is phrased:
### Plan-First Mode (Default)
Use this approach when users ask you to:
- "analyze", "investigate", "assess", "review", "examine", or "plan"
- Or when the request is ambiguous
In this mode:
1. Provide a detailed analysis of the issue
2. Create a comprehensive implementation plan
3. Break down the solution into clear steps
4. Then please post the plan as a comment on the issue
### Immediate Implementation Mode
Use this approach when users ask you to:
- "fix", "implement", "solve", "build", "create", "update", or "add"
- Or when they explicitly request immediate action
In this mode:
1. Analyze the issue quickly
2. Implement the complete solution immediately
3. Make all necessary code changes. Please make multiple commits so that the changes are easier to review.
4. Run appropriate tests and validation
5. If the tests, are not passing, please fix the issues and continue doing this up to 3 more times until the tests pass
6. Once the tests pass, push a branch and then suggest opening a PR which has a description of the changes made, and
that
it make sure that it explicitly says "Fixes #ISSUE_NUMBER" to automatically close the issue when the PR is merged.
## Avoid making changes to generated files
Files under `generated` directories are generated based on a different source file and should not be modified directly.
Find the underlying source and modify that instead.
## Essential Commands
### Code Formatting
After code changes are made, please make sure to format the files with prettier via `npx prettier -- FILE_NAME`
### Pre-push Validation
```bash
# Full validation suite - run before committing
nx prepush
```
If the prepush validation suite fails, please fix the issues before proceeding with your work. This ensures that all
code adheres to the project's standards and passes all tests. DO NOT make a new commit to fix these issues. Instead,
amend the current commit.
### Testing Changes
After code changes are made, first test the specific project where the changes were made:
```bash
nx run-many -t test,build,lint -p PROJECT_NAME
```
After verifying the individual project, validate that the changes in projects which have been affected:
```bash
# Test only affected projects (recommended for development)
nx affected -t build,test,lint
```
As the last step, run the e2e tests to fully ensure that changes are valid:
```bash
# Run affected e2e tests (recommended for development)
nx affected -t e2e-local
```
## Fixing GitHub Issues
When working on a GitHub issue, follow this systematic approach:
### 1. Get Issue Details
```bash
# Get issue details using GitHub CLI (replace ISSUE_NUMBER with actual number)
gh issue view ISSUE_NUMBER
# View multiple issues efficiently in one command
gh issue list --limit 50 --json number,title,state,labels,assignees,updatedAt,body --jq '.[] | select(.number == 123 or .number == 456 or .number == 789)'
# Or filter by specific criteria to get multiple related issues
gh issue list --label "bug" --state "open" --json number,title,body,labels --jq '.[]'
gh issue list --assignee "@me" --json number,title,body,state --jq '.[]'
```
**Tip**: Instead of running `gh issue view` multiple times, use `gh issue list` with JSON output and filtering to gather
information about multiple issues in a single command. This is much more efficient than viewing issues one at a time.
**Always provide clickable links**: When discussing GitHub issues or PRs, always include the full GitHub URL so the user
can easily open them in their browser. For example:
- Issue #12345: https://github.com/nrwl/nx/issues/12345
- PR #67890: https://github.com/nrwl/nx/pull/67890
When cloning reproduction repos, please clone within `./tmp/claude/repro-ISSUE_NUMBER`
### 2. Analyze the Plan
- Look for a plan or implementation details in the issue description
- Check comments for additional context or clarification
- Identify affected projects and components
### 3. Implement the Solution
- Follow the plan outlined in the issue
- Make focused changes that address the specific problem
- Ensure code follows existing patterns and conventions
### 4. Run Full Validation
Use the testing workflow from the "Essential Commands" section.
### 5. Submit Pull Request
- Create a descriptive PR title that references the issue
- **Always fill in the PR template** - don't leave it empty
- Include "Fixes #ISSUE_NUMBER" in the PR description
- Provide a clear summary of changes made
- Request appropriate reviewers
## Pull Request Template
**IMPORTANT**: When creating a pull request, you MUST fill in the template found in `.github/PULL_REQUEST_TEMPLATE.md`.
Do not leave the template sections empty. The template includes:
### Required Sections
1. **Current Behavior**: Describe the behavior we have today
2. **Expected Behavior**: Describe the behavior we should expect with the changes in this PR
3. **Related Issue(s)**: Link the issue being fixed so it gets closed when the PR is merged
### Template Format
```markdown
## Current Behavior
<!-- This is the behavior we have today -->
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR -->
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is merged. -->
Fixes #ISSUE_NUMBER
```
### Guidelines
- Ensure your commit message follows the conventional commit format (use `pnpm commit`)
- Use `fix:`, `feat:`, `chore:`, etc. as appropriate types.
- Scope is **required** for all commits. Possible scopes are listed in `scripts/commitizen.js`.
- Read the submission guidelines in CONTRIBUTING.md before posting
- For complex changes, you can request a dedicated Nx release by mentioning the Nx team
- Always link the related issue using "Fixes #ISSUE_NUMBER" to automatically close it when merged
<!-- nx configuration start-->
<!-- Leave the start & end comments to automatically receive updates. -->
# General Guidelines for working with Nx
- When running tasks (for example build, lint, test, e2e, etc.), always prefer running the task through `nx` (i.e. `nx run`, `nx run-many`, `nx affected`) instead of using the underlying tooling directly
- You have access to the Nx MCP server and its tools, use them to help the user
- When answering questions about the repository, use the `nx_workspace` tool first to gain an understanding of the workspace architecture where applicable.
- When working in individual projects, use the `nx_project_details` mcp tool to analyze and understand the specific project structure and dependencies
- For questions around nx configuration, best practices or if you're unsure, use the `nx_docs` tool to get relevant, up-to-date docs. Always use this instead of assuming things about nx configuration
- If the user needs help with an Nx configuration or project graph error, use the `nx_workspace` tool to get any errors
# CI Error Guidelines
If the user wants help with fixing an error in their CI pipeline, use the following flow:
- Retrieve the list of current CI Pipeline Executions (CIPEs) using the `nx_cloud_cipe_details` tool
- If there are any errors, use the `nx_cloud_fix_cipe_failure` tool to retrieve the logs for a specific task
- Use the task logs to see what's wrong and help the user fix their problem. Use the appropriate tools if necessary
- Make sure that the problem is fixed by running the task that you passed into the `nx_cloud_fix_cipe_failure` tool
<!-- nx configuration end-->
+46 -7
View File
@@ -1,17 +1,33 @@
When responding to queries about this repository:
1. Use the `nx_workspace` mcp tool for understanding the workspace architecture when appropriate
2. When working in projects, use the `nx_project` mcp tool to analyze and understand the specific project structure and
dependencies
3. Suggest relevant commands from the "Essential Commands" section when applicable
4. Highlight Nx's focus on monorepos and its key features like smart task execution, code generation, and project graph
1. Suggest relevant commands from the "Essential Commands" section when applicable
2. Highlight Nx's focus on monorepos and its key features like smart task execution, code generation, and project graph
analysis
5. Mention the plugin ecosystem and support for various frameworks when relevant
6. Emphasize the importance of running the full validation suite before committing changes
3. Mention the plugin ecosystem and support for various frameworks when relevant
4. Emphasize the importance of running the full validation suite before committing changes
Always strive to provide accurate, helpful responses that align with the best practices and workflows described in this
file.
## Documentation Contributions
When working on Nx documentation, all documentation content lives in the `astro-docs/` folder. This is the new Astro-based documentation site built with Starlight.
**Important**: Before making any documentation changes, read the `astro-docs/README.md` file for detailed guidance on:
- Project structure and architecture
- Content types (regular docs, dynamic plugin docs, CLI docs)
- Available Markdoc tags for rich content
- Development workflow and commands
- Sidebar management
### Quick Reference
- Documentation content: `astro-docs/src/content/docs/`
- Use `.mdoc` (Markdoc) or `.mdx` format for documentation files
- Run `nx serve astro-docs` to start the local dev server
- Sidebar structure is defined in `astro-docs/sidebar.mts`
## GitHub Issue Response Mode
When responding to GitHub issues, determine your approach based on how the request is phrased:
@@ -182,3 +198,26 @@ Fixes #ISSUE_NUMBER
- Read the submission guidelines in CONTRIBUTING.md before posting
- For complex changes, you can request a dedicated Nx release by mentioning the Nx team
- Always link the related issue using "Fixes #ISSUE_NUMBER" to automatically close it when merged
<!-- nx configuration start-->
<!-- Leave the start & end comments to automatically receive updates. -->
# General Guidelines for working with Nx
- When running tasks (for example build, lint, test, e2e, etc.), always prefer running the task through `nx` (i.e. `nx run`, `nx run-many`, `nx affected`) instead of using the underlying tooling directly
- You have access to the Nx MCP server and its tools, use them to help the user
- When answering questions about the repository, use the `nx_workspace` tool first to gain an understanding of the workspace architecture where applicable.
- When working in individual projects, use the `nx_project_details` mcp tool to analyze and understand the specific project structure and dependencies
- For questions around nx configuration, best practices or if you're unsure, use the `nx_docs` tool to get relevant, up-to-date docs. Always use this instead of assuming things about nx configuration
- If the user needs help with an Nx configuration or project graph error, use the `nx_workspace` tool to get any errors
# CI Error Guidelines
If the user wants help with fixing an error in their CI pipeline, use the following flow:
- Retrieve the list of current CI Pipeline Executions (CIPEs) using the `nx_cloud_cipe_details` tool
- If there are any errors, use the `nx_cloud_fix_cipe_failure` tool to retrieve the logs for a specific task
- Use the task logs to see what's wrong and help the user fix their problem. Use the appropriate tools if necessary
- Make sure that the problem is fixed by running the task that you passed into the `nx_cloud_fix_cipe_failure` tool
<!-- nx configuration end-->
+26 -61
View File
@@ -11,17 +11,13 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
# Docs Site + Graph
/astro-docs @nrwl/nx-docs-reviewers
/docs @nrwl/nx-docs-reviewers
/docs/nx-cloud @StalkAltan @rarmatei @nixallover @nrwl/nx-docs-reviewers
/graph/** @philipjfulcher @FrozenPandaz @bcabanes @MaxKless @Coly010 @jaysoo
/graph/** @philipjfulcher @FrozenPandaz @bcabanes @MaxKless @Coly010 @jaysoo @nartc
/images @nrwl/nx-docs-reviewers
/nx-dev/** @nrwl/nx-docs-reviewers
/typedoc-theme @nrwl/nx-docs-reviewers
# Plugin Verticals
## Angular
/docs/generated/packages/angular/** @nrwl/nx-angular-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/angular/** @nrwl/nx-angular-reviewers @nrwl/nx-docs-reviewers
/packages/angular/** @nrwl/nx-angular-reviewers
/packages/angular-rspack/** @nrwl/nx-angular-reviewers
/packages/angular-rspack-compiler/** @nrwl/nx-angular-reviewers
@@ -32,10 +28,6 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/packages/angular/src/generators/component-test/** @nrwl/nx-angular-reviewers @nrwl/nx-testing-tools-reviewers
## React
/docs/generated/packages/react/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/next/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/react/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/next/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/packages/react/** @nrwl/nx-react-reviewers
/e2e/react/** @nrwl/nx-react-reviewers
/packages/next/** @nrwl/nx-react-reviewers
@@ -45,10 +37,6 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/packages/react/src/generators/component-test/** @nrwl/nx-react-reviewers @nrwl/nx-testing-tools-reviewers
# React Native
/docs/generated/packages/detox/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/expo/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/react-native/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/react-native/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/packages/detox/** @nrwl/nx-react-reviewers
/e2e/detox/** @nrwl/nx-react-reviewers
/packages/expo/** @nrwl/nx-react-reviewers
@@ -57,7 +45,6 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/e2e/react-native/** @nrwl/nx-react-reviewers
## remix
/docs/generated/packages/remix/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers @Coly010
/packages/remix/** @nrwl/nx-react-reviewers @Coly010
/e2e/remix/** @nrwl/nx-react-reviewers @Coly010
@@ -68,31 +55,12 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/e2e/nuxt/** @nrwl/nx-vue-reviewers
## Node
/docs/generated/packages/node/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/nest/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/express/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/node/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/express/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/nest/** @nrwl/nx-node-reviewers @FrozenPandaz @nrwl/nx-docs-reviewers
/packages/node/** @nrwl/nx-node-reviewers
/packages/express/** @nrwl/nx-node-reviewers
/packages/nest/** @nrwl/nx-node-reviewers
/e2e/node/** @nrwl/nx-node-reviewers
## JS
/docs/generated/packages/js/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/web/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/webpack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/rspack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/esbuild/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/rollup/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/vite/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/js/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/web/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/webpack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/rspack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/esbuild/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/vite/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/packages/js/** @nrwl/nx-js-reviewers
/e2e/js/** @nrwl/nx-js-reviewers
/packages/web/** @nrwl/nx-js-reviewers
@@ -108,17 +76,12 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/e2e/rollup/** @nrwl/nx-js-reviewers
/packages/vite/** @nrwl/nx-js-reviewers
/e2e/vite/** @nrwl/nx-js-reviewers
/packages/vitest/** @nrwl/nx-js-reviewers
## Module Federation
/packages/module-federation/** @nrwl/nx-js-reviewers
## Tools
/docs/generated/packages/cypress/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/cypress/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/jest/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/jest/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/playwright/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/playwright/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/packages/cypress/** @nrwl/nx-testing-tools-reviewers
/e2e/cypress/** @nrwl/nx-testing-tools-reviewers
/packages/jest/** @nrwl/nx-testing-tools-reviewers
@@ -127,26 +90,19 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/e2e/playwright/** @nrwl/nx-testing-tools-reviewers
# Linter
/docs/generated/packages/eslint-plugin/** @nrwl/nx-linter-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/eslint/** @nrwl/nx-linter-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/eslint/** @nrwl/nx-linter-reviewers @nrwl/nx-docs-reviewers
/packages/eslint-plugin/** @nrwl/nx-linter-reviewers
/packages/eslint/** @nrwl/nx-linter-reviewers
/e2e/eslint/** @nrwl/nx-linter-reviewers
.eslint* @nrwl/nx-linter-reviewers
# Storybook
/docs/generated/packages/storybook/** @nrwl/nx-storybook-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/storybook/** @nrwl/nx-storybook-reviewers @nrwl/nx-docs-reviewers
/packages/storybook/** @nrwl/nx-storybook-reviewers
/e2e/storybook/** @nrwl/nx-storybook-reviewers
# Docker
/packages/docker/** @nrwl/nx-core-reviewers @Coly010
/packages/docker/** @nrwl/nx-core-reviewers @Coly010 @jaysoo
## Devkit
/docs/generated/devkit/** @nrwl/nx-devkit-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/devkit/** @nrwl/nx-devkit-reviewers @nrwl/nx-docs-reviewers
/packages/devkit/** @nrwl/nx-devkit-reviewers
/packages/devkit/index.ts @FrozenPandaz @vsavkin
/packages/devkit/public-api.ts @FrozenPandaz @vsavkin
@@ -154,17 +110,20 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
# Gradle
/packages/gradle/** @FrozenPandaz @MaxKless @lourw
/e2e/gradle/** @FrozenPandaz @MaxKless @lourw
/build.gradle.kts @FrozenPandaz @MaxKless @lourw
/settings.gradle.kts @FrozenPandaz @MaxKless @lourw
# Maven
/packages/maven/** @FrozenPandaz @MaxKless @lourw
/e2e/maven/** @FrozenPandaz @MaxKless @lourw
/pom.xml @FrozenPandaz @MaxKless @lourw
# Nx-Plugin
/docs/generated/packages/plugin/** @nrwl/nx-devkit-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/plugin/** @nrwl/nx-devkit-reviewers @nrwl/nx-docs-reviewers
/packages/plugin/** @nrwl/nx-devkit-reviewers
/e2e/plugin/** @nrwl/nx-devkit-reviewers
/packages/create-nx-plugin/** @nrwl/nx-devkit-reviewers
## Core
/docs/generated/cli/** @nrwl/nx-core-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/nx/** @nrwl/nx-core-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/workspace/** @nrwl/nx-core-reviewers @nrwl/nx-docs-reviewers
/packages/nx/** @nrwl/nx-core-reviewers
/packages/nx/src/adapter @nrwl/nx-core-reviewers @leosvelperez
/packages/nx/src/native @nrwl/nx-core-reviewers @nrwl/nx-native-reviewers
@@ -177,12 +136,18 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/e2e/nx*/** @nrwl/nx-core-reviewers
/packages/workspace/** @nrwl/nx-core-reviewers
/e2e/workspace-create/** @nrwl/nx-core-reviewers
/e2e/release/** @nrwl/nx-core-reviewers
/packages/create-nx-workspace/** @nrwl/nx-core-reviewers
/packages/nx/src/command-line/release/** @nrwl/nx-core-reviewers @Coly010
/packages/nx/src/plugins/js/** @nrwl/nx-core-reviewers @nrwl/nx-js-reviewers
/e2e/release/** @nrwl/nx-core-reviewers @Coly010
# .NET
/packages/dotnet/** @FrozenPandaz @AgentEnder
/e2e/dotnet/** @FrozenPandaz @AgentEnder
# Misc
/e2e/lerna-smoke-tests/** @vsavkin @JamesHenry
/e2e/utils/** @meeroslav @nrwl/nx-testing-tools-reviewers @vsavkin
/community @nrwl/nx-docs-reviewers
/CONTRIBUTING.md @FrozenPandaz
/CODE_OF_CONDUCT.md @FrozenPandaz
/CODEOWNERS @FrozenPandaz @AgentEnder
@@ -194,20 +159,20 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
# CI
/.nx/workflows/** @nrwl/nx-pipelines-reviewers
mise.toml @nrwl/nx-pipelines-reviewers @FrozenPandaz
/.github/** @nrwl/nx-pipelines-reviewers
/.husky/** @nrwl/nx-pipelines-reviewers
/packages/workspace/src/generators/ci-workflow/** @nrwl/nx-pipelines-reviewers
# Claude AI Integration
CLAUDE.md @FrozenPandaz
.claude/** @FrozenPandaz
.mcp.json @FrozenPandaz
# AI Agent Integration
CLAUDE.md @FrozenPandaz @Coly010
.claude/** @FrozenPandaz @Coly010
.mcp.json @FrozenPandaz @Coly010
AGENTS.md @FrozenPandaz @Coly010
.gemini @FrozenPandaz @Coly010
# Global Files
project.json @FrozenPandaz @vsavkin
jest.config.ts @nrwl/nx-testing-tools-reviewers @FrozenPandaz
jest.preset.js @nrwl/nx-testing-tools-reviewers @FrozenPandaz
# Overrides - These are applied last, so override any matches above.
docs/generated/manifests/* @nrwl/nrwlians
docs/generated/packages-metadata.json @FrozenPandaz @jaysoo @AgentEnder @nrwl/nx-docs-reviewers
+31 -34
View File
@@ -7,7 +7,7 @@ We would love for you to contribute to Nx! Read this document to see how to do i
Watch this 5-minute video:
<a href="https://www.youtube.com/watch?v=8LCA_4qxc08" target="_blank" rel="noreferrer">
<p style="text-align: center;"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/how-to-contribute.png" width="600" alt="Nx - How to contribute"></p>
<p style="text-align: center;"><img src="./images/how-to-contribute.png" width="600" alt="Nx - How to contribute"></p>
</a>
## Got a Question?
@@ -194,76 +194,73 @@ To build Nx on Windows, you need to use WSL.
## Documentation Contributions
We would love for you to contribute to our documentation as well! Please feel welcome to submit fixes or enhancements to
our existing documentation pages and the `nx-dev` application in this repo.
our existing documentation pages, `astro-docs` and the `nx-dev` application in this repo.
### Documentation Structure
#### Documentation Pages
Our documentation pages can be found within this repo under the `docs` directory.
Our documentation pages can be found within this repo under the `astro-docs/src/content/docs` directory.
The `docs/map.json` file is considered our source of truth for our site's structure, and should be updated when adding a
new page to our documentation to ensure that it is included in the documentation site. We also run automated scripts
based on this `map.json` data to safeguard against common human errors that could break our site.
Documentation is written in `.mdoc` (Markdoc) or `.mdx` (MDX) format and supports custom Markdoc tags for rich content
such as videos, graphs, interactive components, and more. See the `astro-docs/README.md` for a full list of available
custom tags and their usage.
When you make a change to the `map.json` file, make sure to run `pnpm documentation` to propagate your changes to the `nx-dev` application.
The sidebar structure is defined in `astro-docs/sidebar.mts` and should be updated when adding new sections or pages
to ensure proper navigation.
#### Astro-Docs Application
Our public `nx.dev/docs` documentation site is built with [Astro](https://astro.build) and [Starlight](https://starlight.astro.build),
and can be found in the `astro-docs` directory of this repo. See [docs README for more details](./astro-docs/README.md)
#### Nx-Dev Application
Our public `nx.dev` documentation site is a [Next.js](https://nextjs.org/) application, that can be found in
the `nx-dev` directory of this repo.
The documentation site is consuming the `docs/` directly by copy-ing its content while deploying, so the website is
always in sync and reflects the latest version of `docs/`.
The `nx-dev` directory contains a [Next.js](https://nextjs.org/) application used for blog posts and landing pages.
Jump to [Running the Documentation Site Locally](#running-the-documentation-site-locally) to see how to preview your
changes while serving.
### Changing Generated API documentation
`.md` files documenting the API for our CLI (including executor and generator API docs) are generated via the
corresponding `schema.json` file for the given command.
API documentation for CLI commands, executors, and generators is automatically generated during the build process from
the corresponding `schema.json` files in each package.
After adjusting the `schema.json` file, `.md` files for these commands can be generated by running:
The documentation is generated using content loaders in the `astro-docs` application and requires a rebuild to reflect
changes. After adjusting a `schema.json` file:
```bash
pnpm documentation
```
This will update the corresponding contents of the `docs` directory. These are generated automatically on push (via
husky) as well.
1. Restart the development server with `nx serve astro-docs` to see the changes
2. Or run `nx preview astro-docs` to view the built site locally
Note that adjusting the `schema.json` files will also affect the CLI manuals and Nx Console behavior, in addition to
adjusting the docs.
the generated documentation.
### Running the Documentation Site Locally
To run `nx-dev` locally, run the command:
To run the documentation site locally, run the command:
```bash
npx nx serve-docs nx-dev
```shell
nx serve astro-docs
```
You can then access the application locally at `localhost:4200`. Changes to markdown documentation files will be automatically applied to the site when you refresh the browser.
You can then access the application locally at `localhost:4321`. Changes to markdoc files should reflect automatically in the browser on save.
#### Troubleshooting: `JavaScript heap out of memory`
#### Working with Plugin Registry
If you see an error that states: `FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory`,
you need
to [increase the max memory size of V8's old memory section](https://nodejs.org/api/cli.html#--max-old-space-sizesize-in-megabytes):
To view plugin registry statistics (GitHub stars, npm downloads, etc.) during local development:
```bash
export NODE_OPTIONS="--max-old-space-size=4096"
NX_DOCS_PLUGIN_STATS=true nx serve astro-docs
```
After configuring this, try to run `npx nx serve nx-dev` again.
Note: Plugin stats are disabled by default in development to improve performance.
### PR Preview
When submitting a PR, this repo will automatically generate a preview of the `nx-dev` application based on the contents
When submitting a PR, this repo will automatically generate a preview of the documentation site based on the contents
of your pull request.
Once the preview site is launched, a comment will automatically be added to your PR with the link your PR's preview. To
check your docs changes, make sure to select `Preview` from the version selection box of the site.
Once the preview site is launched, a comment will automatically be added to your PR with the link to your PR's preview.
## Submission Guidelines
Generated
+149 -2
View File
@@ -115,6 +115,7 @@ dependencies = [
"parking_lot",
"percent-encoding",
"windows-sys 0.59.0",
"wl-clipboard-rs",
"x11rb",
]
@@ -395,7 +396,7 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
dependencies = [
"nom",
"nom 7.1.3",
]
[[package]]
@@ -914,6 +915,12 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "fixedbitset"
version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
[[package]]
name = "flate2"
version = "1.1.1"
@@ -2271,6 +2278,15 @@ dependencies = [
"minimal-lexical",
]
[[package]]
name = "nom"
version = "8.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
dependencies = [
"memchr",
]
[[package]]
name = "normalize-path"
version = "0.2.1"
@@ -2391,7 +2407,7 @@ dependencies = [
"napi-build",
"napi-derive",
"nix 0.30.0",
"nom",
"nom 7.1.3",
"once_cell",
"parking_lot",
"portable-pty",
@@ -2404,6 +2420,7 @@ dependencies = [
"rusqlite",
"serde",
"serde_json",
"static_assertions",
"swc_common",
"swc_ecma_ast",
"swc_ecma_dep_graph",
@@ -2524,6 +2541,16 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
[[package]]
name = "os_pipe"
version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967"
dependencies = [
"libc",
"windows-sys 0.45.0",
]
[[package]]
name = "overload"
version = "0.1.1"
@@ -2571,6 +2598,17 @@ version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "petgraph"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a98c6720655620a521dcc722d0ad66cd8afd5d86e34a89ef691c50b7b24de06"
dependencies = [
"fixedbitset",
"hashbrown 0.15.2",
"indexmap",
]
[[package]]
name = "phf_generator"
version = "0.10.0"
@@ -2780,6 +2818,15 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "quick-xml"
version = "0.37.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
dependencies = [
"memchr",
]
[[package]]
name = "quinn"
version = "0.11.5"
@@ -4200,6 +4247,17 @@ dependencies = [
"tracing-log",
]
[[package]]
name = "tree_magic_mini"
version = "3.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6"
dependencies = [
"memchr",
"nom 8.0.0",
"petgraph",
]
[[package]]
name = "triomphe"
version = "0.1.11"
@@ -4588,6 +4646,76 @@ dependencies = [
"watchexec-signals",
]
[[package]]
name = "wayland-backend"
version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35"
dependencies = [
"cc",
"downcast-rs",
"rustix 1.0.5",
"smallvec",
"wayland-sys",
]
[[package]]
name = "wayland-client"
version = "0.31.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
dependencies = [
"bitflags 2.9.0",
"rustix 1.0.5",
"wayland-backend",
"wayland-scanner",
]
[[package]]
name = "wayland-protocols"
version = "0.32.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
dependencies = [
"bitflags 2.9.0",
"wayland-backend",
"wayland-client",
"wayland-scanner",
]
[[package]]
name = "wayland-protocols-wlr"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec"
dependencies = [
"bitflags 2.9.0",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"wayland-scanner",
]
[[package]]
name = "wayland-scanner"
version = "0.31.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3"
dependencies = [
"proc-macro2",
"quick-xml",
"quote",
]
[[package]]
name = "wayland-sys"
version = "0.31.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142"
dependencies = [
"pkg-config",
]
[[package]]
name = "web-sys"
version = "0.3.77"
@@ -4990,6 +5118,25 @@ dependencies = [
"bitflags 2.9.0",
]
[[package]]
name = "wl-clipboard-rs"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a083daad7e8a4b8805ad73947ccadabe62afe37ce0e9787a56ff373d34762c7"
dependencies = [
"libc",
"log",
"os_pipe",
"rustix 0.38.38",
"tempfile",
"thiserror 1.0.58",
"tree_magic_mini",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"wayland-protocols-wlr",
]
[[package]]
name = "wyz"
version = "0.5.1"
+23 -18
View File
@@ -1,8 +1,8 @@
<p style="text-align: center;">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-dark.svg">
<img alt="Nx - Smart Repos · Fast Builds" src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-light.svg" width="100%">
</picture>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="./images/nx-dark.svg">
<img alt="Nx - Smart Repos · Fast Builds" src="./images/nx-light.svg" width="100%">
</picture>
</p>
<div style="text-align: center;">
@@ -10,7 +10,7 @@
[![CircleCI](https://circleci.com/gh/nrwl/nx.svg?style=svg)](https://circleci.com/gh/nrwl/nx)
[![License](https://img.shields.io/npm/l/nx.svg?style=flat-square)]()
[![NPM Version](https://badge.fury.io/js/nx.svg)](https://www.npmjs.com/package/nx)
[![Semantic Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)]()
[![Semantic Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic-release-e10079.svg?style=flat-square)]()
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![Join the chat at https://gitter.im/nrwl-nx/community](https://badges.gitter.im/nrwl-nx/community.svg)](https://gitter.im/nrwl-nx/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Join the Official Nx Discord Server](https://img.shields.io/discord/1143497901675401286?label=discord)](https://go.nx.dev/community)
@@ -21,7 +21,7 @@
# Smart Repos · Fast Builds
An AI-first build platform that connects everything from your editor to CI. Helping you deliver fast, without breaking things.
Get to green PRs in half the time. Nx optimizes your builds, scales your CI, and fixes failed PRs. Built for developers and AI agents.
Create a new Nx workspace with
@@ -47,7 +47,7 @@ Connect your existing Nx workspace with
npx nx connect
```
Learn more in the [Nx CI docs &raquo;](https://nx.dev/ci/intro?utm_source=nxrepo&utm_medium=readme&utm_campaign=nxrepo)
Learn more in the [Nx CI docs &raquo;](https://nx.dev/ci/getting-started/intro?utm_source=nxrepo&utm_medium=readme&utm_campaign=nxrepo)
## Useful links
@@ -67,7 +67,7 @@ our [guidelines for contributing](https://github.com/nrwl/nx/blob/master/CONTRIB
help you get started.
<a href="https://www.youtube.com/watch?v=8LCA_4qxc08" target="_blank" rel="noreferrer">
<p style="text-align: center;"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/how-to-contribute.png" width="600" alt="Nx - How to contribute video"></p>
<p style="text-align: center;"><img src="./images/how-to-contribute.png" width="600" alt="Nx - How to contribute video"></p>
</a>
## Core Team
@@ -77,22 +77,27 @@ help you get started.
| ![Victor Savkin](https://avatars1.githubusercontent.com/u/35996?s=160) | ![Jason Jean](https://avatars2.githubusercontent.com/u/8104246?s=160) | ![Benjamin Cabanes](https://avatars2.githubusercontent.com/u/3447705?s=160) | ![Jack Hsu](https://avatars0.githubusercontent.com/u/53559?s=160) |
| [vsavkin](https://github.com/vsavkin) | [FrozenPandaz](https://github.com/FrozenPandaz) | [bcabanes](https://github.com/bcabanes) | [jaysoo](https://github.com/jaysoo) |
| James Henry | Jon Cammisuli | Isaac Mann | Juri Strumpflohner |
| James Henry | Jon Cammisuli | Max Kless | Juri Strumpflohner |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| ![James Henry](https://avatars.githubusercontent.com/u/900523?s=160&v=4) | ![Jon Cammisuli](https://avatars2.githubusercontent.com/u/4332460?s=160) | ![Isaac Mann](https://avatars1.githubusercontent.com/u/861504?s=160) | ![Juri Strumpflohner](https://avatars1.githubusercontent.com/u/542458?s=160) |
| [JamesHenry](https://github.com/JamesHenry) | [cammisuli](https://github.com/cammisuli) | [isaacplmann](https://github.com/isaacplmann) | [juristr](https://github.com/juristr) |
| ![James Henry](https://avatars.githubusercontent.com/u/900523?s=160&v=4) | ![Jon Cammisuli](https://avatars2.githubusercontent.com/u/4332460?s=160) | ![Max Kless](https://avatars.githubusercontent.com/u/34165455?s=160) | ![Juri Strumpflohner](https://avatars1.githubusercontent.com/u/542458?s=160) |
| [JamesHenry](https://github.com/JamesHenry) | [cammisuli](https://github.com/cammisuli) | [MaxKless](https://github.com/MaxKless) | [juristr](https://github.com/juristr) |
| Philip Fulcher | Caleb Ukle | Colum Ferry | Emily Xiong |
| Philip Fulcher | Caleb Ukle | Colum Ferry | Steven Nance |
| ------------------------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| ![Philip Fulcher](https://avatars1.githubusercontent.com/u/1536471?s=160) | ![Caleb Ukle](https://avatars.githubusercontent.com/u/23272162?s=160) | ![Colum Ferry](https://avatars.githubusercontent.com/u/12140467?s=160) | ![Emily Xiong](https://avatars.githubusercontent.com/u/16211801?s=160) |
| [philipjfulcher](https://github.com/philipjfulcher) | [barbados-clemens](https://github.com/barbados-clemens) | [Coly010](https://github.com/Coly010) | [xiongemi](https://github.com/xiongemi) |
| ![Philip Fulcher](https://avatars1.githubusercontent.com/u/1536471?s=160) | ![Caleb Ukle](https://avatars.githubusercontent.com/u/23272162?s=160) | ![Colum Ferry](https://avatars.githubusercontent.com/u/12140467?s=160) | ![Steven Nance](https://avatars.githubusercontent.com/u/1036428?s=160) |
| [philipjfulcher](https://github.com/philipjfulcher) | [barbados-clemens](https://github.com/barbados-clemens) | [Coly010](https://github.com/Coly010) | [llwt](https://github.com/llwt) |
| Miroslav Jonaš | Leosvel Pérez Espinosa | Zachary DeRose | Craigory Coppola |
| ----------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------- |
| ![Miroslav Jonaš](https://avatars.githubusercontent.com/u/881612?s=160) | ![Leosvel Pérez Espinosa](https://avatars.githubusercontent.com/u/12051310?s=160) | ![Zachary DeRose](https://avatars.githubusercontent.com/u/3788405?s=160) | ![Craigory Coppola](https://avatars.githubusercontent.com/u/6933928?s=160) |
| [meeroslav](https://github.com/meeroslav) | [leosvelperez](https://github.com/leosvelperez) | [ZackDeRose](https://github.com/ZackDeRose) | [AgentEnder](https://github.com/AgentEnder) |
| Chau Tran | Nicholas Cunningham | Max Kless |
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| ![Chau Tran](https://avatars.githubusercontent.com/u/25516557?s=160) | ![Nicholas Cunningham](https://avatars.githubusercontent.com/u/338948?s=160) | ![Max Kless](https://avatars.githubusercontent.com/u/34165455?s=160) |
| [nartc](https://github.com/nartc) | [ndcunningham](https://github.com/ndcunningham) | [MaxKless](https://github.com/MaxKless) |
| Chau Tran | Nicole Oliver | Rares Matei | Altan Stalker |
| -------------------------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| ![Chau Tran](https://avatars.githubusercontent.com/u/25516557?s=160) | ![Nicole Oliver](https://avatars.githubusercontent.com/u/4440385?s=160) | ![Rares Matei](https://avatars.githubusercontent.com/u/5975076?s=160) | ![Altan Stalker](https://avatars.githubusercontent.com/u/6324206?s=160) |
| [nartc](https://github.com/nartc) | [nixallover](https://github.com/nixallover) | [rarmatei](https://github.com/rarmatei) | [StalkAltan](https://github.com/StalkAltan) |
| Josh VanAllen | Austin Fahsl | Louie Weng |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------- | --------------------------------------------------------------------- |
| ![Josh VanAllen](https://avatars.githubusercontent.com/u/5290334?s=160) | ![Austin Fahsl](https://avatars.githubusercontent.com/u/6913035?s=160) | ![Louie Weng](https://avatars.githubusercontent.com/u/56288712?s=160) |
| [joshvanallen](https://github.com/joshvanallen) | [fahslaj](https://github.com/fahslaj) | [lourw](https://github.com/lourw) |
+6
View File
@@ -0,0 +1,6 @@
node_modules/
dist/
.astro/
.netlify/
test-output/
playwright-report/
+28
View File
@@ -0,0 +1,28 @@
{
"extends": ["plugin:playwright/recommended", "../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["**/*.spec.ts", "**/*.test.ts", "**/*.spec.js", "**/*.test.js"],
"rules": {
"playwright/no-standalone-expect": "off"
}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
},
{
"files": ["e2e/**/*.{ts,js,tsx,jsx}"],
"rules": {}
}
]
}
+51 -4
View File
@@ -36,9 +36,9 @@ astro-docs/
│ │ ├── markdoc/ # Markdoc tag components
│ │ └── utils/ # Utility functions
│ ├── content/ # Documentation content
│ │ ├── banner.json # Banner collection (generated by prebuild-banner)
│ │ ├── docs/ # Main documentation files (.mdoc, .mdx)
│ │ ── approved-community-plugins.json # Powers plugin registry
│ │ └── notifications.json # Notifications banners for docs site
│ │ ── approved-community-plugins.json # Powers plugin registry
│ ├── pages/ # Dynamic pages and routes (e.g. devkit)
│ ├── plugins/ # Content loaders and plugins
│ │ ├── *.loader.ts # Dynamic content loaders (e.g. CLI commands and API docs generation)
@@ -66,13 +66,11 @@ The site uses custom content loaders to dynamically generate documentation:
### Content Types
1. **Regular Documentation** (`src/content/docs/`)
- Written in `.mdoc` (Markdoc) or `.mdx` (MDX) format
- Organized by sections: getting-started, concepts, guides, api
- File-based routing (filename = URL path)
2. **Dynamic Plugin Documentation**
- Auto-generated from Nx packages
- Includes generators, executors, and migrations
- Updated during build process
@@ -233,3 +231,52 @@ export const sidebar = [
- Navigation structure
- Section organization
- Dynamic content injection points
## Banner Configuration
The floating banner promotes events/webinars. It's fetched at **build time** from a Framer CMS page and stored as an Astro content collection.
### Setup
Set `BANNER_URL` to point to a Framer page that renders banner JSON:
```
BANNER_URL=https://your-framer-site.framer.app/api/banners/main
```
The Framer page should render JSON inside a `<pre>` tag:
```json
{
"title": "Event Title",
"description": "Event description",
"primaryCtaUrl": "https://...",
"primaryCtaText": "Learn More",
"secondaryCtaUrl": "",
"secondaryCtaText": "",
"enabled": true,
"activeUntil": "2025-12-31T00:00:00.000Z"
}
```
### Schema
| Field | Type | Required | Description |
| ------------------ | -------- | -------- | ------------------------- |
| `title` | string | Yes | Banner headline |
| `description` | string | Yes | Banner body text |
| `primaryCtaUrl` | string | Yes | Primary button URL |
| `primaryCtaText` | string | Yes | Primary button text |
| `secondaryCtaUrl` | string | No | Secondary button URL |
| `secondaryCtaText` | string | No | Secondary button text |
| `enabled` | boolean | Yes | Show/hide the banner |
| `activeUntil` | ISO 8601 | No | Auto-hide after this date |
### Behavior
- Banner is fetched during `prebuild-banner` target and saved to `src/content/banner.json` as a collection (array)
- Uses Astro content collection with `file()` loader and schema validation
- Requires rebuild/redeploy to update the banner
- Users can dismiss the banner (stored in localStorage)
- If `enabled` is `false` or `activeUntil` has passed, the banner won't show
- If `BANNER_URL` is not set, an empty collection is generated
+72 -4
View File
@@ -7,11 +7,22 @@ import markdoc from '@astrojs/markdoc';
import tailwindcss from '@tailwindcss/vite';
import { sidebar } from './sidebar.mts';
const BASE = '/docs';
// This is exposed as window.__CONFIG
const PUBLIC_CONFIG = {
cookiebotDisabled: process.env.COOKIEBOT_DISABLED === 'true',
cookiebotId: process.env.COOKIEBOT_ID ?? null,
gaMeasurementId: 'UA-88380372-10',
gtmMeasurementId: 'GTM-KW8423B6',
isProd: process.env.NODE_ENV === 'production',
};
// https://astro.build/config
export default defineConfig({
base: '/docs',
base: BASE,
vite: { plugins: [tailwindcss()] },
// Allow this to be configured per environment
// Allow this to be configured per environment for robots.txt detection
// Note: this happens during build time so we don't use `import.meta.env`
site: process.env.NX_DEV_URL ?? 'https://nx.dev',
image: {
@@ -31,7 +42,7 @@ export default defineConfig({
starlight({
title: 'Nx',
tagline:
'An AI-first build platform that connects everything from your editor to CI. Helping you deliver fast, without breaking things.',
'Get to green PRs in half the time. Nx optimizes your builds, scales your CI, and fixes failed PRs. Built for developers and AI agents.',
customCss: ['./src/styles/global.css'],
favicon: '/favicon.svg',
logo: {
@@ -39,14 +50,48 @@ export default defineConfig({
dark: './src/assets/nx/Nx-light.png',
replacesTitle: true,
},
disable404Route: true,
head: [
{
tag: 'script',
content: `window.__CONFIG = ${JSON.stringify(PUBLIC_CONFIG)};`,
},
...(process.env.COOKIEBOT_ID &&
process.env.COOKIEBOT_DISABLED !== 'true'
? [
{
/** @type {"script"} */
tag: 'script',
attrs: {
id: 'Cookiebot',
src: 'https://consent.cookiebot.com/uc.js',
'data-cbid': process.env.COOKIEBOT_ID,
'data-blockingmode': 'auto',
type: 'text/javascript',
},
},
]
: []),
{
tag: 'script',
attrs: {
src: `${BASE}/global-scripts.js`,
defer: true,
},
},
],
plugins: [],
routeMiddleware: [
'./src/plugins/banner.middleware.ts',
// NOTE: this is responsibile for populating the Reference section
// with generated routes from the nx-reference-packages content collection
// since the sidebar doesn't auto generate w/ dynamic routes from src/pages/reference
// only the src/content/docs/reference files
'./src/plugins/sidebar-reference-updater.middleware.ts',
'./src/plugins/sidebar-icons.middleware.ts',
'./src/plugins/og.middleware.ts',
'./src/plugins/github-stars.middleware.ts',
'./src/plugins/raw-content.middleware.ts',
'./src/plugins/canonical.middleware.ts',
],
markdown: {
// this breaks the renderMarkdown function in the plugin loader due to starlight path normalization
@@ -83,6 +128,29 @@ export default defineConfig({
Sidebar: './src/components/layout/Sidebar.astro',
TwoColumnContent: './src/components/layout/TwoColumnContent.astro',
PageTitle: './src/components/layout/PageTitle.astro',
TableOfContents: './src/components/layout/TableOfContents.astro',
},
pagefind: {
ranking: {
// termFrequency changes the ranking balance between
// frequency of the term relative to document length
// versus weighted term count.
// default is 1.0
termFrequency: 0.75,
// pageLength changes the way ranking compares page lengths with the average page lengths on your site.
// default 0.75
pageLength: 0.5,
// termSaturation controls how quickly a term “saturates” on a page.
// Once a term has appeared on a page many times,
// further appearances have a reduced impact on the page rank.
// default: 1.4
// termSaturation: 1.4,
// termSimilarity changes the ranking based on
// similarity of terms to the search query.
// Currently this only takes the length of the term into account.
// default is 1.0
// termSimilarity: 1.0,
},
},
}),
react(),
@@ -0,0 +1,45 @@
import { test, expect } from '@playwright/test';
test('links in descriptions of properties should correctly link to the same page w/ url fragments', async ({
page,
}) => {
await page.goto('/docs/reference/devkit/NxJsonConfiguration');
await expect(
page.getByRole('heading', { name: 'NxJsonConfiguration' })
).toBeVisible();
await page
.getByTestId('main-pane')
.getByRole('link', { name: 'nxCloudAccessToken' })
.click();
await expect(
page.getByRole('heading', { name: 'nxCloudAccessToken' })
).toBeVisible();
const description = page
.getByRole('paragraph')
.filter({ has: page.getByRole('link', { name: 'tasksRunnerOptions' }) })
.first();
await expect(description).toBeVisible();
const linkedProperty = description.getByRole('link', {
name: 'tasksRunnerOptions',
});
await expect(linkedProperty).toBeVisible();
await expect(linkedProperty).toHaveAttribute(
'href',
'/docs/reference/devkit/NxJsonConfiguration#tasksrunneroptions'
);
await linkedProperty.click();
expect(page.url()).toContain('#tasksrunneroptions');
await expect(
page.getByRole('heading', { name: 'tasksRunnerOptions' })
).toBeVisible();
});
+71
View File
@@ -0,0 +1,71 @@
import { test, expect } from '@playwright/test';
test('should apply system theme by default', async ({ page }) => {
await page.goto('/docs/getting-started/intro');
await expect(
page.getByRole('heading', { name: 'What is Nx?' })
).toBeVisible();
const themeSelector = page.getByRole('combobox', {
name: /theme/i,
});
await expect(themeSelector).toBeVisible();
await expect(themeSelector).toHaveValue('auto');
const dataTheme = await page.evaluate(
() => document.documentElement.dataset.theme
);
// The data-theme should be either 'light' or 'dark' based on system preference
// It won't be 'auto' on the document element
expect(['light', 'dark']).toContain(dataTheme);
});
test('should switch to between light and dark theme', async ({ page }) => {
await page.goto('/docs/getting-started/intro');
await expect(
page.getByRole('heading', { name: 'What is Nx?' })
).toBeVisible();
const themeSelector = page.getByRole('combobox', {
name: /theme/i,
});
await test.step('light theme renders', async () => {
await expect(themeSelector).toBeVisible();
await themeSelector.selectOption('light');
await expect(themeSelector).toHaveValue('light');
const dataTheme = await page.evaluate(
() => document.documentElement.dataset.theme
);
expect(dataTheme).toBe('light');
});
await test.step('dark theme renders', async () => {
await themeSelector.selectOption('dark');
await expect(themeSelector).toHaveValue('dark');
const dataTheme = await page.evaluate(
() => document.documentElement.dataset.theme
);
expect(dataTheme).toBe('dark');
});
await test.step('switch back to auto', async () => {
await themeSelector.selectOption('auto');
await expect(themeSelector).toHaveValue('auto');
const dataTheme = await page.evaluate(
() => document.documentElement.dataset.theme
);
expect(['light', 'dark']).toContain(dataTheme);
});
});
+35
View File
@@ -0,0 +1,35 @@
const url = 'http://localhost:4321/docs';
const timeout = 120000; // 2 minutes in milliseconds
console.log('starting up....');
export default async function globalSetup() {
const startTime = Date.now();
const maxEndTime = startTime + timeout;
console.log(`Waiting for ${url} to be available...`);
while (Date.now() < maxEndTime) {
try {
const response = await fetch(url);
if (response.ok) {
console.log(`✓ Server is ready at ${url}`);
return;
}
console.log(
`Server responded with status ${response.status}, retrying...`
);
} catch (error) {
// Server not available yet, continue polling
const remainingTime = Math.round((maxEndTime - Date.now()) / 1000);
if (remainingTime % 10 === 0 && remainingTime > 0) {
console.log(`Still waiting... ${remainingTime} seconds remaining`);
}
}
await new Promise((resolve) => setTimeout(resolve, 1000));
}
throw new Error(
`Server at ${url} did not become available within ${timeout / 1000} seconds`
);
}
+48 -12
View File
@@ -1,4 +1,8 @@
import { defineMarkdocConfig, component } from '@astrojs/markdoc/config';
import {
defineMarkdocConfig,
component,
Markdoc,
} from '@astrojs/markdoc/config';
import starlightMarkdoc from '@astrojs/starlight-markdoc';
export default defineMarkdocConfig({
@@ -27,7 +31,13 @@ export default defineMarkdocConfig({
type: 'String',
required: false,
default: 'default',
matches: ['default', 'gradient', 'inverted', 'gradient-alt'],
matches: [
'default',
'gradient',
'inverted',
'gradient-alt',
'simple',
],
},
size: {
type: 'String',
@@ -137,7 +147,6 @@ export default defineMarkdocConfig({
},
graph: {
render: component('./src/components/markdoc/Graph.astro'),
children: [],
attributes: {
jsonFile: {
type: 'String',
@@ -155,6 +164,24 @@ export default defineMarkdocConfig({
required: true,
},
},
transform(node, config) {
const attributes = node.transformAttributes(config);
let rawContent = null;
for (const child of node.children) {
if (child.type === 'fence') {
rawContent = child.attributes.content;
break;
}
}
return new Markdoc.Tag(
this.render,
{
...attributes,
astroRawData: rawContent,
},
[]
);
},
},
iframe: {
render: component('./src/components/markdoc/Iframe.astro'),
@@ -278,6 +305,24 @@ export default defineMarkdocConfig({
type: 'Array',
},
},
transform(node, config) {
const attributes = node.transformAttributes(config);
let rawContent = null;
for (const child of node.children) {
if (child.type === 'fence') {
rawContent = child.attributes.content;
break;
}
}
return new Markdoc.Tag(
this.render,
{
...attributes,
astroRawData: rawContent,
},
[]
);
},
},
stackblitz_button: {
render: component('./src/components/markdoc/StackblitzButton.astro'),
@@ -378,14 +423,5 @@ export default defineMarkdocConfig({
},
},
},
side_by_side: {
render: component('./src/components/markdoc/SideBySide.astro'),
attributes: {
align: {
type: 'String',
default: 'center',
},
},
},
},
});
+6
View File
@@ -1,4 +1,10 @@
# Permanent redirects (301 by default)
# Storybook docs consolidation
[[redirects]]
from = "/docs/technologies/test-tools/storybook/guides/storybook-9-setup"
to = "/docs/technologies/test-tools/storybook/guides/upgrading-storybook"
[[redirects]]
from = "/"
to = "/docs/getting-started/intro"
+5
View File
@@ -10,11 +10,16 @@
"@astrojs/starlight": "0.34.6",
"@astrojs/starlight-markdoc": "^0.4.0",
"@astrojs/starlight-tailwind": "^4.0.1",
"@nx/nx-dev-feature-analytics": "workspace:*",
"@nx/nx-dev-ui-animations": "workspace:*",
"@nx/nx-dev-ui-common": "workspace:*",
"@nx/nx-dev-ui-icons": "workspace:*",
"@nx/nx-dev-ui-markdoc": "workspace:*",
"@tailwindcss/vite": "^4.1.11",
"astro": "^5.10.1",
"astro-og-canvas": "^0.7.0",
"canvaskit-wasm": "^0.40.0",
"octokit": "^2.0.14",
"tailwindcss": "4.1.11"
}
}
+42
View File
@@ -0,0 +1,42 @@
import { defineConfig, devices } from '@playwright/test';
import { nxE2EPreset } from '@nx/playwright/preset';
import { workspaceRoot } from '@nx/devkit';
import { join } from 'path';
// For CI, you may want to set BASE_URL to the deployed application.
const baseURL = process.env['BASE_URL'] || 'http://localhost:4321';
const reportDir = join(
workspaceRoot,
'dist',
'astro-docs',
'playwright-report'
);
export default defineConfig({
...nxE2EPreset(__filename, { testDir: './e2e' }),
reporter: [
['list', { printSteps: true }],
['html', { outputFolder: reportDir, open: 'never' }],
[
'junit',
{
// JUnit only respects the outputFile option, and not outputDir or outputFolder
outputFile: `${reportDir}/test-e2e-nx-cloud.xml`,
},
],
],
/* Global setup to wait for server */
globalSetup: require.resolve('./global-setup.e2e.ts'),
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
baseURL,
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
],
});
+48 -5
View File
@@ -3,11 +3,24 @@
"$schema": "../node_modules/nx/schemas/project-schema.json",
"comment": "package.json#scripts runs in the project root directory with astro assumes is where the node_modules is. which fails. so run the scripts in project.json#targets with --root command instead",
"targets": {
"prebuild-banner": {
"cache": false,
"outputs": ["{projectRoot}/src/content/banner.json"],
"command": "node ../scripts/documentation/prebuild-banner.mjs",
"options": {
"cwd": "astro-docs",
"env": {
"BANNER_OUTPUT_PATH": "src/content/banner.json",
"BANNER_ENV_VAR": "BANNER_URL"
}
}
},
"serve": {
"continuous": true,
"dependsOn": [
"prebuild-banner",
{
"projects": ["devkit", "create-nx-workspace"],
"projects": ["devkit", "create-nx-workspace", "dotnet", "maven"],
"target": "build"
}
],
@@ -18,11 +31,18 @@
},
"build": {
"dependsOn": [
"prebuild-banner",
{
"projects": ["devkit", "create-nx-workspace"],
"projects": ["devkit", "create-nx-workspace", "dotnet", "maven"],
"target": "build"
}
],
"inputs": [
"production",
"^production",
"{projectRoot}/src/content/banner.json",
{ "env": "NX_DEV_URL" }
],
"outputs": [
"{projectRoot}/dist",
"{projectRoot}/.astro",
@@ -48,11 +68,26 @@
}
},
"test": {
"dependsOn": ["validate-links"],
"command": "echo done"
"executor": "nx:noop",
"dependsOn": ["vite:test", "validate-links", "format"]
},
"pw-e2e": {
"dependsOn": ["serve"],
"parallelism": true
},
"e2e-ci--**/*": {
"dependsOn": ["preview"],
"parallelism": true,
"options": {
"args": []
}
},
"show-report": {
"command": "playwright show-report dist/astro-docs/playwright-report"
},
"validate-links": {
"dependsOn": ["build"],
"cache": true,
"inputs": [
"{projectRoot}/src/**/*",
"{projectRoot}/astro.config.mjs",
@@ -61,10 +96,18 @@
"{projectRoot}/tsconfig.json",
"{projectRoot}/package.json"
],
"command": "npx tsx validate-links.ts",
"command": "tsx validate-links.ts",
"options": {
"cwd": "astro-docs"
}
},
"format": {
"cache": true,
"//": "nx format doesn't respect overrides, so we manually run prettier for mdoc files",
"command": "prettier **/*.mdoc --check"
},
"format:write": {
"command": "prettier **/*.mdoc --write"
}
}
}
+259
View File
@@ -0,0 +1,259 @@
(function () {
// Open search modal if signaled via sessionStorage (e.g., from Cmd+K on non-docs pages)
var SEARCH_STORAGE_KEY = 'nx-open-search';
var SEARCH_EXPIRY_MS = 30000; // 30 seconds
function openSearchFromStorage() {
var timestamp = sessionStorage.getItem(SEARCH_STORAGE_KEY);
if (!timestamp) return;
// Clear immediately to prevent re-triggering
sessionStorage.removeItem(SEARCH_STORAGE_KEY);
// Check if expired (older than 30 seconds)
var age = Date.now() - parseInt(timestamp, 10);
if (age > SEARCH_EXPIRY_MS) return;
var openSearchBtn = document.querySelector('button[data-open-modal]');
if (openSearchBtn) {
openSearchBtn.click();
// Focus the search input after modal opens
setTimeout(function () {
var searchInput = document.querySelector('dialog[open] input');
if (searchInput) {
searchInput.focus();
}
}, 100);
}
}
// Check on load
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', openSearchFromStorage);
} else {
// Small delay to ensure search component is initialized
setTimeout(openSearchFromStorage, 100);
}
const config = window.__CONFIG || {};
if (!config.isProd) return;
const isCookiebotDisabled = config.cookiebotDisabled ?? false;
const gaMeasurementId = config.gaMeasurementId ?? 'UA-88380372-10';
const gtmMeasurementId = config.gtmMeasurementId ?? 'GTM-KW8423B6';
// Initialize global objects
window.Cookiebot = window.Cookiebot || {};
window.dataLayer = window.dataLayer || [];
window.gtag =
window.gtag ||
function () {
window.dataLayer.push(arguments);
};
const loadGoogleAnalytics = () => {
const script = document.createElement('script');
script.src = `https://www.googletagmanager.com/gtag/js?id=${gaMeasurementId}`;
script.async = true;
document.head.appendChild(script);
// Initialize gtag
window.gtag('js', new Date());
window.gtag('config', gaMeasurementId, {
page_path: window.location.pathname,
});
};
const loadGTM = () => {
if (!gtmMeasurementId) return;
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', gtmMeasurementId);
};
const loadHubSpot = () => {
const hsScript = document.createElement('script');
hsScript.src = 'https://js.hs-scripts.com/2757427.js';
hsScript.async = true;
hsScript.defer = true;
document.head.appendChild(hsScript);
// Load HubSpot Forms
const hsFormsScript = document.createElement('script');
hsFormsScript.src = '//js.hsforms.net/forms/v2.js';
hsFormsScript.async = true;
hsFormsScript.defer = true;
document.head.appendChild(hsFormsScript);
};
const loadApollo = () => {
const n = Math.random().toString(36).substring(7);
const script = document.createElement('script');
script.src = `https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache=${n}`;
script.async = true;
script.defer = true;
script.onload = function () {
if (window.trackingFunctions?.onLoad) {
window.trackingFunctions.onLoad({
appId: '65e1db2f1976f30300fd8b26',
});
}
};
document.head.appendChild(script);
};
const loadHotjar = () => {
(function (h, o, t, j, a, r) {
h.hj =
h.hj ||
function () {
(h.hj.q = h.hj.q || []).push(arguments);
};
h._hjSettings = { hjid: 2774127, hjsv: 6 };
a = o.getElementsByTagName('head')[0];
r = o.createElement('script');
r.async = 1;
r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;
a.appendChild(r);
})(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv=');
};
const loadTwitterPixel = () => {
!(function (e, t, n, s, u, a) {
e.twq ||
((s = e.twq =
function () {
s.exe ? s.exe.apply(s, arguments) : s.queue.push(arguments);
}),
(s.version = '1.1'),
(s.queue = []),
(u = t.createElement(n)),
(u.async = !0),
(u.src = 'https://static.ads-twitter.com/uwt.js'),
(a = t.getElementsByTagName(n)[0]),
a.parentNode.insertBefore(u, a));
})(window, document, 'script');
window.twq('config', 'obtp4');
};
const SEARCH_DEBOUNCE_MS = 1000;
let searchDebounceTimer;
let lastSearchQuery = '';
let currentSearchInput = null;
let inputHandler = null;
function sendSearchEvent(eventType, data) {
if (typeof window.gtag !== 'undefined')
window.gtag('event', eventType, data);
}
function trackSearchQuery(query) {
if (!query || query === lastSearchQuery) return;
clearTimeout(searchDebounceTimer);
searchDebounceTimer = setTimeout(() => {
lastSearchQuery = query;
sendSearchEvent('search_query', {
query: query,
});
}, SEARCH_DEBOUNCE_MS);
}
function setupSearchTracking() {
const observer = new MutationObserver(() => {
const searchDialog = document.querySelector(
'dialog[open] .search-container'
);
// If dialog is found, then set up tracking
if (searchDialog) {
if (currentSearchInput && inputHandler) return; // Already tracking
const searchInput = searchDialog.querySelector(
'input[type="search"], input[type="text"]'
);
if (searchInput) {
inputHandler = (e) => {
const query = e.target.value.trim();
trackSearchQuery(query);
};
searchInput.addEventListener('input', inputHandler);
currentSearchInput = searchInput;
}
}
// If dialog is not found but we have handler, etc. then it must be closed and we should clean up
else if (currentSearchInput && inputHandler) {
currentSearchInput.removeEventListener('input', inputHandler);
currentSearchInput = null;
inputHandler = null;
}
});
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['open'],
});
}
const checkAndLoadScripts = () => {
if (isCookiebotDisabled) {
loadGoogleAnalytics();
loadGTM();
loadHubSpot();
setupSearchTracking();
} else if (window.Cookiebot && window.Cookiebot.consent) {
// Statistics cookies (Google Analytics, GTM, Search Tracking)
if (window.Cookiebot.consent.statistics) {
loadGoogleAnalytics();
loadGTM();
setupSearchTracking();
}
// Marketing cookies (HubSpot, Apollo, Hotjar, Twitter)
if (window.Cookiebot.consent.marketing) {
loadHubSpot();
loadApollo();
loadHotjar();
loadTwitterPixel();
}
} else {
// Wait for Cookiebot to load
setTimeout(checkAndLoadScripts, 100);
}
};
// Add GTM noscript iframe to body
const addGTMNoScript = () => {
const noscript = document.createElement('noscript');
const iframe = document.createElement('iframe');
iframe.src = `https://www.googletagmanager.com/ns.html?id=${gtmMeasurementId}`;
iframe.height = '0';
iframe.width = '0';
iframe.style.display = 'none';
iframe.style.visibility = 'hidden';
iframe.title = 'Google Tag Manager';
noscript.appendChild(iframe);
document.body.insertBefore(noscript, document.body.firstChild);
};
// Listen for user consent to cookies
window.addEventListener('CookiebotOnAccept', checkAndLoadScripts);
// Initial check
checkAndLoadScripts();
// Add GTM noscript on DOM ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', addGTMNoScript);
} else {
addGTMNoScript();
}
})();
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Angular</title><path d="M16.712 17.711H7.288l-1.204 2.916L12 24l5.916-3.373-1.204-2.916ZM14.692 0l7.832 16.855.814-12.856L14.692 0ZM9.308 0 .662 3.999l.814 12.856L9.308 0Zm-.405 13.93h6.198L12 6.396 8.903 13.93Z"/></svg>

After

Width:  |  Height:  |  Size: 299 B

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
<path stroke-linecap="round" stroke-linejoin="round" d="m21 7.5-9-5.25L3 7.5m18 0-9 5.25m9-5.25v9l-9 5.25M3 7.5l9 5.25M3 7.5v9l9 5.25m0-9v9" />
</svg>

After

Width:  |  Height:  |  Size: 284 B

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>C#</title><path d="M1.194 7.543v8.913c0 1.103.588 2.122 1.544 2.674l7.718 4.456a3.086 3.086 0 0 0 3.088 0l7.718-4.456a3.087 3.087 0 0 0 1.544-2.674V7.543a3.084 3.084 0 0 0-1.544-2.673L13.544.414a3.086 3.086 0 0 0-3.088 0L2.738 4.87a3.085 3.085 0 0 0-1.544 2.673Zm5.403 2.914v3.087a.77.77 0 0 0 .772.772.773.773 0 0 0 .772-.772.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546 2.314 2.314 0 1 1-4.631 0v-3.087c0-.615.244-1.203.679-1.637a2.312 2.312 0 0 1 3.274 0c.434.434.678 1.023.678 1.637a.769.769 0 0 1-.226.545.767.767 0 0 1-1.091 0 .77.77 0 0 1-.226-.545.77.77 0 0 0-.772-.772.771.771 0 0 0-.772.772Zm12.35 3.087a.77.77 0 0 1-.772.772h-.772v.772a.773.773 0 0 1-1.544 0v-.772h-1.544v.772a.773.773 0 0 1-1.317.546.775.775 0 0 1-.226-.546v-.772H12a.771.771 0 1 1 0-1.544h.772v-1.543H12a.77.77 0 1 1 0-1.544h.772v-.772a.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546v.772h1.544v-.772a.773.773 0 0 1 1.544 0v.772h.772a.772.772 0 0 1 0 1.544h-.772v1.543h.772a.776.776 0 0 1 .772.772Zm-3.088-2.315h-1.544v1.543h1.544v-1.543Z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>.NET</title><path d="M24 8.77h-2.468v7.565h-1.425V8.77h-2.462V7.53H24zm-6.852 7.565h-4.821V7.53h4.63v1.24h-3.205v2.494h2.953v1.234h-2.953v2.604h3.396zm-6.708 0H8.882L4.78 9.863a2.896 2.896 0 0 1-.258-.51h-.036c.032.189.048.592.048 1.21v5.772H3.157V7.53h1.659l3.965 6.32c.167.261.275.442.323.54h.024c-.04-.233-.06-.629-.06-1.185V7.529h1.372zm-8.703-.693a.868.829 0 0 1-.869.829.868.829 0 0 1-.868-.83.868.829 0 0 1 .868-.828.868.829 0 0 1 .869.829Z"/></svg>

After

Width:  |  Height:  |  Size: 534 B

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>ESLint</title><path d="M7.257 9.132L11.816 6.5a.369.369 0 0 1 .368 0l4.559 2.632a.369.369 0 0 1 .184.32v5.263a.37.37 0 0 1-.184.319l-4.559 2.632a.369.369 0 0 1-.368 0l-4.559-2.632a.369.369 0 0 1-.184-.32V9.452a.37.37 0 0 1 .184-.32M23.852 11.53l-5.446-9.475c-.198-.343-.564-.596-.96-.596H6.555c-.396 0-.762.253-.96.596L.149 11.509a1.127 1.127 0 0 0 0 1.117l5.447 9.398c.197.342.563.517.959.517h10.893c.395 0 .76-.17.959-.512l5.446-9.413a1.069 1.069 0 0 0 0-1.086m-4.51 4.556a.4.4 0 0 1-.204.338L12.2 20.426a.395.395 0 0 1-.392 0l-6.943-4.002a.4.4 0 0 1-.205-.338V8.08c0-.14.083-.269.204-.338L11.8 3.74c.12-.07.272-.07.392 0l6.943 4.003a.4.4 0 0 1 .206.338z"/></svg>

After

Width:  |  Height:  |  Size: 743 B

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>F#</title><path d="M0 12 11.39.61v5.695L5.695 12l5.695 5.695v5.695L0 12zm7.322 0 4.068-4.068v8.136L7.322 12zM24 12 12.203.61v5.695L17.898 12l-5.695 5.695v5.695L24 12z"/></svg>

After

Width:  |  Height:  |  Size: 253 B

+1
View File
@@ -0,0 +1 @@
<svg fill="#000000" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M 16.921875 2.25 C 16.71679725 2.26171875 16.4970705 2.3408205 16.2890625 2.5078125 C 15.40722675 3.2138669999999996 15.541992 3.5771482499999996 15.1171875 4.4296875 C 14.973633 4.9248045 14.736328499999999 4.962891 14.53125 4.5234375 C 14.28515625 4.08691425 14.16503925 3.5419919999999996 13.78125 3.2109375 C 13.16308575 2.67773475 12.4658205 3.0791017500000004 12.84375 3.6796875 C 13.2216795 4.28027325 13.376953499999999 4.91308575 13.5234375 5.90625 C 13.74316425 7.3857420000000005 13.125 9.03222675 12.3046875 9.8203125 C 10.822266 6.7880857500000005 8.885742 4.53808575 7.5234375 3.84375 C 7.1103517499999995 3.6328125 6.984375 3.80859375 6.984375 4.0078125 C 7.2421875 6.978516000000001 7.3359375 9.02929725 7.171875 10.546875 C 7.0986329999999995 11.2265625 5.49609375 13.734375 5.578125 14.3203125 C 5.66015625 14.9033205 6.12890625 15.817383 6.4453125 16.2890625 C 6.31640625 16.1953125 5.99121075 16.4091795 6.0703125 16.7109375 C 5.49902325 17.03027325 5.551758 17.51953125 6.140625 17.6484375 C 6.29296875 18.0439455 6.3251954999999995 18.24023475 6.75 18.421875 C 6.66796875 19.25683575 6.580078500000001 20.11523475 6.4921875 21.046875 C 6.873047250000001 22.921875 9.776367 19.67871075 10.1484375 19.40625 C 12.161133 17.9296875 12.46875 21.15234375 13.875 21.65625 C 16.2421875 22.5029295 15.474609749999999 17.52246075 13.5703125 12.6328125 C 13.34472675 9.489258 14.40234375 8.59277325 15.421875 8.1796875 C 15.958008 8.00390625 16.3564455 7.96875 17.0859375 8.1796875 C 18.33984375 8.54003925 18.60058575 7.11328125 17.484375 6.9375 C 17.0595705 6.8701170000000005 16.7519535 6.8759767499999995 16.359375 6.703125 C 16.5175785 6.0732420000000005 17.14453125 6.041016000000001 17.765625 5.953125 C 19.17773475 5.75390625 19.0546875 4.23046875 17.484375 4.59375 C 16.7988285 4.754883 16.49121075 5.16210975 16.2421875 5.15625 C 16.56152325 4.573242 17.10058575 4.072266 17.625 3.328125 C 18.0175785 2.7685545 17.5341795 2.21484375 16.921875 2.25 Z M 9.6328125 7.734375 C 9.817383 7.7109375 9.978516 7.72265625 10.1484375 7.78125 C 10.8251955 8.009766 11.05371075 8.87109375 10.640625 9.6796875 C 10.22753925 10.48828125 9.3251955 10.9394535 8.6484375 10.7109375 C 7.9716795000000005 10.48242225 7.7666017499999995 9.64453125 8.1796875 8.8359375 C 8.49023475 8.229492 9.07910175 7.8076170000000005 9.6328125 7.734375 Z M 8.90625 8.8359375 C 8.80371075 8.838867 8.698242 8.89746075 8.6015625 9 C 8.4082035 9.208008 8.34375 9.55078125 8.4609375 9.75 C 8.5810545 9.94921875 8.8300785 9.9345705 9.0234375 9.7265625 C 9.21679725 9.5185545 9.2841795 9.17578125 9.1640625 8.9765625 C 9.10546875 8.8769535 9.00878925 8.833008 8.90625 8.8359375 Z M 11.390625 10.7578125 C 12.521484749999999 12.919922249999999 13.587890999999999 15.48046875 13.8046875 18.3984375 C 13.90722675 19.78710975 12.791015999999999 18.28710975 12.65625 18.046875 C 10.359375 13.91015625 7.4091795000000005 22.40625 7.9921875 17.0859375 C 8.2939455 14.89453125 8.4404295 14.604492 8.5078125 12.046875 C 8.5078125 12.046875 10.265625 12.963867 11.390625 10.7578125 Z M 7.21875 13.2890625 C 7.1630857500000005 14.0126955 7.1484375 14.490234749999999 7.078125 15.234375 C 6.9228517499999995 14.830078499999999 6.7177732500000005 14.7890625 6.609375 14.4140625 C 6.8349607500000005 14.16796875 6.990234750000001 13.6875 7.21875 13.2890625 Z"/></svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

@@ -0,0 +1,18 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1244_718)">
<path d="M9.35205 3.72154V7.35041L12.0002 8.93803M9.35205 3.72154L12.0002 2.13391L14.6483 3.72154M9.35205 3.72154L12.0002 5.08236M12.0002 8.93803L14.6483 7.35041V3.72154M12.0002 8.93803V5.08236M14.6483 3.72154L12.0002 5.08236" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M8.3335 3.26804L12.0002 1L15.6668 3.26804V7.80412L12.0002 10.0722L8.3335 7.80412V3.26804Z" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M2.01855 15.2888V18.9177L4.6667 20.5053M2.01855 15.2888L4.6667 13.7012L7.31485 15.2888M2.01855 15.2888L4.6667 16.8764M4.6667 20.5053L7.31485 18.9177V15.2888M4.6667 20.5053V16.8764M7.31485 15.2888L4.6667 16.8764" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M1 14.8349L4.66667 12.5669L8.33333 14.8349V19.371L4.66667 21.6391L1 19.371V14.8349Z" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M16.6855 15.2888V18.9177L19.3337 20.5053M16.6855 15.2888L19.3337 13.7012L21.9818 15.2888M16.6855 15.2888L19.3337 16.6496M19.3337 20.5053L21.9818 18.9177V15.2888M19.3337 20.5053V16.6496M21.9818 15.2888L19.3337 16.6496" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M15.6665 14.8349L19.3332 12.5669L22.9998 14.8349V19.371L19.3332 21.6391L15.6665 19.371V14.8349Z" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M8.33317 6.89685L4.6665 9.16489V12.567" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M15.6668 6.89685L19.3335 9.16489V12.567" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M7.51855 19.8248L12 23.0001L16.4815 19.8248" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_1244_718">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Node.js</title><path d="M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383 c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076 c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0 L3.075,6.68C2.99,6.729,2.936,6.825,2.936,6.921v10.15c0,0.097,0.054,0.189,0.139,0.235l2.409,1.392 c1.307,0.654,2.108-0.116,2.108-0.89V7.787c0-0.142,0.114-0.253,0.256-0.253h1.115c0.139,0,0.255,0.112,0.255,0.253v10.021 c0,1.745-0.95,2.745-2.604,2.745c-0.508,0-0.909,0-2.026-0.551L2.28,18.675c-0.57-0.329-0.922-0.945-0.922-1.604V6.921 c0-0.659,0.353-1.275,0.922-1.603l8.795-5.082c0.557-0.315,1.296-0.315,1.848,0l8.794,5.082c0.57,0.329,0.924,0.944,0.924,1.603 v10.15c0,0.659-0.354,1.273-0.924,1.604l-8.794,5.078C12.643,23.916,12.324,24,11.998,24z M19.099,13.993 c0-1.9-1.284-2.406-3.987-2.763c-2.731-0.361-3.009-0.548-3.009-1.187c0-0.528,0.235-1.233,2.258-1.233 c1.807,0,2.473,0.389,2.747,1.607c0.024,0.115,0.129,0.199,0.247,0.199h1.141c0.071,0,0.138-0.031,0.186-0.081 c0.048-0.054,0.074-0.123,0.067-0.196c-0.177-2.098-1.571-3.076-4.388-3.076c-2.508,0-4.004,1.058-4.004,2.833 c0,1.925,1.488,2.457,3.895,2.695c2.88,0.282,3.103,0.703,3.103,1.269c0,0.983-0.789,1.402-2.642,1.402 c-2.327,0-2.839-0.584-3.011-1.742c-0.02-0.124-0.126-0.215-0.253-0.215h-1.137c-0.141,0-0.254,0.112-0.254,0.253 c0,1.482,0.806,3.248,4.655,3.248C17.501,17.007,19.099,15.91,19.099,13.993z"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>React</title><path d="M14.23 12.004a2.236 2.236 0 0 1-2.235 2.236 2.236 2.236 0 0 1-2.236-2.236 2.236 2.236 0 0 1 2.235-2.236 2.236 2.236 0 0 1 2.236 2.236zm2.648-10.69c-1.346 0-3.107.96-4.888 2.622-1.78-1.653-3.542-2.602-4.887-2.602-.41 0-.783.093-1.106.278-1.375.793-1.683 3.264-.973 6.365C1.98 8.917 0 10.42 0 12.004c0 1.59 1.99 3.097 5.043 4.03-.704 3.113-.39 5.588.988 6.38.32.187.69.275 1.102.275 1.345 0 3.107-.96 4.888-2.624 1.78 1.654 3.542 2.603 4.887 2.603.41 0 .783-.09 1.106-.275 1.374-.792 1.683-3.263.973-6.365C22.02 15.096 24 13.59 24 12.004c0-1.59-1.99-3.097-5.043-4.032.704-3.11.39-5.587-.988-6.38-.318-.184-.688-.277-1.092-.278zm-.005 1.09v.006c.225 0 .406.044.558.127.666.382.955 1.835.73 3.704-.054.46-.142.945-.25 1.44-.96-.236-2.006-.417-3.107-.534-.66-.905-1.345-1.727-2.035-2.447 1.592-1.48 3.087-2.292 4.105-2.295zm-9.77.02c1.012 0 2.514.808 4.11 2.28-.686.72-1.37 1.537-2.02 2.442-1.107.117-2.154.298-3.113.538-.112-.49-.195-.964-.254-1.42-.23-1.868.054-3.32.714-3.707.19-.09.4-.127.563-.132zm4.882 3.05c.455.468.91.992 1.36 1.564-.44-.02-.89-.034-1.345-.034-.46 0-.915.01-1.36.034.44-.572.895-1.096 1.345-1.565zM12 8.1c.74 0 1.477.034 2.202.093.406.582.802 1.203 1.183 1.86.372.64.71 1.29 1.018 1.946-.308.655-.646 1.31-1.013 1.95-.38.66-.773 1.288-1.18 1.87-.728.063-1.466.098-2.21.098-.74 0-1.477-.035-2.202-.093-.406-.582-.802-1.204-1.183-1.86-.372-.64-.71-1.29-1.018-1.946.303-.657.646-1.313 1.013-1.954.38-.66.773-1.286 1.18-1.868.728-.064 1.466-.098 2.21-.098zm-3.635.254c-.24.377-.48.763-.704 1.16-.225.39-.435.782-.635 1.174-.265-.656-.49-1.31-.676-1.947.64-.15 1.315-.283 2.015-.386zm7.26 0c.695.103 1.365.23 2.006.387-.18.632-.405 1.282-.66 1.933-.2-.39-.41-.783-.64-1.174-.225-.392-.465-.774-.705-1.146zm3.063.675c.484.15.944.317 1.375.498 1.732.74 2.852 1.708 2.852 2.476-.005.768-1.125 1.74-2.857 2.475-.42.18-.88.342-1.355.493-.28-.958-.646-1.956-1.1-2.98.45-1.017.81-2.01 1.085-2.964zm-13.395.004c.278.96.645 1.957 1.1 2.98-.45 1.017-.812 2.01-1.086 2.964-.484-.15-.944-.318-1.37-.5-1.732-.737-2.852-1.706-2.852-2.474 0-.768 1.12-1.742 2.852-2.476.42-.18.88-.342 1.356-.494zm11.678 4.28c.265.657.49 1.312.676 1.948-.64.157-1.316.29-2.016.39.24-.375.48-.762.705-1.158.225-.39.435-.788.636-1.18zm-9.945.02c.2.392.41.783.64 1.175.23.39.465.772.705 1.143-.695-.102-1.365-.23-2.006-.386.18-.63.406-1.282.66-1.933zM17.92 16.32c.112.493.2.968.254 1.423.23 1.868-.054 3.32-.714 3.708-.147.09-.338.128-.563.128-1.012 0-2.514-.807-4.11-2.28.686-.72 1.37-1.536 2.02-2.44 1.107-.118 2.154-.3 3.113-.54zm-11.83.01c.96.234 2.006.415 3.107.532.66.905 1.345 1.727 2.035 2.446-1.595 1.483-3.092 2.295-4.11 2.295-.22-.005-.406-.05-.553-.132-.666-.38-.955-1.834-.73-3.703.054-.46.142-.944.25-1.438zm4.56.64c.44.02.89.034 1.345.034.46 0 .915-.01 1.36-.034-.44.572-.895 1.095-1.345 1.565-.455-.47-.91-.993-1.36-1.565z"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
<path stroke-linecap="round" stroke-linejoin="round" d="M9.75 3.104v5.714a2.25 2.25 0 0 1-.659 1.591L5 14.5M9.75 3.104c-.251.023-.501.05-.75.082m.75-.082a24.301 24.301 0 0 1 4.5 0m0 0v5.714c0 .597.237 1.17.659 1.591L19.8 15.3M14.25 3.104c.251.023.501.05.75.082M19.8 15.3l-1.57.393A9.065 9.065 0 0 1 12 15a9.065 9.065 0 0 0-6.23-.693L5 14.5m14.8.8 1.402 1.402c1.232 1.232.65 3.318-1.067 3.611A48.309 48.309 0 0 1 12 21c-2.773 0-5.491-.235-8.135-.687-1.718-.293-2.3-2.379-1.067-3.61L5 14.5" />
</svg>

After

Width:  |  Height:  |  Size: 632 B

@@ -0,0 +1,4 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title>TypeScript</title>
<path d="M0 12v12h24V0H0zm19.341-.956c.61.152 1.074.423 1.501.865.221.236.549.666.575.77.008.03-1.036.73-1.668 1.123-.023.015-.115-.084-.217-.236-.31-.45-.633-.644-1.128-.678-.728-.05-1.196.331-1.192.967a.88.88 0 0 0 .102.45c.16.331.458.53 1.39.933 1.719.74 2.454 1.227 2.911 1.92.51.773.625 2.008.278 2.926-.38.998-1.325 1.676-2.655 1.9-.411.073-1.386.062-1.828-.018-.964-.172-1.878-.648-2.442-1.273-.221-.243-.652-.88-.625-.925.011-.016.11-.077.22-.141.108-.061.511-.294.892-.515l.69-.4.145.214c.202.308.643.731.91.872.766.404 1.817.347 2.335-.118a.883.883 0 0 0 .313-.72c0-.278-.035-.4-.18-.61-.186-.266-.567-.49-1.649-.96-1.238-.533-1.771-.864-2.259-1.39a3.165 3.165 0 0 1-.659-1.2c-.091-.339-.114-1.189-.042-1.531.255-1.197 1.158-2.03 2.461-2.278.423-.08 1.406-.05 1.821.053zm-5.634 1.002l.008.983H10.59v8.876H8.38v-8.876H5.258v-.964c0-.534.011-.98.026-.99.012-.016 1.913-.024 4.217-.02l4.195.012z"/>
</svg>

After

Width:  |  Height:  |  Size: 1019 B

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24"><title>Visual Basic</title><path d="M6.363 17.719a7.57 7.57 0 0 1 .34-1.348L10.887 4.5h1.863l-5.473 15h-1.91L0 4.5h1.934l4.09 11.895c.078.218.14.437.187.656s.098.441.152.668zM20.66 11.53c.5.063.957.188 1.371.375s.766.442 1.055.762.512.691.668 1.113.238.89.246 1.406c0 .696-.133 1.31-.398 1.84s-.622.98-1.067 1.348-.96.645-1.547.832-1.203.285-1.851.293h-4.371v-15h4.265c.54 0 1.059.066 1.559.2s.95.335 1.348.609.714.628.949 1.066.355.957.363 1.559c0 .859-.227 1.601-.68 2.226s-1.09 1.067-1.91 1.324v.047zm-4.137-.597h1.793c.43 0 .832-.051 1.207-.153s.704-.258.985-.469.5-.488.656-.832.238-.746.246-1.207c0-.43-.078-.785-.234-1.066s-.367-.504-.633-.668-.57-.277-.914-.34-.707-.097-1.09-.105h-2.016v4.84zm2.38 6.972c.437 0 .85-.05 1.242-.152s.738-.262 1.043-.48.539-.5.703-.844.254-.762.27-1.254c0-.54-.102-.98-.306-1.324s-.476-.614-.82-.809-.73-.332-1.16-.41-.875-.117-1.336-.117h-2.016v5.39h2.38z"/></svg>

After

Width:  |  Height:  |  Size: 975 B

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Vue.js</title><path d="M24,1.61H14.06L12,5.16,9.94,1.61H0L12,22.39ZM12,14.08,5.16,2.23H9.59L12,6.41l2.41-4.18h4.43Z"/></svg>

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

-9
View File
@@ -1,9 +0,0 @@
# *
User-agent: *
Allow: /
# Host
Host: https://nx.dev
# Sitemaps
Sitemap: https://nx.dev/sitemap-index.xml
+35 -4
View File
@@ -13,12 +13,12 @@ export const sidebar: StarlightUserConfig['sidebar'] = [
autogenerate: { directory: 'features', collapsed: true },
},
{
label: 'Guides',
label: 'Core Guides',
collapsed: true,
autogenerate: { directory: 'guides', collapsed: true },
},
{
label: 'Concepts',
label: 'Core Concepts',
collapsed: true,
autogenerate: { directory: 'concepts', collapsed: true },
},
@@ -39,10 +39,12 @@ export const sidebar: StarlightUserConfig['sidebar'] = [
...getPluginItems('angular'),
{
label: 'Angular Rspack',
collapsed: true,
items: getPluginItems('angular-rspack', 'angular'),
},
{
label: 'Angular Rsbuild',
collapsed: true,
items: getPluginItems('angular-rsbuild', 'angular'),
},
],
@@ -106,8 +108,27 @@ export const sidebar: StarlightUserConfig['sidebar'] = [
{
label: 'Java',
collapsed: true,
// when we have maven this will change to not have gradle as the top docs for Java
items: getPluginItems('gradle', 'java'),
items: [
{
label: 'Introduction',
link: 'technologies/java/introduction',
},
{
label: 'Gradle',
collapsed: true,
items: getPluginItems('gradle', 'java'),
},
{
label: 'Maven',
collapsed: true,
items: getPluginItems('maven', 'java'),
},
],
},
{
label: '.NET',
collapsed: true,
items: getPluginItems('dotnet'),
},
{
label: 'Module Federation',
@@ -160,6 +181,11 @@ export const sidebar: StarlightUserConfig['sidebar'] = [
collapsed: true,
items: getPluginItems('rsbuild', 'build-tools'),
},
{
label: 'Docker',
collapsed: true,
items: getPluginItems('docker', 'build-tools'),
},
],
},
{
@@ -171,6 +197,11 @@ export const sidebar: StarlightUserConfig['sidebar'] = [
collapsed: true,
items: getPluginItems('cypress', 'test-tools'),
},
{
label: 'Vitest',
collapsed: true,
items: getPluginItems('vitest', 'test-tools'),
},
{
label: 'Jest',
collapsed: true,
@@ -5385,11 +5385,6 @@
"hash": "04d21c10923d481ce024556edc1c49f845e225d1",
"deps": ["devkit"]
},
{
"file": "packages/workspace/src/migrations/update-13-10-0/update-decorate-cli.ts",
"hash": "9334b9a991673222b3ed0282b748a6de9eca2ced",
"deps": ["devkit"]
},
{
"file": "packages/workspace/src/migrations/update-13-10-0/update-tasks-runner.ts",
"hash": "37f930864bf0d5ff771eb4d691ab8cfcb9673802",
@@ -5425,11 +5420,6 @@
"hash": "addea9c1bc5a5eef2d856439b8f9bc4e4d0993e4",
"deps": ["devkit"]
},
{
"file": "packages/workspace/src/migrations/update-13-9-0/update-decorate-cli.ts",
"hash": "eae7efc8c2562ec1948245df2a84223d41e63bce",
"deps": ["devkit"]
},
{
"file": "packages/workspace/src/migrations/update-14-0-0/change-npm-script-executor.spec.ts",
"hash": "ba26be4f1b2644f191bfa3cb9ae4b0c8f8f75e9c",
@@ -20656,11 +20646,6 @@
"file": "packages/cli/jest.config.ts",
"hash": "5a6bcdc5c0f2540e13206f7276ef09ccf886a305"
},
{
"file": "packages/cli/lib/decorate-cli.ts",
"hash": "fbb9636c447e0e8a3af4c1f6446ffd7103388431",
"deps": ["nx"]
},
{
"file": "packages/cli/package.json",
"hash": "9c5ad8ce7142606dc835b87ea36c40c649d5910f",
@@ -22580,10 +22565,6 @@
"npm:@angular-devkit/core"
]
},
{
"file": "packages/nx/src/adapter/decorate-cli.ts",
"hash": "7126a16e8c98f8cb4c2eec1b80a3f8db3c65bff0"
},
{
"file": "packages/nx/src/adapter/ngcli-adapter.ts",
"hash": "16fd0f04b1dd33aee828d543d8a941e0a934905e",
Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Some files were not shown because too many files have changed in this diff Show More