Migrating to pnpm v11.0.0-beta.4
Version v11.0.0-beta.4 introduces 17 breaking changes. This guide details how to update your code.
Released: 3/29/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 -gpnpm publishpnpm initBreaking Changes
●Issue #1
pnpm no longer populates `npm_config_*` environment variables from the pnpm config during lifecycle scripts. Only well-known `npm_*` env vars are set, matching Yarn's behavior. Users relying on specific `npm_config_*` variables must update scripts to use pnpm config settings directly or environment variables set outside of pnpm.
●Issue #2
The standalone exe version of pnpm requires at least glibc 2.27.
●Issue #3
The `pnpm install -g` command (without arguments) is no longer supported; use `pnpm add -g <pkg>` instead for global package management.
●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. `pnpm config get --json` behavior is unchanged.
●Issue #5
`pnpm config list` now prints a JSON object instead of INI formatted text.
●Issue #6
`pnpm config list` and `pnpm config get` (without argument) now hide auth-related settings and show top-level keys as camelCase (unless starting with @ or //).
●Issue #7
`pnpm config get` and `pnpm config list` no longer load non camelCase options from the workspace manifest (`pnpm-workspace.yaml`).
●Issue #8
pnpm no longer loads non-auth and non-registry settings from rc files. Other settings must be defined in `pnpm-workspace.yaml`. Move configuration from rc files to `pnpm-workspace.yaml` if needed.
●Issue #9
Workspace project specific `.npmrc` files are replaced by the `packageConfigs` field in `pnpm-workspace.yaml`. Migrate configurations from `.npmrc` to `packageConfigs` in the workspace manifest.
●Issue #10
The deprecated build dependency settings (`onlyBuiltDependencies`, `onlyBuiltDependenciesFile`, `neverBuiltDependencies`, and `ignoredBuiltDependencies`) are removed. Use the `allowBuilds` setting instead.
●Issue #11
The deprecated `allowNonAppliedPatches` is completely removed in favor of `allowUnusedPatches`. Replace usage of `allowNonAppliedPatches` with `allowUnusedPatches`. `ignorePatchFailures` is removed; all patch application failures will now throw an error.
●Issue #12
The `pnpm server` command has been removed.
●Issue #13
Support for the `useNodeVersion` and `executionEnv.nodeVersion` fields is removed. Use `devEngines.runtime` and `engines.runtime` instead.
●Issue #14
Support for `hooks.fetchers` is removed. Use the new API via the `fetchers` field of `pnpmfile` for custom fetchers and resolvers.
●Issue #15
The default value of the `type` field in the `package.json` file initialized by `pnpm init` is changed to `module`.
●Issue #16
Lowercase options `-d` and `-p` have new meanings when used with `pnpm add`: `-p` is now an alias for `--save-prod` (was `--parseable`), and `-d` is now an alias for `--save-dev` (was `--loglevel=info`).
●Issue #17
The One-time Password feature for `pnpm publish` now reads from `PNPM_CONFIG_OTP` instead of `NPM_CONFIG_OTP`.
Migration Steps
- 1If you relied on `npm_config_*` environment variables in lifecycle scripts, update scripts to use pnpm configuration methods or external environment variables.
- 2If using the standalone pnpm executable, ensure your system has at least glibc 2.27.
- 3Replace usage of `pnpm install -g` with `pnpm add -g <pkg>` to manage global packages.
- 4Review configuration output from `pnpm config get` and `pnpm config list` as the format has changed to JSON/raw values.
- 5If you used deprecated build dependency settings (`onlyBuiltDependencies`, etc.), replace them with the `allowBuilds` map in configuration files.
- 6Replace usage of deprecated `allowNonAppliedPatches` with `allowUnusedPatches` in configuration.
- 7Update scripts that relied on `useNodeVersion` or `executionEnv.nodeVersion` to use `devEngines.runtime` or `engines.runtime`.
- 8Update custom fetcher/resolver implementations to use the `fetchers` field in `pnpmfile` instead of `hooks.fetchers`.
- 9If using `pnpm add`, note that `-p` now means `--save-prod` and `-d` now means `--save-dev`.
- 10For publishing requiring OTP, set the `PNPM_CONFIG_OTP` environment variable instead of `NPM_CONFIG_OTP`.
Release Summary
This release introduces significant internal changes, including a new SQLite-based store index format (Store v11) and isolated global package installations for better stability. Configuration handling has been overhauled, moving away from rc files and standardizing CLI output formats to
Need More Details?
View the full release notes and all changes for pnpm v11.0.0-beta.4.
View Full Changelog