Flarum 2.0.0-beta.7 Released π
We're happy to ship another beta release! Beta.7 is a focused quality-of-life update β no sweeping infrastructure changes this time, just a collection of bug fixes, polish, and some meaningful performance improvements that will benefit every Flarum installation.
π You're already running it. This very forum β discuss.flarum.org β has been updated to beta.7. Consider this your live preview.
π§ͺ Want to try Flarum 2.0 before committing? Check out our nightly demo at nightly.flarum.site, rebuilt every day from the latest 2.x code.
πΊοΈ Roadmap heads up: we're planning just one more beta before we move into the RC (Release Candidate) cycle. If you've been sitting on the fence about testing 2.0, now is the time β your feedback in these final betas directly shapes the release.
π What's the RC cycle?
For those unfamiliar with how software release cycles work, here's a quick rundown of where we're headed:
- πΆ Beta (where we are now) β Feature-complete enough to test, but APIs are still in flux. Breaking changes to extensions can happen between betas.
- π· Release Candidate (RC) β "Last call." The API is frozen: no new features, no breaking changes. Only critical bug fixes are accepted.
- π’ Stable
2.0.0 β RC with no blockers = stable release. Flarum 2.x then follows normal semantic versioning.
What this means for you specifically:
- π Forum admins β Once we reach RC, the upgrade path to stable will be smooth and well-defined. RC is safe to run in production for early adopters.
- π Extension developers β The RC is your last warning sign. Extensions not updated by then will be incompatible with Flarum 2.0 stable. Update now while we can still adapt core to your needs.
- π Everyone β Bug reports during RC carry extra weight. A report could be the difference between a fix landing in 2.0.0 or being deferred to 2.0.1 or even 2.1.
π What's in beta.7?
π·οΈ Tag-restricted discussions: authors can now rename and hide their own posts
This one has been a thorn in the side of communities using tag permissions for a while. If your forum has a restricted tag (where only certain groups can interact), authors were unexpectedly blocked from renaming or deleting their own discussions β even though those are "own-content" actions that should always be available to the author.
The root cause was subtle: the tag permission system was intercepting every permission check, including the ones core uses to let authors manage their own content. It would deny the request before core even got a chance to say "but wait, they're the author!"
Beta.7 fixes this properly, backed by 14 new integration tests to keep it that way. β
β‘ Performance: fewer database queries on every request
This release includes several under-the-hood optimisations. Nothing you'll see directly β but your server will thank you.
- β‘ Notification counts cached β was a DB query on every page load; now cached for 5 minutes and invalidated automatically when something changes.
- β‘ Auth last-seen write eliminated β was an unconditional DB write on every request; now only writes when the data has actually changed.
- β‘ Scheduler timestamp moved to cache β was a DB write every 1 minute; now stored in the cache instead.
- β‘ Rogue settings DELETE query fixed β a
DELETE query was firing on every single request; this is now fixed.
- β‘ DB version lookup cached β was a query on every admin page load; now cached for 24 hours.
Together, these changes add up to noticeably fewer database operations β especially on sites with active users.
π Better dark mode support
Flarum now sets the color-scheme CSS property on the page root. Browsers use this hint to style their own native UI elements β scrollbars, checkboxes, form controls β to match your forum's theme. It also prevents Chrome's "Auto Dark Theme" from incorrectly inverting things like user avatars on forums already using a dark theme.
π New for extension developers: ApplicationBooted event
There is now an ApplicationBooted event fired after all service provider boot() callbacks have completed. This gives extensions a reliable moment to run code that depends on the entire application being fully initialised β something that wasn't cleanly possible before.
β¨ Forum interface polish
A handful of UI niggles have been smoothed out:
- π Scroll jumping when navigating to a specific post β links to mid-discussion posts could cause the page to jump noticeably. Fixed.
- π¬ Pop-in animation on the first post β the first post in a discussion wasn't getting the same smooth entrance animation as subsequent posts. Now it does.
- π Discussion URL not updating on scroll β the address bar URL should update as you scroll through a discussion. This wasn't always working. Fixed.
- π¬ Notification button tooltip positioning β the tooltip on the notification bell could appear in the wrong position. Fixed.
- π Search modal crash β in rare cases, triggering a search result navigation could crash with a null reference error. Fixed.
- βοΈ Admin search source fix β an issue in the admin panel's search source could cause incorrect results in certain configurations. Fixed.
π‘ Realtime extension fixes
- Fixed an error when a post wasn't visible to the current user due to tag restrictions β instead of crashing, it now handles this gracefully.
- The external settings cache now uses Eloquent instead of a raw database query, keeping things consistent.
π The ecosystem is getting ready
Beta.7 is a good moment to take stock of where the broader Flarum ecosystem stands heading into the final stretch.
π Language packs β @rob006 is actively working on getting the Flarum language packs updated for 2.0. If you maintain or contribute to a language pack, now is a great time to get involved β keep an eye on the language pack threads for updates.
π€ Friends of Flarum β The FoF team is working through the last few extensions to bring them up to 2.0 compatibility. Great progress is being made and we're grateful for their ongoing commitment to the ecosystem.
π£ Other extension developers β your turn! We'd really love to see as many extensions updated as possible before RC. Here's why timing matters: if we discover a core API needs to change to accommodate your extension, we can still do that now in beta. Once we hit RC, that window closes.
Please update your extensions, test them against beta.7, and let us know if anything in core is getting in your way. Open a discussion here or file an issue on GitHub. We're listening and we want to help make the transition as smooth as possible.
π Try it yourself
- π₯οΈ Live demo β nightly.flarum.site, rebuilt daily from the latest
2.x code, no setup required
- ποΈ Right here β discuss.flarum.org is running beta.7, you're already experiencing it
- β¬οΈ Update your own install β run
composer update (staging environment + database backup first, as always)
With only one more beta before the RC cycle, there's no better time to kick the tyres and let us know what you find. Bug reports, feedback, and extension compatibility notes are all incredibly valuable at this stage.
π Thank you to our contributors
Beta.7 wouldn't be possible without the people who reported bugs, submitted pull requests, and reviewed code:
- @iPurpl3x β three forum scroll and animation fixes
- @zDaleZ β
color-scheme dark mode improvement
- @IanM β everything else in this release
π Changelog
Added
- fire
ApplicationBooted event after all service provider boot callbacks complete by @IanM #4366
Fixed
- (tags) authors unable to rename/hide own discussions in restricted tags by @IanM #4379
- handle null
gotoItem in SearchModal to prevent crash by @IanM #4376
- (tooltip) add
container prop to fix notification button tooltip positioning by @IanM #4375
- (admin) correct tree array construction in
GeneralSearchSource by @IanM #4373
- (forum) sync discussion URL immediately on programmatic scroll by @iPurpl3x #4371
- (realtime) error when post not visible due to tag restrictions by @IanM #4369
- (forum) show pop-in animation on first post when loading a discussion by @iPurpl3x #4362
- (forum) prevent scroll jump when loading discussion to a specific post by @iPurpl3x #4361
Changed
- eliminate redundant DB writes in auth middleware and cache notification counts by @IanM #4380
- store scheduler last-run timestamp in cache instead of database by @IanM #4364
- fix rogue settings delete query that ran on every request by @IanM #4368
- (realtime) replace raw DB query with Eloquent for external settings cache by @IanM #4367
- add
color-scheme property to root.less for better dark-mode support by @zDaleZ #4357