NodeBB makes sense when the community is chatty, the shop already speaks Node.js, and you want a forum that is a websocket process, not a PHP page that reloads. It is a poor choice when the host is cPanel, the staff think in last-post columns, or you were hoping for XenForo’s add-on catalogue with a different logo.
This is the when, plus the install shape official docs actually publish. It is not a XenForo-versus-Discourse reprint. The matrix already owns that pair. Flarum already owns “modern but still PHP.” Here the stack changes: Node.js, MongoDB or Redis, websockets, plugins as nodebb-plugin-* on npm. If that sentence feels like home, keep reading. If it feels like a second career, stop — pay for Discourse hosted or stay on PHP.
Official sources: docs.nodebb.org and the project’s GitHub install path. Community sizing notes are labelled. This article will not invent a plugin’s settings or a price NodeBB does not publish.
What NodeBB actually is
A NodeBB site is a long-running Node process that talks to a data store (MongoDB or Redis) and pushes realtime updates over websockets. Members see new posts without a full page reload. Chat-shaped rooms feel native because the transport is already a socket. Categories and topics still exist; the sensation is closer to a live app than to phpBB.
That is the product bet:
- Win: presence, live topics, a JS team that can read a plugin, horizontal-ish “it is just Node.”
- Loss: you are not on PHP-FPM. Shared hosts that only understand
index.phpare out. Classic “page 17 of 40” veterans need a tour. The plugin universe is npm, with all the supply-chain habits that implies.
It is not Discourse. Discourse is Rails + PostgreSQL + Redis + Docker (or official hosted) with a trust-level machine. NodeBB is a Node app you start with ./nodebb start. Different ops, different moderation culture, overlapping “modern topic list” look.
It is not Flarum. Flarum is a Mithril SPA on PHP. You can put Flarum on a serious shared host. NodeBB wants a Node version, a Mongo or Redis, and a reverse proxy that will Upgrade websockets. Closer to “we already run an API” than to “we already run WordPress.”
Install shape (docs, not folklore)
Published pieces you should treat as the skeleton:
| Piece | What the docs say |
|---|---|
| Runtime | Node.js ≥ 22 |
| Data store | MongoDB ≥ 5 (the current guide uses 8.0) or Redis ≥ 7.2 |
| Code | Clone the v4.x branch |
| Setup | ./nodebb setup then ./nodebb start |
| App port | 4567 by default |
| Edge | nginx (or equivalent) reverse proxy with websocket Upgrade headers |
| Memory | > 512 MB to run npm install; swap recommended |
That table is enough to fail a host conversation in thirty seconds. No Node 22? No. No ability to run Mongo 8 or Redis 7.2? No. Cannot set Upgrade on the proxy? The live UI will look “broken” in ways that are actually dropped sockets. Less than 512 MB and no swap? npm install is how you discover that.
A compressed happy path (read the current docs for flags and user-creation; do not treat this as a full copy-paste runbook):
# After Node 22+ and Mongo 8 (or Redis 7.2+) exist on the box
git clone -b v4.x https://github.com/NodeBB/NodeBB.git
cd NodeBB
./nodebb setup
./nodebb start
Then put nginx in front of 127.0.0.1:4567 with the websocket headers the docs show. TLS terminates at nginx (or a CDN that forwards Upgrade correctly). Do not expose 4567 to the world “for a minute.”
Process management in production is your systemd/pm2/docker choice. The project starts a process. You keep it up. That is a different job than XenForo’s “PHP-FPM will run the next request” and a different job than Discourse’s ./launcher rebuild app.
Mongo versus Redis as the store
Both are documented. The guide’s Mongo 8.0 line is the one to copy if you do not have a religion. Redis as the primary store is a real option on NodeBB (unlike Discourse, where Redis is infrastructure next to Postgres). Pick one, back it up with tools that understand that store, and do not run a “we will decide later” split brain.
Backup meaning, said plainly:
- Mongo: dump/restore the database, plus uploaded files NodeBB stored on disk or on the object store you configured.
- Redis: a Redis persistence story you have actually tested, plus those same uploads.
A Node process without a restore drill is a demo.
Websockets are the point
If you turn the realtime features off until the site “feels like a forum,” you bought the wrong stack. The socket is why NodeBB exists as a category.
What that means for a community:
- Presence and live updates are normal. Chatty hobby rooms and live event threads feel good.
- Proxies, CDNs, and cheap hosts that buffer or strip
Upgradebecome outages. Brief whoever owns Cloudflare / nginx. A “grey-cloud then wonder why chat dies” ticket is a NodeBB classic. - Mobile networks and corporate SSL inspection will break a subset of users. Have a fallback story (refresh still works even if the socket dropped) and do not gaslight them.
- Scaling is “how many socket connections and how busy is Mongo/Redis,” not “PHP workers × page cache.” A JS shop already has intuition for this. A phpBB admin does not, yet.
Discourse also uses sockets for some live UI. NodeBB’s whole personality is that bet. If your members refresh once an evening and read page 3, XenForo or phpBB will make them happier per dollar.
Plugin culture: nodebb-plugin-* on npm
Extensions are npm packages named in the nodebb-plugin-* (and theme) convention. You install them with the NodeBB CLI / admin, which is Composer’s cousin, not XenForo’s zip.
Trust model:
- An admin who can install plugins can pull npm. Treat that like Flarum’s Extension Manager: trust all admins.
- An abandoned plugin is a Node 22 / v4.x upgrade blocker. Inventory first.
- Supply chain is the npm supply chain. Pin versions. Do not live on
*in production because a Friday publish looked convenient.
The catalogue is not XenForo’s resource directory. You will find chat, SSO, and modern-community extras. You will not find a decade of FiveM listing add-ons. The gaming veto applies: if the extras are the product, stay on XenForo.
Write plugins if you are a JS shop. That is a real NodeBB pro. A theme and a plugin in JavaScript are readable to the same people who ship the company website. A XenForo add-on is PHP + XF APIs. A Discourse plugin is Rails + Ember. Hire the language you already employ.
Who should pick NodeBB
Say yes when most of this is true:
- The org already runs Node in production (same people, same on-call, same logging).
- The community is realtime-shaped: live threads, chat adjacent to topics, “who is here,” events that spike for an hour.
- You want a single JS language from theme to plugin to ops scripts.
- You can run Node 22 + Mongo 8 or Redis 7.2 on a VPS you SSH into. Swap exists. nginx is yours.
- You do not need a classic paginated board index as the culture.
- You do not need XFRM / a credits shop / a 15-year XF add-on as a lateral move.
- Official Discourse hosted was considered and rejected (wrong stack, wrong price, or you refuse Rails/Docker).
- Flarum was considered and rejected (you do not want PHP, or you want sockets more than a Mithril SPA).
Typical good fits: a product company whose entire platform is Node and whose “forum” is really a live support room plus docs-adjacent topics; a game-adjacent chatty community that already accepted they will not have a XenForo listing grid; an internal JS shop community; a realtime event or conference companion.
Typical bad fits: a volunteer phpBB that wanted prettier CSS; a XenForo game hub; a marketing team with cPanel; anyone who said “Node is faster so the forum will be more active.” Activity is still onboarding.
Who should not pick it
PHP-only hosts and PHP-only people. This is the hard no. Shared hosting that sells “unlimited PHP” will not run Node 22 and Mongo 8 for you in any way you should trust. A contractor who can restore internal_data cannot necessarily babysit a websocket process. Train them or hire differently — or pick Flarum / XenForo / phpBB.
Classic paginated forums. If the members’ ritual is “open the tree, sort by last post, open page 4,” NodeBB will feel like a chat app wearing a forum hat. XenForo and phpBB still own that ritual. Discourse already asked those members to learn Latest; NodeBB asks them to learn Latest and a live socket. Two culture shocks.
“We want Discourse but cheaper on a $6 VPS.” NodeBB’s memory floor for npm install is > 512 MB with swap recommended. You still need Mongo or Redis. You still need a proxy. You still need a person. Discourse’s honest small self-host is 2 GB+. Neither is a $6 toy. If money is the filter, phpBB or Flarum on cheap PHP, or XenForo’s license on the same PHP, are the coherent cheap stories. NodeBB is cheap when Node is already a sunk cost.
Deep ACL / add-on extras. Same veto as Flarum and Discourse. Groups and categories will get you staff / members / a private room. They will not get you a XenForo Analyze-permissions tree.
Nobody on-call for npm and Mongo. When a plugin publish or a Node security release lands, someone has to upgrade. If that someone does not exist, official Discourse hosted (public 2026 grid: Free / Pro around $100/mo / Business around $500/mo — re-check live) is how you buy a grown-up.
SEO as the only goal. All modern SPAs and realtime apps need a deliberate crawler story. Discourse invests in prerender and a core sitemap plugin. XenForo is multi-page by default. NodeBB can be fine; do not assume it is a drop-in SEO win because URLs look clean. Measure. This article will not invent a sitemap setting the current docs did not put in front of us.
Hosting and ops, in practice
A boring production shape:
- Ubuntu LTS VPS, 2 GB+ if you like sleep (you can try smaller with swap;
npm installwants > 512 MB). - Node 22 from a source you will patch.
- Mongo 8 (or Redis 7.2) on the same box at hobby scale; split off when the data store deserves it.
- NodeBB on
127.0.0.1:4567, systemd unit, logs in one place. - nginx: TLS,
proxy_pass,UpgradeandConnectionheaders as the docs specify. - Backups: store dump + uploads, off-box, restore tested on a second machine.
- Firewall: 80/443 public, 4567 local, Mongo/Redis local.
CDN: only if it forwards websockets the way you think it does. Test chat from a phone on LTE before you announce.
Upgrades: read the v4.x notes, git fetch, run the project’s upgrade path, rebuild assets, restart the process. There is no launcher rebuild. There is also no XenForo one-click upgrade package. JS teams find this normal.
Compare rebuild personality:
| Product | How a Friday upgrade feels |
|---|---|
| XenForo | Upload package / one-click; PHP requests keep being PHP requests |
| Discourse | ./launcher rebuild app, ~5–10 minutes down |
| Flarum | Composer + cache; PHP-FPM stays the model |
| NodeBB | git/npm, restart the process, pray the plugin compiled |
If the Friday column you can staff is the last one, you are a NodeBB org.
Moderation and IA (short, honest)
NodeBB is a modern category/topic forum, not a trust-level machine. Do not expect Discourse’s TL0 sandbox, 100-day Regular demotion, or edit_all_topic_groups defaults. You will configure groups and privileges the way the current admin UI offers. You will install plugins if you want more automation. You will staff a queue.
That can be a pro. Game officers who hated TL3 demotion will not meet it here. Support sites that wanted the sandbox will have to build a new-user privilege set by hand — or they should have picked Discourse.
IA advice is the same SF-2 line we use everywhere: few rooms, tags or prefixes for the rest, do not build empty malls. Realtime does not fix a 80-category ghost town. It just live-updates the emptiness.
Chat: NodeBB’s realtime nature means in-app chat is a native thought. Still do not run three chats (NodeBB + Discord + Slack) without a written split. The gaming article’s table (forum = searchable, Discord = voice/LFG) works here too.
Cost shape
NodeBB the software is open source. Cost is the Node-capable VPS, the data store, npm-time, and staff.
| Path | You pay | Makes sense when |
|---|---|---|
| NodeBB self-host | VPS + Mongo/Redis + a JS person | Node is already the company |
| Flarum | Cheap PHP + Composer time | PHP shop, small modern forum |
| phpBB 3.3.x | Cheap PHP | Conservative, $0, official XF exit |
| XenForo | $195 + $60/yr (+ add-ons / Cloud $60–250/mo listed) | Extras, tree, PHP contractor |
| Discourse self-host | Docker VPS 2 GB+ | You like Rails/Docker, want TL |
| Discourse hosted | Free / ~$100 / ~$500 public 2026 | You want to fire sysadmin |
Re-check live price grids. Do not tell a CFO “NodeBB is free” and then hire a Node contractor at day rate to keep Mongo patched. The honest sentence is “we already pay those people.”
A week in the chair
Monday. systemd says the process is up. You glance at Mongo disk. A plugin needs an npm bump. You do it on staging because last quarter a major ate the composer-equivalent lockfile. Latest (or NodeBB’s equivalent home) is live-updating a support thread. Nobody asked for a last-post column. A member on a corporate laptop cannot see live updates; you tell them to refresh and file the SSL-inspect note again.
Thursday. Marketing wants a category per campaign. You say no, one category, tags. You are the same villain a Discourse admin is on Thursday.
Sunday. Node security release. You have a playbook. If you do not, you should not have been on this product.
If that week is already how your company ships, NodeBB is a forum that lives in the same building. If that week is how you imagine “modern” while the only contractor is a WordPress person, it is a fantasy novel.
Decision table
| Situation | Product |
|---|---|
| PHP host, classic board, extras | XenForo |
| PHP host, small, modern, no extras | Flarum or phpBB |
| Want TL sandbox + official hosted | Discourse |
| Want Docker / Rails, self-host | Discourse |
| JS shop, realtime, sockets, npm plugins | NodeBB |
| Game hub: whitelist, listings, shop | XenForo (architecture) |
| “Any modern forum, we have no staff” | Discourse hosted or do not start a forum |
Related reading
- Modern PHP alternative: Flarum
- Rails / Docker / TL alternative: Discourse first week, pros and cons versus XF
- If you are leaving XenForo at all: stay or migrate
- If the community is a game hub: is Discourse suitable — the extras veto is stack-agnostic
Checklist
Stack
- Node.js ≥ 22
- MongoDB ≥ 5 (guide: 8.0) or Redis ≥ 7.2
- Clone v4.x,
./nodebb setup,./nodebb start - nginx (or equivalent) in front of 4567 with websocket Upgrade
- > 512 MB for
npm install, swap recommended - systemd/pm2/other keep-alive
- Backup/restore drill for the store + uploads
Fit
- JS people already on staff
- Community is chatty / live, not a paginated tree culture
- Admins trusted with npm
- Extras (shop, listings, XFRM) not load-bearing
- CDN/proxy tested for sockets on a phone
Explicit nos
- Not a cPanel-only org
- Not “Discourse on the cheap”
- Not a XenForo add-on museum
- Not an activity strategy
Takeaways
- NodeBB is a Node.js ≥ 22 realtime forum on MongoDB (≥ 5, guide uses 8.0) or Redis ≥ 7.2. Clone v4.x,
./nodebb setup,./nodebb start, proxy 4567 with websocket Upgrade.npm installwants > 512 MB and swap is recommended. - It makes sense for JS shops and chatty communities. Plugins are
nodebb-plugin-*on npm. Trust every admin the way you would trust Composer root. - It does not make sense for PHP-only hosts, classic paginated board cultures, or boards whose product is XenForo extras.
- It is not cheaper Discourse and not a Flarum with sockets glued on. Different ops personality: a long-running process, not PHP-FPM, not
launcher rebuild. - Cost is the Node people you already employ. If you do not employ them, buy Discourse hosted or stay on PHP.
If your on-call already pages on a Node service, your members already live in live threads, and you can draw the nginx Upgrade lines on a whiteboard, NodeBB is a coherent forum. If you cannot, the modern forum you actually want has a different runtime — and now you can name it.

