Three printed comparison sheets on a pale oak table beside a laptop showing a muted topic list

You already have a two-column scoreboard. The 2026 XenForo versus Discourse matrix compared nodes to categories and tags, groups to trust levels, widgets to theme components, add-ons to plugins, and the ugly fact that XenForo officially imports Discourse 3.x while the other direction is a Discourse-side script. This article will not reprint that table. It adds the third product people actually shortlist when they say “modern forum”: Flarum.

Three products. Three stacks. Three different answers to “where does a conversation live.” If you came here for a NodeBB bake-off, skip to the sidebar near the end and then leave — NodeBB is a realtime Node.js forum, not a fourth column on this grid.

This is also not the stay-or-migrate framework, not the Discourse versus traditional forums category essay, and not the ops close. Those own lock-in, phpBB as a class, and opinionated “who should pick which.” This article owns a three-way matrix: stack, information architecture, moderation, hosting, cost shape, extensions, and migrations.

Official XenForo numbers come from xenforo.com/purchase. Official Discourse install facts come from INSTALL-cloud.md (2026). Official Flarum facts come from docs.flarum.org for the 1.x line. Prices and plan grids change — re-check the live pages before you budget.

What each product is actually for

XenForo is a forum-first PHP product. Threads live in forums. Forums live in a node tree you can nest, hide, and permission independently. Members live in user groups. Staff live in the same group math plus extra tools. The homepage is usually the forum list, What’s New, or a page you built. Extra official products (Media Gallery, Resource Manager, Enhanced Search) sit around that forum. The third-party add-on culture sits around it more. You buy a license, you drop it on PHP 8.3 and MySQL, you are the sysadmin or you pay one.

Discourse is a Rails discussion platform whose official production install is Docker (or official hosted). The default homepage is Latest, not a board index. Each topic lives in one category and can carry several tags. New users are sandboxed by trust levels. Layout changes are themes and theme components. Server-side changes are plugins. If you describe your site as “a topic stream, tags, automated trust, and I do not want to own PHP-FPM,” you are describing Discourse.

Flarum is a lightweight PHP forum with a Mithril single-page front end. Most of what XenForo ships as core (likes, tags, mentions, flags, approval) arrives as extensions. It runs on Apache with mod_rewrite or Nginx, PHP 7.3+ (docs recommend PHP 8.3 for 1.x), and MySQL 5.6+/8.0.23+ or MariaDB 10.0.5+. Shared PHP hosting is possible. The latest 1.x archive at the time of writing is 1.8.17. The 1.x line is on life support (critical and security fixes only). 2.0 is in release-candidate; do not treat 2.0 as stable GA unless you are quoting the docs as RC. Flarum is the right small/modern PHP choice. It is not a XenForo replacement for an add-on-heavy board, and it is not a Discourse replacement for a hosted support community.

If you describe your site as “boards, usergroups, a sidebar, and a style I can tune for ten years,” you are describing XenForo. If you describe it as “Latest plus tags plus I will pay someone else to run Redis,” you are describing Discourse. If you describe it as “a small PHP community, Composer, I accept a thinner catalogue,” you are describing Flarum.

1. Stack: what you actually operate on Tuesday

The stack is not a nerd flex. It is who you can hire at 22:00 when the box is down.

Concern Discourse Flarum XenForo
Language / runtime Ruby on Rails in Docker PHP (Mithril SPA) PHP
Database PostgreSQL (inside the official container) MySQL / MariaDB MySQL 5.7+ / MariaDB
Official production Docker one-liner, or official hosted Composer or unpack an archive onto Apache/Nginx Upload / Composer-free typical VPS
Shared PHP hosting No Yes, if rewrite and PHP extensions exist Common, with caveats
Front end Ember Mithril SPA Server-rendered + JS
Day-two ritual ./launcher rebuild app (~5–10 min) composer update / Extension Manager ACP add-on upgrade + template merge
Contractor you can find Smaller set: Docker + Discourse Any PHP person who will learn Composer Any PHP forum person

Discourse’s official production path is not “upload PHP files to cPanel.” It is a 64-bit Linux box you can SSH into as root (Ubuntu LTS preferred) or an official hosted plan that skips the box. Minimum they publish: 1 GB RAM with swap, 1 core, 10 GB disk. Recommended: 2 GB+ RAM, 2+ cores, 20 GB+. The installer auto-tunes UNICORN_WORKERS and db_shared_buffers. Ports 80 and 443 must be free. Rebuilds take the site down for a few minutes. That is a different species from a PHP-FPM pool.

