Skip to content

build(deps-dev): bump all - #1871

Merged
renovate[bot] merged 1 commit into
livefrom
renovate/all
Aug 31, 2026
Merged

renovate[bot] merged 1 commit into
livefrom
renovate/all

Conversation

@renovate

@renovate renovate Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Adoption Passing Confidence Type Update Pending
@biomejs/biome (source) 2.5.8 → 2.5.10 age adoption passing confidence devDependencies patch 2.5.11
cssnano 8.0.6 → 8.0.8 age adoption passing confidence devDependencies patch 8.0.10 (+1)
dprint 0.55.2 → 0.56.1 age adoption passing confidence devDependencies minor 0.57.0
dprint/dprint-plugin-dockerfile 0.4.1 → 0.6.0 age adoption passing confidence minor
dprint/dprint-plugin-toml 0.7.0 → 0.8.0 age adoption passing confidence minor
github/codeql-action v4.37.7 → v4.37.8 age adoption passing confidence action patch v4.37.9
pnpm (source) 11.22.0 → 11.23.0 age adoption passing confidence packageManager minor 11.24.0
pnpm (source) 11.22.0 → 11.23.0 age adoption passing confidence engines minor 11.24.0
sass 1.102.0 → 1.103.1 age adoption passing confidence devDependencies minor
vnu-jar 26.8.15 → 26.8.21 age adoption passing confidence devDependencies patch 26.8.30 (+1)

Release Notes

biomejs/biome (@​biomejs/biome)

v2.5.10

Compare Source

