Flatboard 5.4.1 — Release

Fred Fred ·01 April 2026 à 14:42·3 min read·401· 3 comments

A bigger release than usual — dashboard widgets, private RSS feeds, tag editing, date fixes, and a better update screen.
Flatboard Release

Dashboard widgets

Most plugins now have a dashboard widget: ForumMonitoring, FlatModerationExtend, PrivateMessaging, FlatLetter, Reputation, InactiveUserManager. Each shows the plugin's numbers without leaving the dashboard.

ForumMonitoring also added an "Active members today" card — a 7-day bar sparkline, a delta vs yesterday, and a list of today's active members with their last-seen time.

All widgets are on by default. Each can be toggled from its plugin's settings.

Updates screen

The Updates section in the admin menu now shows every installed plugin and theme in one list — version installed, update available or not. No more checking plugin pages one by one.

Language file updates are also clearer now. Instead of a bare version number, the interface tells you what the update actually contains before you apply it.

Tag editing

Tags can now be edited after creation — name, color, and icon. Before this, fixing a typo or changing a color meant deleting the tag and recreating it.

New in Pro — private RSS/Atom feeds

If your forum is members-only, RSS has always been a dead end. Feed readers can't log in, so members got public-only content or a completely empty feed.

Every feed URL now accepts a ?token= parameter:

TEXT

https://yourforum.com/feed/rss?token=your_api_key
https://yourforum.com/feed/atom/category/members-only?token=your_api_key

The token is the API key from your profile's security settings. With a valid token, the feed includes everything you'd normally see logged in — public boards plus any private categories your account can access. No token, or a bad one, returns public content. Nothing breaks for people who aren't using it.

All feed types work: global, by category, by user, by tag.

Feed URLs use category slug

Category feed URLs changed from /feed/rss/category/{uuid} to /feed/rss/category/{slug}. The UUID format was unreadable and impossible to construct by hand. If you have hardcoded category feed links anywhere, they'll need updating.

Date and timezone fixes

Two bugs that have been there for longer than they should have been.

The forum's configured timezone wasn't being applied to PHP's native date functions at startup. So if your admin settings said Europe/Paris but the server was in UTC, post timestamps could be off by an hour or two. Now the configured timezone is set before anything else runs.

Month and day names were also always in English regardless of forum language. A German forum would show "März" in translated strings but "March" in date outputs. The date helper now reads month and day names from the active language file. All five languages (fr, en, de, pt, zh) are covered.

Pro: Three plugins had the same English-names problem in specific places — blog card dates in FlatHome, day abbreviations in ForumMonitoring's activity charts, and the activity chart in PrivateMessaging's admin panel. All fixed.

Guest profile redirect

When profile pages were restricted to members, unauthenticated visitors got a 403. Guests now get redirected to login with an explanation instead.


📋 Full changelog

The complete changelog with all technical details is available in full changelog thread.


Thank you to everyone who reported bugs and contributed to this release. 🙏

Share this article:

Fred

👨‍💻 Flatboard Founder 🔧 Flatboard Core Developer.
Full-Stack Web Developer
Expert in Portable and Interoperable Solutions (PHP/JSON)

Member since December 2025

3 comments

Fred
Fred 02 April 2026 à 09:01

Flatboard 5.4.1 — April 2, 2026

Maintenance release addressing four regressions introduced or uncovered after 5.4.0.


1. Deleting a user crashed with a foreign key constraint error (SQLite)

Removing an account from the admin panel failed with a FOREIGN KEY constraint error.
The deletion did not clean up related records before removing the user row, which SQLite rejects when foreign keys are enforced.

Fix:
The operation now runs as a single atomic transaction covering all dependent data: tokens, subscriptions, notifications, moderation history, and more.


2. Changing a user's group failed with “no such column: permissions_version” (SQLite)

The permissions_version column — introduced in 5.4.0 to invalidate active sessions on group changes — was not being added to existing databases.

Fix:
The migration now runs automatically on first boot after upgrading (schema version bumped to 16).


3. Email verification: users stuck in the Guest group after verifying their email

After clicking the verification link, some users remained in the Guest group instead of being promoted to Member.
The promotion was silently skipped if the member group could not be resolved.

Fix:
The failure is now logged as an error, the group resolution heuristic can no longer accidentally return the Guest group, and manually marking a user as email verified in the admin panel now triggers the promotion automatically.


4. PHP warning during plugin updates

Updating a plugin could emit an Array to string conversion warning while merging plugin.json files.
array_unique() was called with the default SORT_STRING mode, which breaks when list entries are themselves arrays (e.g. hook definitions).

Fix:
Now uses SORT_REGULAR to handle array comparisons properly.

arpinux
arpinux 05 April 2026 à 18:24

Hi!

upgrade done through admin panel without issues.

just one thing: the existing EasyMDE configuration is erased by the upgrade (/plugins/EasyMDE/plugin.json)

another very little thing: in the french version, there is a button to call the upgrade "Télécharger une sauvegarde" but it should be "Téléverser une sauvegarde".

Fred
Fred 06 April 2026 à 11:29

Hi arpinux,

Thanks a lot for your feedback and for reporting this!

I’ve identified the issue with the EasyMDE configuration being overwritten during the upgrade (specifically /plugins/EasyMDE/plugin.json). It should be fixed in the next release.

Thanks as well for pointing out the French translation — you’re absolutely right, “Téléverser une sauvegarde” is the correct wording. I’ll update that too.

Appreciate your help!

Best regards

Log in to leave a comment.