Skip to content
verdict:

pnpm 10.31.0

notable

note: no summary for this older release

We summarize recent releases. The original release notes for this version are below.

release-notesgithub.com/pnpm/pnpm · 135 lines
  1. ## Minor Changes
  2. * When pnpm updates the `pnpm-workspace.yaml`, comments, string formatting, and whitespace will be preserved.
  3. ## Patch Changes
  4. * Added `-F` as a short alias for the `--filter` option in the help output.
  5. * Handle undefined pkgSnapshot in `pnpm why -r` [#10700](https://github.com/pnpm/pnpm/issues/10700).
  6. * Fix headless install not being used when a project has an injected self-referencing `file:` dependency that resolves to `link:` in the lockfile.
  7. * Fixed a race condition when multiple worker threads import the same package to the global virtual store concurrently. The rename operation now tolerates `ENOTEMPTY`/`EEXIST` errors if another thread already completed the import.
  8. * When `lockfile-include-tarball-url` is set to `false`, tarball URLs are now always excluded from the lockfile. Previously, tarball URLs could still appear for packages hosted under non-standard URLs, making the behavior flaky and inconsistent [#6667](https://github.com/pnpm/pnpm/issues/6667).
  9. * Fixed `optimisticRepeatInstall` skipping install when `overrides`, `packageExtensions`, `ignoredOptionalDependencies`, `patchedDependencies`, or `peersSuffixMaxLength` changed.
  10. * Fixed `pnpm patch-commit` failing with "unable to access '/.config/git/attributes': Permission denied" error in environments where HOME is unset or non-standard (Docker containers, CI systems).
  11. The issue occurred because pnpm was setting `HOME` and the Windows user profile env var to empty strings to suppress user git configuration when running `git diff`. This caused git to resolve the home directory (`~`) as root (`/`), leading to permission errors when attempting to access `/.config/git/attributes`.
  12. Now uses `GIT_CONFIG_GLOBAL: os.devNull` instead, which is git's proper mechanism for bypassing user-level configuration without corrupting the home directory path resolution.
  13. Fixes #6537
  14. * Fix `pnpm why -r --parseable` missing dependents when multiple workspace packages share the same dependency [#8100](https://github.com/pnpm/pnpm/issues/8100).
  15. * Fix `link-workspace-packages=true` incorrectly linking workspace packages when the requested version doesn't match the workspace package's version. Previously, on fresh installs the version constraint is overridden to `*` in the fallback resolution paths, causing any workspace package with a matching name to be linked regardless of version [#10173](https://github.com/pnpm/pnpm/issues/10173).
  16. * Fixed `pnpm update --interactive` table breaking with long version strings (e.g., prerelease versions like `7.0.0-dev.20251209.1`) by dynamically calculating column widths instead of using hardcoded values [#10316](https://github.com/pnpm/pnpm/issues/10316).
  17. * Explicitly tell `npm` the path to the global `rc` config file.
  18. * The parameter set by the `--allow-build` flag is written to `allowBuilds`.
  19. * Fix a bug in which specifying `filter` on `pnpm-workspace.yaml` would cause pnpm to not detect any projects.
  20. * Print help message on running pnpm dlx without arguments and exit.
  21. <!-- sponsors -->
  22. ## Platinum Sponsors
  23. <table>
  24. <tbody>
  25. <tr>
  26. <td align="center" valign="middle">
  27. <a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes" target="_blank"><img src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
  28. </td>
  29. </tr>
  30. </tbody>
  31. </table>
  32. ## Gold Sponsors
  33. <table>
  34. <tbody>
  35. <tr>
  36. <td align="center" valign="middle">
  37. <a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  38. <picture>
  39. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/sanity.svg" />
  40. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/sanity_light.svg" />
  41. <img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity" />
  42. </picture>
  43. </a>
  44. </td>
  45. <td align="center" valign="middle">
  46. <a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  47. <picture>
  48. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/discord.svg" />
  49. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/discord_light.svg" />
  50. <img src="https://pnpm.io/img/users/discord.svg" width="220" alt="Discord" />
  51. </picture>
  52. </a>
  53. </td>
  54. <td align="center" valign="middle">
  55. <a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank"><img src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
  56. </td>
  57. </tr>
  58. <tr>
  59. <td align="center" valign="middle">
  60. <a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  61. <picture>
  62. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
  63. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/serpapi_light.svg" />
  64. <img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160" alt="SerpApi" />
  65. </picture>
  66. </a>
  67. </td>
  68. <td align="center" valign="middle">
  69. <a href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  70. <picture>
  71. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/coderabbit.svg" />
  72. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
  73. <img src="https://pnpm.io/img/users/coderabbit.svg" width="220" alt="CodeRabbit" />
  74. </picture>
  75. </a>
  76. </td>
  77. <td align="center" valign="middle">
  78. <a href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  79. <picture>
  80. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/stackblitz.svg" />
  81. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
  82. <img src="https://pnpm.io/img/users/stackblitz.svg" width="190" alt="Stackblitz" />
  83. </picture>
  84. </a>
  85. </td>
  86. </tr>
  87. <tr>
  88. <td align="center" valign="middle">
  89. <a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  90. <picture>
  91. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/workleap.svg" />
  92. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/workleap_light.svg" />
  93. <img src="https://pnpm.io/img/users/workleap.svg" width="190" alt="Workleap" />
  94. </picture>
  95. </a>
  96. </td>
  97. <td align="center" valign="middle">
  98. <a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  99. <picture>
  100. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/nx.svg" />
  101. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/nx_light.svg" />
  102. <img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
  103. </picture>
  104. </a>
  105. </td>
  106. </tr>
  107. </tbody>
  108. </table>
  109. <!-- sponsors end -->

view on githubimported 2026-09-28 via npm