* fix(changeset): pnpr's ecosystem route prefixes break nothing published The intent declared a major bump, which the release engine applied as plain semver: 0.1.0-alpha.10 escalated its stable target to 1.0.0 and restarted the prerelease counter, so pnpr was heading for 1.0.0-alpha.0. The `/npm/`, `/cargo/` and `/pypi/` prefixes only address a registry that serves more than one ecosystem, and the ability to serve more than one arrives in this same release. No deployed pnpr can be broken by them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGJYxrAARz5kpZnESxm3xd * docs(skills): add a release-notes curation skill The wording rules for one changeset live in CLAUDE.md. Nothing describes the set: that the composed section under .changeset/changelogs is the release page and the only surviving copy once the bump deletes the intents, that a defect introduced and fixed inside one release window has no reader, that entries naming the same change from two pull requests should be merged, or that a major intent on a 0.x package jumps it to 1.0.0. Calibrate the per-entry advice against release pages worth reading. esbuild titles every entry and pairs it with before and after output. uv keeps one idea per bullet and names a flag, file, or platform in each. Playwright leads with a few highlights before its flat list, and uv's category headings give a skimmer somewhere to stop. pnpm's composer emits no headings beyond Major, Minor, and Patch, so the skill asks for the same structure to be built out of the entry order. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGJYxrAARz5kpZnESxm3xd * chore(release): pacquet 12.4.1, pnpr 0.1.0-alpha.11 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGJYxrAARz5kpZnESxm3xd * docs(changelog): curate the 12.4.1 and pnpr 0.1.0-alpha.11 release pages The composed sections were a flat dump of one intent per pull request: forty three pacquet entries and thirty four pnpr ones, several describing the same change from different angles, several describing a regression that never reached a published version, and all of them in whatever order the intent filenames happened to sort in. pacquet opened on a hard-link-limit edge case with the `ignoredOptionalDependencies` and `linkWorkspacePackages` bugs buried mid-list; pnpr stated the new ecosystem route prefixes twice and spread one container registry across seven entries. Merge the entries that describe one user-visible change, drop the notes for defects introduced and fixed inside this release window, trim the prose that only a contributor would care about, normalize the issue links, and order each page from the failures that break an install down to the wording fixes. pacquet goes from forty three entries to thirty six, pnpr from thirty four to nineteen. Give `@pnpm/napi` a line as well. It bumps through its fixed group with pacquet and had no intent of its own, so it was shipping a bare `## 12.4.1` heading. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGJYxrAARz5kpZnESxm3xd * docs(changelog): open each release page with a summary line Deno opens a release post with one sentence naming the top few changes, so a reader decides from that line whether to read on. The composed section has room for the same: `tail -n +2` in the release workflow keeps a paragraph placed under the version heading, and it becomes the first line of the GitHub release body. Widen the sources behind the skill while here. Yarn's pages are the conventional-commit log with the PR appended, which is the shape pnpm's uncurated output already has, so name it as the thing being fixed. Gitea publishes the ranking the ordering section was reaching for and puts SECURITY second, which the ranking had left out entirely; note that the Major, Minor and Patch headings cut across it, so a security fix on a patch bump lands below every feature and the lead paragraph has to carry it. SQLite and Gitea calibrate the one-sentence default. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGJYxrAARz5kpZnESxm3xd * docs: address the review threads on the release pages The `updateConfig` entry said "A setting nothing set is left out", a reduced relative clause that a reader has to parse twice in a published release note. The version check told the reader to read the line for each released package, which skips the one most easily missed: `@pnpm/napi` carries no intent of its own and rides pacquet's fixed group, and release.yml fails the build when the two have drifted. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGJYxrAARz5kpZnESxm3xd * docs(changelog): group the release pages by subject Thirty six patch entries under one heading is a wall. A reader looking for whether their install bug is fixed has to read every line about sbom timestamps and help text to find out. Name the groups instead. pnpm 12.4.1 splits into installing, resolving and linking, performance, scripts and tasks, commands, configuration, Windows, and messages; pnpr's minor changes into registries, container images, publishing, builds, and discovery. The order inside and between groups is unchanged. Both consumers tolerate the extra heading level. release.yml writes the Rust release body with `tail -n +2`, and getChangelogEntry slices between headings of the same depth as the version heading, so a `####` neither ends the slice nor is dropped. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGJYxrAARz5kpZnESxm3xd --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
pnpm changeset to pnpm change in contribution guidelines (#14711)
简体中文 | 日本語 | 한국어 | Italiano | Português Brasileiro
Fast, disk space efficient package manager:
- Fast. Up to 2x faster than the alternatives (see benchmark).
- Efficient. Files inside
node_modulesare linked from a single content-addressable storage. - Great for monorepos.
- Strict. A package can access only dependencies that are specified in its
package.json. - Deterministic. Has a lockfile called
pnpm-lock.yaml. - Works as a Node.js version manager. See pnpm runtime.
- Works everywhere. Supports Windows, Linux, and macOS.
- Battle-tested. Used in production by teams of all sizes since 2016.
- Experimental Rust port. Includes pacquet, an experimental port of the CLI written in Rust.
- See the full feature comparison with npm and Yarn.
To quote the Rush team:
Microsoft uses pnpm in Rush repos with hundreds of projects and hundreds of PRs per day, and we’ve found it to be very fast and reliable.
Platinum Sponsors
|
|
|
|
|
|
Gold Sponsors
|
|
|
|
|
|
|
|
|
|
|
Silver Sponsors
|
|
|
|
|
|
|
|
|
|
|
| ⏱️ Time.now |
Support this project by becoming a sponsor.
Background
pnpm uses a content-addressable filesystem to store all files from all module directories on a disk. When using npm, if you have 100 projects using lodash, you will have 100 copies of lodash on disk. With pnpm, lodash will be stored in a content-addressable storage, so:
- If you depend on different versions of lodash, only the files that differ are added to the store.
If lodash has 100 files, and a new version has a change only in one of those files,
pnpm updatewill only add 1 new file to the storage. - All the files are saved in a single place on the disk. When packages are installed, their files are linked from that single place consuming no additional disk space. Linking is performed using either hard-links or reflinks (copy-on-write).
As a result, you save gigabytes of space on your disk and you have a lot faster installations!
If you'd like more details about the unique node_modules structure that pnpm creates and
why it works fine with the Node.js ecosystem, read this small article: Flat node_modules is not the only way.
💖 Like this project? Let people know with a tweet
Getting Started
Benchmark
pnpm is up to 2x faster than npm and Yarn classic. See all benchmarks here.
Benchmarks on an app with lots of dependencies:
License
MIT, except the pnpr/ directory, which is source-available under the PolyForm Shield License 1.0.0.