pnpm published v12.9.1 on 3 October 2026: WebContainer build moves to @pnpm/wasm, GitLab CI provenance publish fixed. npm latest=12.9.1 confirmed 5 Oct; ShopperCove upgrade checklist only; no affiliate.
4 min read
On 3 October 2026, pnpm published v12.9.1. ShopperCove did not migrate a production monorepo for this note and did not run install benchmarks. Package identity was confirmed on the npm registry on 5 October 2026 (pnpm@12.9.1, dist-tag latest and latest-12, npm time 2026-10-03T20:48:16.304Z). Primary sources: the GitHub release v12.9.1 (published 2026-10-03T20:48:42Z), the pnpm 12.9.1 blog, plus What's different in pnpm 12 and pnpm 12.0 for the Rust-rewrite baseline. This is a docs-based upgrade checklist—not performance advice and not a security advisory (no CVEs are claimed here).
There is no affiliate link in this article. This post has no affiliate links.
From the 12.9.1 release notes:
| Area | Change |
|---|---|
| WebContainer / size | WebAssembly build for StackBlitz WebContainers ships as separate @pnpm/wasm; pnpm / @pnpm/exe unpack size back to about 4 MB (from ~55 MB) |
| Publish provenance | pnpm publish with provenance from GitLab CI no longer rejected with npm 422; statement includes GitLab CI vars in invocation.parameters |
| Audit TLS | pnpm audit signatures uses TLS settings of the redirect target when signing-keys requests redirect (e.g. to registry.npmjs.org) |
| Frozen lockfile | --frozen-lockfile no longer rejects an up-to-date lockfile when an injected workspace package uses a catalog entry in peerDependencies |
| Filters / Git | [] filter selector works again with Git 2.24–2.27; older Git fails with a clear version error; non-ASCII path change detection fixed |
| Homebrew | pnpm self-update fails for Homebrew-installed pnpm and prints brew upgrade instead of installing a shadowed second copy |
| Other | Smaller pnpm executable (~10%); faster trust-downgrade checks; optimisticRepeatInstall: false still runs project lifecycle scripts when node_modules is up to date |
WebContainer users: install @pnpm/wasm with npm inside the container to get the pnpm command after this split.
pnpm 12 is a Rust rewrite that stayed command/flag/lockfile compatible with 11 for most workflows. Official differences worth checking before you pin:
node / deno / bun can defer to the version a project pins (devEngines.runtime / globalShims).pnpm add yarn / node / deno / bun means the tool, not the old npm wrapper package (use npm: aliases when you truly want the npm package).packageImportMethod: auto — hardlink-first (clone second); macOS stays clone-first.engineStrict — incompatible engines fail even when the subtree sits under optionalDependencies if reached via regular dependencies.--resolution-only is gone (pnpm peers check instead); use --no-frozen-lockfile instead of --frozen-lockfile false.Registry note: the August 2026 “What's different” post said npm latest still pointed at 11. As of sources read 5 Oct 2026, npm dist-tag latest is 12.9.1 (same as latest-12). Always verify with npm view pnpm version / npm view pnpm dist-tags before writing CI pins.
pnpm -v (and whether install came from npm, corepack, Homebrew, or standalone).npm view pnpm version → expect 12.9.1 as of 5 Oct 2026 sources.packageManager / CI image.--frozen-lockfile CI.pnpm publish with provenance after 12.9.1 if you hit 422s.@pnpm/wasm where needed.brew upgrade pnpm (or the formula pin pnpm prints)—do not fight self-update.ShopperCove did not change production pnpm versions for this article. Prefer pnpm.io release blogs and the GitHub release over third-party roundups.
pnpm v12.9.1 (3 Oct 2026) splits WebContainer WASM into @pnpm/wasm, shrinks the main package again, and fixes GitLab CI provenance publishing—on top of the pnpm 12 Rust-rewrite line. Pin pnpm@12.9.1 when ready. No affiliate.
Lab evidence
Sources read 5 Oct 2026 (Asia/Calcutta): npm registry dist-tags latest=12.9.1 and latest-12=12.9.1 (time 2026-10-03T20:48:16.304Z); GitHub release v12.9.1 published 2026-10-03T20:48:42Z; pnpm blog 12.9.1 (WebContainer build → @pnpm/wasm; pnpm unpack ~4 MB; GitLab CI provenance publish fix; audit signatures TLS on redirect; frozen-lockfile+injected catalog peers; [] filter Git 2.24–2.27; self-update Homebrew refuse); What's different in pnpm 12 (2026-08-10) + 12.0 stable (2026-08-26) Rust rewrite notes — project-aware global bins, git HTTPS identity, package-manager naming, cyclic lockfile determinism, Linux hardlink-first auto, engineStrict through optional subtrees, --resolution-only removed, --no-frozen-lockfile. Note: Aug blog said npm latest still 11; as of 5 Oct 2026 registry latest is 12.9.1. Checklist only; no ShopperCove monorepo migrated; no affiliate.
Yarn 4.9.2 (Berry PnP + node-modules linker) vs pnpm 12.9.1 on one 22-dependency React+Vite app. Isolated caches (Yarn enableGlobalCache false; pnpm --store-dir). Warm medians (5): Yarn PnP 1.307 s, Yarn nm 2.471 s, pnpm 0.240 s. Lock+empty medians 1.656 / 2.789 / 0.725 s. Clean disk: Yarn PnP 246 MB; Yarn nm modules 189 MB; pnpm hardlink project 167 MB. Fixture /workspace/bench-yarn-pnpm/. Distinct from pnpm-vs-npm-vs-bun (no Yarn).
Hands-on6 Oct 20264 min read
npm 12.2.0 vs pnpm 12.9.1 vs Bun 1.4.2 on one 24-dependency React + Vite app: from scratch 14.2 s / 3.1 s / 1.5 s; lockfile + warm cache 2.9 s / 0.28 s / 0.27 s; lockfile + empty cache 3.9 s / 2.3 s / 0.45 s. Disk, lockfile size and the pnpm phantom-dependency catch.
Summary5 Oct 20267 min read
Hands-on6 Oct 20266 min read