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
⚠️ 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
- 1If you relied on INI output from `pnpm config get` (without `--json`) or `pnpm config list`, update your scripts to parse JSON output.
- 2If you used deprecated build dependency settings (`onlyBuiltDependencies`, etc.), replace them with the `allowBuilds` map in your configuration.
- 3Remove usage of the removed `allowNonAppliedPatches` setting and use `allowUnusedPatches` instead.
- 4Remove usage of the removed `ignorePatchFailures` setting; ensure your environment handles patch failures by throwing errors.
- 5Replace usage of `useNodeVersion` or `executionEnv.nodeVersion` with `devEngines.runtime` or `engines.runtime` in configuration.
- 6If you used `hooks.fetchers` in `pnpmfile`, migrate to using the `fetchers` field.
- 7If 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`.
- 8If you used `pnpm link --global`, use `pnpm add -g .` instead.
- 9If you used `pnpm link` without arguments, use `pnpm link <dir>` with an explicit path.
- 10If 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