Discourse charges $100 a month for its Pro plan and $500 for Business, and both tiers allow the same 500,000 monthly page views.
That single fact says more about the two products than most feature comparisons manage. Discourse is not selling you traffic. It is selling you something else entirely.
Seeing the difference means starting from the traditional board structure XenForo is built around and noticing what Discourse deliberately declines to copy. The gap is commercial as much as it is technical.
Discourse counts people instead. Pro includes five staff seats, Business includes fifteen, and the free tier includes two.
That is the real jump between the two paid plans. You pay five times as much for an identical page-view allowance, buying seats, storage, and plugins rather than capacity.
Storage follows the same logic. Pro allows 20GB, Business allows 100GB, and the free tier allows 5GB alongside its two staff seats and the same half a million page views.
Plugins track the seats as well. Pro bundles more than fifteen of them, and Business adds another twenty or more on top of those.
For a small community with two or three moderators, the model is generous. For a large hobby board running twenty unpaid moderators, staff seats you have to pay for become a recurring cost that XenForo never charges.
The self-hosted picture inverts completely. XenForo asks a one-off license fee with an annual extension for updates, while Discourse is free to download and run under the GPL version 2 or later.
So the cheaper option depends on which resource you actually have. Money, or the time to administer a server.
The stack explains why. Discourse runs Ruby on Rails behind an Ember front end, with PostgreSQL holding the data and Redis handling cache and transient state.
Every one of those is a service you now operate. XenForo runs on PHP and MySQL, which is the default configuration of very nearly every shared host in existence.
The published floor for Discourse looks modest. A modern single-core processor with dual-core recommended, one gigabyte of memory with swap, 64-bit Linux compatible with Docker, and 10 gigabytes of disk.
Do not read that as a shared-hosting spec. It is a small virtual-server spec, and you are the administrator of it.
Support is the other divide, and it is easy to miss. Self-hosting Discourse means community help on its public meta site, with guaranteed response times reserved for enterprise agreements.
Discourse is admirably clear about what you keep. Your data sits in PostgreSQL with full schema access, and you can bring it in-house whenever you decide to.
That is the honest trade between them. Discourse costs nothing to license and something real to operate, while XenForo costs something to license and almost nothing unusual to operate.
XenForo ships a Discourse importer inside its own import system, picked from the admin control panel alongside the vBulletin and phpBB options. It targets Discourse 3.x.
Discourse handles the other direction through a community-contributed Ruby script that sits in the import_scripts directory of its repository. You run it from the command line in the production environment.
That script wants your XenForo database credentials edited directly into the file, a gem added to the Gemfile before it will run at all, and correct filesystem paths if avatars and attachments are to survive.
It does a thorough job once configured. Users, categories with their parent and child relationships, topics, posts, private messages, reactions, and attachments all come across, with deeply nested categories converted into tags.
A wizard and a script are not the same commitment, though. One is a supported product feature. The other is a maintained file in an open repository, and the difference shows the first time something breaks at 3 am.
There is a versioning wrinkle worth knowing too. XenForo's importer names Discourse 3.x, and Discourse has since moved to calendar versioning, so a current install reports something like 2026.1 instead.
That does not automatically mean the importer fails. It does mean nobody has publicly recommitted to the newer releases, so test on a copy before you trust it with a live community.
That single fact says more about the two products than most feature comparisons manage. Discourse is not selling you traffic. It is selling you something else entirely.
Seeing the difference means starting from the traditional board structure XenForo is built around and noticing what Discourse deliberately declines to copy. The gap is commercial as much as it is technical.
The two price lists count completely different things
XenForo Cloud meters monthly page views and leaves headcounts alone. Members, moderators, and administrators are unlimited on every tier, so growing your volunteer team costs nothing at all.Discourse counts people instead. Pro includes five staff seats, Business includes fifteen, and the free tier includes two.
That is the real jump between the two paid plans. You pay five times as much for an identical page-view allowance, buying seats, storage, and plugins rather than capacity.
Storage follows the same logic. Pro allows 20GB, Business allows 100GB, and the free tier allows 5GB alongside its two staff seats and the same half a million page views.
Plugins track the seats as well. Pro bundles more than fifteen of them, and Business adds another twenty or more on top of those.
For a small community with two or three moderators, the model is generous. For a large hobby board running twenty unpaid moderators, staff seats you have to pay for become a recurring cost that XenForo never charges.
The self-hosted picture inverts completely. XenForo asks a one-off license fee with an annual extension for updates, while Discourse is free to download and run under the GPL version 2 or later.
So the cheaper option depends on which resource you actually have. Money, or the time to administer a server.
Free self-hosting assumes you can run Docker
This is where the open-source label gets oversold. Discourse states that the only officially supported installs are Docker-based, and names cPanel, Plesk, and Webmin as unsupported.The stack explains why. Discourse runs Ruby on Rails behind an Ember front end, with PostgreSQL holding the data and Redis handling cache and transient state.
Every one of those is a service you now operate. XenForo runs on PHP and MySQL, which is the default configuration of very nearly every shared host in existence.
The published floor for Discourse looks modest. A modern single-core processor with dual-core recommended, one gigabyte of memory with swap, 64-bit Linux compatible with Docker, and 10 gigabytes of disk.
Do not read that as a shared-hosting spec. It is a small virtual-server spec, and you are the administrator of it.
Support is the other divide, and it is easy to miss. Self-hosting Discourse means community help on its public meta site, with guaranteed response times reserved for enterprise agreements.
Discourse is admirably clear about what you keep. Your data sits in PostgreSQL with full schema access, and you can bring it in-house whenever you decide to.
That is the honest trade between them. Discourse costs nothing to license and something real to operate, while XenForo costs something to license and almost nothing unusual to operate.
Migrating between XenForo and Discourse runs one way
Both products can read each other's data, which sounds like a symmetrical arrangement. It is nothing of the sort.XenForo ships a Discourse importer inside its own import system, picked from the admin control panel alongside the vBulletin and phpBB options. It targets Discourse 3.x.
Discourse handles the other direction through a community-contributed Ruby script that sits in the import_scripts directory of its repository. You run it from the command line in the production environment.
That script wants your XenForo database credentials edited directly into the file, a gem added to the Gemfile before it will run at all, and correct filesystem paths if avatars and attachments are to survive.
It does a thorough job once configured. Users, categories with their parent and child relationships, topics, posts, private messages, reactions, and attachments all come across, with deeply nested categories converted into tags.
A wizard and a script are not the same commitment, though. One is a supported product feature. The other is a maintained file in an open repository, and the difference shows the first time something breaks at 3 am.
There is a versioning wrinkle worth knowing too. XenForo's importer names Discourse 3.x, and Discourse has since moved to calendar versioning, so a current install reports something like 2026.1 instead.
That does not automatically mean the importer fails. It does mean nobody has publicly recommitted to the newer releases, so test on a copy before you trust it with a live community.