[rush] pnpm 11: allow supportedArchitectures setting

Open
#6,041 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
node.js, typescript

Research direction

Start with pnpm-config.json handling and the generation of common/temp/package.json and common/temp/pnpm-workspace.yaml. Compare the regular install path with the rush add/remove paths and review issue #5168 about plugin hooks. Done means supportedArchitectures takes effect under pnpm 11, or Rush clearly warns or fails when the setting cannot be applied.

Written by the indexing model from the issue text.

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
Dominant language
TypeScript
Stars
6.5k
Forks
708
Avg merge
5d 7h
Merged PRs (30d)
44

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from microsoft/rushstack

All issues in microsoft/rushstack

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.