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