Patch Changes
  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed Astro rejecting JavaScript comments between attributes.

    <div /* block comment */ class="something"></div>
    <Component /* c */ client:load />
  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed a bare < in Astro text being treated as the start of a tag, such as <p>5 < 6 and 7 > 6</p>. As in HTML, a < that cannot open a tag is text and needs no escaping.

  • #​11438 3133ffa Thanks @​Princesseuh! - Fixed #​8294: an Astro expression holding only a comment is no longer reported as a parse error, which also stopped the whole file from being formatted.

    <div>{/* a note */}</div>
    <div class={/* a note */}>x</div>
  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed #​9165: an empty Astro expression such as <div>{}</div> no longer fails to parse. Astro renders {} as nothing.

  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed Astro expressions containing a comment failing to parse.

    <div>{/* block comment */ x}</div>
    <div>{/* only a comment */}</div>
  • #​11403 8f7786f Thanks @​Princesseuh! - Added support for Astro's fragment shorthand.

    <>
      <p>a</p>
    </>
  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed an Astro frontmatter block being cut short by a closing tag inside a string or comment.

    ---
    const a = "</script>";
    // </script> in a comment
    ---
  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed --- being read as an Astro frontmatter fence when markup precedes it. Astro only recognizes frontmatter at the very start of a file, so a file opening with a comment now has no frontmatter, and its --- lines are content.

    <!-- c -->
    ---
    this is text, not frontmatter
    ---
  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed an Astro frontmatter block ending early on a line that merely starts with a dash.

    ---
    --count;
    ---
  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed the children of an Astro element carrying is:raw being parsed as markup instead of raw text. This now also covers <script> and <style>, whose contents Astro emits verbatim rather than processing, so they are no longer linted as JavaScript or CSS.

    <article is:raw><% awesome %></article>
    <script is:raw>{{ mustache }}</script>
  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed Astro rejecting attribute names that start with a colon, such as :href.

  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed the Astro parser failing to recover from a malformed closing tag such as <div></{<//, so that a later mistake is reported where it happens rather than cascading.

  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed { inside an Astro <math> element opening an expression. MathML is foreign content where Astro parses no expressions, so LaTeX such as R^{2x} now survives as text. <svg> is unaffected.

  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed {{ at the start of an Astro expression being read as an interpolation. Astro has no {{ }} syntax, so {{ a: 1 }} and <Comp a={{ b: 1 }} /> are object literals.

  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed expressions inside an Astro <pre> or <textarea> being read as raw text. Astro parses both as ordinary elements, so their markup and interpolations are now parsed, and a variable used only inside one is no longer reported as unused.

    <pre>{value}</pre>
    <textarea><div>{value}</div></textarea>
  • #​11403 8f7786f Thanks @​Princesseuh! - Added support for template literal attribute values in Astro, such as <div class=`a ${b} c`>.

  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed Astro rejecting HTML5 unquoted attribute values that contain `, =, ' or ", such as <a href=a=b> and <a href=a'b>.

  • #​11393 dec5a8f Thanks @​1678092075! - Fixed #​11207: useStrictMode no longer reports Vue event handlers such as @click="count++".

  • #​11431 c065f99 Thanks @​levrik! - Fixed #​11429: Variables and imports used by Vue same-name bindings such as :disabled or v-bind:disabled are no longer reported as unused.

  • #​11409 405dedb Thanks @​ematipico! - Fixed a memory leak in the LSP server where memory usage kept growing over long editor sessions.

  • #​11422 a51eff7 Thanks @​dyc3! - Fixed #​11416: Biome no longer crashes when parsing incomplete {let} or {const} declarations in Svelte files.

  • #​11378 34b715c Thanks @​Netail! - Added extra rule sources from @eslint/css. biome migrate eslint detects rules in your eslint configurations more reliably.

  • #​11403 8f7786f Thanks @​Princesseuh! - Fixed {#, {/, {: and {@ being read as Svelte block openings in every HTML-like file. They are now Svelte-only, so in HTML, Vue and Angular files a sequence such as {#if x} is ordinary text instead of a parse error.

  • #​11443 8d45229 Thanks @​ematipico! - Fixed #​11390: noFloatingPromises no longer performs unnecessary type inference on call arguments when checking methods of non-generic class instances created with new.

  • #​11425 9c2667b Thanks @​dyc3! - Fixed #​6426: GritQL plugins now match and rewrite metavariables embedded in quoted strings.

  • #​11441 00317c3 Thanks @​dyc3! - Improved performance of useNamedCaptureGroup, noMisplacedAssertion, noSkippedTests, noExportsInTest, noDuplicateTestHooks, noIdenticalTestTitle, useTestHooksInOrder, and useTestHooksOnTop.

v2.5.9

Compare Source

Patch Changes
  • #​11321 41386f3 Thanks @​dyc3! - Fixed #​11315: The CSS parser now recovers at declaration boundaries after bogus declarations, allowing subsequent valid declarations to be parsed.

  • #​11248 57b197e Thanks @​yanthomasdev! - Expanded the environment variable metadata used by biome rage to include BIOME_BINARY, BIOME_LOG_FILE, and RUST_BACKTRACE as well as reworded explanations for better readability.

  • #​11377 a8798ea Thanks @​Netail! - Added a new nursery rule useNamedLayer which disallows anonymous cascade layers.

    @layer {
      a {
        color: red;
      }
    }
  • #​11327 6771cf5 Thanks @​dyc3! - The HTML formatter now preserves meaningful blank lines in HTML, including spacing after elements with trailing spaces and blank lines between comment groups.

     <div>
       <!-- first group -->
    +
       <!-- second group -->
     </div>
  • #​10312 ba8aa18 Thanks @​dyc3! - Added the nursery rule useTailwindShorthandClasses, which suggests shorter Tailwind utility classes. For example, the rule suggests replacing w-4 h-4 with size-4.

  • #​11333 715e0cd Thanks @​kkkhs! - Fixed #​11328: lint/nursery/useExpect now recognizes Vitest Browser Mode expect.element() calls as assertions.

  • #​11343 9b98211 Thanks @​johncarmack1984! - Fixed #​11311: the CSS parser now accepts Tailwind container-query variant names in @variant, such as @xl and @max-xl. These previously produced a parse error and a noUnknownAtRules diagnostic.

    @variant @xl {
      div {
        background: red;
      }
    }
  • #​11220 3e8c488 Thanks @​santichausis! - Fixed #​9541: noUndeclaredVariables, noUnusedImports, and noUnusedVariables now correctly recognise exported variables and functions declared in one embedded <script> block as usable from a sibling <script> block, in Svelte's <script module>/<script> pair and Vue's non-setup <script> blocks.

    For example, Biome no longer reports greet as undeclared in the following Svelte component:

    <script module>
      export function greet() {
        console.log("Hello!");
      }
    </script>
    
    <script>
      greet();
    </script>
  • #​11300 36430eb Thanks @​dyc3! - Fixed the HTML formatter's whitespace handling for marquee, noscript, video, audio, and object elements.

    - <marquee behavior="alternate"> This text will bounce </marquee>
    + <marquee behavior="alternate">This text will bounce</marquee>
  • #​11299 6559e6c Thanks @​jp-knj! - Added the nursery rule useAstroClientOnlyDirectiveValue, which reports Astro client:only directives without an initializer.

    For example, <Component client:only /> triggers the rule.

  • #​11365 7529811 Thanks @​MHJahanbakhsh! - Fixed #​11229: The useGenericFontNames rule now treats math as a valid generic font family.

  • #​11346 674f5f4 Thanks @​Jayllyz! - Fixed #​11335: noComponentHookFactories now reports a use-prefixed variable only when a function is assigned to it directly.

    function factory() {
      const useColors = true; // no longer reported
      const useStore = createStore({ count: 0 }); // no longer reported
      const useData = () => useState(null); // still reported
      return useColors;
    }
  • #​11334 c87c46a Thanks @​zkasuran! - Fixed #​11317: noSvgWithoutTitle no longer reports an svg that uses the boolean shorthand aria-hidden (equivalent to aria-hidden={true} in React).

  • #​11364 13853b1 Thanks @​ematipico! - Fixed a bug where useJsxKeyInIterable incorrectly flagged Astro files.

  • #​11321 41386f3 Thanks @​dyc3! - Fixed #​11315: Invalid CSS declarations in HTML style attributes now produce parser diagnostics instead of causing a panic.

  • #​11325 67c3bf0 Thanks @​dyc3! - Fixed HTML text wrapping to account for the width of an adjacent closing tag, avoiding lines that exceed the configured width when the final word and tag must move together.

     <a-long-long-long-element
    -  >foo bar foo bar foo bar foo bar foo bar foo bar foo bar</a-long-long-long-element
    +  >foo bar foo bar foo bar foo bar foo bar foo
    +  bar</a-long-long-long-element
     >
  • #​11367 fe5b5d4 Thanks @​ematipico! - Fixed TypeScript compilerOptions.paths resolution when mapping targets omit ./. Biome now resolves these targets relative to their configured path base.

  • #​11316 17e48d6 Thanks @​wanxiankai! - Fixed #​11289: the safe fix for noExtraBooleanCast now preserves parentheses around nested conditional expressions.

  • #​11254 d25d113 Thanks @​dyc3! - Fixed #​11242: Biome no longer crashes with an access violation when analysing files on Windows ARM64.

  • #​11221 85aac73 Thanks @​freeatnet! - Added the nursery rule noUnsafeTypeAssertion, which disallows TypeScript type assertions while allowing const assertions.

    const value = input as SomeType;
  • #​11314 7ffb677 Thanks @​ematipico! - Fixed #​11310: Restored the performance of noMisusedPromises and noFloatingPromises when analyzed expressions share deep imported type paths.

  • #​11356 6cd3263 Thanks @​johncarmack1984! - The Tailwind parser now understands modifiers on bare utilities (@container/sidebar, shadow/50).

  • #​11318 76059e9 Thanks @​johncarmack1984! - The Tailwind parser now understands container-query variants (@sm:, @max-lg:, @min-[400px]:) and child and descendant variants (*:, **:).

  • #​11357 faa2074 Thanks @​johncarmack1984! - The Tailwind parser now accepts the legacy leading ! important marker (!flex, hover:!p-4).

  • #​11344 f34e15c Thanks @​johncarmack1984! - The Tailwind parser now understands combinator selectors in arbitrary variants (has-[>svg]:, has-[+p]:), modifiers on variants (group-hover/menu:, @sm/main:), and arbitrary container-query sizes (@[400px]:).

  • #​11324 2f5d452 Thanks @​dyc3! - Fixed HTML formatting that inserted rendered whitespace between an element and touching text when the line wrapped.

      <div>
    -   before<meter value=".5"></meter>
    -   after
    +   before<meter value=".5"></meter
    +   >after
      </div>
  • #​11312 e65f07e Thanks @​xosnos! - Added a new nursery rule useControlLabel for both HTML and JSX, which reports interactive control elements (button, menuitem) without an accessible label.

    <button />
  • #​11364 13853b1 Thanks @​ematipico! - Fixed SVG parsing for files with an XML declaration followed by a PUBLIC doctype, such as <?xml version="1.0"?><!DOCTYPE svg PUBLIC "a" "b">.

  • #​11301 610ee28 Thanks @​dyc3! - Fixed parent tag wrapping when an HTML element starts or ends with a block-like or hidden child such as source, track, or param.

    - <video src="brave.webm"><track kind="subtitles" src="brave.en.vtt"></video>
    + <video src="brave.webm">
    +   <track kind="subtitles" src="brave.en.vtt">
    + </video>
cssnano/cssnano (cssnano)

v8.0.8: v8.0.8

Compare Source

What's Changed

Bug Fixes
  • fix(postcss-minify-gradients): minify gradients using spec algorithm in #​1941

Full Changelog: https://github.com/cssnano/cssnano/compare/cssnano@8.0.7...cssnano@8.0.8

v8.0.7: v8.0.7

Compare Source

What's Changed

Bug Fixes
  • fix(cssnano): tighten option types in #​1919
  • fix(postcss-discard-empty): better optimize cascade layers in #​1924
Documentation
  • docs: add security information in #​1922
Website playground
  • feat(site): update playground to use a web worker in #​1918

Full Changelog: https://github.com/cssnano/cssnano/compare/cssnano@8.0.6...cssnano@8.0.7

dprint/dprint (dprint)

v0.56.1

Compare Source

Changes

  • fix: format zero files when --stdin-files is empty (#​1227)

Install

Run dprint upgrade or see https://dprint.dev/install/

Checksums

Artifact SHA-256 Checksum
dprint-x86_64-apple-darwin.zip f944e33a1bf8f6125eaa5ea77ee8a01db96093a6fb80df127b390f2a106774f7
dprint-aarch64-apple-darwin.zip c9af77af134987fada60344e8b9f23b2238081f7eea94a7bcd53ec49369354f6
dprint-x86_64-pc-windows-msvc.zip d2c5ee170ff88c0b16ea1f5f214e4d74877c7edb9ca701da5c9851c0c1ef9338
dprint-x86_64-pc-windows-msvc-installer.exe 7de50bfd34bc6659c37b9421486460e2d11b015b26de0988264fe1ccd934a3e7
dprint-aarch64-pc-windows-msvc.zip 11163770683a21283f0f4adce645f055295736148308a12b65ce1f8e613bfb66
dprint-x86_64-unknown-linux-gnu.zip 51729ee501593c84e2a2e8233f55959edf2bbd95cbb3998e9f8a81ecad942dba
dprint-x86_64-unknown-linux-musl.zip 913032d493340643d6b98ce250a2407c5d0abab8613b3e16a09d92661131425a
dprint-aarch64-unknown-linux-gnu.zip e9dc29baca00edf30d66b1b7a8de490c3a1bda4091bbc7b69f01f4a88db06c01
dprint-aarch64-unknown-linux-musl.zip 6f9541637ff47289409d709e4b006eeed84fd11c212dc029c4d26504a2cae0ff
dprint-riscv64gc-unknown-linux-gnu.zip 04f6470f2d0f584bfb90ffab03c8717e9354f0db98d33ee998e59b09d6a65c52
dprint-loongarch64-unknown-linux-gnu.zip 7d215fd58795d4adabcfab32344a8eca8a25d056514c53695ae6f5eb4bf9bf2b
dprint-loongarch64-unknown-linux-musl.zip 39e2bbe47657b411c2f7b0a2ced3ff120fdcbbf5023cca9904e0be262f558a16
dprint-powerpc64le-unknown-linux-gnu.zip a264d977e5b0ead41d9149855aad710786eb1ff3737351f118c9d834f4e74982
dprint-powerpc64le-unknown-linux-musl.zip e57e201bc9f28937f65f2a94a5c08ec72386f93a8b916429c08cf2e4e848b493
dprint-aarch64-linux-android.zip dde000fea7f23cc33cac686146a266716353a71fdc01f0530f56a0890464f13d
dprint-x86_64-linux-android.zip a31eda2069738b9d629b179e40b517d8fb061c71386e22b294dc85c8fade1dfa

v0.56.0

Compare Source

Changes

  • feat: prefer plugins on the npm registry (#​1215)
  • feat: add path completion hints to CLI args (#​1217)
  • feat: support formatting directory args (#​1196)
  • feat: format explicit paths outside the working directory (#​1204)
  • fix: keep a duplicate plugin's checksum when deduping plugin sources (#​1211)
  • fix: don't duplicate a plugin specified in both a config and its extended config (#​1043) (#​1208)
  • fix: apply implicit node_modules exclude and unanchored patterns in rebased scopes (#​1210)
  • fix: resolve literal file and directory args without directory traversal (#​1207)
  • fix: handle overflow panic in progress bars (#​1223)

Install

Run dprint upgrade or see https://dprint.dev/install/

Checksums

Artifact SHA-256 Checksum
dprint-x86_64-apple-darwin.zip 466dd67e15fca266f3749008ef5d23ea7a6c657ef8204257dbb8c23636fc9aca
dprint-aarch64-apple-darwin.zip 79f5c80a3ddebb4717a89a25a79ec1c50947d4cef141df243757925cb47d32e1
dprint-x86_64-pc-windows-msvc.zip cbcb0c6fdbb72289e895c3857720eb769046d42069973f38655b6aee16c01c73
dprint-x86_64-pc-windows-msvc-installer.exe 795de3adb60187bad989b330f8c8ec03c7a4a69509b1a8d47dc3025266e0158a
dprint-aarch64-pc-windows-msvc.zip c4356e5f9e1b6edce345bd2de902384e3a51e46b0b98775db7011f0996b6b230
dprint-x86_64-unknown-linux-gnu.zip 49fe9d970cdbe0f742e18187c221a7a1dd985d35d4fa9bf4740f7a261c08d96c
dprint-x86_64-unknown-linux-musl.zip e958bfa3fec5256e72c2e4e028fa5674e43023eaff80d704ca96827af2eba240
dprint-aarch64-unknown-linux-gnu.zip a0dcf153cce38096f43bdde36fdd32cfd11c2227b6a04c2202fa83573fe517a6
dprint-aarch64-unknown-linux-musl.zip 2e7d50e342d9d9d85b811635a04f3d49abdf7ec96d5b346cda932a7c4d42a7ab
dprint-riscv64gc-unknown-linux-gnu.zip c888b0e2f559341a62fa666b1609ec957e609bfc146b5ee0ab7898723ebbe231
dprint-loongarch64-unknown-linux-gnu.zip d86a6d3fc063992d152237885f51053748b60361228d851ca6aeaec65d84fb8e
dprint-loongarch64-unknown-linux-musl.zip d781022e4fbfec13688db1dd3d0fb9da964f6f5cf79b31ffcf5196d364f22cf0
dprint-powerpc64le-unknown-linux-gnu.zip 935e117e23650a9874b444a7a6445ec7a8d593778e514f34ebea72dd88180599
dprint-powerpc64le-unknown-linux-musl.zip 93d03c5f3b615955c9fce64a4867b8aa5959988646bfebd1bfd74b5618a1f2ed
dprint-aarch64-linux-android.zip 718707dcd1637d312d2b430ae6313550bac7f21143d9344cd8fd80bf2ec5bf25
dprint-x86_64-linux-android.zip 2b09284549bd96dfa2389d85237da15bacbae9076cdec0e849ec3fb50b804923
dprint/dprint-plugin-dockerfile (dprint/dprint-plugin-dockerfile)

v0.6.0

Compare Source

Changes

  • feat: add indentStages config (#​36)
  • perf: borrow the source text in the ast and precompute line starts (#​37)

Install

Install and setup dprint.

Then in your project's dprint configuration file:

  1. Run dprint add dockerfile or specify the plugin url in the "plugins" array.
  2. Add a "dockerfile" configuration property if desired.
    {
      // ...etc...
      "dockerfile": {
        // config goes here
      },
      "plugins": [
        "https://plugins.dprint.dev/dockerfile-0.6.0.wasm"
      ]
    }

JS Formatting API

dprint/dprint-plugin-toml (dprint/dprint-plugin-toml)

v0.8.0

Compare Source

Changes

  • feat: add quote, indentation, spacing, trailing comma and sorting options (#​36)
  • feat: use a custom TOML parser and support TOML 1.1 (#​34)
  • fix: dprint-core 0.68 and preserve multi-line strings within inline tables (#​33)
  • fix: let an array inside an inline table be written over several lines (#​37)
  • perf: tell dprint-core when a value is already written over several lines (#​35)

Install

Install and setup dprint.

Then in your project's dprint configuration file:

  1. Specify the plugin url in the "plugins" array.
  2. Add a "toml" configuration property if desired.
    {
      // ...etc...
      "toml": {
        // toml config goes here
      },
      "plugins": [
        "https://plugins.dprint.dev/toml-0.8.0.wasm"
      ]
    }

JS Formatting API

github/codeql-action (github/codeql-action)

v4.37.8

Compare Source

No user facing changes.

pnpm/pnpm (pnpm)

v11.23.0: pnpm 11.23

Compare Source

Minor Changes

  • pnpm config get and pnpm config list now show the settings pnpm acts on under their documented names:

    • registries shows the registries pnpm resolves from, merged across every source (.npmrc, pnpm-workspace.yaml, the global config, CLI flags), in the shape the setting is written in: keyed by registry URL, with the default registry declared as the bare @ scope. Built-in routes are included — the @jsr scope and the npmjs and gh prefixes — unless pointed elsewhere. Previously pnpm config get registries printed undefined.
    • update and audit show the effective sections, whichever spelling set them. The deprecated internal spellings (updateConfig, auditConfig, auditLevel) are no longer listed.
    • catalogs shows the complete resolved catalog set — the singular catalog block is its default entry — whichever spelling declared it.
    • The registry and @scope:registry entries show the merged routes rather than raw .npmrc values, so they always agree with the registries view.
  • Settings that no supported pnpm version recognizes get their own warning. A key in the global config file that this version of pnpm does not read is no longer reported with advice to move it to a project-level pnpm-workspace.yaml (where it would be ignored too); the warning now says the setting is not recognized by this version of pnpm, names the pnpm version that does read it when there is one (for example, globalShims is a pnpm v12 setting), and suggests the closest real setting name when the key looks like a typo. Unrecognized and non-camelCase keys in a project's pnpm-workspace.yaml, previously ignored silently, are now reported the same way. pnpm config get <key> and pnpm get <key> no longer print config-load warnings, so a script capturing the value gets the value alone.

  • The importPackage pnpmfile hook is deprecated. pnpm now prints a warning when a pnpmfile defines it, and the hook will be removed in the next major version. It also opts the installation out of the parallel package importer, making installation slower. If you rely on this hook, comment on #​14101.

  • node_modules/.modules.yaml no longer records the registries an install resolved from, and the recorded copy is dropped from the file on the first install that rewrites it.

    It dated from the lockfile format that spelled a dependency's path relative to its registry, where reading an installed tree meant knowing the registries it was installed with. Dependency paths have not carried a registry for several major versions, and the recorded copy outlived its use: pnpm list, pnpm why, and single-project installs preferred it over the project's own configuration, so a project whose registry had changed since its last install was still read through the old one.

    They now use the configured registries, like every other command already did.

  • When enableGlobalVirtualStore is on, every process pnpm spawns for the project (pnpm run, pnpm exec, lifecycle scripts) now receives a NODE_PATH pointing at the project's hoisted node_modules, plus a NODE_OPTIONS --import flag that registers a resolve hook restoring NODE_PATH lookups for ESM imports. Dependencies that import undeclared ("phantom") packages keep resolving under the global virtual store — for both CommonJS and ESM — without installing the @pnpm/plugin-esm-node-path config dependency pnpm/pnpm#9618. Tools run by pnpm dlx resolve such dependencies too: the JS CLI passes them the same environment, while the Rust CLI's dlx cache is self-contained, so its layout already exposes them.

  • A registry can now declare that its abbreviated metadata carries the time field, so resolutionMode: time-based reads the full metadata document only from the registries that need it:

    resolutionMode: time-based
    registries:
      https://npm.internal.example/:
        supportsTimeField: true

    registry.npmjs.org omits time from abbreviated metadata, so a time-based resolution has to fall back to the much larger full document. That fallback used to be all-or-nothing: registrySupportsTimeField answered for every registry at once, so a project resolving from both the public registry and a Verdaccio instance either paid for full metadata everywhere or claimed a time field npmjs does not serve. The answer is now per registry, and registrySupportsTimeField remains the answer for every registry that does not declare one.

    The declaration is also sent to a pnpr server, which applies it to the resolution it runs on the client's behalf.

  • A pnpr resolve request now carries the client's registries the way the registries setting declares them — keyed by URL, with the scopes routed to each, the bare-specifier prefix each answers to, and each one's serverType — in place of the prefix map it used to send.

    The server routes them through the same inversion the config reader runs, so a pnpr-served install resolves a scoped dependency from the registry that scope is routed to, which it previously could not: only the default registry and the prefix-addressed ones reached the server. A declared serverType reaches it too, so the tarball URLs pnpr omits from the lockfile match the ones the client reconstructs.

    Built-in scope routes the project has not pointed elsewhere are not declared, so a pnpr server's allowlist is not asked about npm.jsr.io on requests that resolve no JSR package.

    A registry a request only declares is no longer refused up front for being off the server's allowlist — a client describes its whole configuration, including scopes a given resolve never reaches, so a stray @scope:registry in a developer's ~/.npmrc no longer fails every install against a pnpr server that does not serve it. The boundary moves to the fetch itself: an origin the resolve does reach is refused before the request leaves the server, with the same message.

    This changes the resolve and verify-lockfile request bodies. A pnpr server and its clients have to be on matching versions; the protocol is still experimental and unversioned.

  • The registries setting now declares a registry once, keyed by its URL, with everything about that registry in the entry: how it lays out tarball URLs, the scopes routed to it, and the bare-specifier prefix it answers to.

    registries:
      https://artifactory.example.com/artifactory/api/npm/npm-virtual/:
        serverType: artifactory
        scopes: ['@acme', '@acme-internal']
        prefix: work
    • serverType tells pnpm how the registry lays out its tarball URLs, which decides whether a URL can be omitted from pnpm-lock.yaml:
      • undeclared (the default) — strict. Only the exact canonical URL is treated as reconstructible.
      • npm — the registry behaves like registry.npmjs.org, which also serves a scoped package from its percent-encoded path. Declare this for a faithful mirror or caching proxy of the public registry so its tarball URLs can be omitted too.
      • artifactory — JFrog Artifactory repeats the scope in a scoped package's tarball filename (@acme/widget/-/@acme/widget-1.0.0.tgz) where the npm registry strips it (@acme/widget/-/widget-1.0.0.tgz). Declaring it lets pnpm rebuild that URL, so it is omitted from pnpm-lock.yaml instead of being written out for every scoped package pnpm/get-npm-tarball-url#16.
    • scopes lists the @-prefixed scopes that resolve from this registry. A bare '@' is the scope-less default registry, the one the registry setting names.
    • prefix is the alias a dependency addresses this registry by, as in "foo": "work:^1.0.0".

    The layout is never inferred from the registry URL, so nothing changes unless you declare it; registry.npmjs.org continues to behave as npm without being declared. Because the lockfile depends on serverType, it is read from pnpm-workspace.yaml only — a serverType in the global config.yaml is ignored, so one developer's machine cannot shape a lockfile their collaborators read back with a different layout. Credentials are rejected in this setting, in a key as well as in a field, and still belong in .npmrc. An entry that routes nothing to itself and matches no configured registry is reported as a warning rather than silently ignored.

Migrating

The older registries shape, a map of <scope>: <url> strings, still works and needs no change:

registries:
  '@acme': https://npm.acme.example/

namedRegistries is deprecated in favor of the prefix field, and is still read for prefixes registries does not declare.

toLockfileResolution and isCanonicalRegistryTarballUrl now take their registry and layout as an options object rather than positional arguments, so @pnpm/lockfile.utils and @pnpm/resolving.tarball-url get a major bump.

  • An install that had to re-hash store files to verify them now reports it. If that cost more than a second, it says how long — The integrity of N files was checked in 2.5s. — and if it was quick but covered more than a thousand files, it names the cause instead: their timestamps changed since the store recorded them, which a backup tool, an antivirus scan or a copied store can do.

  • Added virtualStoreType, which names where the virtual store lives — one store per machine, or one per project:

    virtualStoreType: global   # or: project

    It is the canonical spelling of enableGlobalVirtualStore, which keeps working. When a project sets both, virtualStoreType wins. It can also be set through PNPM_CONFIG_VIRTUAL_STORE_TYPE and read back with pnpm config get virtualStoreType. The default is unchanged — project, so the shared store stays opt-in.

    The setting is independent of nodeLinker. isolated and pnp both work with either store type, and hoisted writes no virtual store at all, so it is unaffected.

Patch Changes

  • pnpm add --allow-build now adds to the allowBuilds entries already in pnpm-workspace.yaml instead of replacing them #​13872.

  • Kept pending build approvals available after removing an unrelated dependency.

  • pnpm approve-builds now removes onlyBuiltDependencies, onlyBuiltDependenciesFile, neverBuiltDependencies, and ignoredBuiltDependencies from pnpm-workspace.yaml when it writes allowBuilds. Those settings were replaced by allowBuilds in pnpm 11 and silently ignored since, so a workspace migrated from pnpm 10 kept them around looking active.

  • pnpm audit no longer reports a patched version that was never published or is deprecated. The inferred patched range (e.g. >=4.17.24 from <=4.17.23) is now checked against the registry packument, and the report is corrected to the lowest non-deprecated published version that satisfies it (e.g. >=4.18.1 when 4.17.24 does not exist and 4.18.0 is deprecated). When no published version satisfies the range, the report shows Patched versions: None. This also prevents pnpm audit --fix from adding overrides or minimumReleaseAgeExclude entries for patches that do not exist #​13824.

    pnpm audit --fix and pnpm audit --fix update no longer add a minimumReleaseAgeExclude entry when the registry packument shows that the minimum patched version was never published. Previously such entries were written for versions that do not exist, which would have let a later publish of that version bypass the minimumReleaseAge gate #​11563.

    The --json output of pnpm audit now returns patched_versions: null for advisories whose inferred patch is not available (never published, skipped, yanked, or deprecated), making it easier for tooling to distinguish "no fix available" from "fix available at version X".

  • Fixed pnpm patch-commit in project and edit paths containing non-ASCII characters.

  • The package and bump pickers of pnpm change now size their page from the terminal height instead of always showing 7 rows. They fall back to 7 rows when the terminal height is unknown pnpm/pnpm#13815.

  • Canceling a pnpm change prompt with Ctrl-c no longer prints a stack trace. It reports Change canceled and exits with a success status, like the other interactive commands #​13814.

  • Re-fetch full registry metadata wh

✂ Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • Between 12:00 AM and 03:59 AM, only on Monday (* 0-3 * * 1)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@renovate renovate Bot added 🏗️ Category: Build Issues and PRs related to the build directory 📦 Type: Developer Dependencies PRs that modify packages only req'd for local development and testing labels Aug 31, 2026
@renovate
renovate Bot enabled auto-merge (squash) August 31, 2026 01:55
@netlify

netlify Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for gh-pages-openinf ready!

Name Link
🔨 Latest commit 01e8a49
🔍 Latest deploy log https://app.netlify.com/projects/gh-pages-openinf/deploys/6a94defee33f910008381330
😎 Deploy Preview https://deploy-preview-1871--gh-pages-openinf.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedcssnano@​8.0.81001006998100
Addeddprint@​0.56.1911007094100
Addedvnu-jar@​26.8.21911008298100
Addedsass@​1.103.110010010097100
Added@​biomejs/​biome@​2.5.1010010010099100

View full report

@renovate
renovate Bot merged commit 316e250 into live Aug 31, 2026
17 checks passed
@OpenINFbot
OpenINFbot deleted the renovate/all branch August 31, 2026 19:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🏗️ Category: Build Issues and PRs related to the build directory 📦 Type: Developer Dependencies PRs that modify packages only req'd for local development and testing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants