Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
upstream: github.com/NodeBB/NodeBB (opens in new tab) · github.com/discourse/discourse (opens in new tab)
Pick NodeBB
If you want the lighter forum: a Compose file plus a web installer, MongoDB, PostgreSQL or Redis as the store, npm plugins from the admin panel, and ActivityPub federation in the core; it idled at ~217 MB with MongoDB in our check.
Pick Discourse
If you want chat, polls, solved answers, reactions and the AI plugin as first-party plugins and can run its one supported install: a launcher-built container, rebuilt for every plugin change, with a hostname and 1 GB of RAM plus swap.
NodeBB and Discourse are the two forums in our catalog with an official Docker route. Both give you categories, mentions, notifications, moderation and search in a modern browser UI; both are GPL. The difference is how much each one brings and how much it asks of the server. Discourse is a large Rails application that arrives as one launcher-built container with chat, polls and an AI plugin already in the repository, on a documented 1 GB floor with swap. NodeBB is a Node.js forum with a "common core" and npm plugins, installs from a stock Compose file with a web installer, idled well under Discourse's floor in our check, and federates over ActivityPub out of the box.
NodeBB is the forum whose Docker route is a Compose file. Upstream's
repository carries a docker-compose.yml with a nodebb service beside a
mongo service and postgres and redis profiles; our snippet uses the
MongoDB pairing and pins the official GHCR image. First start installs
dependencies and runs a build, which takes a few minutes, then a web installer
answers on port 4567 where you enter the database details and create the
admin account. The docs say that "For MongoDB, please notice that you need to
use admin as database at the moment", because the official Mongo image
does not apply the initial database the way setup expects. Two honesty notes
from the same page: "The configuration (and this documentation) is
community-maintained", with support routed to the community forum, and
upstream advises against relying on the default Compose setup for a real
deployment. State is spread over four volumes: config, uploads, the build
directory and the database.
Discourse supports exactly one install. Its install guide says "The only
officially supported installs of Discourse are Docker based", and that Docker
install is not a Compose file. You clone discourse_docker into
/var/discourse, and the launcher script builds a single container from
the standalone template, which "bundles all of the software required to run
Discourse into a single container": PostgreSQL, Redis, the Rails web app and
its workers. Upstream's cloud guide promises you can "Set up Discourse in
about 10 minutes", most of it the build. Every later change, plugin install
or config edit is an edit to containers/app.yml followed by
./launcher rebuild app, which the launcher README defines as "Rebuild a
container (destroy old, bootstrap, start new)", so the forum is offline while
it runs. It also needs a hostname and ports 80 and 443 free for the bundled
Let's Encrypt setup; Discourse vs Flarum
covers the hostname and SMTP terms in detail.
The database follows the same split. NodeBB "supports either Redis, MongoDB, or a PostgreSQL database", with Mongo the default; the PostgreSQL page says "NodeBB supports PostgreSQL as its primary data store", so a team already running Postgres can skip MongoDB. Redis is the odd one out: because the whole database lives in memory, your "system memory needs to be twice as large (if not more) than your dataset". Discourse decides for you: PostgreSQL and Redis run inside the one container, sized by the installer.
We rate both 2 out of 5 to deploy: a Compose file and a web installer, or a wizard and a long build.
Discourse ships a lot in its core repository. The plugins directory
there holds dozens of first-party plugins: chat, poll, discourse-ai,
discourse-solved, discourse-reactions, discourse-assign,
discourse-data-explorer, discourse-openid-connect and more. Chat is the
one people ask about most, and its guide says "This plugin is bundled with
Discourse core"; you switch it on under /admin/plugins. Third-party
plugins are git repositories you add to app.yml, followed by a rebuild.
NodeBB keeps the core smaller and leans on its ecosystem. The README says "NodeBB by itself contains a "common core" of basic functionality" and that "additional functionality and integrations are enabled through the use of third-party plugins". Those plugins "are hosted on npm, and are created by third-party developers", and the docs steer you to the ones listed in the admin control panel, which are matched to your NodeBB version; installing others from the command line is possible but discouraged because an incompatible plugin can crash the forum. Real-time is in the core, not a plugin: NodeBB "utilizes web sockets for instant interactions and real-time notifications". There is no built-in chat room in the Discourse sense.
This is the one feature where NodeBB is ahead rather than lighter. The
ActivityPub docs say "ActivityPub integration is controlled via a global
toggle switch in the admin panel", and on a fresh install "all categories
will federate by default", so a Mastodon account can follow and reply into a
federated category. Discourse has an ActivityPub plugin in its GitHub
organisation that "allows you to publish Discourse posts via ActivityPub",
but it is a separate plugin, installed through app.yml and a rebuild, and
its topic on Meta is tagged "experimental".
Licences are close cousins: NodeBB "is licensed under the GNU General Public License v3 (GPL-3)", Discourse is "Licensed under the GNU General Public License Version 2.0 (or later)"; the difference only bites on redistribution.
NodeBB's install docs list "512MB RAM" under hardware requirements, with the Ubuntu guide adding that "Installing NodeBB's dependencies may require more than 512 megabytes of system memory", so give the first build headroom or swap. In our install check (GCP e2-standard-2, Ubuntu 26.04, October 2026), NodeBB plus MongoDB idled at ~217 MB of RAM and ~3.0 GB of disk, which includes the first-start dependency install and build. Discourse we did not measure; it documents "1 GB RAM minimum (with swap)", a "modern single core CPU, dual core recommended" and "10 GB disk space minimum", and its installer "will offer to create swap space" on small servers. On a 1 GB VPS, NodeBB is the forum that leaves room; Discourse is the forum that fills it and wants the swap.
Choose NodeBB if you want the lighter forum: a Compose file and a web installer, your choice of MongoDB, PostgreSQL or Redis, real-time posting in the core, npm plugins and themes you manage from the admin panel, and ActivityPub federation switched on without a plugin, all at ~217 MB idle on a 512 MB floor.
Choose Discourse if you want chat, polls, solved answers, reactions, the AI plugin and dozens of other first-party plugins in the repository on day one, and you accept its terms: one launcher-built container, a rebuild for every plugin or config change, a hostname, and 1 GB of RAM with swap as the documented minimum.
Neither wins outright: the bigger product with one sanctioned way to run it, or the smaller, federating one that fits the server you already have.
Both installs are verified on Ubuntu 26.04. The pinned Compose file with the
MongoDB credentials in .env is on the NodeBB page, and
the launcher steps, including the DISCOURSE_SKIP_EMAIL_SETUP route and a
command-line admin, are on the Discourse page. NodeBB
listens on plain HTTP 4567, so put a TLS reverse proxy in front and set the
site URL in the installer to the public address; Discourse terminates TLS
itself on 80 and 443. Run NodeBB's installer yourself as soon as the
container is up, since the first visitor to port 4567 gets to create the admin.
NodeBB if you want the lighter forum: a Compose file and a web installer, your pick of MongoDB, PostgreSQL or Redis, npm plugins managed from the admin panel, and ActivityPub federation in the core. Discourse if you want chat, polls, solved answers, reactions and the AI plugin shipped as first-party plugins and you are fine with its one supported install, a launcher-built container that is rebuilt for every change. NodeBB idled at ~217 MB with MongoDB in our check; Discourse documents 1 GB with swap and we did not measure it.
No. Upstream says the only officially supported installs of Discourse are Docker based through discourse_docker, whose launcher builds one container holding PostgreSQL, Redis and the Rails app from containers/app.yml; plugins and config changes are applied with ./launcher rebuild app. NodeBB's repository ships a docker-compose.yml with a nodebb service, a mongo service, and postgres and redis profiles, and the official image starts a web installer on port 4567.
NodeBB does, in the core: the ActivityPub integration is a global toggle in the admin panel, and on a fresh install all categories federate by default, so Fediverse accounts can follow and reply into a federated category. Discourse has an ActivityPub plugin in its GitHub organisation that publishes Discourse posts via ActivityPub, but it is installed separately through app.yml and a rebuild, and its topic on Meta is tagged experimental.
NodeBB's install docs list 512 MB as the hardware minimum, and the Ubuntu guide warns the dependency install may need more than that, so give the first build headroom or swap. On our GCP e2-standard-2 box, NodeBB plus MongoDB idled at ~217 MB. Discourse documents 1 GB minimum with swap and 10 GB of disk, with its installer offering to create swap on small servers; we did not measure it.
Paid link — we earn a commission if you shop through it.
The batteries-included Docker forum vs. the small PHP forum built from extensions.
A fully GPL PHP ERP with the books in the download, or a bigger Python suite whose accounting sits behind Enterprise.
A status page that runs its own checks, or a monitor that also publishes a status page.