Flarum 2.0.0-rc.3 Released - Built by the Community, Almost Ready for Everyone
Flarum 2.0.0-rc.3 Released 🎉 — and 2.0 is almost here
This is the one we've been working toward for years. Flarum 2.0 is no longer on the horizon — it's right in front of us. Today we're shipping 2.0.0-rc.3, and with each release candidate the picture gets clearer: real forums, running real communities, on 2.0 today, with more upgrading every single day.rc.3 is a fast, focused follow-up to rc.2 — 10 merged PRs just a week later — but the bigger story is the momentum behind it. The release-candidate series is doing exactly what it's meant to do: people are running 2.0 in production, telling us what they find, and we're turning fixes around in days. The bug reports are getting rarer and the edges are getting smoother. That's what the road to a stable 2.0 looks like, and we're nearly at the end of it.
🚀 Production-ready for early adopters — and people are already there. The upgrade from rc.2 is a plaincomposer update. Back up your database, test on staging if you can, keep a rollback plan — the usual.
👀 This forum runs it. discuss.flarum.org is on rc.3. So is the nightly demo, rebuilt daily from the latest2.xcode. You're looking at 2.0 right now.
💬 Already upgraded? Tell us. Drop a note inSupport — every "running it in prod, all good" report builds confidence for the next forum about to take the leap.
🧭 Where we are — the last mile
We're in the final stretch. The release-candidate promise still holds, and every point of it is now battle-tested in production:- The API is frozen — for real, proven by real extensions. An extension built against rc.1 or rc.2 works unchanged on rc.3 and will work on 2.0.0 final. Extension authors: now is the time to ship your 2.0-compatible releases.
- The upgrade path is clean. rc.2 → rc.3 → 2.0.0 is
composer updatethe whole way. The forums upgrading daily are proof. - Regressions go to the top of the pile — and there are fewer of them every cycle.
Where to report:
- Bugs in core — flarum/frameworkissues
- General feedback, questions, extension behaviour —Support
- Security issues —
[email protected](please don't post publicly)
🛠️ What changed in rc.3
🗄️ Database & queue robustness
The headline of this cycle is making Flarum fail loudly and early instead of mysteriously:- Database driver/server mismatches are now detected and surfaced. Since 2.x, Flarum treats MariaDB and MySQL as distinct drivers with their own connection classes and query grammars — they are not interchangeable. A misconfigured
driveragainst the wrong server was behind a whole class of "some queries just fail" reports; Flarum now spots the mismatch and tells you, rather than letting it manifest as random query errors. - The full Queue Pause/Resume surface is stubbed on
QueueFactory. Flarum hands itsQueueFactoryto Illuminate's worker in the role normally filled by the fullQueueManager, but theFactorycontract only guaranteesconnection(). The missing methods the worker and queue commands reach for are now stubbed, so queue tooling doesn't blow up on a method that was never there. - The queue worker no longer crashes on a null connection name.
illuminate/queue13.15 tightened the type on itsWorkerIdleevent to require a string connection name; Flarum never set one, so the worker threw aTypeErroron every idle tick. Flarum now names its queue connection, which keeps the worker happy across Illuminate releases — the same "a dependency bump shouldn't be able to crash the worker" hardening as the stub above.
🚦 Error handling
- Forum error handling now does content negotiation — errors are rendered in the format the client actually asked for, instead of assuming one.
📱 Frontend & mobile polish
- The user count and list refresh after creating a user in admin, so the new account shows up without a manual reload.
- The post divider is no longer lopsided on mobile.
- Emoji reserve a square box (
img.emoji), eliminating the layout shift (CLS) that nudged text around as emoji loaded. - Mentions in a post now align with the rest of the text instead of sitting slightly off the baseline.
🧩 Extension compatibility
- Tags and Sticky no longer fail to initialize alongside Realtime. With both enabled you could hit
flarum-tags failed to initialize / TypeError: mt(...) is not a constructor. The cause was load order: Realtime registers a JS extender that Tags and Sticky consume, but they weren't guaranteed to load after it. Declaring Realtime as an optional dependency fixes the ordering — caught from a community bug report, exactly the kind the RC series is for.
⚡ Performance
- N+1
group_userqueries are gone when serializing users — group membership is now loaded in bulk instead of per-user, a meaningful win on any list of accounts.
💙 This is a community release
Here's the part we're proudest of: most of rc.3 was written by the community, not the core team. Five of the ten PRs this cycle came from contributors outside the core — people who hit something, fixed it, and sent it back upstream. That's not a footnote; that's the whole point of Flarum, and it's exactly the energy that carries a project across the finish line to a major release.If you've ever thought about contributing, this is the moment. 2.0 is being built in the open, in real time, by people like you. Every PR, every bug report, every "I upgraded and here's what happened" makes the final release better.
Contributors this cycle:
- @datitisev — content negotiation for forum error handling #4677, mention alignment #4692
- @davetodave178 — refresh user count and list after user creation #4687
- @KBExit — lopsided post divider on mobile #4691
- @IanM — database mismatch detection, queue surface stub, queue worker connection-name fix, emoji CLS, the N+1 fix, and the Realtime load-order fix
🚀 Be part of it
The best thing you can do for 2.0 right now is run it. Every forum that upgrades is one more real-world proving ground, and one more vote of confidence for the next person on the fence.- See it live — nightly.flarum.site, rebuilt daily, and right here on discuss.flarum.org
- Upgrade your install —
composer update -W, thenphp flarum migrate,php flarum cache:clear, andphp flarum assets:publish(back up first, and test on staging if you can) - Then come back and tell us — what worked, what didn't, what you'd want in 2.0 final
📋 Changelog
Added
- (core) detect and surface a database driver/server mismatch (e.g. MariaDB vs MySQL) by @IanM #4682
- (core) content negotiation for forum error handling by @datitisev #4677
Fixed
- (core) refresh the user count and list after user creation by @davetodave178 #4687
- (core) lopsided post divider on mobile by @KBExit #4691
- (core) stub the full Queue Pause/Resume surface on
QueueFactoryby @IanM #4683 - (core) queue worker
TypeErroron a null connection name withilluminate/queue13.15+ by @IanM #4700 - (mentions) align mentions in post with the rest of the text by @datitisev #4692
- (emoji) reserve a square box for
img.emojito avoid layout shift (CLS) by @IanM #4685 - (tags, sticky) declare
flarum/realtimeas an optional dependency so the realtime extender loads before its consumers, fixingTypeError: mt(...) is not a constructorby @IanM #4699