Flarum’s stack is the same species as XenForo: PHP, MySQL, a web server, rewrite rules. The difference is Composer culture and a SPA front end. You can unpack a 1.8.17 archive if you do not have SSH. You can composer create-project flarum/flarum:^1.8.0 . if you do. The Extension Manager (composer require flarum/extension-manager:"*") can install any Composer package. Official docs are blunt: only install it if you trust every admin. That is not a XenForo ACP zip. It is a supply-chain decision.

XenForo wants PHP 7.2 minimum, 8.3 recommended, MySQL 5.7+. A small community fits on a modest VPS that already looks like WordPress. You already know this stack if you have ever hosted a PHP forum. That familiarity is the product.

Do not pick Discourse to “save money on the same $6 VPS as the old phpBB.” Do not pick Flarum because the demo looks like Discourse. Do not pick XenForo because you are afraid of Docker if you have no PHP person either. Pick the stack your Tuesday operator can restore.

2. Information architecture: rooms, tags, and the last-post column

This is the row that decides the rest. The two-way matrix already said “nodes versus categories and tags.” The three-way version has to say what Flarum actually is: a discussion list whose taxonomy is mostly tags as extensions, not a XenForo node tree and not Discourse’s first-class category-plus-tag split.

XenForo is a tree. A node is a category heading, a forum, a page, or a link. You nest them. You hide a branch. Permissions hang off that tree. A thread belongs to one forum. Extra classification is prefixes, custom thread fields, or an add-on. Deep trees are a XenForo specialty and a XenForo tax. Community practice (and this site’s own node writing) is still: broad rooms plus prefixes beat an 80-node maze. The tree is there when you need it.

Discourse puts each topic in one category. Categories can have subcategories. Years of Meta practice: keep the category list short and push the long tail into tags. A topic can carry several tags. Category settings can require a minimum number of tags and restrict which tag groups are allowed. The homepage is a topic list (Latest, Top, New, Unread). There is no stock last-post board index unless a theme component fakes one. People who migrate from XenForo and immediately rebuild a 12-level tree in Discourse are fighting the product.

Flarum looks, to a visitor, closer to Discourse than to XenForo: a discussion stream, tags, a composer that feels modern. Officially, most of that taxonomy is extensions, not a XenForo-style node ACP. You will not get page nodes. You will not get Discourse’s category-security-plus-tag-group depth out of the box. You will get a small, flat community that a PHP host can serve. If your members navigate by place (“Help → Billing → Chargebacks”), Flarum will feel thin. If they navigate by what is new, Flarum and Discourse occupy the same mental model — Discourse just has more official furniture for it.

Object Discourse Flarum XenForo
Primary container Category (optional subcategory) Tags / extensions, flatter list Node (category / forum / page / link)
Conversation Topic in one category Discussion Thread in one forum
Extra classification Tags + tag groups, required tags Extension tags Prefixes, custom thread fields, add-on tags
Static HTML / docs Topic, category, or a plugin (Doc Categories on hosted Business+) A discussion or an extension Page nodes + help pages
Default home Latest Discussion list Forum list, What’s New, or a page route
Last-post column Theme territory Not the classic index Default
Nesting culture Deep trees are a smell Flat by design Deep trees are normal

If your members already think in Slack, GitHub Issues, and Discord channels, Discourse and Flarum match the reflex. If they already think in “Forum 7, Subforum 3,” XenForo matches the reflex. Flarum will not grow you a XenForo tree later. Discourse will not grow you a last-post index without a fight. XenForo will not become Latest-plus-tags without discipline you have to apply yourself.

3. Moderation: trust levels, groups, and what Flarum does not automate

XenForo does not sandbox anyone you did not sandbox. Registered can post in every public node the day they confirm, unless you built promotions, a validating group, and a staff habit. Access is user groups plus Never / Yes / No permissions. The diagnostic is Analyze permissions. Promotions run hourly for recently-active users. Disabling a promotion does not demote people already in the group. You draw the roles; the software does not promote someone because they read thirty posts.

Discourse starts with trust levels. The ladder you must be able to explain, without inventing visit counts that belong on Meta’s current Trust Level Permissions Reference:

Level Name How it is earned (shape)
TL0 New Everyone new (invited users default to TL1). Sandbox.
TL1 Basic Automatic, mostly reading. Permanent once earned.
TL2 Member Automatic, sustained participation. Permanent.
TL3 Regular Automatic on a 100-day rolling window. Can be lost. Daily job.
TL4 Leader Staff / manual or SSO. Not an activity grind.

Exact topic/read/like thresholds are admin-configurable and have moved. Quote Meta, not a blog from last quarter. What the notebook and Meta practice do lock down as behaviour:

  • TL0 defaults include a 1-image cap (newuser max embedded media), 2 links, 2 mentions, 50 likes/day, 24-hour own-post edit, cannot flag / mute / ignore, chat 20 messages / 30 seconds.
  • TL1 can flag and mute; chat 40 / 30s.
  • TL2: like limit ×1.5, 30-day edit, invite-to-topic default is TL2.
  • TL3: like ×2, can create tags, edit_all_topic_groups defaults to trust_level_3. Flags weigh more. Demotion if activity drops; a grace period exists so the first promotion is not a badge-spam trap.
  • TL4: like ×3, unlimited own-post edit, edit_all_post_groups defaults to trust_level_4, plus pin, timers, split/merge.

Since 2023–2025 many “minimum trust level” settings became allowed groups (edit_all_topic_groups, edit_all_post_groups, anonymous posting allowed groups, user_api_key_allowed_groups). Review is TL1+ flags. Diverse TL3 flags on a TL0 account can auto-silence and hide. Reviewable scoring exists; the formula is not something this article will invent. Watched words can flag, block, replace, or censor.

Flarum has flags, approval, and groups as extensions and permissions, not as a Discourse-shaped trust machine. There is no official TL0→TL3 daily job. There is no 100-day Regular that demotes itself. If you need a sandbox, you build it (or you accept that a small site’s spam problem is a captcha and a human). If you need Analyze permissions down a twelve-node tree, you are not on Flarum.

Common Discourse new-admin mistakes (do not copy them onto Flarum or XenForo either): renaming trust-level groups and then seeing stale names until daily jobs run; adding Admin + Mod + TL1 + TL2 + TL3 + TL4 redundantly to category security (hierarchy plus Staff already cover this) and producing “not permitted to view”; turning off the TL0 sandbox on a public signup site; being surprised that a new user’s intro post cannot embed four screenshots.

Concern Discourse Flarum XenForo
Default new-user sandbox TL0 by design You build it You build it
Automatic regulars TL3, 100-day window, can demote No official equivalent Promotions you design
Staff-only top rung TL4, manual or SSO Groups you create Administrative / Moderating
Private area Category security via groups Group permissions Private node + View node
Diagnostic User admin + groups + TL Extension permissions Analyze permissions
Review queue Flags + reviewables Flags / approval extensions Reports + approval queue

If your community is an ACL — factions, regional officers, application stages, donor wings — XenForo is the language. If your community is “new people read, regulars earn tools, a few leaders help moderate,” Discourse is already doing the job. If your community is twelve people and a PHP host, Flarum’s lack of a trust-level machine is not a defect. It is a smaller product.

4. Hosting shape: Docker, a PHP box, or someone else’s pager

Discourse has three honest shapes:

  1. Official hosted at discourse.org/pricing. Public 2026 grid: Free, Pro $100/month, Business $500/month, Enterprise custom. Pro has been listed with unlimited members and chat, 5 staff seats, 15+ plugins, custom domain, API/webhooks. Business adds SSO (OIDC/OAuth2), automation, events, gamification, 15 staff, 20+ extra plugins, migration services. Enterprise adds a 99.9% SLA, 50+ plugins, unlimited staff. Prices are USD and change — re-check the live grid. Hosted can move via backup. Data belongs to the customer.
  2. Self-hosted official Docker. The one-liner is wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/main/install-discourse | sudo bash. Own domain via DNS A record; Let’s Encrypt is automatic. Free *.discourse.diy subdomain via Discourse ID; verification codes last 10 minutes. SMTP is optional at install (Discourse ID + Google/Facebook/Apple/GitHub + web push). Digests, mailing-list mode, and reply-by-email need SMTP later under Admin → Email.
  3. A partner or unofficial image. Meta support expects the standard install. Bitnami-style images are a frequent dead end.

Flarum lives on the PHP hosting you already understand. Shared hosting works when Apache has mod_rewrite (or Nginx includes .nginx.conf), PHP has curl/dom/fileinfo/gd/json/mbstring/openssl/pdo_mysql/tokenizer/zip, and you can write to storage and assets. No Docker. No PostgreSQL. No 5–10 minute rebuild to change a plugin. The cost is a thinner official ops story and a 1.x line that is winding down.

XenForo is a license on a host. There are excellent third-party XenForo hosts. There is no first-party “XenForo Inc. runs the box” tier with the same gravity as Discourse’s own cloud. Cloud from XenForo exists as Starter / Standard / Business monthly plans (see the cost section); it is still a licensed forum on their PHP stack, not Discourse-shaped Docker.

Hosting job Discourse Flarum XenForo
Official first-party cloud Yes (Free / Pro / Business / Enterprise) No (Free Flarum is a community host, not the vendor) XenForo Cloud exists; not Docker-shaped
Typical self-host 2 GB+ Docker VPS Cheap PHP / good shared Cheap PHP VPS / good shared
You own the OS? Only if self-hosted Usually Usually
TLS Let’s Encrypt on official Docker / hosted You or the panel You or the panel
Upgrade downtime Rebuild window, or hosted handles it Composer / file replace File replace + ACP

If your organization wants a community and wants to fire the sysadmin role, Discourse hosted is the row that ends the meeting. If your organization has a PHP person and a $12 VPS, Flarum and XenForo are the same shape of Tuesday — XenForo is the deeper product on that shape.

5. Cost shape (not a three-year spreadsheet)

A later article on this site will own a three-year TCO table against phpBB. This matrix only needs shape. Re-check live pricing. VAT is extra. Staff time is the real line.

XenForo (xenforo.com/purchase, 2026): self-hosted license $195 (ex VAT), lifetime use + 12 months support/updates. Extension $60/year. Multi-license: 1–2 $195, 3–5 $185, 6–10 $175, 11+ $165. Official add-ons: Enhanced Search $60 (+$10 ext), Resource Manager $70 (+$15), Media Gallery $70 (+$15), Installation $60, Branding removal $350. Cloud: Starter $60/month ($54 annual), Standard $100/month ($90 annual), Business $250/month ($225 annual), with page-view and storage caps, Complete suite including XFES, daily backups, no SSH.

Discourse: software is free and open source. Hosted is the paid product (Free / $100 Pro / $500 Business / Enterprise custom). Self-host is a 2 GB+ VPS plus the person who can rebuild. SMTP, S3, and a CDN are extra line items you will eventually want.

Flarum: software is free. Cost is hosting + time + the extensions you trust. There is no $195 license. There is also no official hosted vendor with a $100/$500 grid. Free Flarum (freeflarum.com) is a community service, not affiliated with the Flarum team — treat it as a demo host, not a procurement plan.

Line Discourse Flarum XenForo
Software $0 self-host; hosted is the product $0 $195 + $60/yr to stay current
Small-site host 2 GB Docker or official hosted Cheap PHP Cheap PHP or XF Cloud $60–250/mo
First-party extras Hosted plugin tiers Community extensions XFRM / XFMG / XFES priced above
Who this is “cheaper” for Orgs that value hosted; teams that already run containers Tiny PHP communities Hobby and mid-size trees with a PHP person

“Discourse is free” is only true if your time is free and you are good at Docker. “Flarum is free” is only true if you accept a smaller catalogue and a 1.x→2.0 project. “XenForo is expensive” is only true if you ignore the VPS you were already paying for and the years of add-ons you will not rebuild.

6. Extensions: plugins, Composer, and the add-on market

XenForo add-ons are PHP packages you install from the ACP. The official first-party set includes Media Gallery, Resource Manager, Enhanced Search, and the Importers add-on (Customer area). The third-party market is why gaming, roleplay, credits, whitelist applications, and “this exact widget” communities stay. Add-ons upgrade with the board, or they do not, and that risk is a project — not a vibe.

Discourse plugins are Ruby. Official and popular plugins live on Meta. Hosted plans restrict which plugins you may run; the public pricing page is explicit that Pro includes 15+ plugins and Business 20+ extra. Self-hosting means you edit /var/discourse/containers/app.yml and ./launcher rebuild app. Theme components cover a surprising amount of “I just want the topic list to look like X.” When you need server-side behaviour, you are in plugin territory.

