dependabot[bot] 7158b79146 Bump the python-deps group with 3 updates (#1074)
Bumps the python-deps group with 3 updates:
[python-socketio](https://github.com/miguelgrinberg/python-socketio),
[seleniumbase](https://github.com/seleniumbase/SeleniumBase) and
[prek](https://github.com/j178/prek).

Updates `python-socketio` from 5.16.2 to 5.16.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/miguelgrinberg/python-socketio/releases">python-socketio's
releases</a>.</em></p>
<blockquote>
<h2>Release 5.16.3</h2>
<p>See <a
href="https://github.com/miguelgrinberg/python-socketio/blob/main/CHANGES.md">CHANGES.md</a>
for release notes.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/miguelgrinberg/python-socketio/blob/main/CHANGES.md">python-socketio's
changelog</a>.</em></p>
<blockquote>
<h1>python-socketio change log</h1>
<p><strong>Release 5.16.3</strong> - 2026-06-15</p>
<ul>
<li>Catch all exceptions in redis and rabbitmq client managers <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1581">#1581</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/80bb5c9b07e6b53e45f610ec29a24124c539d41b">commit</a>)</li>
</ul>
<p><strong>Release 5.16.2</strong> - 2026-05-21</p>
<ul>
<li>Prevent unnecessary resource allocations <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1574">#1574</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/ca140fe44d0ceb3004073645222abec182d8784b">commit</a>)</li>
<li>Add zizmor to CI builds <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1570">#1570</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/664dc27ec6f34179ed1724430eda3520627fc642">commit</a>)</li>
</ul>
<p><strong>Release 5.16.1</strong> - 2026-02-06</p>
<ul>
<li>Use configured JSON module in managers <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1549">#1549</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/6229261ae6e8c01e675097242e333ee84587a544">commit</a>)</li>
<li>Admin UI fixes: remove duplicate tasks, report transport upgrades
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/1c2eab13a92fac9e43663eb0b5f099eb1c40ea5b">commit</a>)</li>
<li>Switch to Furo documentation template (<a
href="https://github.com/miguelgrinberg/python-socketio/commit/add47d8c7abca697a2804141bbf29bfb095f7d5e">commit</a>)</li>
<li>Add Python free-threading to CI <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1554">#1554</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/ccdd2004a038ae4b8171a05120c5d0787332f7ee">commit</a>)</li>
</ul>
<p><strong>Release 5.16.0</strong> - 2025-12-24</p>
<ul>
<li>Address deprecation warnings (<a
href="https://github.com/miguelgrinberg/python-socketio/commit/b235699d9b06564753c570b76055997e9d62a938">commit</a>)</li>
<li>Drop Python 3.8 and 3.9 from CI builds (<a
href="https://github.com/miguelgrinberg/python-socketio/commit/d0728d2f74538762dd551fa9cd0cd1fd5aedfa37">commit</a>)</li>
</ul>
<p><strong>Release 5.15.1</strong> - 2025-12-16</p>
<ul>
<li>Restore support multiple arguments via pubsub emits <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1540">#1540</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/c279f26bb8c9887c4ca99d4d81ad331c4844438c">commit</a>)</li>
</ul>
<p><strong>Release 5.15.0</strong> - 2025-11-22</p>
<ul>
<li>Retry initial Redis connection <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1536">#1534</a>
([commit <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1">#1</a>](<a
href="https://github.com/miguelgrinberg/python-socketio/commit/1e903e173a2d7b04599c4f7f9630c1abbb531fad">https://github.com/miguelgrinberg/python-socketio/commit/1e903e173a2d7b04599c4f7f9630c1abbb531fad</a>)
[commit <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/2">#2</a>](<a
href="https://github.com/miguelgrinberg/python-socketio/commit/5e898a9b93526e6e667767e54c60f4c84589989d">https://github.com/miguelgrinberg/python-socketio/commit/5e898a9b93526e6e667767e54c60f4c84589989d</a>))</li>
<li>Correctly regenerate RabbitMQ binding after a connection failure <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1516">#1516</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/c52e93b4a328d98a968bfbdec0cfd598b73ee913">commit</a>)
(thanks <strong>Gritty_dev</strong>!)</li>
<li>Support <code>ext_type</code> in the <code>MsgPackPacket</code>
class <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1521">#1521</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/208925344a48485d2cd56e40eb74266c3bcb5311">commit</a>)</li>
<li>Support sending <code>bytesarray</code>s when using pub/sub managers
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/6c9b9974f72e2efdf62407ecab24ee6995448098">commit</a>)</li>
<li>Fix typos in documentation <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1520">#1520</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/db3f1c2a0105c30cb833ddfca8f05fe4320468fd">commit</a>)
(thanks <strong>Lê Nam Khánh</strong>!)</li>
<li>Improvements to the logging documentation (<a
href="https://github.com/miguelgrinberg/python-socketio/commit/b423d0e38eef559b7e81acb7e32059de305f982c">commit</a>)</li>
</ul>
<p><strong>Release 5.14.3</strong> - 2025-10-29</p>
<ul>
<li>Support Python's native <code>ConnectionRefusedError</code>
exception to reject a connection <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1515">#1515</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/f3b18bde3f16437b223491d4c3e440ea37105fe3">commit</a>)</li>
<li>Push binary data to the aiopika client manager <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1514">#1514</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/194e1b7f277b5f72e1de78d3f614e7b8b6c788ac">commit</a>)</li>
</ul>
<p><strong>Release 5.14.2</strong> - 2025-10-15</p>
<ul>
<li>Restore binary message support in message queue setups <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1509">#1509</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/bab4a10f48aaae11d7f832ebe5c30ad3f85d31b3">commit</a>)</li>
<li>Fix formatting of client connection error <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1507">#1507</a>
(<a
href="https://github.com/miguelgrinberg/python-socketio/commit/f298c9b54d76ab09ff72935937e1b9575bc45ffd">commit</a>)</li>
<li>Add 3.14 and pypy-3.11 CI tasks (<a
href="https://github.com/miguelgrinberg/python-socketio/commit/1f4cd3b025c294f25208ec3c05b5f8df6209e403">commit</a>)</li>
<li>Improve documentation of the
<code>BaseManager.get_participants()</code> method (<a
href="https://github.com/miguelgrinberg/python-socketio/commit/33722a0d96036f005188b07b8b46a5ef091fe65f">commit</a>)</li>
</ul>
<p><strong>Release 5.14.1</strong> - 2025-10-02</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/miguelgrinberg/python-socketio/commit/36c550f62415dc9c9c8dd39203b3c59ec7bdcdea"><code>36c550f</code></a>
Release 5.16.3</li>
<li><a
href="https://github.com/miguelgrinberg/python-socketio/commit/80bb5c9b07e6b53e45f610ec29a24124c539d41b"><code>80bb5c9</code></a>
Catch all exceptionsin redis and rabbitmq managers (Fixes <a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1581">#1581</a>)</li>
<li><a
href="https://github.com/miguelgrinberg/python-socketio/commit/3f1d50903d1034fd9ffeb2110465ee0c1f90ea4c"><code>3f1d509</code></a>
Bump aiohttp from 3.13.4 to 3.14.0 in /examples/server/aiohttp (<a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1580">#1580</a>)
#nolog</li>
<li><a
href="https://github.com/miguelgrinberg/python-socketio/commit/c2918c1b43489bde34d9198352bc1a4667021fc0"><code>c2918c1</code></a>
Bump qs and express in /examples/server/javascript (<a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1579">#1579</a>)
#nolog</li>
<li><a
href="https://github.com/miguelgrinberg/python-socketio/commit/e19cb7df63e132da3a9b599e5bf948199c6a524f"><code>e19cb7d</code></a>
Bump qs and express in /examples/client/javascript (<a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1578">#1578</a>)
#nolog</li>
<li><a
href="https://github.com/miguelgrinberg/python-socketio/commit/f616fb1cb4ba766bac99b05553672e8d3de90b48"><code>f616fb1</code></a>
Bump ws, engine.io, socket.io-adapter and socket.io-client (<a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1575">#1575</a>)
#nolog</li>
<li><a
href="https://github.com/miguelgrinberg/python-socketio/commit/5f35b0bf5bb959b0a0b0d5006040a53112b50633"><code>5f35b0b</code></a>
Bump ws, engine.io, socket.io-adapter and socket.io-client (<a
href="https://redirect.github.com/miguelgrinberg/python-socketio/issues/1576">#1576</a>)
#nolog</li>
<li><a
href="https://github.com/miguelgrinberg/python-socketio/commit/995f0807e78207ec88872764f7533a115fb9c6ba"><code>995f080</code></a>
Version 5.16.3.dev0</li>
<li>See full diff in <a
href="https://github.com/miguelgrinberg/python-socketio/compare/v5.16.2...v5.16.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `seleniumbase` from 4.49.13 to 4.49.14
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/seleniumbase/SeleniumBase/releases">seleniumbase's
releases</a>.</em></p>
<blockquote>
<h2>4.49.14 - Chromium overhaul with CDP Mode updates</h2>
<h2>Chromium overhaul with CDP Mode updates</h2>
<ul>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/cb03afab9f8aeb67273348a8f5641faaf8ed90e7">Fix
issue that caused Chromium 151 to crash at startup</a>
-- This resolves <a
href="https://redirect.github.com/seleniumbase/SeleniumBase/issues/4393">seleniumbase/SeleniumBase#4393</a></li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/14d688b69f065f51d5b7b5d87059a591ad0a59d2">Add
option for setting the exact Chromium revision to download</a>
-- This resolves <a
href="https://redirect.github.com/seleniumbase/SeleniumBase/issues/4394">seleniumbase/SeleniumBase#4394</a></li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/3c729af379fffaf2365782ea400d57d8f01e75a1">Update
Chromium options</a>
-- This resolves <a
href="https://redirect.github.com/seleniumbase/SeleniumBase/issues/4395">seleniumbase/SeleniumBase#4395</a>
-- this resolves <a
href="https://redirect.github.com/seleniumbase/SeleniumBase/issues/4396">seleniumbase/SeleniumBase#4396</a></li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/f01f59153b338246ec6e78e589b00463107542ad">Update
CDP Mode</a></li>
</ul>
<h3>Here's an example of downloading a custom Chromium revision:</h3>
<pre lang="zsh"><code>sbase get chromium --revision=1639046
<p>*** Chromium revision to download = 1639046</p>
<p>Downloading chrome-mac.zip from:
<a
href="https://storage.googleapis.com/chromium-browser-snapshots/Mac_Arm/1639046/chrome-mac.zip">https://storage.googleapis.com/chromium-browser-snapshots/Mac_Arm/1639046/chrome-mac.zip</a>
...
Download Complete!</p>
<p>... [UNZIPPING] ...</p>
<p>Unzip Complete!</p>
<p>Chromium was saved inside:
..../seleniumbase/drivers/chromium_drivers/
chrome-mac
</code></pre></p>
<h2>What's Changed</h2>
<ul>
<li>Chromium overhaul with CDP Mode updates by <a
href="https://github.com/mdmintz"><code>@​mdmintz</code></a> in <a
href="https://redirect.github.com/seleniumbase/SeleniumBase/pull/4397">seleniumbase/SeleniumBase#4397</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/seleniumbase/SeleniumBase/compare/v4.49.13...v4.49.14">https://github.com/seleniumbase/SeleniumBase/compare/v4.49.13...v4.49.14</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/dd5454faf2ba9950da5390d4dd121d17bb3b7f2c"><code>dd5454f</code></a>
Merge pull request <a
href="https://redirect.github.com/seleniumbase/SeleniumBase/issues/4397">#4397</a>
from seleniumbase/chromium-overhaul-with-cdp-updates</li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/520c0b406a784c48be94ed6dbdcc85dbd469c6dd"><code>520c0b4</code></a>
Version 4.49.14</li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/0e11a764a656f1bfc65998dafa3f7a4eed96104b"><code>0e11a76</code></a>
Update the docs</li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/b1901439ba8eb54dadc1a87816216bddf24b9e0e"><code>b190143</code></a>
Update examples</li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/f01f59153b338246ec6e78e589b00463107542ad"><code>f01f591</code></a>
Update CDP Mode</li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/3c729af379fffaf2365782ea400d57d8f01e75a1"><code>3c729af</code></a>
Update Chromium options</li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/14d688b69f065f51d5b7b5d87059a591ad0a59d2"><code>14d688b</code></a>
Add option for setting the exact Chromium revision to download</li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/cb03afab9f8aeb67273348a8f5641faaf8ed90e7"><code>cb03afa</code></a>
Fix issue that caused Chromium 151 to crash at startup</li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/d76b2fd98f4c71a930b8b0536235cd9e7118d9f4"><code>d76b2fd</code></a>
Update CDP Mode examples</li>
<li><a
href="https://github.com/seleniumbase/SeleniumBase/commit/09fd1f35d284965ddf8a4b245710d9acee6a6e3e"><code>09fd1f3</code></a>
Add/update examples of DataDome Slider CAPTCHA-bypass</li>
<li>See full diff in <a
href="https://github.com/seleniumbase/SeleniumBase/compare/v4.49.13...v4.49.14">compare
view</a></li>
</ul>
</details>
<br />

Updates `prek` from 0.4.4 to 0.4.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/j178/prek/releases">prek's
releases</a>.</em></p>
<blockquote>
<h2>0.4.5</h2>
<h2>Release Notes</h2>
<p>Released on 2026-06-15.</p>
<h3>✨Highlights</h3>
<p>0.4.5 completes <code>prek</code>'s pre-commit language coverage.
With R, Conda, Perl,
and coursier now supported, <code>prek</code> supports every language
available in
pre-commit, plus <code>prek</code>-only modern languages such as Bun and
Deno.</p>
<p>This is full feature parity with pre-commit. The last major
compatibility gap
is closed, and <code>prek</code> is now on the path to 1.0.</p>
<h3>💚 Sponsorship</h3>
<p>If <code>prek</code> saves time for you or your team, please consider
sponsoring the
project on <a href="https://github.com/sponsors/j178">GitHub
Sponsors</a>. It helps keep
new features, performance work, and maintenance moving.</p>
<h3>Enhancements</h3>
<ul>
<li>Add <code>Perl</code> language support (<a
href="https://redirect.github.com/j178/prek/pull/2201">#2201</a>)</li>
<li>Add <code>R</code> language support (<a
href="https://redirect.github.com/j178/prek/pull/2206">#2206</a>)</li>
<li>Add <code>Conda</code> language support (<a
href="https://redirect.github.com/j178/prek/pull/2203">#2203</a>)</li>
<li>Add <code>coursier</code> language support (<a
href="https://redirect.github.com/j178/prek/pull/2194">#2194</a>)</li>
<li>Add group filters to list (<a
href="https://redirect.github.com/j178/prek/pull/2152">#2152</a>)</li>
<li>Remove legacy repo path support (<a
href="https://redirect.github.com/j178/prek/pull/2150">#2150</a>)</li>
<li>Skip cloning fully filtered remote repos (<a
href="https://redirect.github.com/j178/prek/pull/2151">#2151</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Avoid building JSON trees in syntax hooks (<a
href="https://redirect.github.com/j178/prek/pull/2156">#2156</a>)</li>
<li>Scan mixed line endings without line vector (<a
href="https://redirect.github.com/j178/prek/pull/2160">#2160</a>)</li>
<li>Skip file scan for always-run no-filename hooks (<a
href="https://redirect.github.com/j178/prek/pull/2155">#2155</a>)</li>
<li>Use fixed buffer for EOF scan (<a
href="https://redirect.github.com/j178/prek/pull/2163">#2163</a>)</li>
<li>Use fixed buffer for private key scan (<a
href="https://redirect.github.com/j178/prek/pull/2164">#2164</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fix pretty-format-json CRLF handling (<a
href="https://redirect.github.com/j178/prek/pull/2210">#2210</a>)</li>
<li>Handle missing blobs in diff snapshots (<a
href="https://redirect.github.com/j178/prek/pull/2211">#2211</a>)</li>
<li>Ignore coursier channel from working repo (<a
href="https://redirect.github.com/j178/prek/pull/2202">#2202</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a href="https://github.com/j178"><code>@​j178</code></a></li>
</ul>
<h2>Install prek 0.4.5</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/j178/prek/blob/master/CHANGELOG.md">prek's
changelog</a>.</em></p>
<blockquote>
<h2>0.4.5</h2>
<p>Released on 2026-06-15.</p>
<h3>✨Highlights</h3>
<p>0.4.5 completes <code>prek</code>'s pre-commit language coverage.
With R, Conda, Perl,
and coursier now supported, <code>prek</code> supports every language
available in
pre-commit, plus <code>prek</code>-only modern languages such as Bun and
Deno.</p>
<p>This is full feature parity with pre-commit. The last major
compatibility gap
is closed, and <code>prek</code> is now on the path to 1.0.</p>
<h3>💚 Sponsorship</h3>
<p>If <code>prek</code> saves time for you or your team, please consider
sponsoring the
project on <a href="https://github.com/sponsors/j178">GitHub
Sponsors</a>. It helps keep
new features, performance work, and maintenance moving.</p>
<h3>Enhancements</h3>
<ul>
<li>Add <code>Perl</code> language support (<a
href="https://redirect.github.com/j178/prek/pull/2201">#2201</a>)</li>
<li>Add <code>R</code> language support (<a
href="https://redirect.github.com/j178/prek/pull/2206">#2206</a>)</li>
<li>Add <code>Conda</code> language support (<a
href="https://redirect.github.com/j178/prek/pull/2203">#2203</a>)</li>
<li>Add <code>coursier</code> language support (<a
href="https://redirect.github.com/j178/prek/pull/2194">#2194</a>)</li>
<li>Add group filters to list (<a
href="https://redirect.github.com/j178/prek/pull/2152">#2152</a>)</li>
<li>Remove legacy repo path support (<a
href="https://redirect.github.com/j178/prek/pull/2150">#2150</a>)</li>
<li>Skip cloning fully filtered remote repos (<a
href="https://redirect.github.com/j178/prek/pull/2151">#2151</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Avoid building JSON trees in syntax hooks (<a
href="https://redirect.github.com/j178/prek/pull/2156">#2156</a>)</li>
<li>Scan mixed line endings without line vector (<a
href="https://redirect.github.com/j178/prek/pull/2160">#2160</a>)</li>
<li>Skip file scan for always-run no-filename hooks (<a
href="https://redirect.github.com/j178/prek/pull/2155">#2155</a>)</li>
<li>Use fixed buffer for EOF scan (<a
href="https://redirect.github.com/j178/prek/pull/2163">#2163</a>)</li>
<li>Use fixed buffer for private key scan (<a
href="https://redirect.github.com/j178/prek/pull/2164">#2164</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fix pretty-format-json CRLF handling (<a
href="https://redirect.github.com/j178/prek/pull/2210">#2210</a>)</li>
<li>Handle missing blobs in diff snapshots (<a
href="https://redirect.github.com/j178/prek/pull/2211">#2211</a>)</li>
<li>Ignore coursier channel from working repo (<a
href="https://redirect.github.com/j178/prek/pull/2202">#2202</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a href="https://github.com/j178"><code>@​j178</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/j178/prek/commit/bb3108283fd4aab0d9eb59f23098e0c05a96cdbe"><code>bb31082</code></a>
Update README.md</li>
<li><a
href="https://github.com/j178/prek/commit/fa4e2dc060eccac3c2521ec7bf4af1272c5d6205"><code>fa4e2dc</code></a>
Bump version to 0.4.5 (<a
href="https://redirect.github.com/j178/prek/issues/2221">#2221</a>)</li>
<li><a
href="https://github.com/j178/prek/commit/e9336fa724b8a99b3a21fd60eb0849cd731153ef"><code>e9336fa</code></a>
Add R language support (<a
href="https://redirect.github.com/j178/prek/issues/2206">#2206</a>)</li>
<li><a
href="https://github.com/j178/prek/commit/97a5a15701d3691287e4f969a2a2f421d1501a46"><code>97a5a15</code></a>
Update Rust crate which to v8.0.3 (<a
href="https://redirect.github.com/j178/prek/issues/2219">#2219</a>)</li>
<li><a
href="https://github.com/j178/prek/commit/20a519aa2aa4add7e70dfbb2ff743cd1f35e25f3"><code>20a519a</code></a>
Update Rust crate ignore to v0.4.26 (<a
href="https://redirect.github.com/j178/prek/issues/2218">#2218</a>)</li>
<li><a
href="https://github.com/j178/prek/commit/88f0e2bd8a7d02be7fb19fcd17e1e8db79b8b0bc"><code>88f0e2b</code></a>
Update dependency uv to v0.11.19 (<a
href="https://redirect.github.com/j178/prek/issues/2214">#2214</a>)</li>
<li><a
href="https://github.com/j178/prek/commit/7bd43000679b33e2b947f453436237dae062af70"><code>7bd4300</code></a>
Update GitHub Actions to v7 (<a
href="https://redirect.github.com/j178/prek/issues/2220">#2220</a>)</li>
<li><a
href="https://github.com/j178/prek/commit/48ed5cc2838066d71278dd887dee595c32085be2"><code>48ed5cc</code></a>
Update Rust crate async_zip to 0.0.18 (<a
href="https://redirect.github.com/j178/prek/issues/2217">#2217</a>)</li>
<li><a
href="https://github.com/j178/prek/commit/257e98a429e96f89a4d965ad28568cba77ca33c2"><code>257e98a</code></a>
Update pre-commit to v1.47.2 (<a
href="https://redirect.github.com/j178/prek/issues/2216">#2216</a>)</li>
<li><a
href="https://github.com/j178/prek/commit/0c0460241a13b9ac519e1abd3a0a8a3ad60d4d2f"><code>0c04602</code></a>
Update GitHub Actions (<a
href="https://redirect.github.com/j178/prek/issues/2215">#2215</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/j178/prek/compare/v0.4.4...v0.4.5">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-21 00:00:30 -04:00
2026-06-14 01:19:08 -04:00
2026-04-12 12:39:15 +01:00
2026-04-12 12:39:15 +01:00
2026-06-17 14:25:31 -04:00
2026-04-13 11:40:41 +01:00
2026-04-13 11:40:41 +01:00
2026-04-12 12:39:15 +01:00
2024-12-16 22:48:26 +00:00
2026-04-15 18:50:13 +01:00
2026-05-14 14:46:43 +01:00

📚 Shelfmark: Book Search & Request Tool

Shelfmark

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

Home screen Home screen

Search results Search results

Multi-source downloads Multi-source downloads

Download queue Download queue

🚀 Quick Start

Prerequisites

  • Docker & Docker Compose

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) 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

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_ADMIN and NET_RAW capabilities
  • Timezone is auto-detected from Tor exit node
  • Custom DNS/proxy settings are ignored when Tor is active

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 (when ENABLE_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.

S
Description
No description provided
Readme MIT
79 MiB
v1.4.0
Latest
2026-09-26 02:22:42 +01:00
Languages
Python 77.2%
TypeScript 20.5%
Shell 1.6%
CSS 0.3%
Dockerfile 0.2%
Other 0.1%