Skip to content

[rush] pnpm 11: allow supportedArchitectures setting #6041

Description

I have looked through the docs and related issues but didn't find anything that quite matches this issue.

Summary

Until pnpm 10 we could use the unsupportedPackageJsonSettings.pnpm.* in the pnpm-config.json to specify supportedArchitectures, but under pnpm 11, it no longer has an effect. Rush still copies it into the pnpm field of common/temp/package.json, but pnpm 11 no longer reads it. pnpm only prints a warning (see below) and rush install succeeds but the native dependencies are not installed.

Repro steps

  1. rushVersion 5.179.0, pnpmVersion 11.26.0, useWorkspaces: true.

  2. In common/config/rush/pnpm-config.json:

    "unsupportedPackageJsonSettings": {
      "pnpm": { "supportedArchitectures": { "libc": ["current", "musl"] } }
    }
  3. Add a dependency with native extensions such as @statsig/statsig-node-core

  4. rush install

Expected result: pnpm applies supportedArchitectures as it did with pnpm 10. Failing that, Rush should warn or fail because the setting cannot take effect.

Actual result: rush install runs successfully, and pnpm prints:

[WARN] The "pnpm" field in package.json is no longer read by pnpm. The following keys were ignored: "pnpm.supportedArchitectures". See https://pnpm.io/settings for the new home of each setting.

Details

environmentVariables in pnpm-config.json cannot be used for this either. pnpm 11 does not parse an object setting from pnpm_config_supported_architectures or npm_config_supported_architectures, so pnpm config get supported-architectures returns undefined. It only reads the setting from pnpm-workspace.yaml.

Proposed solutions:

  1. Add a sibling escape hatch like unsupportedPackageJsonSettings but for pnpm-workspace.yaml.
  2. Add a first-class supportedArchitectures field to pnpm-config.json.
  3. Separately, warn loudly when unsupportedPackageJsonSettings.pnpm is non-empty under pnpm >= 11.

As a workaround, we use a local Rush plugin that appends the key to common/temp/pnpm-workspace.yaml in beforeInstall. However it does not apply to the installs that rush add/rush remove run, because those installs do not fire plugin hooks (see: #5168).

Standard questions

Question Answer
@microsoft/rush globally installed version? 5.179.0
rushVersion from rush.json? 5.179.0
pnpmVersion, npmVersion, or yarnVersion from rush.json? pnpm@11.26.0
(if pnpm) useWorkspaces from pnpm-config.json? true
Operating system? Mac and Linux
Would you consider contributing a PR? Yes
Node.js version (node -v)? 24.20.0

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    • Status
      Needs triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions