Administrator at a desk with a printed decision checklist beside a laptop showing a muted forum admin screen

Most “should we leave XenForo” threads start in the wrong place. Someone saw a Discourse screenshot, or an invoice for five add-ons, or a 2.3 upgrade that took a weekend, and they ask the internet for a platform. The internet answers with a feature list. Feature lists do not pay for redirects, do not retrain your three volunteer moderators, and do not resurrect a custom credits plugin that has no equivalent on the other side.

This is not the XenForo versus Discourse matrix. That article already compared nodes to categories and tags, groups to trust levels, widgets to theme components, add-ons to plugins, license-plus-VPS to Docker RAM, and the fact that XenForo officially imports Discourse 3.x while the reverse is a Discourse-side project. This article assumes you can read a matrix. It asks a narrower question: given the board you already run, do you stay, or do you spend a quarter moving? It is also not a phpBB import cookbook. If your source is phpBB 3.2–3.3, XenForo already lists it; the step-by-step belongs in that migration guide, not here.

The only honest unit of decision is operations: what you are locked into, who can still admin the site, what Google and your members have bookmarked, what it costs for three years, and how big the room is. Everything else is taste.

The decision is a filter, not a score

Write five numbers on paper before you open another comparison tab.

  1. Add-on lock-in — how much of the site dies if third-party code goes away?
  2. Staff skills — who can restore this box at 02:00, and in which language?
  3. Search and SEO URLs — what breaks if /threads/title.12345/ becomes /t/title/123?
  4. Cost — license, add-ons, VPS, people, and the migration project, not the sticker.
  5. Community size and shape — members, posts, private areas, and how they navigate.

If four of the five say stay, you stay. If four say move, you move. If you are 3–2, you do not move this quarter. You run a pilot (a new category of work on the other product, or a staging import) and you revisit. Migrations that start from a 3–2 feeling are how you spend the year repairing permalinks.

A sixth filter, used only as a veto: are you actually angry at XenForo, or at a neglected board? Dead onboarding, a 90-node tree nobody mapped, debug left on, and a style that still loads a webfont are not platform bugs. They are the configuration mistakes and first 30 days articles. Migrating a neglected XenForo to a neglected Discourse gives you a neglected Discourse.

1. Add-on lock-in

This is the filter that should have ended half the migrations you have watched.

List every add-on that is not official first-party (Media Gallery, Resource Manager, Enhanced Search, Importers). For each one, write one line: what member-visible thing dies if we uninstall it tomorrow? Be cruel. “Makes the sidebar nicer” is not lock-in. “Is the only reason donors get a private forum” is lock-in. “Stores the character sheet every roleplay post depends on” is lock-in. “Is the credits balance the shop reads” is lock-in.

Then mark each line replaceable in core, replaceable with a different add-on, replaceable on Discourse / IPS with a named plugin, or not replaceable without a rewrite.

XenForo core already covers more than people remember: nodes and private forums, permissions, widgets, custom user and thread fields, user upgrades, notices, trophies and promotions, Discord connected accounts. A “we need add-ons” story that is actually four core features plus one real add-on is a stay.

A “we need add-ons” story that is XenRio, a credits economy, a whitelist application, a server directory, and two unmaintained style add-ons is also a stay — because the other product does not have that stack. You would be migrating off your product. The server listing and whitelist patterns exist on XenForo because that is where those communities live.

Lock-in that should make you consider leaving:

  • The add-on author is gone, the code is unmaintained on 2.3, and the feature is load-bearing.
  • You have so many template modifications that every upgrade is a merge festival (see Appearance → Outdated templates after every bump).
  • You are using XenForo as a CMS, a shop, and a file library, and you are gluing it together. That is the IPS question, not the Discourse question.

Lock-in that should not make you leave:

  • You pay for two or three healthy add-ons. That is a line item, not a prison.
  • You dislike the default style. Child styles and 2.3 variations are cheaper than a platform change.
  • An add-on you do not use has a scary review. Uninstall it.

