Three weeks and 170 commits later marks the third beta of FreezeMessenger. This release focused most extensively on WebPro functionality and stability. From the release notes:
Most core functionality is present and tested, only minor features will be added, and no breaking API or database changes should occur at this point — at this time, a Beta 3 installation should be upgradeable through the stable release without requiring a reinstall.
In addition, while PHP 5.5-7.0 support is planned (and has been prepared for), it is not currently a priority. If you would like to use FreezeMessenger with PHP 5.5-7.0, please post an issue, and a PHP 5.5-7.0 version of this beta will be tested and released.
This release primarily focused on WebPro stabilisation. The full list of major changes includes:
- Experimental push notification support has been added. When posts are made to an unread room, users may be notified if they are subscribed to the push notification channel (currently, this is only on Firefox and Chrome). This is still quite buggy, and must be enabled both by the user (in WebPro) and the administrator (in the admin control panel). As part of this, WebPro now supports Service Workers for message retrieval. f1a2411 02d7cec 1dadb92 45bd89b 447e64d
- An “applicationRefresh” event has been added. It can be issued in the administrator control panels, and requests that all applications obtain fresh resources. As part of this, WebPro now can now be invoked with the “#nocache” parameter, which will force it to get fresh script and CSS files. cdb6436
- File deletion support has been added.
- WebPro: All interfaces have been updated for Bootstrap 4 Beta 3.
- WebPro: The jQueryUI autocomplete functionality has been replaced, and as a result jQueryUI is no longer packaged. WebPro’s total filesize should be a fair bit smaller, especially when a user first loads.
- WebPro: A “Followed Rooms” sidebar has been added; it replaces the previous “bubble notification” functionality used to alert users to new messages in watched rooms. It behaves largely as expected: it displays both your watched rooms and the room you are current viewing, and displays an indication if new messages have been posted in those rooms.
- WebPro: The “Followed Rooms” and “Active Users” sidebars will now collapse on mobile, and can be opened with a button placed in the new message textbox.
- WebPro: Message formatting options have been substantially improved. Backticks can now encase code, and all formatting generally plays nicely with one-another. This also removes some nascent XSS vulnerabilities. 7a577e2
- WebPro: Social media links will now be “embedded” by default. This functionality can be disabled (like automatic video and image embeds can be disabled), and covers DailyMotion, DeviantArt, Facebook Video, Facebook Posts, Flickr, Instagram, Twitch.tv, Twitter, Soundcloud, and Vimeo links. 8692b47
- WebPro: A new display mode, “Grouped”, has been added. This groups messages from the same author.
- WebPro: Conversations now can appear in a “bubble” style. This is designed to make custom user highlights/colors somewhat more worthwhile. 37335b9
- WebPro: Very basic theme support has been added, with Bootswatch themes available to users. In most cases, the Bootswatch themes do not yet seem to be fully compatible with Bootstrap v4, and thus most are somewhat bugged in different ways.
- WebPro: In the default display mode, messages sent by the logged-in user will be right-aligned.
- WebPro: Reverse post order has been fixed. b494255
- WebPro: Message editing is now generally supported.
- WebPro: Webkit message notifications are now more informative.
- WebPro: When pasting an image, a confirmation is now given. 0edbeaf
- WebPro: Added “View My Kicks” functionality. 04b6aec
- WebPro: Various other display fixes and improvements.
- Stream\Database: A distributed cache is now used to check if new messages have been posted in a room. This should result in meaningful performance improvements on small installations, especially if Memcached is available but Redis/Kafka aren’t.
- Stream\Redis: Due to an oversight, this wasn’t previously working. It is now.
- stream.php: The script is now forced to abort if the connection is lost. This should help improve memory usage in some situations.
- API/UserOptions: Contrast checking has been added for user highlight/colour. By default, the contrast between these must be >4.5 (as per the W3C standard). e6d2dbe
- API/UserOptions: Profiles and avatars will now be checked for existence (disableable in config). ca22988
- API/DELETE Message: A fairly egregious error allowing any user to delete any other user’s messages has been fixed.
- API/File: If a file upload fails to transfer, the server will report this. 73080b1
Other Backend Changes
- Config: Default font face, bold, and italics are now disabled by default. Various other similar tweaks have been made.
- Config: A new option, “userTypingStatus”, has been added that can be used to disable user typing functionality. The typing pings are the most frequent operation in normal usage, and while they are very light-weight, some servers nonetheless seem adverse to any and all HTTP requests. This flag will thus cut HTTP requests roughly in half during normal usage.
- Config: File uploads are now more permissive by default.
- Watch Rooms: The favourite rooms and watch rooms lists have been merged; the new list effectively combines the functionality of both.
- Watch Rooms: Watched room events will now only be published for users who have recorded activity in the ping table. This will substantially improve the Watched Room scalability; right now, a strong server should be able to reasonably accommodate several hundred users following every room. Beta 4 will increase this further (to nearly O(logn) scaling — the current scaling is approximately O(nlogn)).
- Database: Consistent column names are now used across all tables. (e.g. listId is now id in the censorLists table.)
Beta Testers Welcome
With this release, everything is stable to a point that very few bugs are encountered as a result of light or automated testing. As a result, anyone reading this is welcome to help beta test. There are two ways you can do so:
- Login to the test server (https://messenger.josephtparsons.com/), and try to break things. If you do break things, or any part of the application behaves in a way that you believe is counter-intuitive or wrong, either send a private message to the “admin” user of the test server, send an email to firstname.lastname@example.org, or post an issue in Git.
- Download and install FreezeMessenger on your own server. In practice, there are many configurations of hardware that we would like to support but simply can’t reasonably test; odds are, the combination of caching, databases, and server software you use is different than the ones we primarily use, and you will likely encounter bugs we haven’t. Again, report them by private messaging the admin user on the test server, sending an email to email@example.com, or posting an issue in Git
Should I Use FreezeMessenger on My Server?
Boy, I’d like to think so! This release is the culmination of several years of on-again-off-again development, but the end result is a product that works quite well for what it is. At this stage of development, FreezeMessenger has done a very decent job of combining exciting features with high performance; while future betas (and stable releases after 1.0) will continue to see FreezeMessenger optimisations, the current release is a very decent starting point.
Additionally, this beta marks an absolute lock on breaking database schema changes; while tables and columns may still be added, no existing columns will change in such a way as to require a reinstall. As a result, you shouldn’t have to reinstall FreezeMessenger as part of any upgrade after this beta.
Finally, if you are more interested in developing your own frontend for FreezeMessenger (and more power to you!), the API is mostly final. Further changes may happen until Release Candidate 1, but they should be minor, and won’t require substantial adjustments.
So, if you’re reading this and want a quick spiel about why FreezeMessenger is better than other products on the market: flexibility. 3 database backends, 4 streaming backends (including a surprisingly performant pure-RDS backend!), 4 cache servers, OAuth/vBulletin/PHPBB login integration, AWS compatibility and optimisations, and a well-tested API that allows anyone to hook into FreezeMessenger and write their own frontend all comes together to make it one of the most flexible offerings on the market. Moreover, the streaming and login modules are fully pluggable; it is easy to write your own streaming or login module and drop it in to FreezeMessenger, requiring only a config.php change.
We’re shooting for about two more betas before moving to Release Candidate state, which will focus on pure bug fixes and documentation enhancements. As long as we’re in beta, minor (generally non-breaking) feature additions are still in the pipeline, and a few have come up that will hopefully make it into beta 4:
- MyBB login integration. In addition, if anyone wants to lend us their site or copy of Invision Pro Board, it would also be something we’d like to add compatibility for.
- A DynamoDB caching layer, and possibly SNS support.
- New OAuth login methods, such as Pinterest.
- Scaling improvements with push messaging and watch rooms.
- Cache invalidation improvements should ensure that permission changes never rely on cache expiration to take effect. (And should subsequently allow for much longer TTLs on permission caches.)
- Better error handling in WebPro, esp. with invalid_token errors.
- User registration limits and improved login attempt flooding.
Meanwhile, the remaining features that are targeted for Beta 5 include:
- Support for writing files to the filesystem. (If possible, this functionality will be added through the database abstraction layer.)
- Explicit support for persistent database connections. (They are currently possible and seem to work in MySQLi by appending “p:” to hostnames.)
- Possible improvements to the “change topic” permission, which is not currently well tested or exposed in WebPro.
- Possible support for off-the-record rooms.
- Improvements to anonymous user handling/display.