<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[Plugin] nodebb-plugin-backblaze-b2-s3-uploads — store uploads in Backblaze B2 (S3-compatible) with optional Bunny CDN]]></title><description><![CDATA[<p dir="auto">Hey everyone,</p>
<p dir="auto">I just published a fresh take on offloading NodeBB uploads to Backblaze B2 — built from scratch on the modern AWS SDK v3 because the existing S3 plugins haven't been touched in years.</p>
<p dir="auto">npm: <a href="https://www.npmjs.com/package/nodebb-plugin-backblaze-b2-s3-uploads" target="_blank" rel="noopener noreferrer nofollow ugc">https://www.npmjs.com/package/nodebb-plugin-backblaze-b2-s3-uploads</a><br />
GitHub: <a href="https://github.com/sqlik/nodebb-plugin-backblaze-b2-s3-uploads" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/sqlik/nodebb-plugin-backblaze-b2-s3-uploads</a></p>
<p dir="auto"><strong>What it does</strong></p>
<ul>
<li>Intercepts filter:uploadFile and filter:uploadImage, streams files to a private B2 bucket via the S3-compatible API</li>
<li>Stores only an opaque proxy URL in post content: /uploads/b2/&lt;key&gt;</li>
<li>On every download, a permission-aware proxy checks privileges.categories.can('topics:read', cid, uid) and 302-redirects to a fresh presigned URL — so the same setup serves both public categories (anonymous visitors get the redirect) and private categories (403 if no access)</li>
<li>All settings in ACP, including key ID/secret, presigned TTL, allowed extensions, max file size, max video size</li>
</ul>
<p dir="auto"><strong>Why another S3 plugin</strong></p>
<p dir="auto">The existing nodebb-plugin-s3-uploads family is on AWS SDK v2 (deprecated since 2024) and assumes much older NodeBB. This one targets    NodeBB v3+ and v4+, AWS SDK v3 (modular, smaller bundle), ESM admin module, and a permission model that respects category privileges instead of just public-or-not. Tested in production on a live v4.x forum.</p>
<p dir="auto"><strong>Optional Bunny CDN delivery</strong></p>
<p dir="auto">If you already use Bunny, flip a toggle in ACP and the proxy redirects to a Bunny token URL instead of a B2 presigned URL. Bunny pulls from B2 once (free, Bandwidth Alliance) and caches at the edge. Permission checks stay authoritative on every request — only the bytes go through Bunny.</p>
<p dir="auto"><strong>Other features</strong></p>
<ul>
<li>Background orphan cleanup — uploads dropped into the composer but never used in a saved post are tracked and pruned on a configurable schedule</li>
<li>i18n — English and Polish included, more welcome</li>
<li>MIT license</li>
</ul>
<p dir="auto"><strong>Roadmap</strong></p>
<ul>
<li>Migration command for existing local uploads (with dry-run)</li>
<li>Per-user / per-group upload quotas</li>
<li>Optional IP-bound Bunny tokens</li>
</ul>
<p dir="auto">This is a 0.1.1 release — running on a small private forum, but I'd love feedback, edge cases, and PRs from anyone willing to try it on a different NodeBB setup. Issues and ideas welcome on the GitHub repo.</p>
<p dir="auto"><img src="/assets/uploads/files/1776941197241-scr-20260423-kxxa.png" alt="SCR-20260423-kxxa.png" class=" img-fluid img-markdown" /><br />
Thanks for taking a look!</p>
]]></description><link>https://forum.cloudron.io/topic/15432/plugin-nodebb-plugin-backblaze-b2-s3-uploads-store-uploads-in-backblaze-b2-s3-compatible-with-optional-bunny-cdn</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Apr 2026 18:13:45 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/15432.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Apr 2026 10:47:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Plugin] nodebb-plugin-backblaze-b2-s3-uploads — store uploads in Backblaze B2 (S3-compatible) with optional Bunny CDN on Thu, 23 Apr 2026 12:22:49 GMT]]></title><description><![CDATA[<p dir="auto">That's just how life goes - either a dry spell or a lot of good things all at once <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=3dd30a23482" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /><br />
Yeah, I posted it on the NodeBB forum too - maybe someone will find it useful</p>
]]></description><link>https://forum.cloudron.io/post/123905</link><guid isPermaLink="true">https://forum.cloudron.io/post/123905</guid><dc:creator><![CDATA[sqlik]]></dc:creator><pubDate>Thu, 23 Apr 2026 12:22:49 GMT</pubDate></item><item><title><![CDATA[Reply to [Plugin] nodebb-plugin-backblaze-b2-s3-uploads — store uploads in Backblaze B2 (S3-compatible) with optional Bunny CDN on Thu, 23 Apr 2026 11:56:17 GMT]]></title><description><![CDATA[<p dir="auto">I see you also posted in the official NodeBB forum: <a href="https://community.nodebb.org/topic/19296/plugin-nodebb-plugin-backblaze-b2-s3-uploads-store-uploads-in-backblaze-b2-s3-compatible-with-optional-bunny-cdn" target="_blank" rel="noopener noreferrer nofollow ugc">https://community.nodebb.org/topic/19296/plugin-nodebb-plugin-backblaze-b2-s3-uploads-store-uploads-in-backblaze-b2-s3-compatible-with-optional-bunny-cdn</a></p>
<p dir="auto">Funny coincidence, <a class="plugin-mentions-user plugin-mentions-a" href="/user/brutalbirdie" aria-label="Profile: brutalbirdie">@<bdi>brutalbirdie</bdi></a> also published two plugins there today that we use in our forum:</p>
<ul>
<li><a href="https://community.nodebb.org/topic/19297/nodebb-plugin-internalnotes-internal-notes-and-topic-assignment" target="_blank" rel="noopener noreferrer nofollow ugc">https://community.nodebb.org/topic/19297/nodebb-plugin-internalnotes-internal-notes-and-topic-assignment</a></li>
<li><a href="https://community.nodebb.org/topic/19298/nodebb-plugin-username-denylist-block-usernames-at-registration-time" target="_blank" rel="noopener noreferrer nofollow ugc">https://community.nodebb.org/topic/19298/nodebb-plugin-username-denylist-block-usernames-at-registration-time</a></li>
</ul>
]]></description><link>https://forum.cloudron.io/post/123901</link><guid isPermaLink="true">https://forum.cloudron.io/post/123901</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Thu, 23 Apr 2026 11:56:17 GMT</pubDate></item></channel></rss>