pnpm 11 has officially launched with supply chain security baked in by default, marking one of the most significant releases in the package manager’s history and a direct response to escalating install-time attack campaigns across the JavaScript, Python, and PHP ecosystems.
The JavaScript package management landscape shifted significantly on April 27, 2026, when pnpm 11 went stable. Unlike previous versions that required developers to manually configure security controls, pnpm 11 ships with hardened defaults that prevent the most exploited attack vectors from reaching CI/CD pipelines or developer machines.
The release arrives amid coordinated supply chain campaigns. Most recently, the Mini Shai-Hulud campaign compromised packages across npm, PyPI, and Packagist simultaneously, using preinstall or import-time hooks to download a platform-specific Bun runtime and execute an obfuscated credential stealer targeting developer and CI/CD secrets.
While pnpm 11 would not have stopped every component of that attack, several of its new defaults directly address the structural conditions that allowed it to spread so quickly.
pnpm 11 Released With Supply Chain Protections
The headline security change in pnpm 11 is the minimumReleaseAge setting, which now defaults to 1440 minutes (24 hours). This means pnpm will refuse to resolve a newly published package version until it has been live on the registry for at least one full day.
The logic is rooted in how modern supply chain attacks operate. Attackers compromise a publisher’s account or CI token, push a malicious version, then rely on automated installs and open semver ranges to propagate the malicious package before security researchers or registry maintainers can detect and remove it. Most malicious packages are detected within hours of publication by automated scanning systems.
By enforcing a built-in waiting period, pnpm 11 users are shielded during the highest-risk window immediately after publication, the same window in which most attacker campaigns do their worst damage. Teams can turn off this behavior by setting minimumReleaseAge: 0, but the default posture now deliberately favors caution.
pnpm 11 also enables blockExoticSubdeps: true by default. Exotic subdependencies are transitive dependencies that resolve from non-standard sources, such as Git repositories, direct tarball URLs, or other non-registry paths, rather than going through the standard registry resolution flow.
These sources are inherently less predictable and less auditable than registry-published packages. By blocking exotic subdependencies out of the box, pnpm 11 closes one path attackers use to smuggle unexpected code into a project’s dependency tree without triggering obvious registry-level scans.
This is particularly relevant in complex monorepos and enterprise environments where the full dependency graph can span hundreds of packages.
One of the most architecturally significant changes is the introduction of allowBuilds, a unified build-script governance model that replaces the fragmented collection of previous settings: onlyBuiltDependencies, onlyBuiltDependenciesFile, neverBuiltDependencies, ignoredBuiltDependencies, and ignoreDepScripts.
Under the new model, teams define a map from package name patterns to boolean values, creating a single, readable source of truth for which packages are permitted to build scripts during installation.
This simplification matters because lifecycle scripts (preinstall, postinstall) remain the most consistently abused execution paths in npm attack campaigns, including the Mini Shai-Hulud operation, which used preinstall hooks to pull down and execute its credential-stealing payload.
The allowBuilds model does not eliminate the need for dependency review, but it significantly lowers the operational complexity of enforcing install-time execution policies across large engineering organizations.
Beyond the security defaults, pnpm 11 delivers several performance and workflow improvements:
- Store v11 replaces the old JSON-per-package index with a single SQLite database backed by MessagePack values, eliminating thousands of small file reads and writes for faster installs
- Built-in SBOM generation via
pnpm sbom, supporting CycloneDX 1.7 and SPDX 2.3 JSON formats, helps teams meet software supply chain compliance requirements without third-party tooling - Native publishing commands
pnpm publish,login,logout,view,deprecate,unpublish,dist-tag, andversionno longer delegate to the npm CLI, reducing a long-standing external dependency pnpm audit --fix=updatecan now fix vulnerabilities by updating lockfile entries directly, and audit filtering switches from CVE-based to GHSA-based identifiers- Isolated global installs via
pnpm add -gandpnxnow use a global virtual store, giving each global package its own isolated directory, package.json, and lockfile - Node.js 22 is now required; support for Node.js 18, 19, 20, and 21 has been dropped, and pnpm is now pure ESM
Looking ahead, pnpm’s next major release is expected to introduce Pacquet, an official Rust rewrite of the installation engine. The v12 roadmap focuses the Rust implementation on the fetching and linking phases first, while pnpm continues to handle lockfile creation. Dependency resolution is planned for a later phase.
Benchmarks already illustrate the performance leap:
| Scenario | pnpm v11 | pnpm v12 (Rust) |
|---|---|---|
| Warm install (cache + lockfile) | 2.4 seconds | 833 milliseconds |
| Lockfile-only (no cache) | 5.3 seconds | 2.3 seconds |
Pacquet remains in active development and is not production-ready, but the benchmark results confirm pnpm v12 will represent a dramatic performance improvement over an already fast baseline.
FAQ
Q1: What is minimumReleaseAge in pnpm 11?
It is a default security setting that blocks pnpm from installing any package version published within the past 24 hours, reducing exposure to fast-moving supply chain attacks.
Q2: What are exotic subdependencies, and why does pnpm 11 block them?
They are transitive dependencies resolved from non-registry sources, such as Git URLs or tarballs; pnpm 11 blocks them by default to prevent hidden or unaudited code from entering the dependency tree.
Q3: What does the new allowBuilds setting replace in pnpm 11?
It consolidates five older build-script control settings into a single map from package name to boolean, simplifying install-time execution governance for security teams.
Q4: When will pnpm v12 with Rust-based installation be released?
There is no definitive release timeline yet; Pacquet (the Rust engine) is still under active development and not ready for production use, though benchmarks show it completing warm installs in under 900 milliseconds.
Site: thecybrdef.com
For more insights and updates, follow us on Google News, Twitter, and LinkedIn.