Stay if the load-bearing features are core, official, or maintained add-ons you can name. Migrate if the load-bearing features are dead code and the destination has a living equivalent you have actually clicked. Do not migrate because you are tired of counting add-ons. Count whether they still work.

Write the uninstall test down: on staging, disable the three most expensive add-ons. Browse as a guest, a registered member, and a moderator. If the board is still a board, you were not as locked as you thought. If half the templates fatal, you just found the real project — and it is an add-on cleanup, which is still cheaper than a platform change.

2. Staff skills

Software is operated by people. A perfect product with nobody who can restore it is a weekend outage.

Name the humans:

  • Who has ACP admin and 2FA on that account?
  • Who can SSH to the box, read src/config.php, and restore data/ + internal_data/ + the database to the same XenForo version?
  • Who understands Never / Yes / No well enough not to Private-node the Registered group?
  • Who answers flags in the first hour?

If those people think in boards, usergroups, widgets, and phpMyAdmin, staying on XenForo is a gift to them. Retraining a veteran moderator onto Discourse trust levels, category security, and “there is no forum index” is a people project. It can be the right project. It is never free. Budget weeks of parallel moderation, not a Saturday.

If those people have left, and the remaining operator is a company IT person who already runs Docker and would rather pay discourse.org than own PHP-FPM, migrating can reduce bus factor. Official Discourse hosted exists so that “who patches Redis” is not your problem. XenForo does not have a first-party hosted product of that shape; you have a license and a host.

If the remaining operator is “the founder on a laptop,” do not pick the stack they have never installed. A self-hosted Discourse official install is Docker on Ubuntu, 2 GB RAM recommended, ./launcher rebuild app when you upgrade. A XenForo install is files + MySQL + a web server. Match the operator you actually have at 02:00, not the operator you wish you would hire.

Staff skill also includes moderation culture. XenForo’s large-forum moderation tools (warnings, reports, queues) are what your team already rehearsed. Discourse’s TL3 regulars can take on work that XenForo would have made a secondary group for. That is a gain only if you want automated regulars. Some communities do not. Some cannot — a support desk where TL3 would see other customers’ tickets is a permissions design, not a vibe.

Stay if the people who can restore and moderate already speak XenForo, and you are not hiring a new stack. Migrate if the XenForo-shaped people are gone, and the people who remain are better at the destination — including hosted Discourse if you want zero servers. Do not migrate to “modernize staff.” Train them, or replace a process. Software will not make a silent moderator speak.

3. Search and SEO URLs

This filter is about permalinks and findability, not about whether Discourse “has better SEO.” Both products can rank. Both can tank a decade of inbound links in a week.

XenForo’s official URL story is Setup → Options → Search engine optimization (SEO):

  • Without friendly URLs: /index.php?threads/thread-title-here.12345/
  • With Use full friendly URLs: /threads/thread-title-here.12345/
  • Include content title in URLs off: /threads/12345/

Apache: rename htaccess.txt to .htaccess, need mod_rewrite and AllowOverride. LiteSpeed: same. IIS7: official web.config snippet. Nginx: try_files, and protect internal_data, src, install/data, install/templates. Sitemap: Setup → Options → XML sitemap generation. IndexNow lives on the SEO options page.

Those URLs are in emails, Discord pins, Google, screenshots, and member bookmarks. A migration to Discourse changes the pattern to /t/slug/id (and category/tag paths). A migration to XenForo from Discourse can keep more of the conversation but will not keep Discourse URLs unless you build redirects. Official XenForo importers write an import log table for that reason: redirect scripts 301 old source URLs to new XenForo content. vBulletin even has a dedicated XenForo Redirects product. Retain content IDs is allowed only on an empty XenForo (no threads, no posts) and makes thread 2563 stay 2563. It does not make a Discourse /t/ path into a XenForo /threads/ path by itself.

Questions that decide this filter:

  • How much of your traffic is Google landing on thread URLs versus the homepage?
  • Do you have ten years of /showthread.php?t= or /threads/ already 301’d once? A second rewrite is how you lose the long tail.
  • Are you planning to keep the domain? Same domain + new software = redirect project. New domain + new software = you are starting a site. Be honest.
  • Is the pain actually search inside the board? XenForo MySQL full-text falling over is an Enhanced Search / architecture problem, not a reason to throw away URLs.

Stay if inbound thread URLs are a material part of the business and you do not have a funded redirect map. Migrate if you are already changing domains, or the board is so small that permalinks are not an asset, or you are moving into XenForo and will run the official importer plus redirect scripts. Do not migrate because a consultant said “Discourse is better for SEO.” Ask them to show the redirect sheet.

If you stay, still do the SEO hygiene XenForo already ships: friendly URLs on, sitemap on, IndexNow if you want it, titles in URLs unless you have a reason. That work is an afternoon. It is not a platform.

4. Cost (three years, not the license tile)

Write a three-year total. Use ranges if you must. Do not use zero for your own time.

Stay on XenForo (typical):

  • License purchase, then the renewal/upgrade entitlement you actually buy.
  • Add-ons you will still need, including official Enhanced Search if search is the scaling lever.
  • VPS or host (PHP 8.3/8.4, MySQL 8 / MariaDB). Small communities fit small boxes.
  • The human who applies upgrades (backup first; you cannot officially downgrade; Tools → Upgrade check or the upgrade package + /install/).
  • Staging, because you have add-ons.

Move to Discourse hosted:

  • Monthly plan. Public 2026 grid on discourse.org: Free / Pro / Business / Enterprise. Pro has been listed around $100/month, Business around $500/month; staff seats and email caps differ. Read the live page. Multiply by 36.
  • Migration labor (scripts, partner, or your time).
  • Redirects and DNS.
  • Retraining.
  • Whatever you lose from the add-on list in filter 1, replaced or abandoned.

Move to Discourse self-hosted:

  • A VPS that meets the official Docker guide: 2 GB+ RAM recommended, 1 GB only with swap, 2+ cores recommended, 20 GB+ disk recommended.
  • SMTP or a decision to skip mail and use Discourse ID login (official installer now allows this; you lose traditional email features until you add SMTP).
  • The human who can ./launcher rebuild app and read container logs.
  • Same migration labor as hosted.

Move to IPS:

  • Only if filter 1 said you need a suite. Cost that out in the IPS article. Do not use Discourse prices for an IPS problem.

Move from something else to XenForo:

  • XenForo license + VPS + official Importers add-on (Customer area).
  • A fast box with both databases local (official speed advice).
  • Redirect scripts.
  • This is often cheaper than staying on an abandoned phpBB/vBulletin host you no longer understand.

Hidden stay-costs people skip: the weekend of a 2.3 upgrade, the add-on that bills yearly, the Elasticsearch VM you do not need yet. Hidden migrate-costs people skip: two months of “where did my post go,” the custom field that did not map, the private node that became a public category, the volunteer who quit.

Stay if three-year stay cost is lower and filter 1–3 are not on fire. Migrate if you are paying stay-costs for a product shape you do not use (a forum you are trying to turn into a SaaS community, or a suite’s worth of add-ons), and the destination’s three-year number is real. Do not migrate to save a $40 add-on. Do not stay because the license is “already paid” if the add-on stack is a second salary.

5. Community size and shape

Size is not “we have 80,000 registered accounts.” Size is concurrent readers, posts per day, private surface area, and navigation habits.

Small (a few hundred active, one volunteer admin). XenForo on a small VPS is operationally light. Discourse hosted Free/Pro can be lighter still if you do not want a server. Self-hosted Discourse on 1 GB is officially possible with swap and officially unpleasant. Do not self-host Discourse to feel independent if you cannot rebuild the container.

Medium (thousands of actives, a staff of five, a tree you can still draw). This is XenForo’s home. Widgets, groups, a portal if you need one, promotions for the people who show up. Migration cost here is high because the tree and the customs are load-bearing. Stay unless filter 1 is on fire.

Large (tens of thousands of actives, hundreds of nodes, search falling over, permission rebuilds that lock the board). This is an architecture problem first. Read the scaling article. Redis as the official cache provider, a dedicated page-cache context, guest versus member, jobs, XFES — those are levers. Migrating a large XenForo to Discourse because MySQL search is sad is how you buy a new sad. Migrating a large XenForo to Discourse because you want topic+tag IA and trust levels is a year-long project with a dedicated owner. Do not do it as a side quest.

Shape matters more than headcount:

  • Tree navigators (game factions, regional chapters, product lines with private forums) stay happier on XenForo nodes.
  • Stream navigators (Latest, tags, “what is new in billing”) are the Discourse-shaped community, and also the people who already live in What’s New on XenForo. You can serve them without moving.
  • Application-heavy communities (whitelist, roster, server list) stay.
  • Support + docs + public meta communities are the Discourse-shaped default.

Stay if the members still open a specific board the way they open a folder. Migrate if the members already ignore the tree and you are maintaining it for ghosts. Do not migrate because registered-user count looks impressive in an ad. Count last-month actives.

A stay / migrate grid

Signal Stay on XenForo Consider migrating
Load-bearing add-ons Core + maintained Dead, and destination replaces them
02:00 operator Speaks PHP / XF ACP Speaks Docker or wants official hosted
Permalinks Years of /threads/ traffic New domain, or moving into XF with importer + redirects
Three-year cost VPS + license is the cheap path You are paying suite prices for a forum, or paying forum prices for a suite you need
Navigation Tree is the product Latest + tags is the product
Pain Neglect, style, one add-on Product shape is wrong
Destination Named: Discourse hosted, Discourse Docker, IPS, or XF from phpBB/vB

If you cannot name the destination in that last row, you are not ready. “Away from XenForo” is not a plan.

Two boards, scored in ink

Use a 1–5 scale per filter (1 = stay is obvious, 5 = move is obvious). A 5 requires a named destination. Average them. Do not add bonus points for screenshots.

Board A — 11-year hobby, 6,000 last-month actives, 70 nodes, three maintained add-ons, two volunteer mods who have never used Docker, Google traffic on /threads/.

Filter Score Why
Add-on lock-in 2 Add-ons work; core could replace one of them
Staff skills 1 Mods speak Never/Yes/No; nobody wants launcher
URLs 1 Thread permalinks are the marketing
Cost 2 License + VPS is cheaper than hosted Discourse + retraining
Size / shape 2 Tree is still how people navigate
Average 1.6 Stay. Flatten two ghost categories. Turn on page cache.

Board B — company support forum, 400 actives, 12 nodes nobody uses, staff already pay for SaaS, PHP guy left, legal wants a vendor SLA, no gaming extras.

Filter Score Why
Add-on lock-in 4 Almost no extras; a notice and a private node are the “stack”
Staff skills 5 Remaining IT will buy hosted, not restore internal_data
URLs 3 New domain already planned for the rebrand
Cost 4 Hosted Discourse is a line item they understand
Size / shape 5 People already live in “what’s new,” not in rooms
Average 4.2 Move to Discourse hosted. Pilot empty for two weeks. Import a slice.

If your scores look like 3, 3, 3, 3, 3, you are not deciding. You are hoping the internet will decide. Stay this quarter and run the staging-uninstall test.

How to test without burning the board

Do this in order. Stop when the answer is obvious.

  1. Write the five filters with real names and real numbers. If you cannot, you are venting, not deciding.
  2. Staging uninstall of the noisiest add-ons. Keep a snapshot.
  3. Member interview, n=5. Ask them how they find a thread. If four say “I search” or “I use What’s New,” your tree is cheaper to flatten than to migrate. If four say “I go to Xbox → EU → LFG,” do not sell them tags.
  4. Pilot the destination empty. Stand up Discourse hosted or a Docker test, or an IPS trial, with one real use case (staff meta, or a new product’s support). Do not import yet. Use it for two weeks. If staff hate the empty version, they will hate the imported version.
  5. Import a slice on a throwaway. For Discourse → XenForo, official path: Importers add-on, Tools → Import data, source DB, steps, import_log, CLI php cmd.php xf:import. For XenForo → Discourse, use the Meta-side process and assume it is a project. Look at what dropped: attachments, groups, private forums, custom fields.
  6. Redirect budget. Count indexed thread URLs. If the number scares you, that is the point.
  7. Go / no-go with a date. Migrations without a freeze window become a second live site that never cuts over.

Official XenForo import hygiene, because people skip it even on a test: backup the XenForo database and data/ and internal_data/ first; close Board active; never expect the source to be modified (it will not be); do not Retain content IDs unless the XF is empty of threads and posts; merge users on email unless you have a reason not to; finish the import so caches rebuild. If the test import is messy, the production import will be the same mess with an audience.

When staying is the brave call

Stay is not inertia when you can write the sentence: the product matches the community, the people can operate it, and the pain is a project inside XenForo.

Typical stay projects that are not migrations:

  • Flatten the node tree. Archive ghost boards. The nodes guide already told you how.
  • Replace a dead add-on with core fields, a page node, or one maintained add-on.
  • Turn on friendly URLs, sitemap, guest page cache, Redis. Speed is architecture and CWV, not Discourse.
  • Upgrade to 2.3 on staging, then production. The upgrade article is the sequence.
  • Write a 30-day onboarding plan. New members do not churn because the software is XenForo.

If you stay, say it out loud to staff so the next screenshot of another product does not reopen the meeting.

When migrating is the brave call

Migrate when you can write the sentence: the product shape is wrong, the destination is named, the filters are funded, and a person owns the cutover.

Typical honest migrations:

  • phpBB / vBulletin / MyBB / SMF / IPS / Discourse 3.x → XenForo, because you want a maintained forum-first product and the official importer lists your source. You are not leaving XenForo. You are arriving.
  • XenForo → Discourse hosted, because you want trust levels, topic+tag IA, and no PHP box, and you have accepted the add-on losses.
  • XenForo → IPS, because you need the suite. Different article.
  • XenForo → nothing. Sometimes the community is over. A static archive plus a Discord is a migration too. It is kinder than a two-year Discourse rebuild nobody will post in.

Do not migrate as punishment for a bad vendor week. Do not migrate because a developer wants to learn Rails. Do not migrate the 15-year hobby forum two months before the founder’s wedding.

What this framework will not do

It will not give you a numeric “if score > 12, leave.” Communities are not credit scores. It will not list phpBB tables or Discourse app.yml keys. It will not tell you that forums are dead; the Discourse versus traditional piece owns that category argument.

It will also not tell you that XenForo is forever. Products end. When XenForo stops shipping, the same five filters apply, and “stay” becomes “plan the landing.” We are not there. Do not role-play the apocalypse to justify a move you already wanted.

Takeaways

  • Decide with add-on lock-in, staff skills, URLs, three-year cost, and community shape. The feature matrix is a different article.
  • Lock-in is what dies when an add-on dies. Uninstall on staging before you uninstall the platform.
  • Operators beat aesthetics. A Docker-fluent team can own Discourse. A PHP-forum team should not be forced to.
  • Permalinks are an asset. XenForo’s official importer plus redirect scripts are how you enter XF without lighting them on fire. Leaving XF is a new redirect project.
  • Cost is three years of people and hosting, not the cheapest tile on a pricing page.
  • Large and sad is often an architecture ticket. Small and neglected is an onboarding ticket. Neither is automatically a migrate ticket.
  • Test with a written filter sheet, a staging uninstall, five member interviews, an empty pilot, and a slice import. Then pick a date.

If you cannot name what you are moving to, you are staying. That is a complete answer. Write it down and go fix the node tree.