Change8

Migrating to pnpm v11.0.0-alpha.13

Version v11.0.0-alpha.13 introduces 22 breaking changes. This guide details how to update your code.

Released: 3/7/2026

22
Breaking Changes
10
Migration Steps
31
Affected Symbols

⚠️ Check Your Code

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

`pnpm config get``pnpm config list``pnpm add -g``pnpm dlx``pnpm remove -g``pnpm update -g``pnpm list -g``pnpm install -g``onlyBuiltDependencies``onlyBuiltDependenciesFile``neverBuiltDependencies``ignoredBuiltDependencies``allowBuilds``allowNonAppliedPatches``allowUnusedPatches``ignorePatchFailures``pnpm server``useNodeVersion``executionEnv.nodeVersion``devEngines.runtime``engines.runtime``hooks.fetchers``fetchers` (in pnpmfile)`pnpm init``type` (in package.json)`pnpm add -p``pnpm add -d``pnpm publish``NPM_CONFIG_OTP``PNPM_CONFIG_OTP``pnpm link`

Breaking Changes

Issue #1

The package is now pure ESM. If you rely on CommonJS imports, you must update your code to use ESM syntax.

Issue #2

Node.js v18, 19, 20, and 21 support is discontinued. Upgrade to a supported Node.js version.

Issue #3

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

Issue #4

`pnpm config get` (without `--json`) no longer prints INI formatted text; it now prints JSON for objects/arrays and raw values for primitives. If you were parsing INI output, update your scripts to expect

Issue #5

`pnpm config list` now prints a JSON object instead of INI formatted text. Update parsing scripts accordingly.

Issue #6

`pnpm config get <array>` now prints a JSON array instead of INI formatted text.

Issue #7

`pnpm config get` and `pnpm config list` (without argument) now hide auth-related settings and show top-level keys as camelCase (unless starting with @ or //).

Issue #8

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

Issue #9

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

Issue #10

Workspace project specific `.npmrc` files are replaced by the `packageConfigs` field in `pnpm-workspace.yaml`. Migrate configuration settings from `.npmrc` to `packageConfigs` in `pnpm-workspace.yaml`.

Issue #11

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

Issue #12

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

Issue #13

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

Issue #14

The `pnpm server` command is removed.

Issue #15

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

Issue #16

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

Issue #17

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

Issue #18

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

Issue #19

`pnpm publish` no longer calls `npm publish`. The OTP feature now reads from `PNPM_CONFIG_OTP` instead of `NPM_CONFIG_OTP`. If you relied on undocumented features of `npm publish`, you may need a workaround like `pnpm pack && npm publish *.tgz`.

Issue #20

`pnpm link <pkg-name>` no longer resolves packages from the global store; only relative or absolute paths are accepted. Use `pnpm link ./foo` instead of `pnpm link foo`.

Issue #21

`pnpm link --global` is removed. Use `pnpm add -g .` to register local package bins globally.

Issue #22

`pnpm link` (no arguments) is removed. Use `pnpm link <dir>` with an explicit path instead.

Migration Steps

  1. 1
    If you relied on INI output from `pnpm config get` (without `--json`) or `pnpm config list`, update your scripts to parse JSON output.
  2. 2
    If you used deprecated build dependency settings (`onlyBuiltDependencies`, etc.), replace them with the `allowBuilds` map in your configuration.
  3. 3
    Remove usage of the removed `allowNonAppliedPatches` setting and use `allowUnusedPatches` instead.
  4. 4
    Remove usage of the removed `ignorePatchFailures` setting; ensure your environment handles patch failures by throwing errors.
  5. 5
    Replace usage of `useNodeVersion` or `executionEnv.nodeVersion` with `devEngines.runtime` or `engines.runtime` in configuration.
  6. 6
    If you used `hooks.fetchers` in `pnpmfile`, migrate to using the `fetchers` field.
  7. 7
    If you used `pnpm link <pkg-name>` where `<pkg-name>` was a global package name, change it to use a path, e.g., `pnpm link ./foo`.
  8. 8
    If you used `pnpm link --global`, use `pnpm add -g .` instead.
  9. 9
    If you used `pnpm link` without arguments, use `pnpm link <dir>` with an explicit path.
  10. 10
    If you relied on OTP configuration via `NPM_CONFIG_OTP`, switch to using the `PNPM_CONFIG_OTP` environment variable when publishing.

Release Summary

This release introduces major architectural changes to the pnpm store, moving to SQLite for metadata indexing and isolating global package installations for improved stability. Configuration handling has been significantly overhauled, favoring JSON output and consolidating workspace settings into `pnpm-workspace.yaml`.

Need More Details?

View the full release notes and all changes for pnpm v11.0.0-alpha.13.

View Full Changelog