
pnpm 12.9.1 separates WebContainers version into @pnpm/wasm, main package returns to approximately 4MB
This page has been translated by machine translation. View original
Hi there! I'm Yuji Nishimura from the Operations Department!
In pnpm 12.9.0, a WebAssembly build for StackBlitz WebContainers, which runs Node.js in the browser, was bundled into the main package, temporarily increasing the unpacked size of the pnpm package. In the subsequent pnpm 12.9.1, this WebAssembly build was separated into a separate package @pnpm/wasm, and the main package size returned to normal.
To see exactly how much the size changed, I downloaded and unpacked the package (tarball) for each version and measured it. I also checked the tags for the separated @pnpm/wasm package.
Changes in This Release
- Target versions / dates: pnpm 12.9.0 (2026-10-03), pnpm 12.9.1 (2026-10-04) *Japan Standard Time
- Key changes:
- In 12.9.0, StackBlitz WebContainers automatically uses the WebAssembly build. The WebAssembly build works even when install scripts are disabled. Meanwhile, in native environments where scripts are enabled, it continues to use the native executable as before.
- In 12.9.1, the WebAssembly build for WebContainers was split into a separate package
@pnpm/wasm.pnpmand the standalone executable@pnpm/exeno longer include it, and according to the official release notes, the unpacked size returned from approximately 55 MB to approximately 4 MB. Inside WebContainers, you install@pnpm/wasmvia npm to use it (officially treated as experimental, requiring Node.js 22.13 or later; tag behavior is described below).
- Official links: pnpm 12.9.0 release notes, pnpm 12.9.1 release notes, WebContainers official page
Points Worth Noting
- What to watch out for: If you have 12.9.0, even if you don't use WebContainers, you'll be downloading a large package that includes the WebAssembly build. The pnpm installed in Docker images goes from about 4 MB to about 55 MB, and the tarball downloaded from the registry goes from about 1 MB to about 18 MB.
- What to check in your own environment: Whether the pinned pnpm version has been set to 12.9.0, and whether you can upgrade to 12.9.1 or later.
- What remains undetermined: The behavior when actually running pnpm from
@pnpm/wasminside a WebContainer was not verified this time.
Trying It Out
Environment
- Docker container for verification (Ubuntu 24.04 arm64)
- Node.js v24.21.0, npm 11.19.0
- Targets:
pnpm/@pnpm/exeversions 12.8.2, 12.9.0, 12.9.1, and@pnpm/wasmversions 12.9.1 and 0.0.0
1. Comparing the Size of the Main Package
The unpacked size registered in the registry (unpackedSize) can be retrieved with npm view.
npm view pnpm@12.9.0 dist.unpackedSize
npm view pnpm@12.9.1 dist.unpackedSize
Here are the results including 12.8.2, the version preceding 12.9.0, and the separated @pnpm/wasm@12.9.1.

In addition to just the metadata, I also downloaded the actual tarballs with npm pack <pkg>@<version> and measured the total size of the unpacked files. The following image shows the table output by the measurement script.

