dependabot[bot]andCaliBrain 2526bd7287 build(deps): bump the npm-deps group across 1 directory with 11 updates (#1711)
Bumps the npm-deps group with 11 updates in the /src/frontend directory:

| Package | From | To |
| --- | --- | --- |
|
[@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite)
| `4.3.3` | `4.3.5` |
|
[react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)
| `7.18.4` | `7.18.5` |
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
| `26.6.5` | `26.6.6` |
|
[@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react)
| `6.1.2` | `6.3.0` |
| [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip) |
`6.43.0` | `6.44.2` |
| [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt) |
`0.75.0` | `0.78.0` |
| [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) |
`1.90.0` | `1.93.0` |
| [oxlint-tsgolint](https://github.com/oxc-project/tsgolint) |
`7.0.2005` | `7.0.2006` |
|
[tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)
| `4.3.3` | `4.3.5` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) |
`8.3.5` | `8.3.7` |
|
[vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)
| `5.0.5` | `5.1.0` |


Updates `@tailwindcss/vite` from 4.3.3 to 4.3.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases">@​tailwindcss/vite's
releases</a>.</em></p>
<blockquote>
<h2>v4.3.5</h2>
<h3>Fixed</h3>
<ul>
<li>Canonicalization: improve performance in projects with many
functional variant values (e.g. a <code>matchVariant</code> plugin with
thousands of values) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20663">#20663</a>)</li>
<li>Don't crash or create a fallback with the wrong color for a
<code>color-mix(…)</code> without a color interpolation method (e.g.
<code>color-mix(var(--color-red-500))</code> or
<code>color-mix(currentcolor 50%, transparent)</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20658">#20658</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20666">#20666</a>)</li>
<li>Ensure <code>@tailwindcss/oxide-wasm32-wasi</code> loads instead of
hanging forever (e.g. with <code>NAPI_RS_FORCE_WASI=error</code> or in
WebContainers) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20667">#20667</a>)</li>
<li>Remove <code>as: '*.css'</code> from the
<code>@tailwindcss/turbopack</code> setup in its README, because it
breaks CSS modules (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20660">#20660</a>)</li>
<li>Ignore <code>&lt;!--</code> and <code>--&gt;</code> between
top-level rules in CSS instead of throwing or swallowing the next rule
(e.g. <code>a { color: red } --&gt; b { color: blue }</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20665">#20665</a>)</li>
<li>Ensure <code>@tailwindcss/oxide-wasm32-wasi</code> detects changed
and new source files after the first scan (e.g. in WebContainers) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20487">#20487</a>)</li>
<li>Prevent type errors with <code>skipLibCheck: false</code> caused by
imports of unshipped modules in the <code>@tailwindcss/node</code> type
declarations (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20632">#20632</a>)</li>
</ul>
<h2>v4.3.4</h2>
<h3>Added</h3>
<ul>
<li>Add <code>@tailwindcss/turbopack</code>, a Turbopack loader for
using Tailwind CSS with Next.js (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20367">#20367</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure watch mode detects changes to symlinked <code>@source</code>
files whose real paths aren't otherwise scanned (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20356">#20356</a>)</li>
<li>Ensure variants using <code>@scope</code> wrap generated utilities
instead of nesting inside them (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20369">#20369</a>)</li>
<li>Ensure nested <code>@scope</code> rules preserve their scoping
semantics when flattened (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20369">#20369</a>)</li>
<li>Preserve declarations directly inside <code>@scope</code> by
wrapping them in <code>:where(:scope)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20369">#20369</a>)</li>
<li>Ensure generated utilities include a space in empty
<code>var()</code> fallbacks (e.g. <code>var(--tw-blur,)</code> →
<code>var(--tw-blur, )</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20373">#20373</a>)</li>
<li>Canonicalization: convert arbitrary breakpoint and container query
variants to named equivalents (e.g. <code>max-[64rem]:flex</code> →
<code>max-lg:flex</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20380">#20380</a>)</li>
<li>Prevent <code>@tailwindcss/vite</code> from crashing on every edit
under Vite's experimental <code>bundledDev</code> mode (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20379">#20379</a>)</li>
<li>Ensure <code>@tailwindcss/oxide</code> falls back to WASM on
platforms without native bindings
(<code>@tailwindcss/oxide-wasm32-wasi</code> now installs on all
platforms, but only loads when no native binding is available) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20383">#20383</a>)</li>
<li>Extract class candidates from Ruby <code>%w</code> and
<code>%W</code> literals using angle brackets or custom delimiters (e.g.
<code>%w&lt;flex&gt;</code>, <code>%w|flex|</code>), including in Slim
and Haml templates (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20387">#20387</a>)</li>
<li>Preserve whitespace in <code>--default(…)</code> values in
functional <code>@utility</code> definitions (e.g. <code>--default(box
alphabetic)</code> no longer becomes <code>boxalphabetic</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20392">#20392</a>)</li>
<li>Ensure automatic source detection respects negation-based
<code>.gitignore</code> files (e.g. <code>/*</code> followed by
<code>!/…</code> patterns) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20397">#20397</a>)</li>
<li>Ensure root <code>theme('…')</code> namespace lookups in JavaScript
plugins and config files return the full namespace object instead of the
value of its <code>DEFAULT</code> key (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20399">#20399</a>)</li>
<li>Skip ignored directories when generating watch globs instead of
walking their contents on every rebuild (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20408">#20408</a>)</li>
<li>Drop invalid UTF-8 candidates during class detection (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20389">#20389</a>)</li>
<li>Prevent <code>@tailwindcss/vite</code> from forcing full-page
reloads for scanned files that Vite does not handle as modules (e.g.
<code>.php</code> files) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20414">#20414</a>)</li>
<li>Canonicalization: don't merge utilities that reference different
theme variables set to CSS-wide keywords like <code>unset</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20417">#20417</a>)</li>
<li>Don't generate utilities when a modifier is used that would
otherwise be silently ignored (e.g. <code>rounded-sm/[5]</code>,
<code>shadow-sm/foo</code>, <code>stroke-2/50</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20419">#20419</a>)</li>
<li>Preserve <code>and</code>, <code>or</code>, and <code>not</code>
inside selectors in <code>supports-[…]</code> variants (e.g.
<code>supports-[selector(a:not(.foo))]:flex</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20420">#20420</a>)</li>
<li>Don't warn about Angular's <code>::ng-deep</code> and
<code>:host-context()</code> when optimizing CSS (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20434">#20434</a>)</li>
<li>Don't generate CSS for candidates containing an empty additional
modifier (e.g. <code>bg-red-500/50/</code> and
<code>group-hover/foo//bar:flex</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20466">#20466</a>)</li>
<li>Ensure <code>min-*</code>, <code>max-*</code>, and container query
variants with decimal values are sorted numerically (e.g.
<code>min-[40.25rem]</code> before <code>min-[40.5rem]</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20512">#20512</a>)</li>
<li>Ensure CSS comments ending with <code>\*/</code> are closed
correctly instead of swallowing the CSS that follows (e.g. <code>/*
C:\temp\*/</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20508">#20508</a>)</li>
<li>Improve style invalidation performance of <code>group-*</code> and
<code>peer-*</code> variants (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20513">#20513</a>)</li>
<li>Ensure cached compilers release their <code>loadModule</code> and
<code>loadStylesheet</code> callbacks after compilation (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20531">#20531</a>)</li>
<li>Canonicalization: preserve <code>&amp;</code> when moving a
pseudo-element into <code>*</code> or <code>**</code> (e.g.
<code>[&amp;_::before]:flex</code> →
<code>**:[&amp;::before]:flex</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20550">#20550</a>)</li>
<li>Ensure the <code>Set.prototype.intersection</code> polyfill in
<code>canonicalizeCandidates(…)</code> returns the intersection instead
of the first set on Node.js &lt; 22 (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20562">#20562</a>)</li>
<li>Canonicalization: ensure inline <code>theme(…)</code> alphas with
more than 2 decimals migrate to a percentage modifier with the same
opacity (e.g. <code>theme(colors.red.500/.12345)</code> →
<code>text-red-500/[12.345%]</code>, not
<code>text-red-500/[12.345]</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20563">#20563</a>)</li>
<li>Canonicalization: preserve inline <code>theme(…)</code> alphas as an
arbitrary percentage when a custom <code>--opacity-*</code> theme value
would change the opacity (e.g. <code>theme(colors.red.500/50%)</code> →
<code>text-red-500/[50%]</code> with <code>--opacity-50: 10%</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20563">#20563</a>)</li>
<li>Ensure the <code>@property</code> fallback isn't applied in Safari
versions that no longer support <code>margin-trim: inline</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20569">#20569</a>)</li>
<li>Treat viewport units like <code>dvmin</code> and <code>svi</code>
and font-relative units like <code>cap</code> and <code>rex</code> as
lengths in arbitrary values (e.g. <code>text-[10dvmin]</code> generates
<code>font-size</code> instead of <code>color</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20516">#20516</a>)</li>
<li>Write plugin logs to stderr in <code>tailwindcss canonicalize</code>
so they don't end up in the results on stdout (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20561">#20561</a>)</li>
<li>Extract class shorthands on later lines when Pug text, comments, or
quoted attribute values contain unbalanced brackets, or a quote that
doesn't start a string (e.g.
<code>input(pattern=/&quot;/.source)</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20547">#20547</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20572">#20572</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md">@​tailwindcss/vite's
changelog</a>.</em></p>
<blockquote>
<h2>[4.3.5] - 2026-11-06</h2>
<h3>Fixed</h3>
<ul>
<li>Canonicalization: improve performance in projects with many
functional variant values (e.g. a <code>matchVariant</code> plugin with
thousands of values) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20663">#20663</a>)</li>
<li>Don't crash or create a fallback with the wrong color for a
<code>color-mix(…)</code> without a color interpolation method (e.g.
<code>color-mix(var(--color-red-500))</code> or
<code>color-mix(currentcolor 50%, transparent)</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20658">#20658</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20666">#20666</a>)</li>
<li>Ensure <code>@tailwindcss/oxide-wasm32-wasi</code> loads instead of
hanging forever (e.g. with <code>NAPI_RS_FORCE_WASI=error</code> or in
WebContainers) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20667">#20667</a>)</li>
<li>Remove <code>as: '*.css'</code> from the
<code>@tailwindcss/turbopack</code> setup in its README, because it
breaks CSS modules (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20660">#20660</a>)</li>
<li>Ignore <code>&lt;!--</code> and <code>--&gt;</code> between
top-level rules in CSS instead of throwing or swallowing the next rule
(e.g. <code>a { color: red } --&gt; b { color: blue }</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20665">#20665</a>)</li>
<li>Ensure <code>@tailwindcss/oxide-wasm32-wasi</code> detects changed
and new source files after the first scan (e.g. in WebContainers) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20487">#20487</a>)</li>
<li>Prevent type errors with <code>skipLibCheck: false</code> caused by
imports of unshipped modules in the <code>@tailwindcss/node</code> type
declarations (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20632">#20632</a>)</li>
</ul>
<h2>[4.3.4] - 2026-11-02</h2>
<h3>Added</h3>
<ul>
<li>Add <code>@tailwindcss/turbopack</code>, a Turbopack loader for
using Tailwind CSS with Next.js (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20367">#20367</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure watch mode detects changes to symlinked <code>@source</code>
files whose real paths aren't otherwise scanned (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20356">#20356</a>)</li>
<li>Ensure variants using <code>@scope</code> wrap generated utilities
instead of nesting inside them (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20369">#20369</a>)</li>
<li>Ensure nested <code>@scope</code> rules preserve their scoping
semantics when flattened (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20369">#20369</a>)</li>
<li>Preserve declarations directly inside <code>@scope</code> by
wrapping them in <code>:where(:scope)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20369">#20369</a>)</li>
<li>Ensure generated utilities include a space in empty
<code>var()</code> fallbacks (e.g. <code>var(--tw-blur,)</code> →
<code>var(--tw-blur, )</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20373">#20373</a>)</li>
<li>Canonicalization: convert arbitrary breakpoint and container query
variants to named equivalents (e.g. <code>max-[64rem]:flex</code> →
<code>max-lg:flex</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20380">#20380</a>)</li>
<li>Prevent <code>@tailwindcss/vite</code> from crashing on every edit
under Vite's experimental <code>bundledDev</code> mode (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20379">#20379</a>)</li>
<li>Ensure <code>@tailwindcss/oxide</code> falls back to WASM on
platforms without native bindings
(<code>@tailwindcss/oxide-wasm32-wasi</code> now installs on all
platforms, but only loads when no native binding is available) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20383">#20383</a>)</li>
<li>Extract class candidates from Ruby <code>%w</code> and
<code>%W</code> literals using angle brackets or custom delimiters (e.g.
<code>%w&lt;flex&gt;</code>, <code>%w|flex|</code>), including in Slim
and Haml templates (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20387">#20387</a>)</li>
<li>Preserve whitespace in <code>--default(…)</code> values in
functional <code>@utility</code> definitions (e.g. <code>--default(box
alphabetic)</code> no longer becomes <code>boxalphabetic</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20392">#20392</a>)</li>
<li>Ensure automatic source detection respects negation-based
<code>.gitignore</code> files (e.g. <code>/*</code> followed by
<code>!/…</code> patterns) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20397">#20397</a>)</li>
<li>Ensure root <code>theme('…')</code> namespace lookups in JavaScript
plugins and config files return the full namespace object instead of the
value of its <code>DEFAULT</code> key (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20399">#20399</a>)</li>
<li>Skip ignored directories when generating watch globs instead of
walking their contents on every rebuild (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20408">#20408</a>)</li>
<li>Drop invalid UTF-8 candidates during class detection (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20389">#20389</a>)</li>
<li>Prevent <code>@tailwindcss/vite</code> from forcing full-page
reloads for scanned files that Vite does not handle as modules (e.g.
<code>.php</code> files) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20414">#20414</a>)</li>
<li>Canonicalization: don't merge utilities that reference different
theme variables set to CSS-wide keywords like <code>unset</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20417">#20417</a>)</li>
<li>Don't generate utilities when a modifier is used that would
otherwise be silently ignored (e.g. <code>rounded-sm/[5]</code>,
<code>shadow-sm/foo</code>, <code>stroke-2/50</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20419">#20419</a>)</li>
<li>Preserve <code>and</code>, <code>or</code>, and <code>not</code>
inside selectors in <code>supports-[…]</code> variants (e.g.
<code>supports-[selector(a:not(.foo))]:flex</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20420">#20420</a>)</li>
<li>Don't warn about Angular's <code>::ng-deep</code> and
<code>:host-context()</code> when optimizing CSS (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20434">#20434</a>)</li>
<li>Don't generate CSS for candidates containing an empty additional
modifier (e.g. <code>bg-red-500/50/</code> and
<code>group-hover/foo//bar:flex</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20466">#20466</a>)</li>
<li>Ensure <code>min-*</code>, <code>max-*</code>, and container query
variants with decimal values are sorted numerically (e.g.
<code>min-[40.25rem]</code> before <code>min-[40.5rem]</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20512">#20512</a>)</li>
<li>Ensure CSS comments ending with <code>\*/</code> are closed
correctly instead of swallowing the CSS that follows (e.g. <code>/*
C:\temp\*/</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20508">#20508</a>)</li>
<li>Improve style invalidation performance of <code>group-*</code> and
<code>peer-*</code> variants (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20513">#20513</a>)</li>
<li>Ensure cached compilers release their <code>loadModule</code> and
<code>loadStylesheet</code> callbacks after compilation (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20531">#20531</a>)</li>
<li>Canonicalization: preserve <code>&amp;</code> when moving a
pseudo-element into <code>*</code> or <code>**</code> (e.g.
<code>[&amp;_::before]:flex</code> →
<code>**:[&amp;::before]:flex</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20550">#20550</a>)</li>
<li>Ensure the <code>Set.prototype.intersection</code> polyfill in
<code>canonicalizeCandidates(…)</code> returns the intersection instead
of the first set on Node.js &lt; 22 (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20562">#20562</a>)</li>
<li>Canonicalization: ensure inline <code>theme(…)</code> alphas with
more than 2 decimals migrate to a percentage modifier with the same
opacity (e.g. <code>theme(colors.red.500/.12345)</code> →
<code>text-red-500/[12.345%]</code>, not
<code>text-red-500/[12.345]</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20563">#20563</a>)</li>
<li>Canonicalization: preserve inline <code>theme(…)</code> alphas as an
arbitrary percentage when a custom <code>--opacity-*</code> theme value
would change the opacity (e.g. <code>theme(colors.red.500/50%)</code> →
<code>text-red-500/[50%]</code> with <code>--opacity-50: 10%</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20563">#20563</a>)</li>
<li>Ensure the <code>@property</code> fallback isn't applied in Safari
versions that no longer support <code>margin-trim: inline</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20569">#20569</a>)</li>
<li>Treat viewport units like <code>dvmin</code> and <code>svi</code>
and font-relative units like <code>cap</code> and <code>rex</code> as
lengths in arbitrary values (e.g. <code>text-[10dvmin]</code> generates
<code>font-size</code> instead of <code>color</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20516">#20516</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/9b2c925c19aae46ff4f9cf54a2fa6d2dbac7fa19"><code>9b2c925</code></a>
4.3.5 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/20672">#20672</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/2626ae6ceddf36069ab6d55c53a5857c1e2e360a"><code>2626ae6</code></a>
4.3.4 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/20447">#20447</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/00ef99df3ddb067bbbc4c7df9ba5c756343dc5fe"><code>00ef99d</code></a>
Do not force full page reloads when using <code>@tailwindcss/vite</code>
(<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/20414">#20414</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/50daebded0a7c0fc529fe2fd5ff138cae7229bde"><code>50daebd</code></a>
Prevent <code>@tailwindcss/vite</code> crash under Vite's experimental
<code>bundledDev</code> (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/20">#20</a>...</li>
<li>See full diff in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.3.5/packages/@tailwindcss-vite">compare
view</a></li>
</ul>
</details>
<br />

Updates `react-router-dom` from 7.18.4 to 7.18.5
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/remix-run/react-router/blob/react-router-dom@7.18.5/packages/react-router-dom/CHANGELOG.md">react-router-dom's
changelog</a>.</em></p>
<blockquote>
<h2>v7.18.5</h2>
<h3>Patch Changes</h3>
<ul>
<li>Updated dependencies:
<ul>
<li><a
href="https://github.com/remix-run/react-router/releases/tag/react-router@7.18.5"><code>react-router@7.18.5</code></a></li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/remix-run/react-router/commit/1ad93b4cb4b045366b7d73639de34787812ad5b5"><code>1ad93b4</code></a>
Release v7.18.5 (<a
href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/15705">#15705</a>)</li>
<li>See full diff in <a
href="https://github.com/remix-run/react-router/commits/react-router-dom@7.18.5/packages/react-router-dom">compare
view</a></li>
</ul>
</details>
<br />

Updates `@types/node` from 26.6.5 to 26.6.6
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />

Updates `@vitejs/plugin-react` from 6.1.2 to 6.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/releases">@​vitejs/plugin-react's
releases</a>.</em></p>
<blockquote>
<h2>plugin-react@6.3.0</h2>
<h3>Make <code>reactCompilerPreset</code> work with
<code>@rolldown/plugin-babel</code>'s <code>parallel</code> option (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1549">#1549</a>)</h3>
<p><code>reactCompilerPreset</code> now refers to its Babel preset by
module path instead of by function, so it can be sent to worker
threads.</p>
<h2>plugin-react@6.2.1</h2>
<h3>Fix <code>refreshInclude</code> and <code>refreshExclude</code>
options not working (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1543">#1543</a>)</h3>
<p>Fix mistake from <a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1516">#1516</a></p>
<h2>plugin-react@6.2.0</h2>
<h3>Add <code>refreshInclude</code> and <code>refreshExclude</code>
options (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1516">#1516</a>)</h3>
<p>Add <code>refreshInclude</code> and <code>refreshExclude</code>
options to skip fast refresh for certain files that won't run in the
browser.</p>
<h3>Expand <code>oxc-transform-react</code> peer dependency range (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1540">#1540</a>)</h3>
<p>The peer dependency version range for
<code>oxc-transform-react</code> was expanded from <code>^0.152.0</code>
to <code>&gt;=0.152.0 &lt;0.157.0</code>.</p>
<h3>Expand <code>@rolldown/plugin-babel</code> peer dependency range (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1541">#1541</a>)</h3>
<p>The peer dependency version range for
<code>@rolldown/plugin-babel</code> was expanded from <code>^0.1.7 ||
^0.2.0</code> to <code>^0.1.7 || ^0.2.0 || ^0.3.0</code>.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md">@​vitejs/plugin-react's
changelog</a>.</em></p>
<blockquote>
<h2>6.3.0 (2026-11-09)</h2>
<h3>Make <code>reactCompilerPreset</code> work with
<code>@rolldown/plugin-babel</code>'s <code>parallel</code> option (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1549">#1549</a>)</h3>
<p><code>reactCompilerPreset</code> now refers to its Babel preset by
module path instead of by function, so it can be sent to worker
threads.</p>
<h2>6.2.1 (2026-11-02)</h2>
<h3>Fix <code>refreshInclude</code> and <code>refreshExclude</code>
options not working (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1543">#1543</a>)</h3>
<p>Fix mistake from <a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1516">#1516</a></p>
<h2>6.2.0 (2026-11-02)</h2>
<h3>Add <code>refreshInclude</code> and <code>refreshExclude</code>
options (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1516">#1516</a>)</h3>
<p>Add <code>refreshInclude</code> and <code>refreshExclude</code>
options to skip fast refresh for certain files that won't run in the
browser.</p>
<h3>Expand <code>oxc-transform-react</code> peer dependency range (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1540">#1540</a>)</h3>
<p>The peer dependency version range for
<code>oxc-transform-react</code> was expanded from <code>^0.152.0</code>
to <code>&gt;=0.152.0 &lt;0.157.0</code>.</p>
<h3>Expand <code>@rolldown/plugin-babel</code> peer dependency range (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1541">#1541</a>)</h3>
<p>The peer dependency version range for
<code>@rolldown/plugin-babel</code> was expanded from <code>^0.1.7 ||
^0.2.0</code> to <code>^0.1.7 || ^0.2.0 || ^0.3.0</code>.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/0e95069a8f90489da74371c9ad35dfc619c1b72e"><code>0e95069</code></a>
release: plugin-react@6.3.0 (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1557">#1557</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/8a7d0d4e35ba433dcc02121e3e118303c66fe7b7"><code>8a7d0d4</code></a>
feat(plugin-react): make reactCompilerPreset work with
<code>@​rolldown/plugin-babel</code>...</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/29efd1cc6d875185f91a3325beb981bb45af876f"><code>29efd1c</code></a>
release: plugin-react@6.2.1 (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1544">#1544</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/22079faa3ea9145bb1fcd295d3e39c8aeb06c669"><code>22079fa</code></a>
fix(plugin-react): fix new refreshInclude option (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1543">#1543</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/d0f72340cf4e6572363548ae039d92f059e4ceb0"><code>d0f7234</code></a>
release: plugin-react@6.2.0 (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1542">#1542</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/186d1e8dd3fff55a9d51e6f9192a7951c113a3dd"><code>186d1e8</code></a>
feat(plugin-react): expand <code>@rolldown/plugin-babel</code> peer dep
range (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1541">#1541</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/a554a33620c4c05024b28e0ab804af0a3d536aea"><code>a554a33</code></a>
feat(plugin-react): expand <code>oxc-transform-react</code> peer dep
range (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1540">#1540</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/ef758badba331bfcd182ed56e4e7ac0343d180c2"><code>ef758ba</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1531">#1531</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/304a92a9e6fb0374bf7e0bca363984c5d5c73590"><code>304a92a</code></a>
feat(plugin-react): add refreshInclude and refreshExclude options (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1516">#1516</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/b3e9835ff60cc8ca521f489f452659e3d49ce8bf"><code>b3e9835</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1517">#1517</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.3.0/packages/plugin-react">compare
view</a></li>
</ul>
</details>
<br />

Updates `knip` from 6.43.0 to 6.44.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpro-nl/knip/releases">knip's
releases</a>.</em></p>
<blockquote>
<h2>Release 6.44.2</h2>
<ul>
<li>Follow extends in Babel configuration files (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2274">#2274</a>)
(50d9a3c1f66f8fba98cbc9c7634e817e3c8100e1) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Follow extended Stylelint configuration files (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2275">#2275</a>)
(dd45e47fb1a25c620e34cccba939a077b5df7798) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Add more shell builtins and POSIX utilities to the ignored global
binaries (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2277">#2277</a>)
(7a89dec69836c1e6271dcf12ca7ce9da839d2618) - thanks <a
href="https://github.com/SwastikTripathi"><code>@​SwastikTripathi</code></a>!</li>
<li>Fix typos and grammar errors (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2279">#2279</a>)
(0be8782ac0f6e5d32b62ee00473cf3aeb72821f5) - thanks <a
href="https://github.com/deining"><code>@​deining</code></a>!</li>
<li>Read gatsby-config.mjs and gatsby-node.mjs in the Gatsby plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2280">#2280</a>)
(daf7d03799e74f56679863cad9e394d2c337acbb) - thanks <a
href="https://github.com/SwastikTripathi"><code>@​SwastikTripathi</code></a>!</li>
<li>Ignore the uno.css virtual module in the UnoCSS plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2276">#2276</a>)
(518e67f0b69bd0bb6e70f1ba98b88623713975e0) - thanks <a
href="https://github.com/SwastikTripathi"><code>@​SwastikTripathi</code></a>!</li>
<li>Read every extension React Router accepts in the React Router plugin
(<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2281">#2281</a>)
(97afba1e2f3890e3e0ba6916efd20af8c5d0d19d) - thanks <a
href="https://github.com/SwastikTripathi"><code>@​SwastikTripathi</code></a>!</li>
<li>Recognize Storybook module config extensions (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2273">#2273</a>)
(b697baa11feb5cdf36b6d8d813449c01d37f0955) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Skip URL imports in the SCSS compiler (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2289">#2289</a>)
(eb9892339e2fae552f070fd950264c42cdc0c1d4) - thanks <a
href="https://github.com/gioboa"><code>@​gioboa</code></a>!</li>
<li>Support custom coverage providers in the Vitest plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2291">#2291</a>)
(e9e656c2dffa8167e4aa5aed1cba1372aa7ce744) - thanks <a
href="https://github.com/gioboa"><code>@​gioboa</code></a>!</li>
<li>Read npx options only before the package (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2290">#2290</a>)
(3195963cfed44767c05f39678c00cd876897b2e5) - thanks <a
href="https://github.com/gioboa"><code>@​gioboa</code></a>!</li>
<li>Accept jsx and tsx for Storybook main config
(86c1133919b76a0021450b106f62c4cd300a00da)</li>
<li>Update sanity snapshot
(2064858b7014b4363f26217144fc9ced33b597bf)</li>
<li>Accept -r as shorthand for --root in the Vitest plugin
(30601240480f4363bf94f88a0f893304596da402)</li>
<li>Resolve commands executed with vp exec (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2285">#2285</a>)
(406a776f722b5e7e39b14b9e073bd30fe0fdf5d2) - thanks <a
href="https://github.com/everton-dgn"><code>@​everton-dgn</code></a>!</li>
<li>Keep production entries that bun and nub also run (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2293">#2293</a>)
(55aa0f8d60c68b4bfda4a0ff9d0804e7097b03d6) - thanks <a
href="https://github.com/gioboa"><code>@​gioboa</code></a>!</li>
<li>Remove <code>minimumReleaseAgeExclude</code> items
(e97fe7804eebff7d85ee93380c04ee9cb998ed81)</li>
<li>Update dependencies (203e380e15c829b1bf5b2f34e165b7aeb3701580)</li>
<li>Add some prerequisites to release machinery
(736327f891d749ccb6316063b2a8f00b3809d797)</li>
</ul>
<h2>Release 6.44.1</h2>
<ul>
<li>Narrow the docs package Node.js engine range to Astro's requirement
(60589c42a12b8f26c048318017700f56cbe9bbef)</li>
<li>Follow resolve.alias in the Rsbuild plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2251">#2251</a>)
(4dc61d2febaa15770f41d8a5af7d33f19de25fa3) - thanks <a
href="https://github.com/fixfon"><code>@​fixfon</code></a>!</li>
<li>Read SWC plugins from <code>tools.swc</code> in the Rsbuild plugin
(<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2253">#2253</a>)
(ad2227a52970044d727e08a73b22e9ebea811dd1) - thanks <a
href="https://github.com/fixfon"><code>@​fixfon</code></a>!</li>
<li>Read .release-it.mjs and other c12 extensions in the Release It
plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2258">#2258</a>)
(87816e6f311510c139e998b2b956aed612239b1d) - thanks <a
href="https://github.com/SwastikTripathi"><code>@​SwastikTripathi</code></a>!</li>
<li>Read .mocharc.mjs in the Mocha plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2259">#2259</a>)
(16fee14f4ec1bcd3244a1b4cb2ac15343a4e0999) - thanks <a
href="https://github.com/SwastikTripathi"><code>@​SwastikTripathi</code></a>!</li>
<li>Restart the language server on config changes after a failed start
(<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2257">#2257</a>)
(f7db448226066f61ee6ee7e938cdc683bbbf433f) - thanks <a
href="https://github.com/fixfon"><code>@​fixfon</code></a>!</li>
<li>Keep the command after boolean flags in the Bun resolver (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2262">#2262</a>)
(3c84cafb68b2fa3d419b03a3a5e564d60aaeef30)</li>
<li>Read babel.config.mts in the Babel plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2267">#2267</a>)
(04abfd84887e57eeb5dd8e8a9044cd3aa405ad8c) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Track import().then() callback member usage (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2264">#2264</a>)
(14565eb56ec16140d30708fa498c8b34f23c1f9f) - thanks <a
href="https://github.com/gioboa"><code>@​gioboa</code></a>!</li>
<li>Reload the knip config file when the language server restarts (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2261">#2261</a>)
(fa9ca71a9a67f017e2cf209725f4ab7aa726c220) - thanks <a
href="https://github.com/fixfon"><code>@​fixfon</code></a>!</li>
<li>Read all supported CSpell configuration locations (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2265">#2265</a>)
(c6c5b2cbf6a96abef70f6f30301fc67a0f56a6cd) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Read SVGR configs from cosmiconfig search locations (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2266">#2266</a>)
(47082a803eb776166cf39399c1e4e06a737c91e7) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Handle extends arrays in the npm-package-json-lint plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2269">#2269</a>)
(83c8c80a50e0d77babc5422c059ef86c53a2e548) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Read Relay configuration from package.json (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2270">#2270</a>)
(6ce8b0050006251148b3bbc42989bb430ed484ec) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Read dependencies from SWC config arrays (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2271">#2271</a>)
(5ffe9276e8a54ba00035976ad8dfe394535b9f50) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Recognize CJS and ESM data files in the Eleventy plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2272">#2272</a>)
(d939417b0ea7660eae1a119d5e2ddd0aedeadca1) - thanks <a
href="https://github.com/clean99"><code>@​clean99</code></a>!</li>
<li>Unroll case iterations in the SolidJS Vite, Buf, Eve and Nx plugin
tests (5f87aabe082b3dc0db5a77d7c37119caa9b31fb3)</li>
<li>Hoist remark to the root for the VS Code remark extension
(e7772700fb26260fc877e7d66b30005b1acdfef6)</li>
<li>Format root Markdown and package READMEs with pnpm remark
(58c7670cfb255c395b6dfec0b70b1f25a0860d47)</li>
<li>Write readable tests (393b34864396372bd9b90ab50de96c0628ad5d91)</li>
<li>Format Markdown with remark
(10c0133f697bcaecb17833094749178fb5d5f594)</li>
<li>Fix local links in Markdown
(a3fd031d853f9ed55cd952a4211c75d43840c921)</li>
<li>Treat cloudflare: specifiers as runtime built-ins (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2268">#2268</a>)
(e7f261e82b0a310141aea03956d52d218929c518) - thanks <a
href="https://github.com/SwastikTripathi"><code>@​SwastikTripathi</code></a>!</li>
</ul>
<h2>Release 6.44.0</h2>
<ul>
<li>Clarify that custom <code>entry</code> still adds entry files from
package.json (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2206">#2206</a>)
(4099ddeef28406ed8c9b798cf5ce525241818642) - thanks <a
href="https://github.com/MannXo"><code>@​MannXo</code></a>!</li>
<li>Resolve expanded package scripts against the directory of their
manifest (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2209">#2209</a>)
(9d8464dd7335b9898a17a0db59c3c33a7ae460f4) - thanks <a
href="https://github.com/fixfon"><code>@​fixfon</code></a>!</li>
<li>Track exports through namespace member chains of any depth (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2210">#2210</a>)
(75697027e89e176c16e3d567cff3d6e016d0e9f0) - thanks <a
href="https://github.com/fixfon"><code>@​fixfon</code></a>!</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpro-nl/knip/commit/3b3c9a6b7bc080d45fab72d12232e415211f6835"><code>3b3c9a6</code></a>
Release knip@6.44.2</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/203e380e15c829b1bf5b2f34e165b7aeb3701580"><code>203e380</code></a>
Update dependencies</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/55aa0f8d60c68b4bfda4a0ff9d0804e7097b03d6"><code>55aa0f8</code></a>
Keep production entries that bun and nub also run (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2293">#2293</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/406a776f722b5e7e39b14b9e073bd30fe0fdf5d2"><code>406a776</code></a>
Resolve commands executed with vp exec (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2285">#2285</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/30601240480f4363bf94f88a0f893304596da402"><code>3060124</code></a>
Accept -r as shorthand for --root in the Vitest plugin</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/86c1133919b76a0021450b106f62c4cd300a00da"><code>86c1133</code></a>
Accept jsx and tsx for Storybook main config</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/3195963cfed44767c05f39678c00cd876897b2e5"><code>3195963</code></a>
Read npx options only before the package (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2290">#2290</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/e9e656c2dffa8167e4aa5aed1cba1372aa7ce744"><code>e9e656c</code></a>
Support custom coverage providers in the Vitest plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2291">#2291</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/eb9892339e2fae552f070fd950264c42cdc0c1d4"><code>eb98923</code></a>
Skip URL imports in the SCSS compiler (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2289">#2289</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/b697baa11feb5cdf36b6d8d813449c01d37f0955"><code>b697baa</code></a>
Recognize Storybook module config extensions (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/2273">#2273</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/webpro-nl/knip/commits/knip@6.44.2/packages/knip">compare
view</a></li>
</ul>
</details>
<br />

Updates `oxfmt` from 0.75.0 to 0.78.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/oxc-project/oxc/releases">oxfmt's
releases</a>.</em></p>
<blockquote>
<h2>oxfmt v0.78.0</h2>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>ab78621 formatter_css/less: Print <code>~</code> escape consistently
(<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/29089">#29089</a>)
(Yuji Sugiura)</li>
<li>91721d2 formatter_css/less: Print Less % selectors (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/29088">#29088</a>)
(Yuji Sugiura)</li>
<li>449e91f oxfmt: Format ts-in-astro as TSX (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/29080">#29080</a>)
(leaysgur)</li>
<li>8d8845e formatter/jsdoc: Strip <code>*</code> prefixes from
multiline default value (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28910">#28910</a>)
(leaysgur)</li>
<li>cdb1501 formatter/jsdoc: Handle every line terminator in multi-line
JSDoc types (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28909">#28909</a>)
(leaysgur)</li>
<li>fd51bff jsdoc: Handle every line terminators as newline (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28902">#28902</a>)
(leaysgur)</li>
<li>2f80765 formatter_toml: Format whitespace-only document to empty (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28899">#28899</a>)
(leaysgur)</li>
<li>5e1e02c formatter_graphql: Allow empty document (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28898">#28898</a>)
(leaysgur)</li>
<li>06e72c0 formatter/tailwind: Normalize CR in Tailwind template with
<code>preserveWhitespace</code> (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28896">#28896</a>)
(leaysgur)</li>
</ul>
<h3>⚡ Performance</h3>
<ul>
<li>934ca98 formatter: Use <code>Arc</code> for tailwind options across
embedding (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/29079">#29079</a>)
(leaysgur)</li>
<li>dde9c5c formatter_htmlish: Skip <code>&lt;/script</code> escape if
possible (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/29078">#29078</a>)
(leaysgur)</li>
<li>dc4d918 formatter: Format embedded expr of one name without parsing
(<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/29077">#29077</a>)
(leaysgur)</li>
</ul>
<h3>📚 Documentation</h3>
<ul>
<li>eb2eb2d formatter_htmlish: Cover block elements in
<code>DIVERGENCES.md#interpolation-element-as-text</code> (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28901">#28901</a>)
(leaysgur)</li>
<li>0f4ec80 formatter/tailwind: Note Tailwind sorting tears escaped
whitespace apart (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28900">#28900</a>)
(leaysgur)</li>
</ul>
<h2>oxfmt v0.77.0</h2>
<h3>💥 BREAKING CHANGES</h3>
<ul>
<li>00d1a67 oxfmt: [<strong>BREAKING</strong>] Format
<code>parser:vue</code> files by <code>oxc_formatter_htmlish</code> (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28848">#28848</a>)
(leaysgur)</li>
</ul>
<h3>🚀 Features</h3>
<ul>
<li>9a81e58 formatter_htmlish: Format Vue templates (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28847">#28847</a>)
(leaysgur)</li>
<li>119d82f formatter: Format a template's expressions and handlers as
<code>JsRoot</code> (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28846">#28846</a>)
(leaysgur)</li>
</ul>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>fa66fde oxlint,oxfmt: Resolve Vite+ config root from the config file
directory (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28801">#28801</a>)
(MK (fengmk2))</li>
<li>4d4104d formatter_htmlish: Preserve <code>doctype</code> case in
embedded (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28797">#28797</a>)
(leaysgur)</li>
<li>ebfd40a formatter: Sort Tailwind calls printed as member chains (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28800">#28800</a>)
(Yuji Sugiura)</li>
<li>e62e5cb formatter: Decide quotes of a Tailwind key printed as one
class (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28798">#28798</a>)
(Yuji Sugiura)</li>
<li>959edc1 formatter: Don't sort templates in nested non-Tailwind calls
(<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28794">#28794</a>)
(Yuji Sugiura)</li>
<li>6ffbe32 formatter/jsdoc: Prevent <code>@tag</code> from being moved
to the line start (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28835">#28835</a>)
(leaysgur)</li>
<li>94fbef5 formatter_css: Treat comments in <code>style</code> attr as
fill items (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28832">#28832</a>)
(leaysgur)</li>
<li>e4a80f7 formatter_css: Normalize selectors inside
<code>:deep</code>, <code>:slotted</code> and <code>:local</code> (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28805">#28805</a>)
(leaysgur)</li>
<li>255c5cc formatter: Measure Tailwind class argument after collapsing
whitespace (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28745">#28745</a>)
(Lee Jaeha / Adam)</li>
<li>e6c4fef formatter: Decide template and object key layouts from
collapsed Tailwind classes (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28791">#28791</a>)
(Yuji Sugiura)</li>
<li>0b44164 formatter: Decide JSX opening element layout from collapsed
Tailwind class string (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28744">#28744</a>)
(Lee Jaeha / Adam)</li>
<li>b8ba9ae formatter: Print decorators on rest parameters (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28731">#28731</a>)
(YT)</li>
</ul>
<h3>⚡ Performance</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/oxc-project/oxc/commit/7d8e1f4953a694e9705117f674933925142ed457"><code>7d8e1f4</code></a>
release(apps): oxlint v1.93.0 &amp;&amp; oxfmt v0.78.0 (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/29090">#29090</a>)</li>
<li><a
href="https://github.com/oxc-project/oxc/commit/29daf901a1ea6b0a7a56c2b9d488bd2850d0abd4"><code>29daf90</code></a>
release(apps): oxlint v1.92.0 &amp;&amp; oxfmt v0.77.0 (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28906">#28906</a>)</li>
<li><a
href="https://github.com/oxc-project/oxc/commit/f3fcdcc61b08e9880476279ba21a363967940fa4"><code>f3fcdcc</code></a>
release(apps): oxlint v1.91.0 &amp;&amp; oxfmt v0.76.0 (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/28718">#28718</a>)</li>
<li>See full diff in <a
href="https://github.com/oxc-project/oxc/commits/oxfmt_v0.78.0/npm/oxfmt">compare
view</a></li>
</ul>
</details>
<br />

Updates `oxlint` from 1.90.0 to 1.93.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/oxc-project/oxc/releases">oxlint's
releases</a>.</em></p>
<blockquote>
<h2>oxlint v1.93.0</h2>
<h3>🚀 Features</h3>
<ul>
<li>6195265 linter/promise/prefer-catch: Implement suggestion (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28919">#28919</a>)
(Mikhail Baev)</li>
</ul>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>866664e linter/unicorn/no-useless-undefined: Skip var initializers
(<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29007">#29007</a>)
(camc314)</li>
<li>30603cb linter/react/exhaustive-deps: Preserve comments in
dependency removals (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29047">#29047</a>)
(camc314)</li>
<li>4630fe4 linter/unicorn/no-useless-undefined: Narrow return type
exemptions (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29000">#29000</a>)
(camc314)</li>
<li>b63870a linter/vitest/expect-expect: Recognize benchmark fixtures
(<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29044">#29044</a>)
(camc314)</li>
<li>9c62d2a linter/eslint/no-unreachable-loop: Ignore enclosing
finalizers for continues (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29004">#29004</a>)
(camc314)</li>
<li>6303df1 jsdoc: Preserve param tags after unmatched description
delimiters (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28923">#28923</a>)
(Vishal Punjabi)</li>
<li>fe66fa7 linter/eslint/no-lone-blocks: Report redundant blocks in
function bodies (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29043">#29043</a>)
(camc314)</li>
<li>e1694bd linter/unicorn/no-useless-undefined: Preserve shadowed
bindings (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29046">#29046</a>)
(camc314)</li>
<li>791b5f5 linter/unicorn/prefer-regexp-test: Restrict automatic
argument swaps (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29045">#29045</a>)
(camc314)</li>
<li>e7654f6 linter/react/display-name: Ignore unrelated memo and
forwardRef calls (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29005">#29005</a>)
(camc314)</li>
<li>2487360 linter/unicorn/no-useless-undefined: Report guarded indexed
access (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29014">#29014</a>)
(camc314)</li>
<li>a791a5b cfg: Resolve continues through stacked loop labels (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29016">#29016</a>)
(camc314)</li>
<li>287ba19 linter/eslint/id-length: Ignore TypeScript qualified
references (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29037">#29037</a>)
(camc314)</li>
<li>b71234f cfg: Skip labeled contexts for unlabeled jumps (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29001">#29001</a>)
(camc314)</li>
<li>bb21a3c linter/import/no-anonymous-default-export: Report
parenthesized exports (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29002">#29002</a>)
(camc314)</li>
<li>f38f738 linter/eslint/prefer-destructuring: Skip fixes that remove
comments (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29003">#29003</a>)
(camc314)</li>
<li>bf11006 linter/react/exhaustive-deps: Suggest dependency removals
(<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28925">#28925</a>)
(camc314)</li>
<li>6bbb92a linter: Remove unused <code>oxlint-disable</code> directives
with <code>--fix</code> (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/27698">#27698</a>)
(Ryan Tsao)</li>
<li>3b35cb6 linter/disable-directives: Preserve separators and disable
spans (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28921">#28921</a>)
(camc314)</li>
<li>1253445 linter/eslint/no-restricted-imports: Report re-exported
imports once (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28920">#28920</a>)
(Ramy Akin Saidi)</li>
</ul>
<h3>⚡ Performance</h3>
<ul>
<li>da620e6 linter: Start tsgolint before the regular lint pass (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28824">#28824</a>)
(Max Schwenk)</li>
</ul>
<h2>oxlint v1.92.0</h2>
<h3>🚀 Features</h3>
<ul>
<li>4a52ba2 oxlint: Discover tsrs for type-aware linting (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28751">#28751</a>)
(camc314)</li>
<li>b7d2c75 linter/eslint/no-redeclare: Add
<code>ignoreDeclarationMerge</code> option (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28816">#28816</a>)
(Cam McHenry)</li>
</ul>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>fa66fde oxlint,oxfmt: Resolve Vite+ config root from the config file
directory (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28801">#28801</a>)
(MK (fengmk2))</li>
<li>2091564 linter/jsdoc/require-param: Ignore enclosing function JSDoc
(<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28866">#28866</a>)
(camc314)</li>
<li>c6ec50b linter/react/only-export-components: Classify JSX values as
non-components (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28761">#28761</a>)
(camc314)</li>
<li>3c051ab linter/vitest/prefer-called-exactly-once-with: Preserve
neighboring code in autofix (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28864">#28864</a>)
(camc314)</li>
<li>674b962 linter/eslint/no-misleading-character-class: Use lazy regex
for combining marks (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28822">#28822</a>)
(Sysix)</li>
<li>838d339 linter/vitest/prefer-called-exactly-once-with: Avoid panic
on non-ASCII text (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28850">#28850</a>)
(YT)</li>
<li>8d24c26 linter/jsx-a11y/aria-role: Allow role={undefined} (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28804">#28804</a>)
(Abhay Godavarthy)</li>
<li>a7143bf linter/eslint/no-restricted-imports: Respect
allowTypeImports correctly for empty patterns (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28842">#28842</a>)
(Cam McHenry)</li>
<li>3d3a6f4 react-compiler: Ignore callback-local reassignments (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28820">#28820</a>)
(camc314)</li>
<li>0cc6515 linter/unicorn/prefer-type-error: Report throws in unbraced
if branches (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28819">#28819</a>)
(camc314)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md">oxlint's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<p>All notable changes to this package will be documented in this
file.</p>
<p>The format is based on <a
href="https://keepachangelog.com/en/1.0.0">Keep a Changelog</a>.</p>
<h2>[1.92.0] - 2026-11-06</h2>
<h3>🚀 Features</h3>
<ul>
<li>b7d2c75 linter/eslint/no-redeclare: Add
<code>ignoreDeclarationMerge</code> option (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28816">#28816</a>)
(Cam McHenry)</li>
</ul>
<h2>[1.91.0] - 2026-11-02</h2>
<h3>🚀 Features</h3>
<ul>
<li>419c1b0 linter: Add allow and allowPattern options to
react/capitalized-calls (Christian Vuerings)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/oxc-project/oxc/commit/7d8e1f4953a694e9705117f674933925142ed457"><code>7d8e1f4</code></a>
release(apps): oxlint v1.93.0 &amp;&amp; oxfmt v0.78.0 (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/29090">#29090</a>)</li>
<li><a
href="https://github.com/oxc-project/oxc/commit/29daf901a1ea6b0a7a56c2b9d488bd2850d0abd4"><code>29daf90</code></a>
release(apps): oxlint v1.92.0 &amp;&amp; oxfmt v0.77.0 (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28906">#28906</a>)</li>
<li><a
href="https://github.com/oxc-project/oxc/commit/b7d2c7563531a6b128d5a2120611e393226ffeef"><code>b7d2c75</code></a>
feat(linter/eslint/no-redeclare): add
<code>ignoreDeclarationMerge</code> option (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28816">#28816</a>)</li>
<li><a
href="https://github.com/oxc-project/oxc/commit/f3fcdcc61b08e9880476279ba21a363967940fa4"><code>f3fcdcc</code></a>
release(apps): oxlint v1.91.0 &amp;&amp; oxfmt v0.76.0 (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/28718">#28718</a>)</li>
<li><a
href="https://github.com/oxc-project/oxc/commit/419c1b0fd01e880ad022d0f27b60916814ea011f"><code>419c1b0</code></a>
feat(linter): add allow and allowPattern options to
react/capitalized-calls</li>
<li>See full diff in <a
href="https://github.com/oxc-project/oxc/commits/oxlint_v1.93.0/npm/oxlint">compare
view</a></li>
</ul>
</details>
<br />

Updates `oxlint-tsgolint` from 7.0.2005 to 7.0.2006
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/oxc-project/tsgolint/releases">oxlint-tsgolint's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.2006</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): update npm packages by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/oxc-project/tsgolint/pull/1324">oxc-project/tsgolint#1324</a></li>
<li>chore(deps): require Go 1.26.10 by <a
href="https://github.com/camc314"><code>@​camc314</code></a> in <a
href="https://redirect.github.com/oxc-project/tsgolint/pull/1332">oxc-project/tsgolint#1332</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/oxc-project/tsgolint/compare/v7.0.2005...v7.0.2006">https://github.com/oxc-project/tsgolint/compare/v7.0.2005...v7.0.2006</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/oxc-project/tsgolint/commit/420f4f134c4802af98780e3dc413f3452d53fe45"><code>420f4f1</code></a>
chore(deps): require Go 1.26.10 (<a
href="https://redirect.github.com/oxc-project/tsgolint/issues/1332">#1332</a>)</li>
<li><a
href="https://github.com/oxc-project/tsgolint/commit/9081583bd5c02c1b42bdebedf38e268fb68602c8"><code>9081583</code></a>
chore(deps): update npm packages (<a
href="https://redirect.github.com/oxc-project/tsgolint/issues/1324">#1324</a>)</li>
<li>See full diff in <a
href="https://github.com/oxc-project/tsgolint/compare/v7.0.2005...v7.0.2006">compare
view</a></li>
</ul>
</details>
<br />

Updates `tailwindcss` from 4.3.3 to 4.3.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases">tailwindcss's
releases</a>.</em></p>
<blockquote>
<h2>v4.3.5</h2>
<h3>Fixed</h3>
<ul>
<li>Canonicalization: improve performance in projects with many
functional variant values (e.g. a <code>matchVariant</code> plugin with
thousands of values) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20663">#20663</a>)</li>
<li>Don't crash or create a fallback with the wrong color for a
<code>color-mix(…)</code> without a color interpolation method (e.g.
<code>color-mix(var(--color-red-500))</code> or
<code>color-mix(currentcolor 50%, transparent)</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20658">#20658</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20666">#20666</a>)</li>
<li>Ensure <code>@tailwindcss/oxide-wasm32-wasi</code> loads instead of
hanging forever (e.g. with <code>NAPI_RS_FORCE_WASI=error</code> or in
WebContainers) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20667">#20667</a>)</li>
<li>Remove <code>as: '*.css'</code> from the
<code>@tailwindcss/turbopack</code> setup in its README, because it
breaks CSS modules (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20660">#20660</a>)</li>
<li>Ignore <code>&lt;!--</code> and <code>--&gt;</code> between
top-level rules in CSS instead of throwing or swallowing the next rule
(e.g. <code>a { color: red } --&gt; b { color: blue }</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20665">#20665</a>)</li>
<li>Ensure <code>@tailwindcss/oxide-wasm32-wasi</code> detects changed
and new source files after the first scan (e.g. in WebContainers) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20487">#20487</a>)</li>
<li>Prevent type errors with <code>skipLibCheck: false</code> caused by
imports of unshipped modules in the <code>@tailwindcss/node</code> type
declarations (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20632">#20632</a>)</li>
</ul>
<h2>v4.3.4</h2>
<h3>Added</h3>
<ul>
<li>Add <code>@tailwindcss/turbopack</code>, a Turbopack loader for
using Tailwind CSS with Next.js (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20367">#20367</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure watch mode detects changes to symlinked <code>@source</code>
files whose real paths aren't otherwise scanned (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20356">#20356</a>)</li>
<li>Ensure variants using <code>@scope</code> wrap generated utilities
instead of nesting inside them (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20369">#20369</a>)</li>
<li>Ensure nested <code>@scope</code> rules preserve their scoping
semantics when flattened (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/20369">#20369</a>)</li>
<li>Preserve declarations directly inside <code>@scope</code> by
wrapping them in <code>:where(:scope)</code> (<a
href="https://redirect.github....

_Description has been truncated_

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Chores**
* Updated versions of several tools used by the project. These changes
do not alter any features or behavior visible to users.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: CaliBrain <calibrain@l4n.xyz>
2026-11-13 16:56:03 -06:00
2026-04-12 12:39:15 +01:00
2024-12-16 22:48:26 +00:00
2026-06-23 15:38:46 -04:00

📚 Shelfmark: Book Search & Request Tool

Shelfmark

Note

Shelfmark is feature stable and maintained on a best-effort basis. Bug fixes, security updates, and small quality-of-life improvements are still shipped, and pull requests are reviewed — including new features. There is no roadmap for new features for now.

Shelfmark is a self-hosted web interface for searching and requesting books and audiobooks across multiple sources. Bring your own sources, metadata providers, and download clients to build a single hub for your digital library. Supports multiple users with a built-in request system, so you can share your instance with others and let them browse and request books on their own.

Works great alongside the following library tools, with support for automatic imports:

✨ Features

  • One-Stop Interface - A clean, modern UI to search, browse, and download from multiple configured sources in one place
  • Multiple Sources - Configurable web (including OceanofPDF), torrent, usenet, IRC, Soulseek (slskd), and Webshare.cz source support, with indexers through Prowlarr or Jackett
  • Audiobook Support - Full audiobook search and download with dedicated processing
  • Flexible Search - Search metadata providers (Hardcover, Open Library, Google Books, DNB, Databáze knih, Moly.hu) for rich book and audiobook discovery, or query configured sources directly
  • Multi-User & Requests - Share your instance with others, let users browse and request books, and manage approvals with configurable notifications
  • Authentication - Built-in login, OIDC single sign-on, proxy auth, and Calibre-Web database support
  • Library Check - Optionally mark search results you already own in a Calibre or Audiobookshelf library, so you don't download a second copy. See Library Check
  • Hardcover Sync - Optionally pull a Hardcover shelf in as requests and download the books without an admin picking a release. Off by default. See Hardcover Sync
  • Real-Time Progress - Unified download queue with live status updates across all sources
  • Network Flexibility - Configurable proxy support, DNS settings, and optional Cloudflare handling for protected sources

🖼️ Screenshots

Home screen Home screen

Search results Search results

Multi-source downloads Multi-source downloads

Download queue Download queue

🚀 Quick Start

Prerequisites

  • Docker & Docker Compose
  • At least 2 GB of RAM available to the container when using the standard image — see Memory Requirements

Installation

  1. Download the docker-compose file:

    curl -O https://raw.githubusercontent.com/calibrain/shelfmark/main/compose/docker-compose.yml
    
  2. Start the service:

    docker compose up -d
    
  3. Open http://localhost:8084

Open the web interface, then configure the sources and settings you want to use.

Volume Setup

volumes:
  - /your/config/path:/config # Config, database, and artwork cache directory
  - /your/download/path:/books # Downloaded books
  - /client/path:/client/path # Optional: For Torrent/Usenet downloads, match your client directory exactly.

Tip

: Point the download volume to your CWA or Grimmory ingest folder for automatic import.

Note

: CIFS shares require nobrl mount option to avoid database lock errors.

Non-root container mode

  • Start the container as 1000:1000 with Docker user: "1000:1000" or docker run --user 1000:1000.
  • For Kubernetes, set runAsUser: 1000, runAsGroup: 1000, and runAsNonRoot: true together.
  • PUID/PGID keep the default root startup flow.
  • Mounted paths must already be writable by 1000:1000.
  • USING_TOR=true requires root startup.

⚙️ Configuration

Search Modes

Direct

  • Queries configured sources directly

Universal (recommended)

  • Search via metadata providers (Hardcover, Open Library, Google Books, DNB, Databáze knih, Moly.hu) for richer results
  • Aggregates releases from multiple configured sources
  • Full audiobook support

Hardcover API Key

Hardcover powers metadata search in Universal mode. Create a token at hardcover.app/account/api — current keys start with hc_pat_ and are far shorter than the JWTs Hardcover issued before August 2026.

Tick these seven scopes on the token screen:

Scope Used for
read:catalog Metadata search, plus book, edition, author and series lookups
read:library Your reading status and shelf counts
read:lists Your lists and the books on them
read:me:content Test Connection and the "Connected as" label
read:users Usernames shown alongside lists
write:library Setting a book's reading status from Shelfmark
write:lists Adding and removing books from lists, including auto-remove on download

The two write: scopes matter only if you set reading status from Shelfmark or leave Auto-Remove from List on Download enabled (it is on by default) — without them those actions fail silently. Everything else Hardcover offers (journal, goals, reviews, prompts, notifications, account) can stay unticked. The all scope works too, but it grants full account access including deletion, so prefer the list above.

Environment Variables

Environment variables work for initial setup and Docker deployments. They serve as defaults that can be overridden in the web interface.

Variable Description Default
FLASK_PORT Web interface port 8084
INGEST_DIR Book download directory /books
TZ Container timezone UTC
PUID / PGID Runtime user/group for the default root-startup flow (also supports legacy UID/GID) 1000 / 1000
SEARCH_MODE direct or universal universal
USING_TOR Enable Tor routing (requires root startup) false
USING_WIREGUARD Enable WireGuard VPN egress with kill-switch (requires root startup) false
WIREGUARD_CONFIG Path to the mounted wg-quick config /config/wg0.conf
WIREGUARD_INTERFACE WireGuard interface name wg0
LAN_NETWORK Comma-separated CIDRs kept off the tunnel so the WebUI / internal clients stay reachable 127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
WIREGUARD_ENFORCE_DNS Pin the resolver (via WIREGUARD_DNS, else the config's DNS =) so DNS can't silently fall back to an off-tunnel path. Designed for a trusted LAN resolver kept reachable via LAN_NETWORK (query leaves over the LAN; download still egresses via the tunnel) — it does not force queries through the tunnel. Docker's embedded resolver (127.0.0.11) is preserved when present so container-name resolution keeps working; pin its upstream via the container's dns: list. Fails closed if no resolver is available or /etc/resolv.conf is not writable. true
WIREGUARD_DNS Explicit resolver(s) to pin (comma/space separated). Use when the VPN's pushed DNS filters domains you need; point at a resolver reachable via the tunnel or an allowed LAN resolver. (unset; uses config DNS =)
WIREGUARD_DISABLE_IPV6 Strip IPv6 from the tunnel config (many container kernels lack the ip6tables raw table wg-quick needs) and remove IPv6 as a leak surface. true
WIREGUARD_ALLOW_IPV6_LEAK Escape hatch: continue even when an IPv6 kill-switch can't be installed AND IPv6 can't be disabled. Only set if the container has no IPv6 connectivity. false
WIREGUARD_ALLOW_WEBUI_OFFTUNNEL Opt-in off-tunnel WebUI reachability. Default (false) keeps the kill-switch strictly fail-closed: the only off-tunnel egress is loopback, the tunnel device and the LAN allowlist. Set true only if a non-LAN client (e.g. a public reverse proxy on another segment) must reach the WebUI; it permits app-server replies (--sport FLASK_PORT, conntrack REPLY) off-tunnel — server replies only, never client-initiated egress. LAN clients never need it (covered by LAN_NETWORK). false
WIREGUARD_STALE_AFTER Seconds since the last handshake before the healthcheck bounces the tunnel. 180

See the full Environment Variables Reference for all available options.

Some of the additional options available in Settings:

  • Prowlarr / Jackett - Configure indexers to download books and audiobooks through your torrent and usenet clients
  • Download clients - qBittorrent, Transmission, Deluge, rTorrent, NZBGet, SABnzbd, a blackhole folder, or a debrid service (AllDebrid, Real-Debrid, TorBox, Debrid-Link)
  • Additional audiobook sources - Configure additional sources for audiobook discovery
  • Webshare.cz - Search Webshare.cz by file name and download ebooks and audiobooks with your Webshare account (a VIP account is recommended for full speed)
  • Direct Download mirrors - Supply your own Anna's Archive mirror URLs; Auto mode tries them in the order listed. The annas-archive.is domain does not currently work as a source — use annas-archive.gl instead (checked August 2026; mirror availability changes)
  • IRC - Add details for IRC book sources and download directly from the UI. Most networks serve audiobooks from the same channel as ebooks (on irc.irchighway.net that's #ebooks, while #bookz is effectively inactive), so leave the separate audiobook channel blank unless your network actually indexes one. IRC audiobooks usually arrive as ZIP/RAR archives — keep those enabled under Supported Audiobook Formats or the releases are filtered out of results
  • Soulseek (slskd) - Search the Soulseek network and download through a slskd instance. Point Shelfmark at slskd's URL with an API key (web.authentication.api_keys in slskd.yml, role readwrite), and mount slskd's downloads folder into the Shelfmark container. If the folder sits at a different path inside Shelfmark, set Downloads Path in the slskd settings or add a Remote Path Mapping for client slskd. Ebook results are single files; audiobook results group a peer's folder of audio files into one release. Some uploaders block downloads until you type a word to them in a private message; turn on Answer anti-leech chat challenges and Shelfmark types it for you, at most once per user every 12 hours. It reads every unread private message in slskd and marks a conversation it answered as read, so leave it off if you also read slskd's messages yourself
  • Library Link - Add links to your book library (Calibre-Web or Grimmory) and your audiobook library (Audiobookshelf, Plex) in the UI header
  • File processing - Customiseable download paths, file renaming and directory creation with template-based renaming
  • Network Settings - Custom proxy support (SOCKS5 + HTTP/S) and configurable DNS
  • Format & Language - Filter downloads by preferred formats, languages and sorting order
  • Metadata Providers - Configure API keys for Hardcover, Google Books and the other metadata providers

🐳 Docker Variants

Standard

docker compose up -d

The full-featured image with all network capabilities included.

Memory Requirements

The standard image ships a real Chromium browser, which it launches to solve Cloudflare challenges for Direct Download. Chromium needs room to run:

  • 2 GB of RAM available to the container is a safe minimum; 1 GB or less is where problems usually start
  • Only relevant if you use Direct Download. Prowlarr, IRC and audiobook sources don't start the browser

When the container is starved of memory, Chromium fails to start and every Direct Download fails with unrelated-looking errors — repeated 403 detected; switching to bypasser followed by No download URL found, and downloads that never complete. If you're seeing that, check the container's memory limit and the host's free memory before suspecting your ISP or DNS.

If you can't spare the memory, use the Lite image with an external resolver (e.g. FlareSolverr) running elsewhere.

Tor Routing

Optional Tor support for network privacy:

curl -O https://raw.githubusercontent.com/calibrain/shelfmark/main/compose/docker-compose.tor.yml
docker compose -f docker-compose.tor.yml up -d

Notes:

  • Requires root startup
  • Requires NET_ADMIN and NET_RAW capabilities
  • Timezone is auto-detected from Tor exit node
  • Custom DNS/proxy settings are ignored when Tor is active

WireGuard VPN Routing

Optional WireGuard support to route all external egress through a VPN tunnel with a fail-closed kill-switch:

curl -O https://raw.githubusercontent.com/calibrain/shelfmark/main/compose/docker-compose.wireguard.yml
# place your wg-quick config where the compose mounts /config, as wg0.conf
docker compose -f docker-compose.wireguard.yml up -d

Notes:

  • Requires root startup
  • Requires NET_ADMIN and NET_RAW capabilities
  • Mount a standard wg-quick config at WIREGUARD_CONFIG (default /config/wg0.conf)
  • All non-LAN egress is forced through the tunnel; if the tunnel drops, external traffic fails closed while LAN ranges (WebUI, Prowlarr, qBittorrent) stay reachable
  • IPv4 and IPv6 both fail closed. On kernels without a usable ip6tables, disable IPv6 for the container (sysctls: net.ipv6.conf.all.disable_ipv6=1, as in the compose example) or the container refuses to start rather than risk an IPv6 leak
  • A supervised healthcheck bounces the tunnel if the handshake goes stale, and refreshes the endpoint allow rules so a roaming/rotated peer endpoint can reconnect
  • Mutually exclusive with USING_TOR
  • DNS trust: WIREGUARD_DNS must be a resolver you trust on a trusted network segment. When it is a LAN resolver (kept reachable off-tunnel by LAN_NETWORK), the query to that resolver leaves as plaintext UDP/53 on the LAN — the resolver is responsible for encrypting upstream. Two resolver paths exist: (1) when Docker's embedded resolver (127.0.0.11) is present it is preserved so container names (Prowlarr, qBittorrent) resolve — you MUST pin its upstream to a trusted resolver via the container's compose dns: list, since WIREGUARD_DNS cannot repoint the embedded resolver from inside the container; (2) otherwise WIREGUARD_DNS/the config DNS = line is written to /etc/resolv.conf. Setting WIREGUARD_ENFORCE_DNS=false is a foot-gun: with no embedded resolver present the container then uses its inherited resolver, which forwards to the Docker daemon's upstream off-tunnel, leaking your DNS. Leave enforcement on unless you have pinned the resolver another way.

Lite

A lighter image without the built-in browser automation. Ideal for:

  • External services - Already running FlareSolverr or similar for other applications
  • Alternative sources - Using Prowlarr, IRC, or other configured sources
  • Audiobooks - Using Shelfmark primarily for audiobooks
  • Constrained hosts - No bundled browser, so it runs comfortably below the standard image's memory requirements
curl -O https://raw.githubusercontent.com/calibrain/shelfmark/main/compose/docker-compose.lite.yml
docker compose -f docker-compose.lite.yml up -d

If you need browser-based access with the Lite image, configure an external resolver in Settings.

🔐 Authentication

Authentication is optional but recommended for shared or exposed instances. Multiple authentication methods are available in Settings:

1. Single Username/Password

2. Proxy (Forward) Authentication

Proxy auth trusts headers set by your reverse proxy (e.g. X-Auth-User). Ensure Shelfmark is not directly exposed, and configure your proxy to strip/overwrite these headers for all inbound requests.

3. OIDC (OpenID Connect)

Integrate with your identity provider (Authelia, Authentik, Keycloak, etc.) for single sign-on. Supports PKCE flow, auto-discovery, group-based admin mapping, and auto-provisioning of new users.

4. Calibre-Web Database

If you're running Calibre-Web, you can reuse its user database by mounting it:

volumes:
  - /path/to/calibre-web/app.db:/auth/app.db:ro

Multi-User Support

With any authentication method enabled, Shelfmark supports multi-user management with admin/user roles. Users can have per-user settings for download destinations, email recipients, and notification preferences. Non-admin users only see their own downloads and can submit book requests for admin review. Admins can configure request policies per source to control whether users can download directly, must submit a request, or are blocked entirely.

See API Access to call the API with a static key from scripts and integrations.

Project Scope

Shelfmark is a manual search and download tool, the entry point to your book library, not a library manager. It finds books, downloads them, and sends them to a configured destination. That's the core scope.

Shelfmark intentionally does not:

  • Manage your library - it never edits, tags or reorganises what you already own. The optional Library Check only reads your Calibre or Audiobookshelf library to mark results you already have
  • Integrate with library software beyond delivery - what happens after delivery is up to your library tool
  • Monitor authors, series, or new releases - there is no watching for new books. The optional Hardcover Sync is the one background job: it turns a Hardcover shelf you choose into requests, and it is off by default
  • Queue future downloads - if a book isn't available now, Shelfmark won't watch for it. Hardcover Sync retries a request on a schedule, which is the closest it gets

These are non-goals, not missing features.

Contributing

Shelfmark's core feature set is complete.

Pull requests are welcome and all of them get reviewed, new features included. If you want a feature, the fastest path is to send a PR for it rather than to file a request.

Feature requests that fall outside the project scope (library integration, automation, collection management) will be closed, and PRs implementing them won't be merged. If you're unsure whether something fits, open a discussion first.

Health Monitoring

The application exposes a health endpoint at /api/health (no authentication required). Add a health check to your compose:

healthcheck:
  test: ["CMD", "curl", "-sf", "http://localhost:8084/api/health"]
  interval: 30s
  timeout: 30s
  retries: 3

The endpoint answers 503 when the download coordinator, the part that picks queued downloads up, is not running. Without it every download stays queued, so a container that reports unhealthy for this reason needs a restart.

Logging

Logs are available via:

  • docker logs <container-name>
  • /var/log/shelfmark/ inside the container (when ENABLE_LOGGING=true)

Log level is configurable under Settings → Advanced or via the LOG_LEVEL environment variable (DEBUG, INFO, WARNING, ERROR, CRITICAL; case-insensitive, defaults to INFO). The environment variable wins over the setting, and DEBUG=true forces DEBUG regardless of either. Changes take effect on restart.

Development

# Quality checks
make checks              # Run ALL static analysis (frontend + Python)
make python-checks       # Run Ruff, BasedPyright, and Vulture
make install-python-dev  # Sync Python runtime + dev tools with uv

# Frontend development
make install     # Install dependencies
make dev         # Start Vite dev server (localhost:5173)
make build       # Production build
make frontend-typecheck  # TypeScript checks

# Backend (Docker)
make up          # Start backend via docker-compose.dev.yml
make down        # Stop services
make refresh     # Rebuild and restart
make restart     # Restart container

The frontend dev server proxies to the backend on port 8084.

Sponsors

Code review on Shelfmark's pull requests is sponsored by CodeRabbit.

CodeRabbit

License

MIT License - see LICENSE for details.

⚠️ Disclaimer

Shelfmark is a search interface that displays results from external metadata providers and sources. It does not host, store, or distribute any content. The developers are not responsible for how the tool is used or what is accessed through it.

Users are solely responsible for:

  • Ensuring they have the legal right to download any material they access
  • Complying with copyright laws and intellectual property rights in their jurisdiction
  • Understanding and accepting the terms of any sources they configure

Use of this tool is entirely at your own risk.

Support

For issues or questions, please file an issue on GitHub.

S
Description
No description provided
Readme MIT
97 MiB
0 Stars 1 Watchers 0 Forks
v1.4.0
Latest
2026-09-26 02:22:42 +01:00
Languages
Python 81.2%
TypeScript 16.9%
Shell 1.3%
CSS 0.2%
Dockerfile 0.2%