Bumps the npm-deps group with 7 updates in the /src/frontend directory: | Package | From | To | | --- | --- | --- | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.0.1` | `26.1.1` | | [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip) | `6.23.0` | `6.26.0` | | [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt) | `0.57.0` | `0.58.0` | | [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) | `1.72.0` | `1.73.0` | | [oxlint-tsgolint](https://github.com/oxc-project/tsgolint) | `0.23.0` | `0.24.0` | | [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `8.1.0` | `8.1.4` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` | Updates `@types/node` from 26.0.1 to 26.1.1 <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 `knip` from 6.23.0 to 6.26.0 <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.26.0</h2> <ul> <li>ci: add path filters (<a href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1871">#1871</a>) (4249935adffe1b8eca9570fb325fa19cc8010584) - thanks <a href="https://github.com/trueberryless"><code>@trueberryless</code></a>!</li> <li>Add CodeRabbit as gold sponsor (1da09fdc8f4d851f3cad30659200018bfb47a5e0)</li> <li>Fix up docs a bit more (39125a7f473e006f61629781bff1ac4a050ca460)</li> <li>Don't report ambient declaration files as unused (aed361c00a82829c2fc80a65a2f7af174316782e)</li> <li>Register oclif command files as entries (3b4d58c9da83d93b6821a2b24f57b919ba886756)</li> <li>Add electron-vite plugin (d92107ea504833b3ee7ad2b695e22d40528b24c3)</li> <li>Add esbuild plugin (ef3b601d957546554de2cb1fbff859f5bdafb741)</li> <li>Ignore more globally available binaries (829298129fdfd1b41a1f8dff5022b9fbbe25f454)</li> <li>Resolve <code>#</code>-imports to source when node condition is unbuilt (resolve <a href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1873">#1873</a>) (f2713ed1e499ab286b86615d4b8ec34f711d1bd2)</li> <li>Ignore gh as a globally available binary (a6f0772e5db03a8412a3ac036756779f22d1a27d)</li> <li>Resolve Vitest benchmark files as entries (57429139f7e93f2a4bee35a53d450c4f45dea9ff)</li> <li>Extract shared Vue auto-import machinery into plugins/_vue (73010753d432ae58eb12c7eec9c5723036009749)</li> <li>Scope compiler extensions per workspace (5e6f82b963a83e5801484efbc01a4b6a9ce39ea3)</li> <li>Resolve auto-imported components in the Vue SFC compiler (009aad8f9dab589898e5dba4c85fa41ea57c1a49)</li> <li>Add plugins for the Vue auto-import ecosystem (f638c8302cdd26a63e477344a7cf44ef60af7788)</li> <li>Enable Vue SFC compiler on unplugin-vue and <code>@vitejs/plugin-vue</code> (9396ab159919147ef81dad16e365e531b32b4b12)</li> <li>Recognize vite-plugin-vue-meta-layouts (same layouts convention) (3ceee89228b0173eddc0466bf50e8181286ffebc)</li> <li>Add vite-plugin-pages and unplugin-icons plugins (9bc17540bcf8eb142474ed84837c1e2cebb7fe73)</li> <li>Add vite-plugin-pwa and <code>@intlify/unplugin-vue-i18n</code> plugins (45dea0a397ed754c34617ed18deef4dc6f0ec0d4)</li> <li>Dog, food. (e1249ade2558d3801d85e2dc63349d884f3443d4)</li> <li>Update query snapshot (a45941d2db381c04f8a38416533217ee84f77ca7)</li> <li>Don't misread Nitro route types as Vue component auto-imports (43aecd5414eb63bec3637f37ffac0c62a71e7e74)</li> <li>Read oxlint jsPlugins from vite-plus vite.config and .oxlintrc.json (589ffda4e3a7d0c0d772191ad6f8d6e60dd298cf)</li> <li>Add vite-plus plugin for run.tasks and staged scripts (f041c191e4e10dd181ad212b71079e3e10bcf341)</li> <li>Support <code>@vite-pwa/nuxt</code> PWA config in nuxt.config (8fa7b116690e37484798ad98eca002d26c0c80fe)</li> <li>Add <code>@vite-pwa/assets-generator</code> plugin (4254f7d53a284a4ea4612f650ae03495bcb0d582)</li> <li>Add <code>@nuxtjs/i18n</code> plugin (dfb9acbe5a08ebc85562f59a04e7f4bedb4925f1)</li> <li>Read plugin entries from vite.config options and index.html (d533da8cc2b431d206eb7c55323ea51846eca0bb)</li> <li>Fix false positives in VitePress, next-mdx and unplugin-vue-i18n plugins (b99702a76e26b1943a16517f1633de3a0713c196)</li> <li>Respect optional peers in pnpm and Yarn packageExtensions (aab080bbd436494316df045011ab22cbebca06b4)</li> <li>Detect babel plugins in the Storybook config (5dea975adf9b88971ad56434132282a099c7d58c)</li> <li>Add shared AST helpers for imported calls and first property values (c84bb7a87a17f1921c12bb02bcfd43f905cae595)</li> <li>Inline trivial resolveFromAST wrappers and normalize orval and sst (620079d1d07b69a69bbb67b6a6e68963b6c2fc21)</li> <li>Extract inline resolveFromAST implementations to dedicated files (b5231c12f915428067d790187d2dd4c44e2559d4)</li> <li>Normalize resolveFromAST files to a uniform contract (fc1ba0fb45aaf623de678a57bea3b5567ea04750)</li> <li>chore: migrate to Astro 7 and Sätteri (<a href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1875">#1875</a>) (f256a5b276c3d69dd5081c591bbb183aacebf766) - thanks <a href="https://github.com/trueberryless"><code>@trueberryless</code></a>!</li> <li>Show contributor count on docs homepage (6b8454a2841905ce7f08e1a23b54bc17a0854608)</li> <li>Exclude gitignored package entry points (606e5d051b4f0620c776aa23352153b8253bd75b)</li> <li>Add Tauri plugin (199180da79c71acc80865dc65ce89653a26d9579)</li> <li>Add Laravel plugin (197453378f2b60e5143a30ec78b438f02b37c53b)</li> <li>Add Quasar plugin (a220729074bfbb9e7d03ba329e89ad553c3a7799)</li> </ul> <h2>Release 6.25.0</h2> <ul> <li>fix: derive package name from package.json under Yarn <code>nodeLinker: pnpm</code> store (<a href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1852">#1852</a>) (3764605ed150b975fb6c88c4c4aa47f5bf9ae149) - thanks <a href="https://github.com/blowery"><code>@blowery</code></a>!</li> <li>Pick up types used in module augmentations via path aliases (resolve <a href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1850">#1850</a>) (9cc5a4132793990b5fcf9eae6f3db37426d979c0)</li> <li>feat: add support for <code>packageExtensions</code> in yarn and pnpm (<a href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1847">#1847</a>) (61d3164cdac6e9252b3c52ce3bb2909949b4690e) - thanks <a href="https://github.com/trueberryless"><code>@trueberryless</code></a>!</li> <li>fix(ci): do not run integration on forks (<a href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1855">#1855</a>) (d23c10d1ae764c0b70addaafc79f01c543cc5efa) - thanks <a href="https://github.com/trueberryless"><code>@trueberryless</code></a>!</li> <li>chore(ci): improve security through specific permissions (<a href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1856">#1856</a>) (1eb42e639f9ec12d6d2ef88e1aaf07397b5bf226) - thanks <a href="https://github.com/trueberryless"><code>@trueberryless</code></a>!</li> <li>chore(ci): add concurrency blocks (<a href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1857">#1857</a>) (3bf3d115cf677fadcfe8fa72ce0e68cfd435d399) - thanks <a href="https://github.com/trueberryless"><code>@trueberryless</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/441faf08dfa1e87daa342620026947c99a98ec40"><code>441faf0</code></a> Release knip@6.26.0</li> <li><a href="https://github.com/webpro-nl/knip/commit/a220729074bfbb9e7d03ba329e89ad553c3a7799"><code>a220729</code></a> Add Quasar plugin</li> <li><a href="https://github.com/webpro-nl/knip/commit/197453378f2b60e5143a30ec78b438f02b37c53b"><code>1974533</code></a> Add Laravel plugin</li> <li><a href="https://github.com/webpro-nl/knip/commit/199180da79c71acc80865dc65ce89653a26d9579"><code>199180d</code></a> Add Tauri plugin</li> <li><a href="https://github.com/webpro-nl/knip/commit/606e5d051b4f0620c776aa23352153b8253bd75b"><code>606e5d0</code></a> Exclude gitignored package entry points</li> <li><a href="https://github.com/webpro-nl/knip/commit/fc1ba0fb45aaf623de678a57bea3b5567ea04750"><code>fc1ba0f</code></a> Normalize resolveFromAST files to a uniform contract</li> <li><a href="https://github.com/webpro-nl/knip/commit/b5231c12f915428067d790187d2dd4c44e2559d4"><code>b5231c1</code></a> Extract inline resolveFromAST implementations to dedicated files</li> <li><a href="https://github.com/webpro-nl/knip/commit/620079d1d07b69a69bbb67b6a6e68963b6c2fc21"><code>620079d</code></a> Inline trivial resolveFromAST wrappers and normalize orval and sst</li> <li><a href="https://github.com/webpro-nl/knip/commit/c84bb7a87a17f1921c12bb02bcfd43f905cae595"><code>c84bb7a</code></a> Add shared AST helpers for imported calls and first property values</li> <li><a href="https://github.com/webpro-nl/knip/commit/5dea975adf9b88971ad56434132282a099c7d58c"><code>5dea975</code></a> Detect babel plugins in the Storybook config</li> <li>Additional commits viewable in <a href="https://github.com/webpro-nl/knip/commits/knip@6.26.0/packages/knip">compare view</a></li> </ul> </details> <br /> Updates `oxfmt` from 0.57.0 to 0.58.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/oxc-project/oxc/commit/39677ba50d908ea09f6d9e58ded328461212f52a"><code>39677ba</code></a> release(apps): oxlint v1.73.0 && oxfmt v0.58.0 (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt/issues/24219">#24219</a>)</li> <li>See full diff in <a href="https://github.com/oxc-project/oxc/commits/oxfmt_v0.58.0/npm/oxfmt">compare view</a></li> </ul> </details> <br /> Updates `oxlint` from 1.72.0 to 1.73.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.27.0 && oxfmt v0.12.0</h2> <h1>Oxlint v1.27.0</h1> <h3>🚀 Features</h3> <ul> <li>222a8f0 linter/plugins: Implement <code>SourceCode#isSpaceBetween</code> (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15498">#15498</a>) (overlookmotel)</li> <li>2f9735d linter/plugins: Implement <code>context.languageOptions</code> (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15486">#15486</a>) (overlookmotel)</li> <li>bc731ff linter/plugins: Stub out all <code>Context</code> APIs (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15479">#15479</a>) (overlookmotel)</li> <li>5822cb4 linter/plugins: Add <code>extend</code> method to <code>FILE_CONTEXT</code> (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15477">#15477</a>) (overlookmotel)</li> <li>7b1e6f3 apps: Add pure rust binaries and release to github (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15469">#15469</a>) (Boshen)</li> <li>2a89b43 linter: Introduce debug assertions after fixes to assert validity (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15389">#15389</a>) (camc314)</li> <li>ad3c45a editor: Add <code>oxc.path.node</code> option (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15040">#15040</a>) (Sysix)</li> </ul> <h3>🐛 Bug Fixes</h3> <ul> <li>6f3cd77 linter/no-var: Incorrect warning for blocks (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15504">#15504</a>) (Hamir Mahal)</li> <li>6957fb9 linter/plugins: Do not allow access to <code>Context#id</code> in <code>createOnce</code> (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15489">#15489</a>) (overlookmotel)</li> <li>7409630 linter/plugins: Allow access to <code>cwd</code> in <code>createOnce</code> in ESLint interop mode (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15488">#15488</a>) (overlookmotel)</li> <li>732205e parser: Reject <code>using</code> / <code>await using</code> in a switch <code>case</code> / <code>default</code> clause (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15225">#15225</a>) (sapphi-red)</li> <li>a17ca32 linter/plugins: Replace <code>Context</code> class (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15448">#15448</a>) (overlookmotel)</li> <li>ecf2f7b language_server: Fail gracefully when tsgolint executable not found (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15436">#15436</a>) (camc314)</li> <li>3c8d3a7 lang-server: Improve logging in failure case for tsgolint (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15299">#15299</a>) (camc314)</li> <li>ef71410 linter: Use jsx if source type is JS in fix debug assertion (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15434">#15434</a>) (camc314)</li> <li>e32bbf6 linter/no-var: Handle TypeScript declare keyword in fixer (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15426">#15426</a>) (camc314)</li> <li>6565dbe linter/switch-case-braces: Skip comments when searching for <code>:</code> token (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15425">#15425</a>) (camc314)</li> <li>85bd19a linter/prefer-class-fields: Insert value after type annotation in fixer (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15423">#15423</a>) (camc314)</li> <li>fde753e linter/plugins: Block access to <code>context.settings</code> in <code>createOnce</code> (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15394">#15394</a>) (overlookmotel)</li> <li>ddd9f9f linter/forward-ref-uses-ref: Dont suggest removing wrapper in invalid positions (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15388">#15388</a>) (camc314)</li> <li>dac2a9c linter/no-template-curly-in-string: Remove fixer (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15387">#15387</a>) (camc314)</li> <li>989b8e3 linter/no-var: Only fix to <code>const</code> if the var has an initializer (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15385">#15385</a>) (camc314)</li> <li>cc403f5 linter/plugins: Return empty object for unimplemented parserServices (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15364">#15364</a>) (magic-akari)</li> </ul> <h3>⚡ Performance</h3> <ul> <li>25d577e language_server: Start tools in parallel (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15500">#15500</a>) (Sysix)</li> <li>3c57291 linter/plugins: Optimize loops (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15449">#15449</a>) (overlookmotel)</li> <li>3166233 linter/plugins: Remove <code>Arc</code>s (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15431">#15431</a>) (overlookmotel)</li> <li>9de1322 linter/plugins: Lazily deserialize settings JSON (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15395">#15395</a>) (overlookmotel)</li> <li>3049ec2 linter/plugins: Optimize <code>deepFreezeSettings</code> (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15392">#15392</a>) (overlookmotel)</li> <li>444ebfd linter/plugins: Use single object for <code>parserServices</code> (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15378">#15378</a>) (overlookmotel)</li> </ul> <h3>📚 Documentation</h3> <ul> <li>97d2104 linter: Update comment in lint.rs about default value for tsconfig path (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15530">#15530</a>) (Connor Shea)</li> <li>2c6bd9e linter: Always refer as "ES2015" instead of "ES6" (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15411">#15411</a>) (sapphi-red)</li> <li>a0c5203 linter/import/named: Update "ES7" comment in examples (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15410">#15410</a>) (sapphi-red)</li> <li>3dc24b5 linter,minifier: Always refer as "ES Modules" instead of "ES6 Modules" (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15409">#15409</a>) (sapphi-red)</li> <li>2ad77fb linter/no-this-before-super: Correct "Why is this bad?" section (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15408">#15408</a>) (sapphi-red)</li> <li>57f0ce1 linter: Add backquotes where appropriate (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/15407">#15407</a>) (sapphi-red)</li> </ul> <h1>Oxfmt v0.12.0</h1> <!-- 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> <h2>[1.73.0] - 2026-07-06</h2> <h3>🚀 Features</h3> <ul> <li>a2c97f3 linter/unicorn: Implement <code>explicit-timer-delay</code> rule (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/23612">#23612</a>) (Mikhail Baev)</li> <li>85735cb linter/unicorn: Implement <code>no-confusing-array-with</code> rule (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/23638">#23638</a>) (Shekhu☺️)</li> <li>cb4fbb9 linter/eslint: Implement no-unreachable-loop rule (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/23975">#23975</a>) (Todor Andonov)</li> <li>dc32112 linter/eslint/no-constant-binary-expression: Check relational comparisons (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/24088">#24088</a>) (camc314)</li> <li>d963967 linter/unicorn/no-array-sort: Add <code>allowAfterSpread</code> option (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/24043">#24043</a>) (Boshen)</li> <li>0a75682 linter: Add per-rule timings for type-aware linting (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/22488">#22488</a>) (camchenry)</li> <li>743e222 linter/react: Add <code>disallowedValues</code> option for <code>forbid-dom-props</code> rule (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/23970">#23970</a>) (Mikhail Baev)</li> </ul> <h3>🐛 Bug Fixes</h3> <ul> <li>bdb51c7 linter/jest/prefer-ending-with-an-expect: Validate config patterns (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/24122">#24122</a>) (camc314)</li> <li>45d607d linter/react/forbid-component-props: Make allow/disallow lists optional in schema (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/24024">#24024</a>) (Boshen)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/oxc-project/oxc/commit/39677ba50d908ea09f6d9e58ded328461212f52a"><code>39677ba</code></a> release(apps): oxlint v1.73.0 && oxfmt v0.58.0 (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/24219">#24219</a>)</li> <li><a href="https://github.com/oxc-project/oxc/commit/a2c97f348c8bdabe99a08b2fbb45d32ffe49a529"><code>a2c97f3</code></a> feat(linter/unicorn): implement <code>explicit-timer-delay</code> rule (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/23612">#23612</a>)</li> <li><a href="https://github.com/oxc-project/oxc/commit/bdb51c73da9edeef02ce39477167765d971fb5cb"><code>bdb51c7</code></a> fix(linter/jest/prefer-ending-with-an-expect): validate config patterns (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/24122">#24122</a>)</li> <li><a href="https://github.com/oxc-project/oxc/commit/85735cb5df27daffd32651f808a382680ee92aaf"><code>85735cb</code></a> feat(linter/unicorn): implement <code>no-confusing-array-with</code> rule (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/23638">#23638</a>)</li> <li><a href="https://github.com/oxc-project/oxc/commit/cb4fbb927f237b0ba4937a8de5a7b28c444b4114"><code>cb4fbb9</code></a> feat(linter/eslint): implement no-unreachable-loop rule (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/23975">#23975</a>)</li> <li><a href="https://github.com/oxc-project/oxc/commit/dc321127faa1e0f7bff293319717c52f9c8f6b95"><code>dc32112</code></a> feat(linter/eslint/no-constant-binary-expression): check relational compariso...</li> <li><a href="https://github.com/oxc-project/oxc/commit/d96396707923bcffa92e732b15bf23631561f35c"><code>d963967</code></a> feat(linter/unicorn/no-array-sort): add <code>allowAfterSpread</code> option (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/24043">#24043</a>)</li> <li><a href="https://github.com/oxc-project/oxc/commit/45d607d48529dc9f32f53436ee816fc02494c64b"><code>45d607d</code></a> fix(linter/react/forbid-component-props): make allow/disallow lists optional ...</li> <li><a href="https://github.com/oxc-project/oxc/commit/0a75682fcb38014878d53f37075f32e12101e265"><code>0a75682</code></a> feat(linter): add per-rule timings for type-aware linting (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint/issues/22488">#22488</a>)</li> <li><a href="https://github.com/oxc-project/oxc/commit/743e22293bc5317c79b6b083ffbb2bd5ab5ebefc"><code>743e222</code></a> feat(linter/react): add <code>disallowedValues</code> option for <code>forbid-dom-props</code> rule...</li> <li>See full diff in <a href="https://github.com/oxc-project/oxc/commits/oxlint_v1.73.0/npm/oxlint">compare view</a></li> </ul> </details> <br /> Updates `oxlint-tsgolint` from 0.23.0 to 0.24.0 <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>v0.24.0</h2> <h2>What's Changed</h2> <ul> <li>ci: run windows e2e pnpm commands outside workspace by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/969">oxc-project/tsgolint#969</a></li> <li>test(no-deprecated): add test for only <code>allow</code> by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/970">oxc-project/tsgolint#970</a></li> <li>fix(no-deprecated): report contextual object literal properties by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/944">oxc-project/tsgolint#944</a></li> <li>Update README with PRs note on new rules by <a href="https://github.com/camchenry"><code>@camchenry</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/972">oxc-project/tsgolint#972</a></li> <li>fix(strict-boolean-expressions): guard invalid predicate indexes by <a href="https://github.com/camchenry"><code>@camchenry</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/971">oxc-project/tsgolint#971</a></li> <li>fix(no-deprecated): fix crash when getting prop name for non-literal by <a href="https://github.com/camchenry"><code>@camchenry</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/973">oxc-project/tsgolint#973</a></li> <li>test(no-deprecated): add non-literal computed key regression by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/974">oxc-project/tsgolint#974</a></li> <li>test(no-floating-promises): sync tests with typescript-eslint by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/975">oxc-project/tsgolint#975</a></li> <li>fix(no-floating-promises): handle spread arguments before rejection handlers by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/976">oxc-project/tsgolint#976</a></li> <li>chore(deps): update crate-ci/typos action to v1.46.2 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/979">oxc-project/tsgolint#979</a></li> <li>refactor: remove unneeded <code>nil</code> checks in <code>strict-boolean-expressions</code> by <a href="https://github.com/camchenry"><code>@camchenry</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/980">oxc-project/tsgolint#980</a></li> <li>perf(no-unsafe-assignment): add fast-path for sender type by <a href="https://github.com/camchenry"><code>@camchenry</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/981">oxc-project/tsgolint#981</a></li> <li>feat: add per-rule debug timings by <a href="https://github.com/camchenry"><code>@camchenry</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/960">oxc-project/tsgolint#960</a></li> <li>chore: update typescript-go submodule by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/982">oxc-project/tsgolint#982</a></li> <li>chore(deps): update dprint plugins by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/984">oxc-project/tsgolint#984</a></li> <li>chore(deps): update github actions by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/985">oxc-project/tsgolint#985</a></li> <li>chore(deps): update gomod by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/986">oxc-project/tsgolint#986</a></li> <li>chore(deps): update crate-ci/typos action to v1.46.3 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/988">oxc-project/tsgolint#988</a></li> <li>test(no-deprecated): cover call and jsx deprecated properties by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/989">oxc-project/tsgolint#989</a></li> <li>chore: update typescript-go submodule by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/991">oxc-project/tsgolint#991</a></li> <li>chore(deps): update github actions by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/993">oxc-project/tsgolint#993</a></li> <li>chore(deps): update crate-ci/typos action to v1.47.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/995">oxc-project/tsgolint#995</a></li> <li>chore(deps): update module github.com/dlclark/regexp2/v2 to v2.1.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/994">oxc-project/tsgolint#994</a></li> <li>fix(prefer-optional-chain): suggest unsafe nullish rewrite by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/996">oxc-project/tsgolint#996</a></li> <li>chore(deps): update pnpm to v11.4.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/997">oxc-project/tsgolint#997</a></li> <li>refactor: cache suppress program diagnostics env by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/999">oxc-project/tsgolint#999</a></li> <li>refactor: use <code>sync.OnceValue</code> for logLevel by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1000">oxc-project/tsgolint#1000</a></li> <li>test(no-unnecessary-type-assertion): sync tests with typescript-eslint by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/998">oxc-project/tsgolint#998</a></li> <li>fix(no-unnecessary-type-assertion): enable skipped upstream cases by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1001">oxc-project/tsgolint#1001</a></li> <li>fix(justfile): use --ignore-workspace for e2e pnpm commands by <a href="https://github.com/swandir"><code>@swandir</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/983">oxc-project/tsgolint#983</a></li> <li>test(no-unnecessary-type-arguments): sync tests with typescript-eslint by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1003">oxc-project/tsgolint#1003</a></li> <li>test(no-unnecessary-type-assertion): cover nullable literal assertion by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1002">oxc-project/tsgolint#1002</a></li> <li>fix(no-unnecessary-type-arguments): preserve constructor inference by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1004">oxc-project/tsgolint#1004</a></li> <li>refactor: remove <code>OXLINT_TSGOLINT_TIMINGS</code> env var by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1005">oxc-project/tsgolint#1005</a></li> <li>chore: update typescript-go submodule by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1007">oxc-project/tsgolint#1007</a></li> <li>fix(prefer-optional-chain): optional chain type assertion handling by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1009">oxc-project/tsgolint#1009</a></li> <li>chore(deps): update typos to v1.47.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1010">oxc-project/tsgolint#1010</a></li> <li>chore(deps): update typos to v1.47.2 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1012">oxc-project/tsgolint#1012</a></li> <li>chore(deps): update github actions by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1013">oxc-project/tsgolint#1013</a></li> <li>chore(deps): update gomod by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1014">oxc-project/tsgolint#1014</a></li> <li>chore(deps): update github actions to v2.81.5 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1015">oxc-project/tsgolint#1015</a></li> <li>chore: update typescript-go submodule by <a href="https://github.com/camc314"><code>@camc314</code></a> in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1016">oxc-project/tsgolint#1016</a></li> <li>chore(deps): update github actions by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1017">oxc-project/tsgolint#1017</a></li> <li>chore(deps): update gomod to v0.46.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1018">oxc-project/tsgolint#1018</a></li> <li>chore(deps): update gomod to v2.2.2 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1021">oxc-project/tsgolint#1021</a></li> <li>chore(deps): update github actions to v2.82.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1023">oxc-project/tsgolint#1023</a></li> <li>chore(deps): update dprint plugins to v0.22.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1022">oxc-project/tsgolint#1022</a></li> <li>chore(deps): update github actions to v7 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/oxc-project/tsgolint/pull/1024">oxc-project/tsgolint#1024</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/oxc-project/tsgolint/commit/5a37e8902f65440900be1436b814919fcdb4e3d4"><code>5a37e89</code></a> fix(dot-notation): determine the relevant accessor (<a href="https://redirect.github.com/oxc-project/tsgolint/issues/1028">#1028</a>)</li> <li><a href="https://github.com/oxc-project/tsgolint/commit/67a281f613312a30665e7d39dfb47f5c15b0ca60"><code>67a281f</code></a> perf(consistent-return): defer per-function type resolution (<a href="https://redirect.github.com/oxc-project/tsgolint/issues/1031">#1031</a>)</li> <li><a href="https://github.com/oxc-project/tsgolint/commit/a5e2ff0be1102d9082e13ec35f1f0e4ca7fa65ad"><code>a5e2ff0</code></a> perf(no-unnecessary-qualifier): skip symbol resolution outside namespaces. (#...</li> <li><a href="https://github.com/oxc-project/tsgolint/commit/a8fc6685df0a817e7c5045a4e3e141d342839959"><code>a8fc668</code></a> perf(no-confusing-void-expression): check ancestor position before type query...</li> <li><a href="https://github.com/oxc-project/tsgolint/commit/03158cc4c0a0ef2c8bdccab71e6d2723fcc1c4f2"><code>03158cc</code></a> perf(no-unnecessary-type-conversion): hoist constant builtin-name slices (<a href="https://redirect.github.com/oxc-project/tsgolint/issues/1040">#1040</a>)</li> <li><a href="https://github.com/oxc-project/tsgolint/commit/d9e645c266b6c4b4671b0a3dc5d3935dbda3a5ef"><code>d9e645c</code></a> perf(prefer-optional-chain): lazily allocate chain-processor caches (<a href="https://redirect.github.com/oxc-project/tsgolint/issues/1041">#1041</a>)</li> <li><a href="https://github.com/oxc-project/tsgolint/commit/63f578abe093d7a7e8cb523a1e5e96aacf06b220"><code>63f578a</code></a> refactor(no-unnecessary-condition): remove dead containsUnguardedElementAcces...</li> <li><a href="https://github.com/oxc-project/tsgolint/commit/f174876a906e0350aff2b75d5607775529c9f845"><code>f174876</code></a> chore(deps): update gomod (<a href="https://redirect.github.com/oxc-project/tsgolint/issues/1035">#1035</a>)</li> <li><a href="https://github.com/oxc-project/tsgolint/commit/47de9cfea53da0ae274bc78d47388e3bdd5b7341"><code>47de9cf</code></a> chore(deps): update github actions (<a href="https://redirect.github.com/oxc-project/tsgolint/issues/1036">#1036</a>)</li> <li><a href="https://github.com/oxc-project/tsgolint/commit/e209b5b27f5fd22810735bfbfdb0785cbc5d4215"><code>e209b5b</code></a> chore(deps): update actions/cache action to v6 (<a href="https://redirect.github.com/oxc-project/tsgolint/issues/1037">#1037</a>)</li> <li>Additional commits viewable in <a href="https://github.com/oxc-project/tsgolint/compare/v0.23.0...v0.24.0">compare view</a></li> </ul> </details> <br /> Updates `vite` from 8.1.0 to 8.1.4 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/releases">vite's releases</a>.</em></p> <blockquote> <h2>v8.1.4</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.1.4/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.1.3</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.1.3/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.1.2</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.1.2/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.1.1</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.1.1/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's changelog</a>.</em></p> <blockquote> <h2><!-- raw HTML omitted --><a href="https://github.com/vitejs/vite/compare/v8.1.3...v8.1.4">8.1.4</a> (2026-07-09)<!-- raw HTML omitted --></h2> <h3>Features</h3> <ul> <li><strong>legacy:</strong> prefer oxc as minifier (fix <a href="https://redirect.github.com/vitejs/vite/issues/21973">#21973</a>) (<a href="https://redirect.github.com/vitejs/vite/issues/22468">#22468</a>) (<a href="https://github.com/vitejs/vite/commit/ab5dafa8e66296ef201f615489fb57954bb740ce">ab5dafa</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>build:</strong> add workaround for building on stackblitz (<a href="https://redirect.github.com/vitejs/vite/issues/22840">#22840</a>) (<a href="https://github.com/vitejs/vite/commit/575c32c29925c554f4ef4068738ab89c6878f615">575c32c</a>)</li> <li><strong>build:</strong> keep <code>import.meta.url</code> in preload function as-is (<a href="https://redirect.github.com/vitejs/vite/issues/22839">#22839</a>) (<a href="https://github.com/vitejs/vite/commit/f1f90ed4742b3cf453428c7e581a6016a4d47321">f1f90ed</a>)</li> <li><strong>deps:</strong> update all non-major dependencies (<a href="https://redirect.github.com/vitejs/vite/issues/22865">#22865</a>) (<a href="https://github.com/vitejs/vite/commit/d4295a9ffce428c0e51892373e00c07fccc0498a">d4295a9</a>)</li> <li><strong>deps:</strong> update rolldown-related dependencies (<a href="https://redirect.github.com/vitejs/vite/issues/22866">#22866</a>) (<a href="https://github.com/vitejs/vite/commit/7cf07e4c5f7a6af276012e0c2ec06e08499e951e">7cf07e4</a>)</li> <li><strong>html:</strong> avoid backtracking in import-only check (<a href="https://redirect.github.com/vitejs/vite/issues/22848">#22848</a>) (<a href="https://github.com/vitejs/vite/commit/b5868c01a124d345664450aaebd677bfba964c05">b5868c0</a>)</li> <li><strong>optimizer:</strong> avoid optimizer run for transform request before init (<a href="https://redirect.github.com/vitejs/vite/issues/22852">#22852</a>) (<a href="https://github.com/vitejs/vite/commit/72a5e2192506f51a5efd09c059815a5c43a9eacb">72a5e21</a>)</li> <li><strong>ssr:</strong> align named export function call stacktrace column with Node (<a href="https://redirect.github.com/vitejs/vite/issues/22829">#22829</a>) (<a href="https://github.com/vitejs/vite/commit/173a1b648c321e0f836e5a94fc47c4fa9b081bfc">173a1b6</a>)</li> <li>strip pure CSS chunk imports when chunkImportMap is enabled (<a href="https://redirect.github.com/vitejs/vite/issues/22841">#22841</a>) (<a href="https://github.com/vitejs/vite/commit/648bd04933093d0aac9565f21a49811437776886">648bd04</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>fix incorrect <code>@default</code> for <code>server.cors</code> (<a href="https://redirect.github.com/vitejs/vite/issues/22859">#22859</a>) (<a href="https://github.com/vitejs/vite/commit/70435b2551ee4fe3a0d55c8a3bb61b96f44d2763">70435b2</a>)</li> </ul> <h3>Miscellaneous Chores</h3> <ul> <li><strong>deps:</strong> update dependency postcss-modules to v9 (<a href="https://redirect.github.com/vitejs/vite/issues/22867">#22867</a>) (<a href="https://github.com/vitejs/vite/commit/a9539d69efc7a4ccf988bbf5da31c2b416ba990e">a9539d6</a>)</li> </ul> <h3>Code Refactoring</h3> <ul> <li>eliminate ineffectiveDynamicImport warn (<a href="https://redirect.github.com/vitejs/vite/issues/22876">#22876</a>) (<a href="https://github.com/vitejs/vite/commit/ea22fb352aad9a42c0a9d08f39d8a0bae8c111a5">ea22fb3</a>)</li> </ul> <h3>Tests</h3> <ul> <li>avoid warnings (<a href="https://redirect.github.com/vitejs/vite/issues/22851">#22851</a>) (<a href="https://github.com/vitejs/vite/commit/af21ab68adac3380dc9a854d2fe3f776654301cd">af21ab6</a>)</li> </ul> <h3>Build System</h3> <ul> <li>remove the custom onLog function (<a href="https://redirect.github.com/vitejs/vite/issues/22878">#22878</a>) (<a href="https://github.com/vitejs/vite/commit/2c4a217a63dc0a7fcb10bc710a988f32b173f481">2c4a217</a>)</li> <li>replace deprecated <code>onwarn</code> with <code>onLog</code> (<a href="https://redirect.github.com/vitejs/vite/issues/22741">#22741</a>) (<a href="https://github.com/vitejs/vite/commit/c581b5588cb8e94603d17bce2ff9fec8e8e0a3bf">c581b55</a>)</li> </ul> <h2><!-- raw HTML omitted --><a href="https://github.com/vitejs/vite/compare/v8.1.2...v8.1.3">8.1.3</a> (2026-07-02)<!-- raw HTML omitted --></h2> <h3>Bug Fixes</h3> <ul> <li><strong>css:</strong> inject inlined CSS after the shebang line (<a href="https://redirect.github.com/vitejs/vite/issues/22717">#22717</a>) (<a href="https://github.com/vitejs/vite/commit/1534d362794e856cc718b123cb245e0efcf36b9a">1534d36</a>)</li> <li><strong>deps:</strong> bump <code>es-module-lexer</code> to 2.3.0 (<a href="https://redirect.github.com/vitejs/vite/issues/22838">#22838</a>) (<a href="https://github.com/vitejs/vite/commit/7103c3af795396e2ad87e1125eb3fc20d60d9430">7103c3a</a>)</li> <li>preload css for nested dynamic imports (<a href="https://redirect.github.com/vitejs/vite/issues/22759">#22759</a>) (<a href="https://github.com/vitejs/vite/commit/2c530542da1c50b95b7f0cb17adf82f64ecf97f3">2c53054</a>)</li> <li><strong>ssr:</strong> correct stacktrace column position for first line (<a href="https://redirect.github.com/vitejs/vite/issues/22828">#22828</a>) (<a href="https://github.com/vitejs/vite/commit/c4acd6982a051fa10dbd7e3a37e00f0c467793b8">c4acd69</a>)</li> </ul> <h2><!-- raw HTML omitted --><a href="https://github.com/vitejs/vite/compare/v8.1.1...v8.1.2">8.1.2</a> (2026-06-30)<!-- raw HTML omitted --></h2> <h3>Bug Fixes</h3> <ul> <li><strong>deps:</strong> revert es-module-lexer to 2.1.0 (<a href="https://redirect.github.com/vitejs/vite/issues/22827">#22827</a>) (<a href="https://github.com/vitejs/vite/commit/0d3bd7c4111b8345cfc353c7bbb2c30601752e26">0d3bd7c</a>)</li> <li>restore, "fix: resolve pnpm .modules.yaml from workspace root instead of cwd (<a href="https://redirect.github.com/vitejs/vite/issues/22757">#22757</a>)" (<a href="https://redirect.github.com/vitejs/vite/issues/22825">#22825</a>) (<a href="https://github.com/vitejs/vite/commit/efb98cce73f3f89c4f03936ab7741cd5b0636f5c">efb98cc</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/vitejs/vite/commit/a477454442eff649b430f9e3c6caf2500fcb7183"><code>a477454</code></a> release: v8.1.4</li> <li><a href="https://github.com/vitejs/vite/commit/ab5dafa8e66296ef201f615489fb57954bb740ce"><code>ab5dafa</code></a> feat(legacy): prefer oxc as minifier (fix <a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/21973">#21973</a>) (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22468">#22468</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/173a1b648c321e0f836e5a94fc47c4fa9b081bfc"><code>173a1b6</code></a> fix(ssr): align named export function call stacktrace column with Node (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22829">#22829</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/575c32c29925c554f4ef4068738ab89c6878f615"><code>575c32c</code></a> fix(build): add workaround for building on stackblitz (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22840">#22840</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/72a5e2192506f51a5efd09c059815a5c43a9eacb"><code>72a5e21</code></a> fix(optimizer): avoid optimizer run for transform request before init (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22852">#22852</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/a9539d69efc7a4ccf988bbf5da31c2b416ba990e"><code>a9539d6</code></a> chore(deps): update dependency postcss-modules to v9 (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22867">#22867</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/70435b2551ee4fe3a0d55c8a3bb61b96f44d2763"><code>70435b2</code></a> docs: fix incorrect <code>@default</code> for <code>server.cors</code> (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22859">#22859</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/2c4a217a63dc0a7fcb10bc710a988f32b173f481"><code>2c4a217</code></a> build: remove the custom onLog function (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22878">#22878</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/c581b5588cb8e94603d17bce2ff9fec8e8e0a3bf"><code>c581b55</code></a> build: replace deprecated <code>onwarn</code> with <code>onLog</code> (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22741">#22741</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/ea22fb352aad9a42c0a9d08f39d8a0bae8c111a5"><code>ea22fb3</code></a> refactor: eliminate ineffectiveDynamicImport warn (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22876">#22876</a>)</li> <li>Additional commits viewable in <a href="https://github.com/vitejs/vite/commits/v8.1.4/packages/vite">compare view</a></li> </ul> </details> <br /> Updates `vitest` from 4.1.9 to 4.1.10 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitest-dev/vitest/releases">vitest's releases</a>.</em></p> <blockquote> <h2>v4.1.10</h2> <h3> 🐞 Bug Fixes</h3> <ul> <li><strong>browser</strong>: Check fs access in builtin commands [backport to v4] - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a>, <strong>Hiroshi Ogawa</strong> and <strong>OpenCode (claude-opus-4-8)</strong> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10680">vitest-dev/vitest#10680</a> <a href="https://github.com/vitest-dev/vitest/commit/5c18dd267"><!-- raw HTML omitted -->(5c18d)<!-- raw HTML omitted --></a></li> <li><strong>vm</strong>: Fix external module resolve error with deps optimizer query for encoded URI [backport to v4] - by <a href="https://github.com/SveLil"><code>@SveLil</code></a> and <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10661">vitest-dev/vitest#10661</a> <a href="https://github.com/vitest-dev/vitest/commit/bae52b511"><!-- raw HTML omitted -->(bae52)<!-- raw HTML omitted --></a></li> </ul> <h5> <a href="https://github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10">View changes on GitHub</a></h5> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/vitest-dev/vitest/commit/db616d227b6e0cb07a94f5d1bba262ee95db7e46"><code>db616d2</code></a> chore: release v4.1.10 (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10718">#10718</a>)</li> <li><a href="https://github.com/vitest-dev/vitest/commit/bae52b5112a6fd8200101b88bf8af9685d077295"><code>bae52b5</code></a> fix(vm): fix external module resolve error with deps optimizer query for enco...</li> <li>See full diff in <a href="https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/vitest">compare view</a></li> </ul> </details> <br /> 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>
📚 Shelfmark: Book Search & Request Tool
Note
This project is in a stable state as of May 2026 but is not under active maintenance.
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, torrent, usenet, and IRC source support
- Audiobook Support - Full audiobook search and download with dedicated processing
- Flexible Search - Search metadata providers (Hardcover, Open Library, Google Books) 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
- 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
🚀 Quick Start
Prerequisites
- Docker & Docker Compose
Installation
-
Download the docker-compose file:
curl -O https://raw.githubusercontent.com/calibrain/shelfmark/main/compose/docker-compose.yml -
Start the service:
docker compose up -d -
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
nobrlmount option to avoid database lock errors.
Non-root container mode
- Start the container as
1000:1000with Dockeruser: "1000:1000"ordocker run --user 1000:1000. - For Kubernetes, set
runAsUser: 1000,runAsGroup: 1000, andrunAsNonRoot: truetogether. PUID/PGIDkeep the default root startup flow.- Mounted paths must already be writable by
1000:1000. USING_TOR=truerequires root startup.
⚙️ Configuration
Search Modes
Direct
- Queries configured sources directly
Universal (recommended)
- Search via metadata providers (Hardcover, Open Library, Google Books) for richer results
- Aggregates releases from multiple configured sources
- Full audiobook support
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 - Configure indexers and download clients to download books and audiobooks
- Additional audiobook sources - Configure additional sources for audiobook discovery
- IRC - Add details for IRC book sources and download directly from the UI
- Library Link - Add a link to your Calibre-Web or Grimmory instance 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, Open Library, etc.
🐳 Docker Variants
Standard
docker compose up -d
The full-featured image with all network capabilities included.
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_ADMINandNET_RAWcapabilities - 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_ADMINandNET_RAWcapabilities - 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_DNSmust be a resolver you trust on a trusted network segment. When it is a LAN resolver (kept reachable off-tunnel byLAN_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 composedns:list, sinceWIREGUARD_DNScannot repoint the embedded resolver from inside the container; (2) otherwiseWIREGUARD_DNS/the configDNS =line is written to/etc/resolv.conf. SettingWIREGUARD_ENFORCE_DNS=falseis 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
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.
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 full scope.
Shelfmark intentionally does not:
- Track or manage your library - it doesn't know or care what you already own
- Integrate with library software - what happens after delivery is up to your library tool
- Monitor authors, series, or new releases - there is no background automation
- Queue future downloads - if a book isn't available now, Shelfmark won't watch for it
These are non-goals, not missing features.
Contributing
Shelfmark's core feature set is complete. Development focuses on stability, bug fixes, quality-of-life improvements, and refining the search experience. Contributions in these areas are welcome, please file issues or submit pull requests on GitHub.
Feature requests that fall outside the project scope (library integration, automation, collection management) will be closed. 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
Logging
Logs are available via:
docker logs <container-name>/var/log/shelfmark/inside the container (whenENABLE_LOGGING=true)
Log level is configurable via Settings or LOG_LEVEL environment variable.
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.
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.



