<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/pnpm-11-7-qxjmw28yt" -->

---
title: pnpm 11.7 | daily.dev
description: pnpm 11.7 introduces a frozenStore setting that lets pnpm install run against a read-only package store (Nix store, read-only bind mount, or OCI image layer)...
canonical: https://daily.dev/posts/pnpm-11-7-qxjmw28yt
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: pnpm 11.7 | daily.dev
og:description: pnpm 11.7 introduces a frozenStore setting that lets pnpm install run against a read-only package store (Nix store, read-only bind mount, or OCI image layer)...
og:url: https://daily.dev/posts/pnpm-11-7-qxjmw28yt
og:image: https://api.daily.dev/og/posts/QXJmw28Yt.png
og:image:alt: pnpm 11.7
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# pnpm 11.7

**[Fast, disk space efficient package manager \| pnpm](https://daily.dev/sources/pnpm-blog)** · 6 min read · 0 upvotes · 0 comments

## Summary

pnpm 11.7 introduces a frozenStore setting that lets pnpm install run against a read-only package store (Nix store, read-only bind mount, or OCI image layer) by opening the SQLite index in immutable mode and blocking any store writes. It adds a --batch flag for pnpm publish --recursive to publish an entire workspace in one registry request, scope-specific auth tokens for scopes sharing a registry URL, and delegates full resolving installs (not just materialization) to the Rust-based pacquet engine when it's declared as a config dependency. A security patch rejects path-traversal and reserved dependency aliases sourced from lockfiles, closing a hoisting-based file write vulnerability. Additional fixes cover publish SSL settings, a Windows regression in pnpm add, git subdirectory dependency paths, deterministic lockfile output, preserved npm_config_* env vars, and a Windows hang caused by slow process lookups.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://pnpm.io/blog/releases/11.7>

## Questions this post answers

### How do I install pnpm dependencies from a read-only package store like a Nix store or OCI image layer?

Use the frozenStore setting introduced in pnpm 11.7, enabled with the --frozen-store flag alongside --offline --frozen-lockfile. It opens the store's SQLite index.db in immutable mode, bypassing WAL/-shm sidecar files, and blocks all store writes. The store must already contain every needed build output, or install fails upfront with ERR_PNPM_FROZEN_STORE_NEEDS_BUILD. It requires Node.js >=22.15.0, >=23.11.0, or >=24.0.0.

_Teams building reproducible, read-only install pipelines can follow pnpm updates like this on daily.dev._

### Can pnpm use different auth tokens for different package scopes on the same registry URL?

Yes, starting in pnpm 11.7, scope-specific auth tokens are supported even when scopes share the same registry URL, such as GitHub Packages. Configure it by appending the package scope after the registry URL in the auth key, for example @org-a:registry=https://npm.pkg.github.com/. Packages without a matching scope fall back to the registry-wide token.

_Developers juggling multiple private scopes on one registry can track auth changes like this on daily.dev._

### What was the security vulnerability fixed in pnpm 11.7 related to lockfile dependency aliases?

pnpm 11.7 rejects path-traversal and reserved dependency aliases, like ../../../escape, .bin, .pnpm, or node_modules, when they come from a lockfile rather than a freshly resolved manifest. A crafted lockfile alias could previously be joined under a hoisted node_modules directory, letting package files be written outside the install root or overwrite pnpm-owned files. The check now runs always-on before any fetch or filesystem work, for every node linker.

_Anyone auditing dependency install security should keep an eye on fixes like this via daily.dev._

## Similar posts on daily.dev

- [pnpm 11.23](https://daily.dev/posts/pnpm-11-23-migxmswxe) · Fast, disk space efficient package manager \| pnpm · 3 upvotes · 0 comments
- [pnpm 11 cuts the npm umbilical cord](https://daily.dev/posts/pnpm-11-cuts-the-npm-umbilical-cord-vhucinbuf) · Bytes by ui.dev · 50 upvotes · 5 comments
- [pnpm 11 Adds Supply Chain Protection Defaults for Minimum Re...](https://daily.dev/posts/pnpm-11-adds-supply-chain-protection-defaults-for-minimum-re--wxgk3vhhu) · Socket · 101 upvotes · 6 comments
- [pnpm 11.24](https://daily.dev/posts/pnpm-11-24-zrynrt2ld) · Fast, disk space efficient package manager \| pnpm · 12 upvotes · 1 comments
- [pnpm 11 Release Candidate: ESM Distribution, Supply Chain Defaults and a New Store Format](https://daily.dev/posts/pnpm-11-release-candidate-esm-distribution-supply-chain-defaults-and-a-new-store-format-0aocvtgnx) · InfoQ · 0 upvotes · 0 comments

---

Tags: [#security](https://daily.dev/tags/security), [#general-programming](https://daily.dev/tags/general-programming), [#nodejs](https://daily.dev/tags/nodejs), [#pnpm](https://daily.dev/tags/pnpm)

[View this post on daily.dev](https://daily.dev/posts/pnpm-11-7-qxjmw28yt)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"pnpm 11.7","url":"https://daily.dev/posts/pnpm-11-7-qxjmw28yt","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/pnpm-11-7-qxjmw28yt"},"datePublished":"2026-08-23T12:17:51.394Z","dateModified":"2026-08-23T12:22:35.489Z","description":"pnpm 11.7 introduces a frozenStore setting that lets pnpm install run against a read-only package store (Nix store, read-only bind mount, or OCI image layer)...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/63763758f3e74381d631e88f7667e808?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/63763758f3e74381d631e88f7667e808?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Fast, disk space efficient package manager | pnpm","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Fast, disk space efficient package manager | pnpm","logo":"https://media.daily.dev/image/upload/s--JKuzGOiX--/f_auto,q_auto/v1787487440/logos/pnpm-blog?_a=BAMAMicg0","url":"https://daily.dev/sources/pnpm-blog"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/pnpm-11-7-qxjmw28yt","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"security,general-programming,nodejs,pnpm","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Fast, disk space efficient package manager | pnpm","item":"https://daily.dev/sources/pnpm-blog"},{"@type":"ListItem","position":3,"name":"pnpm 11.7"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/pnpm-11-7-qxjmw28yt#faq","mainEntity":[{"@type":"Question","name":"How do I install pnpm dependencies from a read-only package store like a Nix store or OCI image layer?","acceptedAnswer":{"@type":"Answer","text":"Use the frozenStore setting introduced in pnpm 11.7, enabled with the --frozen-store flag alongside --offline --frozen-lockfile. It opens the store's SQLite index.db in immutable mode, bypassing WAL/-shm sidecar files, and blocks all store writes. The store must already contain every needed build output, or install fails upfront with ERR_PNPM_FROZEN_STORE_NEEDS_BUILD. It requires Node.js >=22.15.0, >=23.11.0, or >=24.0.0. Teams building reproducible, read-only install pipelines can follow pnpm updates like this on daily.dev."}},{"@type":"Question","name":"Can pnpm use different auth tokens for different package scopes on the same registry URL?","acceptedAnswer":{"@type":"Answer","text":"Yes, starting in pnpm 11.7, scope-specific auth tokens are supported even when scopes share the same registry URL, such as GitHub Packages. Configure it by appending the package scope after the registry URL in the auth key, for example @org-a:registry=https://npm.pkg.github.com/. Packages without a matching scope fall back to the registry-wide token. Developers juggling multiple private scopes on one registry can track auth changes like this on daily.dev."}},{"@type":"Question","name":"What was the security vulnerability fixed in pnpm 11.7 related to lockfile dependency aliases?","acceptedAnswer":{"@type":"Answer","text":"pnpm 11.7 rejects path-traversal and reserved dependency aliases, like ../../../escape, .bin, .pnpm, or node_modules, when they come from a lockfile rather than a freshly resolved manifest. A crafted lockfile alias could previously be joined under a hoisted node_modules directory, letting package files be written outside the install root or overwrite pnpm-owned files. The check now runs always-on before any fetch or filesystem work, for every node linker. Anyone auditing dependency install security should keep an eye on fixes like this via daily.dev."}}]}
```