extracted is the total file size after extraction, tarball is the size of the downloaded tarball, both in bytes. files is the file count. The summary is as follows:
| Package / Version | Unpacked size (bytes) | Converted | Tarball |
|---|---|---|---|
| pnpm@12.8.2 | 4,102,446 | approx. 4.1 MB | approx. 1.0 MB |
| pnpm@12.9.0 | 54,965,084 | approx. 55.0 MB | approx. 17.9 MB |
| pnpm@12.9.1 | 4,107,858 | approx. 4.1 MB | approx. 1.0 MB |
| @pnpm/exe@12.8.2 | 3,725,223 | approx. 3.7 MB | approx. 0.9 MB |
| @pnpm/exe@12.9.0 | 54,573,504 | approx. 54.6 MB | approx. 17.7 MB |
| @pnpm/exe@12.9.1 | 3,713,798 | approx. 3.7 MB | approx. 0.9 MB |
In 12.9.0, both pnpm and @pnpm/exe grew to approximately 55 MB (approximately 1,040 files). In 12.9.1, they returned to approximately 4 MB (approximately 450 files), the same as 12.8.2. The tarball size also increased from about 1 MB to about 18 MB in 12.9.0, and returned to about 1 MB in 12.9.1.
2. Examining the Added Content and the Separated @pnpm/wasm
Comparing the files between pnpm@12.9.0 and pnpm@12.9.1, only 12.9.0 had 593 files under dist/wasm/, totaling 50,860,874 bytes. The largest file was dist/wasm/pnpm.wasm (47,527,756 bytes).
The separated @pnpm/wasm@12.9.1 has an unpacked size of 45,222,425 bytes (approximately 45.2 MB) with 595 files, the majority of which is dist/pnpm.wasm (41,893,876 bytes). It provides four commands: pnpm, pnpx, pn, and pnx. This pnpm.wasm was approximately 12% smaller than the one bundled in 12.9.0 (47,527,756 bytes). Note that the "approximately 10% smaller" mentioned in the 12.9.1 release notes refers to the native executable, with no mention of the WebAssembly build.
Next, I checked the tags for @pnpm/wasm (as of 2026-10-11).
npm view @pnpm/wasm dist-tags
latest pointed to 0.0.0, and next-12 pointed to 12.12.0 (a newer version than pnpm's latest of 12.11.2).
I installed without specifying a version and checked the installed version and its contents.
npm install @pnpm/wasm --ignore-scripts --silent
node -e 'const p=require("./node_modules/@pnpm/wasm/package.json");console.log("installed @pnpm/wasm", p.version)'
ls -la node_modules/@pnpm/wasm
installed @pnpm/wasm 0.0.0
total 4
drwxr-xr-x 4 pwuser pwuser 128 Oct 11 04:54 .
drwxr-xr-x 3 pwuser pwuser 96 Oct 11 04:54 ..
-rw-r--r-- 1 pwuser pwuser 0 Oct 11 04:54 index.js
-rw-r--r-- 1 pwuser pwuser 372 Oct 11 04:54 package.json
The installed version was 0.0.0, containing only an empty index.js and package.json.
Analysis of Verification Results
- What was confirmed: The increase in 12.9.0 was due to the WebAssembly build under
dist/wasm/, which in 12.9.1 was moved to@pnpm/wasm(approximately 45.2 MB). - What was cross-referenced with official information: The three sources matched: the 12.9.1 release note stating "returned from about 55 MB to about 4 MB," the registry's
unpackedSize, and the measured values from extracting tarballs. - Scope of verification: Sizes were measured for 12.8.2, 12.9.0, and 12.9.1. I also confirmed that the latest 12.11.2 (4,155,529 bytes) is approximately 4 MB.
How to Handle This in Practice
- Cases where immediate action is recommended: If you have pinned pnpm to 12.9.0 in CI or Docker. Since the download size remains large, consider updating to 12.9.1 or later.
- Cases where you can wait and see: If you are tracking the latest version of pnpm and are already on 12.9.1 or later. Since the main package size has returned to normal, no additional action is needed.
- What to decide as a team: If you have a setup that uses pnpm on WebContainers (StackBlitz), explicitly specifying the
@pnpm/wasmversion will prevent accidentally pulling the placeholder0.0.0.
Summary
The WebAssembly build bundled into the main package in pnpm 12.9.0 was separated into @pnpm/wasm in 12.9.1. As a result, the unpacked size of pnpm and @pnpm/exe has returned from approximately 55 MB to approximately 4 MB. For environments that do not use WebContainers, 12.9.0 is a version that downloads an unnecessary WebAssembly build, so when reviewing version pinning, please avoid 12.9.0. Also, if you install @pnpm/wasm for WebContainers, as of 2026-10-11, you need to specify a version.
I hope this is helpful to someone.
Reference links: