Change8

Migrating to pnpm v11.0.0-beta.0

Version v11.0.0-beta.0 introduces 18 breaking changes. This guide details how to update your code.

Released: 3/19/2026

18
Breaking Changes
10
Migration Steps
30
Affected Symbols

⚠️ Check Your Code

If you use any of these symbols, you need to read this guide:

pnpm config getpnpm config listpnpm add -gpnpm dlxpnpm install -gpnpm remove -gpnpm update -gpnpm list -gpatchedDependencies (lockfile format)onlyBuiltDependenciesonlyBuiltDependenciesFileneverBuiltDependenciesignoredBuiltDependenciesallowBuildsallowNonAppliedPatchesallowUnusedPatchesignorePatchFailurespnpm serveruseNodeVersionexecutionEnv.nodeVersiondevEngines.runtimeengines.runtimehooks.fetchersfetchers (in pnpmfile)type (in package.json initialized by pnpm init)pnpm add -ppnpm add -dpnpm publishNPM_CONFIG_OTPPNPM_CONFIG_OTP

Breaking Changes

Issue #1

The standalone exe version of pnpm requires at least glibc 2.27.

Solution

Ensure the execution environment meets the glibc 2.27 requirement.

Issue #2

pnpm config get (without --json) no longer prints INI formatted text; it now prints JSON for objects/arrays and raw strings for primitives.

Solution

Update scripts relying on INI output from `pnpm config get` to handle JSON or raw string output.

Issue #3

pnpm config list now prints a JSON object instead of INI formatted text.

Solution

Update scripts relying on INI output from `pnpm config list` to handle JSON output.

Issue #4

pnpm config get/list now hide auth-related settings when run without arguments.

Solution

Use `--show-all` or similar flags if auth settings are required, or rely on explicit configuration access methods.

Issue #5

pnpm config get/list now show top-level keys as camelCase (unless starting with @ or //).

Solution

Update scripts accessing configuration keys that previously relied on non-camelCase names (excluding @/\/ prefixes).

Issue #6

pnpm config get/list no longer load non camelCase options from the workspace manifest (`pnpm-workspace.yaml`).

Solution

Ensure configuration options in `pnpm-workspace.yaml` intended for project-specific settings are defined using camelCase if they are to be read by `pnpm config get/list`.

Issue #7

pnpm no longer loads non-auth and non-registry settings from rc files. Other settings must be defined in `pnpm-workspace.yaml`.

Solution

Move configuration settings previously stored in rc files (other than auth/registry) into `pnpm-workspace.yaml`.

Issue #8

Workspace project specific `.npmrc` files are replaced by `packageConfigs` in `pnpm-workspace.yaml`.

Solution

Migrate project-specific configuration settings from `.npmrc` files into the `packageConfigs` section of `pnpm-workspace.yaml`.

Issue #9

Deprecated build dependency settings (`onlyBuiltDependencies`, `onlyBuiltDependenciesFile`, `neverBuiltDependencies`, and `ignoredBuiltDependencies`) are removed. Use `allowBuilds` instead.

Solution

Replace usage of deprecated fields with the `allowBuilds` map in configuration files, mapping package patterns to boolean values (true to allow builds, false to deny).

Issue #10

The deprecated `allowNonAppliedPatches` is completely removed in favor of `allowUnusedPatches`.

Solution

Replace all usages of `allowNonAppliedPatches` with `allowUnusedPatches`.

Issue #11

The `ignorePatchFailures` setting is removed; all patch application failures will now throw an error.

Solution

Ensure patches apply successfully, or handle expected patch failures explicitly if necessary, as pnpm will no longer ignore them by default.

Issue #12

The `pnpm server` command is removed.

Solution

Stop using the `pnpm server` command.

Issue #13

Support for `useNodeVersion` and `executionEnv.nodeVersion` fields is removed. Use `devEngines.runtime` and `engines.runtime` instead.

Solution

Update configuration or package.json files to use `devEngines.runtime` or `engines.runtime` instead of the removed fields.

Issue #14

Support for `hooks.fetchers` is removed. Use the new API via the `fetchers` field of `pnpmfile`.

Solution

Migrate custom fetcher/resolver implementations to use the `fetchers` field in `pnpmfile`.

Issue #15

The default value for the `type` field in `package.json` initialized by `pnpm init` is changed to `module`.

Solution

If you require CommonJS modules as default, explicitly set `"type": "commonjs"` in your `package.json` or update your initialization scripts.

Issue #16

Lowercase aliases for `pnpm add` flags have changed: `-p` is now `--save-prod` (was `--parseable`), and `-d` is now `--save-dev` (was `--loglevel=info`).

Solution

Update scripts using `-p` or `-d` with `pnpm add` to reflect the new flag meanings.

Issue #17

Global installs now use the global virtual store by default, storing packages at `{storeDir}/links`.

Solution

If you need to disable this behavior, set `enableGlobalVirtualStore: false` in configuration.

Issue #18

`pnpm install -g` (no arguments) is no longer supported for global packages; use `pnpm add -g <pkg>` instead.

Solution

Use `pnpm add -g <pkg>` to install global packages.

Migration Steps

  1. 1
    If you relied on INI output from `pnpm config get` without `--json`, update scripts to parse JSON or raw strings.
  2. 2
    If you relied on INI output from `pnpm config list`, update scripts to parse
  3. 3
    If you used deprecated build dependency settings (`onlyBuiltDependencies`, etc.), replace them with the `allowBuilds` map in your configuration.
  4. 4
    Replace usages of deprecated `allowNonAppliedPatches` with `allowUnusedPatches`.
  5. 5
    Remove usage of the `pnpm server` command.
  6. 6
    Replace usage of removed fields `useNodeVersion` and `executionEnv.nodeVersion` with `devEngines.runtime` or `engines.runtime`.
  7. 7
    Migrate custom fetcher/resolver implementations from `hooks.fetchers` to the `fetchers` field of `pnpmfile`.
  8. 8
    If you use `pnpm init`, be aware the default `type` in `package.json` is now `module`.
  9. 9
    If relying on old lowercase aliases for `pnpm add`, note that `-p` is now `--save-prod` and `-d` is now `--save-dev`.
  10. 10
    For publishing requiring OTP, use the `PNPM_CONFIG_OTP` environment variable or the `--otp` flag instead of relying on `NPM_CONFIG_OTP`.

Release Summary

This major release introduces significant performance improvements via a new SQLite-backed content-addressable store index and isolates global package installations. Configuration handling has been overhauled, moving project-specific settings from `.npmrc` to `pnpm-workspace.yaml` and standardizing CLI output formats.

Need More Details?

View the full release notes and all changes for pnpm v11.0.0-beta.0.

View Full Changelog