Flarum extensions are the product. Tags, likes, flags, approvals — the catalogue is Composer packages. The Extension Manager can install anything Composer can see. The catalogue is smaller than XenForo’s. There is no honest scoreboard that says “Flarum has more extensions than XenForo.” It does not. It has a modern, small set, and a 2.0 RC that will reshuffle compatibility.

Count the three features you cannot live without.

  • If two of them are a XenRio-shaped stream directory, a credits shop, and a whitelist application node, you are not moving to Discourse or Flarum this year.
  • If two of them are trust-level automation, official hosted so you do not own Redis, and topic + tag IA, you are not staying on XenForo because a style looks familiar, and you are not picking Flarum to save RAM.
  • If two of them are “must stay on shared PHP hosting,” “must look modern,” and “we have fifty members,” Flarum is the row. XenForo is heavier than you need. Discourse Docker is the wrong animal.

7. Migrations: the arrows are not symmetric

This is the row that ends arguments in procurement meetings. It is also the row people get wrong when they add Flarum.

Into XenForo. Official Importers (Customer area) list Discourse 3.x, phpBB 3.2–3.3, vBulletin, IPS 4.x, SMF 2.0, MyBB 1.8, and XenForo 2.x. CLI is php cmd.php xf:import. Retain IDs only on an empty XenForo. The source is never modified.

Into Discourse. There is no XenForo ACP button that pushes a board out. The stock path is a Discourse-side Ruby script (script/import_scripts/xenforo.rb): users, categories, posts, private messages, likes. Banned users are skipped in the stock script. Node depth greater than two is flattened to tags. Permalinks board/{node_name} and threads/{thread_id} are created. Page nodes, XFRM, XFMG, custom thread fields, and most add-on tables are not in the stock script. Passwords often need a reset — do not claim a clean password import unless your source says so. Run on staging, never first on live prod. XenForo is not the only source; Meta’s migrate-from-one-platform guide covers other engines too.

Into Flarum. No official importers. Community unofficial scripts exist for FluxBB, MyBB, phpBB, and SMF2. Docs say you can hop through phpBB. The Flarum team does not guarantee those scripts and does not support them. Treat a Flarum import as a community project with a redirect plan, not as a vendor feature.

Direction Who owns it What you can cite
Discourse 3.x → XenForo Official XF Importers Listed source
phpBB / vB / IPS / MyBB / SMF → XenForo Same add-on Listed sources
XenForo → Discourse Discourse-side xenforo.rb + Meta practice Not an XF product
Anything → Flarum Unofficial community scripts No official importer
Flarum → XenForo / Discourse Not a first-class listed path Plan a hop or a custom job

If the fear is “we might want Discourse later,” do not pretend the return ticket is the same as the outbound. If the fear is “we might want Flarum later,” you are choosing a platform whose import story is the weakest of the three. If the fear is “we are on Discourse and want a classic forum,” XenForo has already named your source.

8. The three-way matrix

Use this as a briefing table, not a score. A “win” means “this product’s default matches the job.” This is not a reprint of the two-way matrix.

Job Discourse Flarum XenForo
Deep board tree Weak (tags carry the tail) Weak Yes
Topic / discussion list as home Default Default Possible (route / widgets)
Classic last-post index Theme territory No Default
Page / FAQ in the tree Topic or plugin Discussion or extension Page nodes + help
New-user sandbox TL0–TL1 by default You build it You build it
Automatic regulars TL3, 100-day, can lose No Promotions you design
Hand-picked leaders TL4, staff/SSO Groups Secondary groups
Never/Yes/No node ACL Different model Different model Core
Official hosted Yes No (community hosts only) XF Cloud (PHP-shaped)
Shared PHP hosting No Yes Common
Typical small VPS Heavier Docker (2 GB+) Cheapest PHP Cheap PHP
Gaming / credits / listings Thin Thin Add-on market
Support + docs community Solved, Assign, Doc Categories Thin Pages + tickets add-ons
Extension model Plugins + rebuild Composer extensions ACP add-ons
Import from the others Scripts / Meta Unofficial only Official Discourse 3.x + classic engines
2026 upgrade cloud Stable product + hosted 1.x life support, 2.0 RC 2.3 current
Staff already know PHP forums Retrain Partial retrain Yes
Staff already know Docker / SaaS Yes Retrain Retrain

Read the 2026 upgrade cloud row twice. Flarum 1.x on life support is not a moral failure. It is a calendar. If you start a new Flarum today, your first year includes a 2.0 plan. If you start Discourse or XenForo today, your first year includes learning the product you bought, not surviving an RC.

