[Plugin] nodebb-plugin-backblaze-b2-s3-uploads — store uploads in Backblaze B2 (S3-compatible) with optional Bunny CDN
-
Hey everyone,
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.
npm: https://www.npmjs.com/package/nodebb-plugin-backblaze-b2-s3-uploads
GitHub: https://github.com/sqlik/nodebb-plugin-backblaze-b2-s3-uploadsWhat it does
- Intercepts filter:uploadFile and filter:uploadImage, streams files to a private B2 bucket via the S3-compatible API
- Stores only an opaque proxy URL in post content: /uploads/b2/<key>
- 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)
- All settings in ACP, including key ID/secret, presigned TTL, allowed extensions, max file size, max video size
Why another S3 plugin
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.
Optional Bunny CDN delivery
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.
Other features
- Background orphan cleanup — uploads dropped into the composer but never used in a saved post are tracked and pruned on a configurable schedule
- i18n — English and Polish included, more welcome
- MIT license
Roadmap
- Migration command for existing local uploads (with dry-run)
- Per-user / per-group upload quotas
- Optional IP-bound Bunny tokens
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.

Thanks for taking a look! -
I see you also posted in the official NodeBB forum: https://community.nodebb.org/topic/19296/plugin-nodebb-plugin-backblaze-b2-s3-uploads-store-uploads-in-backblaze-b2-s3-compatible-with-optional-bunny-cdn
Funny coincidence, @brutalbirdie also published two plugins there today that we use in our forum:
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login
