Discourse vs Flarum
Pick Discourse if you want chat, polls, solved answers, reactions, the AI plugin, email digests and reply-by-email in the box, plus importers for most older forum software, and you can run its one officially supported install: a single container managed by the discourse_docker launcher, with a hostname and at least 1 GB of RAM plus swap. Pick Flarum if you want a small MIT-licensed forum that installs with Composer on the PHP and MySQL or MariaDB hosting you already have, and you are happy to add features as extensions; stay on the stable 1.x line, since PostgreSQL support and first-party real-time updates are 2.0 features still in release candidates.
Side by side
Discourse and Flarum are the two modern answers to "I want a forum, not a chat room": threaded discussions with categories or tags, mentions, notifications, moderation and search, in a browser UI that does not look like phpBB. They were both designed as a break from classic bulletin boards, and they both use infinite-scroll topic pages. Past that they are very different products. Discourse is a large Rails application that arrives as one opinionated Docker container with most features already inside it. Flarum is a small PHP application that you install on an ordinary web stack and assemble from extensions. Decide which of those two shapes you want to run before comparing features.
How each one installs
Discourse supports exactly one way to install. Its install guide says "the
only officially supported installs of Discourse are Docker based" and that the
team "cannot support any other methods of installation". That Docker install is
not a Compose file. You run the install-discourse script, which installs Docker
if it is missing, clones discourse_docker into /var/discourse and starts a
setup wizard. The wizard writes containers/app.yml and the launcher script
builds a single container from YAML templates: PostgreSQL, Redis, the Rails web
app and its background workers all in one. Every configuration change, plugin
install or command-line upgrade is an edit to app.yml followed by
./launcher rebuild app, which destroys the old container and bootstraps a new
one, so the forum is offline for a few minutes. Upgrades can also be run from
/admin/upgrade in the browser, which upstream recommends. The wizard
provisions Let's Encrypt itself and needs ports 80 and 443 free, and the sample
config says plainly that Discourse "will not work with a bare IP number". You
need a hostname, either your own or a free discourse.diy subdomain that
upstream offers.
Flarum is a PHP application you install with Composer:
composer create-project flarum/flarum:^1.8.0 . in an empty directory, a web
root pointed at public/, URL rewriting through the bundled .htaccess or
.nginx.conf, and a web installer to finish. You bring the stack: Apache with
mod_rewrite or Nginx, PHP with a list of extensions, and MySQL or MariaDB.
Upstream also ships ready-made archives for hosts without SSH. It publishes no
Docker image; the images on Docker Hub are community-maintained. If you already
run a LAMP or LEMP server, Flarum is one more site on it. On a bare VPS, you
are building that server first.
We rate Discourse 2 out of 5 to deploy, because one script does everything, and Flarum 3 out of 5, because the web server, PHP, database, file permissions and a cron entry are all yours to set up.
Which Flarum you are installing
Flarum's stable line is 1.x, and that is what the command above pins. Flarum
2.0 is in release candidates on GitHub, and its install page carries the
warning that it "is currently in beta" and "not ready for production use". The
difference matters for this comparison. Flarum 1.x runs only on MySQL 5.6+ /
8.0.23+ or MariaDB 10.0.5+. The 2.0 docs add PostgreSQL 10+ and SQLite, raise
the PHP floor to 8.2, and the 2.0 skeleton adds first-party realtime,
messages and audit extensions. None of that is in the 1.x install. Treat
2.0 features as coming, not as what you get today, and check the release page
before you start.
Features in the box
Discourse ships a lot in its core repository. Chat is built in: the chat
plugin sits in the main repo and is switched on with a site setting. So do
polls, solved answers, reactions, assignments, topic voting, events,
gamification, a Data Explorer for SQL reports, OpenID Connect and OAuth2 login,
and the Discourse AI plugin. It also has official and community themes, email
digests, mailing-list mode and reply-by-email, webhooks, and a JSON API (the
Ember front end is itself a client of it). Third-party
plugins are git repositories you add to the hooks section of app.yml and
rebuild.
Flarum keeps its core small on purpose. Its docs say "most of the features that ship with Flarum are actually extensions". The default install bundles tags, mentions, likes, flags, approval, sticky, lock, suspend, subscriptions, Markdown, BBCode, emoji and a GDPR extension, and any of them can be switched off. Everything else comes from a community ecosystem of Composer packages, listed on the Extensions tag of Flarum's own forum and on the unofficial Extiverse database. The Extension Manager extension lets you install from the admin panel, and upstream warns that it lets an admin "install any composer package". In 1.x there is no chat and no live updates without an extension. The first-party Pusher extension shows new posts in real time through the hosted Pusher service.
Email, and what happens without it
Flarum's docs say "any community needs to send emails" for verification, password resets and notifications, and that a wrong configuration "will cause errors when users try to register". Plan on an SMTP provider, or a working sendmail.
Discourse used to be the same: its sample config still lists SMTP as
required, and email drives account confirmation, digests and notifications.
The current installer makes it optional. Skip SMTP in the wizard and it turns
on login via Discourse ID instead: users sign in through id.discourse.com,
by email there or with Google, Facebook, Apple or GitHub, and web push still
delivers notifications. That is a real shortcut, but it routes every login through
a service Discourse runs, not your server. Digests, mailing-list mode and
reply-by-email still need SMTP, and Discourse strongly recommends a dedicated
email service over running your own mail server.
Footprint
Discourse publishes its requirements: 1 GB of RAM minimum, with swap, 2 GB or more recommended, a single core minimum with two recommended, and 10 GB of disk. The installer offers to create a 2 GB swap file on small servers and sizes the web workers and PostgreSQL buffers to the machine. That floor covers PostgreSQL, Redis and Rails together in one container.
Flarum publishes no RAM figure. It is PHP served by your web server, with MySQL or MariaDB beside it, so it can share a small VPS or a shared host with other sites. Our 512 MB floor is an estimate, not an upstream number.
Licence and moving in
Discourse is GPL-2.0-or-later: the README says "GNU General Public License Version 2.0 (or later)". Contributors sign a CLA. Flarum is MIT, for both the skeleton and the framework.
If you are moving an existing forum, Discourse carries import scripts in its own repository for phpBB, vBulletin, Vanilla and more, Flarum included. Flarum's docs say there are "no official importers yet" and point to community scripts for FluxBB, MyBB, phpBB and SMF2, which upstream "can't guarantee".
Which to choose
Choose Discourse if you want a forum that does everything on day one: chat, polls, solved answers, reactions, email digests and reply-by-email, plus importers for most older forum software. Accept its terms in return: one Docker container managed by the launcher, a hostname, at least 1 GB of RAM with swap, and an SMTP provider unless you are happy for logins to go through Discourse ID.
Choose Flarum if you want a small, fast MIT-licensed forum that runs on the PHP and MySQL hosting you already have, and you are happy to build features from extensions. Stay on the 1.x line for production, and remember that PostgreSQL support and first-party real-time updates belong to 2.0.
Neither wins outright. Discourse is the bigger product with a narrower way to run it. Flarum is the smaller product that fits into the server you already have.
Choosing between Flarum and Discourse
Put the other way round, start with Flarum if you already have a PHP host or want the lightest forum you can run. Move to Discourse when you need built-in chat, polls, the AI plugin and email integration without assembling extensions.
Not the only two options
If your community mostly talks in real time, a team chat server such as Mattermost or Rocket.Chat may fit better than a forum. If what you need is documentation that people edit rather than discuss, see the wiki and docs tools.
Common questions
Discourse vs Flarum — which self-hosted forum should I pick?
Pick Discourse if you want a full-featured forum on day one, with chat, polls, solved answers, email digests and reply-by-email built in, and you are fine running its launcher-managed Docker container. Pick Flarum if you want a small MIT-licensed PHP forum that fits on hosting you already run, and you are happy to add features as extensions.
Can I install Discourse with Docker Compose?
Not in a supported way. Upstream says the only officially supported installs are Docker-based through discourse_docker: an installer script and a launcher that builds one container, with PostgreSQL, Redis and the app inside, from containers/app.yml. Configuration changes and plugins are applied with ./launcher rebuild app.
Does Discourse need an SMTP server?
Not to start any more. If you skip SMTP in the installer, it turns on login via Discourse ID, a sign-in service at id.discourse.com run by Discourse, with email or social logins. Email digests, mailing-list mode and reply-by-email still need SMTP, and upstream recommends a dedicated email provider.
Is Flarum 2.0 ready for production?
Not per upstream. Flarum 2.0 is published as release candidates, and its install docs warn it is in beta and not ready for production use. The stable 1.x line runs on MySQL or MariaDB only; PostgreSQL and SQLite support and the first-party realtime extension come with 2.0.
How much RAM do Discourse and Flarum need?
Discourse documents 1 GB of RAM minimum with swap and recommends 2 GB or more; its installer offers to create swap on small servers. Flarum publishes no RAM figure; our 512 MB floor is an estimate for PHP plus MySQL or MariaDB. Neither has been measured on this site.
Paid link — we earn a commission if you shop through it.
Other comparisons with these apps
The multi-database web client from DBeaver vs. the PostgreSQL-only admin tool.
One conf.yml with an in-browser editor vs. YAML files and Docker label discovery.
The team LLM-app platform vs. the Python-component canvas.