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-uploads
What 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!