9. Who should pick which (without reprinting the ops close)

Pick XenForo when the site is a tree, the add-on market is load-bearing, staff already think in boards, or you need an official path off Discourse later. A 15-year hobby forum with 80 nodes and three veteran moderators belongs here. A game community that needs a server list, a whitelist app, and a donor shop belongs here. Re-read the ops close if you are still romantic about “modern UI.”

Pick Discourse when the site is a topic stream, you want trust-level automation on day one, you want official hosted so nobody owns Redis, or the work is support-plus-docs (Solved, Assign, Doc Categories). An open-source project that does not want PHP belongs here. A company that will pay $100 or $500 a month to fire the sysadmin role belongs here. Start with the beginner’s first week after you pick it — do not start by cloning a phpBB tree.

Pick Flarum when the site is small, the host is PHP (including shared), you accept a Composer extension culture, and you can schedule a 2.0 upgrade. A ten-person club, a local meetup, a lightweight product community that will never need XFRM or a 40-node tree. Do not pick Flarum as a stealth XenForo. Do not pick Flarum because Discourse’s RAM number scared you and you still want Discourse’s product. Those are different fears.

Do not pick any of them if the real problem is “we have no one to answer flags at 21:00.” Software will not staff the room.

NodeBB is a Node.js forum (docs: Node.js ≥ 22, MongoDB ≥ 5 or Redis ≥ 7.2, clone the v4.x branch, ./nodebb setup then ./nodebb start, default port 4567, nginx plus websocket Upgrade headers). Realtime websockets are the point. Plugins live on npm as nodebb-plugin-*. Memory: more than 512 MB for npm install; swap recommended.

It makes sense for realtime, chatty communities and for shops that already live in JavaScript. It does not make sense on PHP shared hosting, and it does not make sense if what you actually wanted was a classic paginated board index. Putting NodeBB on this matrix as a fourth column would pretend the decision is “which modern forum logo.” The decision is stack plus IA. NodeBB is a different stack and a different realtime bet. If that is your bet, stop reading this article and go evaluate NodeBB on its own terms. If it is not, do not add it to the shortlist to feel thorough.

What this matrix will not decide

It will not decide your stay-or-migrate call. Add-on lock-in, the person who can restore backups, and the cost of rewriting muscle memory are not features.

It will not decide whether “forums are dead.” Discourse versus phpBB as a category is already written. Flarum versus Discourse as a look is a bad reason to move. XenForo versus Flarum as a license price is a bad reason if the add-on rebuild is a year of work.

It will not give you a plugin-by-plugin inventory. Official docs do not publish one that survives a quarter. If a feature is not in the rows above, name the extension yourself or do not invent it in a comparison.

It will not replace a staging import. The arrows in section 7 are facts about who owns the tool, not a promise that your 200 custom fields will arrive intact.

Takeaways

  • XenForo is a node tree + groups + widgets + add-ons on a PHP license. Discourse is a category + topic + tag + trust-level product you host in Docker or pay Discourse to host. Flarum is a lightweight PHP SPA whose features are mostly Composer extensions, with 1.x on life support and 2.0 in RC.
  • The information-architecture gap is still the real gap. Deep trees and page nodes are XenForo. Latest-plus-tags is Discourse. A flat discussion list on shared PHP is Flarum. Do not rebuild one inside another for sport.
  • Moderation: Discourse sandboxes and promotes by default (TL3 is a 100-day window and can be lost; TL4 is staff or SSO). XenForo and Flarum do not run that machine unless you build it.
  • Hosting: Discourse official hosted is a product. Discourse self-host wants 2 GB+ RAM and a rebuild person. Flarum and XenForo share a PHP-shaped Tuesday; XenForo is the deeper product on that Tuesday.
  • Money is a shape, not a screenshot. Re-check discourse.org/pricing and xenforo.com/purchase. Flarum’s license is $0; its upgrade calendar is not.
  • Importers are not symmetric. XenForo officially eats Discourse 3.x and the classic PHP engines. Discourse eats XenForo via a Discourse-side script. Flarum has unofficial community importers only.
  • NodeBB is a Node.js realtime sidebar, not a fourth cell on this grid.

If you cannot fill the matrix without writing “we need an 80-node tree and trust-level automation and shared PHP hosting and a $0 license,” you do not have a platform problem. You have a sitemap problem. Fix the map, then pick the one tool that already looks like it.