XF 2.4 XenForo 2.4 status and what's new under the hood?

Where are we?​

XenForo Community PSD Edit (1).webp
TL;DR: We're working hard to release XenForo 2.4 ASAP, but it's taking longer than expected due to scope changes and strategic decisions to wait for certain upstream developments that will benefit the long-term roadmap. Here's an analogy to explain why:

Software development is like planning a cross-country expedition with multiple destinations.

When you set out for version 2.4, you're not just driving to the next town over. You're charting a course through unknown territory with several strategic stops planned along the way - each representing a major milestone or feature release.

But the challenge is the landscape keeps changing along the journey.
  • New roads open up (better technologies emerge)
  • Bridges get washed out (dependencies break or become obsolete)
  • You discover scenic routes that would benefit all future travellers (opportunities for architectural improvements)
  • Weather conditions shift (market demands or user needs evolve)
  • Your vehicle needs unexpected maintenance (technical debt must be addressed)
You can't just focus on reaching the immediate next stop. You must consider how each decision affects the entire journey ahead. Taking a shortcut to reach 2.4 faster might leave you stranded when trying to reach 3.0, 4.0 or even 5.0.

This is why scope changes occur: experienced developers are constantly recalibrating the route based on new information, ensuring the expedition can successfully reach not just the next destination, but all the strategic waypoints that follow.

The delays aren't detours, rather they're course corrections that keep the long-term journey viable.

To be slightly less cryptic, these are some of the specific challenges we have faced along the way:

A new Tiptap version is coming​

When we announced that Tiptap is coming to XenForo 2.4 it was 95% complete, and we then took a bit of a pause to work on other projects, which we have talked about since and will be discussing in this thread. Since then, Tiptap have announced Tiptap V3 which is currently in beta. Given how core the editor is to the forum experience, it makes a lot of sense to ship XenForo 2.4 with Tiptap V3 rather than Tiptap V2 as originally planned. While the changes involved are not too extensive, we also don't want to ship 2.4 with a dependency that is still in beta and subject to change. While we are not planning to wait for Tiptap V3 to be stable, necessarily, we do at least want to give it a little bit more time so we have a higher degree of confidence that we're shipping a stable editing experience.

We started talking about a rewrite (again)​

While this is not currently the direction we've decided to go in, it's responsible for us to at least consider all routes available to us to help us reach our destination.

1749736697928.webp


After nearly 8 years since the release of XenForo 2.0, many of the technologies we use are showing their age, many of the decisions we made have started to slow us down more than we would like, and as a framework, XenForo becomes a less productive framework to work with. The solution to this problem can be to start from scratch, but we have ultimately decided that this is not something we need to do at this stage.

Instead, over the next few versions, including 2.4, we will be attempting to make iterative architectural changes to the framework so that we all have greater tools at our disposal to improve both the developer and user experience, particularly focusing on the implementation of developer tools and features that have become commonplace in other frameworks, such as Laravel.

Some of our best features are simply not finished​

There are one or two features that we see requested consistently from customers in our community forums and feedback channels, and we're excited to confirm they are coming in 2.4! However, it serves no one well if we release such highly-anticipated features before they are ready and before they have the usual level of quality, polish, and extensibility you would expect from a XenForo release. We'd rather take the extra time to get them right than rush them out and disappoint users with a subpar implementation that requires immediate patches or lacks the flexibility for customisation. We'll be sharing exciting details about what these features are and how they work in the coming weeks, so stay tuned!

We can't keep up!​

I just counted and there are about 15 features that have been merged or are pending to be merged into XF 2.4 that we haven't announced yet. Some of these are smaller and aren't worthy of a dedicated HYS of their own (so they'll probably be rolled into a "miscellaneous" HYS or two), and some of these are going to be mentioned below, but while we have been "cooking" (as the kids say these days) it has meant that things like code reviews, and writing HYS posts hasn't been easy to balance. There is also potentially more stuff coming from generous contributions from esteemed developers such as @Xon and @digitalpoint, assuming we have time to implement (otherwise they will wait for... a future version).


With all of that now being said, while 2.4 is taking longer than we wanted, we have been busy and we are very much nearing the end of development.

And, while disappointing (to all of us) it is important to maintain perspective. XenForo 2.2 was released in September 2020. XenForo 2.3 was released nearly four years later. XenForo 2.4 is not 3 more years away.

But, you clicked this to find out what's new, right? So let's go.
 
Last edited:
Just remembered a more concrete example of something that previously would have needed a raw expression but now doesn't:

PHP:
$query
    ->selectIf(
        'master.phrase_id IS NOT NULL', // $condition
        'master.addon_id', // $true
        'phrase.addon_id', // $false
        'addon_id' // $alias
    )

So this compiles to this in MySQL:

SQL:
SELECT IF(master.phrase_id IS NOT NULL, master.addon_id, phrase.addon_id) AS addon_id

And this in SQLite:

SQL:
SELECT IIF(master.phrase_id IS NOT NULL, master.addon_id, phrase.addon_id) AS addon_id

Or you can use:

PHP:
$query->getTimestampFunction('log_date')

Which returns:

SQL:
UNIX_TIMESTAMP('log_date')

Or:

SQL:
UNIXEPOCH('log_date')

You get the idea.
 
But as finders and the query builder are composable as they are, you could always do (pseudo code)
Yeah, but that's kinda ugly and I'd like to avoid such a mess ;)

If you have any specific examples you might be concerned about, I’ll be able to comment or provide an example that works, or it’s something we can consider adding explicit support for.
Some things I thought about are
  1. JSON_CONTAINS() and JSON_EXTRACT()
  2. INET6_ATON() / INET6_NTOA()
  3. CONVERT()
  4. REGEXP() / RLIKE()
  5. FIND_IN_SET()
  6. RAND()
There is probably more, but I'll have to check our codebase to be sure.
 
That's great news :)

I hope it's on the radar (or at least not already too late for 2.4) to add a generic logging facility.
Not being able to properly log system status is often a quite significant PITA.

Yes, this would be good.

I started down this path quite a long time ago - implemented an addon which adds Monolog logging support, but in its current form it's mostly just useful for addon developers and doesn't really add much to the core itself.

I do have plans to expand the functionality of this addon - but support for Monolog in the core would be a very welcome addition.
 
Yeah, but that's kinda ugly and I'd like to avoid such a mess ;)
Same, don't worry :)

JSON_CONTAINS() and JSON_EXTRACT()
We don't currently have JSON support though this is on our list and absolutely a logical progression.

The cool thing about, e.g. REGEXP (and will likely help with, e.g. IP/RLIKE etc.) is that can be implemented with user defined functions.

Here's how we added REGEXP support to SQLite:

PHP:
$pdo->sqliteCreateFunction('regexp', function ($pattern, $value)
{
    return preg_match('/' . str_replace('/', '\\/', $pattern) . '/i', $value);
}, 2);

So for the TagRepository we didn't actually have to make any changes to support anything:

PHP:
$query->whereLike('tag_url', "$urlVersion-%")
    ->where('tag_url', 'REGEXP', "^{$urlVersion}-[0-9]+\$");

This might need changes down the line depending on support in other dialects.

orderByRand exists on the query builder (and is proxied to via orderRandom on the Finder) but this is defined in each grammar so we get ORDER BY RAND(<seed>) in MySQL as now but ORDER BY RANDOM(<seed>) in SQLite.

Adding support for additional features and grammar differences hasn't been too challenging at this point.

The most complicated thing to get working so far was full-text search for SQLite.
 
We don't currently have JSON support though this is on our list and absolutely a logical progression.
There is also JSON_VALUE() which behaves differently than JSON_EXTRACT(). MySQL didn't implement JSON_VALUE() until v8.0.21, just to be fun.

My Content Ratings add-on, uses JSON_VALUE/JSON_EXTRACT with JSON_SET to atomically update a per-user json cache of reaction counts by some delta. Without needing todo a fetch to php, json decode, update, json encode, write to sql in a transaction.
 
No more or less than currently. There are definitely much better tools though.
Yes indeed, Linux and Apache is a great combination. However, I used it to minimise my learning curve for hosting a website (I started from scratch, literally knowing nothing about it) since it's got a good GUI for almost everything. While I'm pretty familiar with a command line from my time programming 35+ years* ago, faffing around learning all the commands and their options for everything isn't something that I want to do nowadays, so I used IIS for convenience.

*Such a depressingly long time ago, where did it go? I can't find it behind the sofa for sure, sigh.
 
[..]After nearly 8 years since the release of XenForo 2.0, many of the technologies we use are showing their age[..]

You really want to say it took you 8 years to realize this? 8 years where no one seems to have taken enough care looking for new/improved dependencies? 8 years where you didn't check the maintenance status?

What kind of excuse is this?
Most companies, even open source projects, can maintain their products and develop a new major version on the side from the ground up.

Even SMF managed to do it. They are slow as well, but hey, it is a free and open source project where people dedicate their spare time to it.

XenForo is a company. Your development speed shouldn't be like the one of an open source platform.

If it is too much work for the current team, then you should use the money you generate month by month and hire new people. Thats how economy of scale works.

Right now it rightfully feels like you guys just run a cash grab with the cloud service, drop a version here and there so people renew their licenses and live life.

It is a very harsh critique from my side, but the lack of progress throughout all these recent releases speaks volumes in the eyes of long term customers. Particularly those with old and large communities.
 
[..]After nearly 8 years since the release of XenForo 2.0, many of the technologies we use are showing their age[..]

You really want to say it took you 8 years to realize this? 8 years where no one seems to have taken enough care looking for new/improved dependencies? 8 years where you didn't check the maintenance status?
You are misrepresenting what I said.

It didn't "take us 8 years" to realise anything. 8 years ago, the framework was as strong as it could be. It was literally brand new, written from the ground up. It's also not about dependencies. The third party dependencies we use are minimal, and have evolved many times over the years, switching out mail libraries, upgrading HTTP clients, for example. Every release we update our third party dependencies to the latest versions. Every year we often have to patch them ourselves to ensure they still work with our minimum PHP version requirements while ensuring they also work with the latest PHP version.

All I am saying that it has been 8 years since the release of 2.0 and parts of the framework which we built from scratch needs slightly more significant iteration to keep up with the kind of developer experience people who use PHP frameworks such as Laravel and Symfony have come to expect.

There's nothing wrong with what we have today, but improvements are coming and that's not a bad thing?

Right now it rightfully feels like you guys just run a cash grab with the cloud service, drop a version here and there so people renew their licenses and live life.
Ridiculous.

It is a very harsh critique from my side, but the lack of progress throughout all these recent releases speaks volumes in the eyes of long term customers. Particularly those with old and large communities.
Funny how the majority of customers in that category are absolutely fine, don't post here and don't complain to us or outright accuse us of a "cash grab". They just get on with running their forums because they're happy with what they have today and they're doing a great job running successful communities with what they have.

Please do feel free to take your business elsewhere, if this is how you feel.

And you people wonder why we don't bother communicating on this forum anymore.
 

We can't keep up!

Is XenForo planning to hire additional development staff like Project Manager, Developers, Quality Assurance engineers, SEO specialist, UX/UI designer, etc?

It seems to me that the loss of @Mike as lead developer and founder, has somewhat been replaced by (obviously great) new staff, but we are still somewhat stuck in the mud, considering the faster and faster changing technical realities. It seems to me that the way to success is to hire significantly more talent to allow for faster development and fast regular feature releases and not having to switch between feature development and bug releases. Not to mention reviving the comatose addon products or even adding new ones.
 
Last edited:
Yay! I am excited! Hope to see 2.4 bridges some of the gaps for the new internet era we are in.

So glad to see this announcement so short after release of 2.3. Anyone who programs and codes something as significant as forum software understands what a tremendous undertaking this is. I can only imagine what you guys have cooked up. The internet is evolving. Forums are making a comeback. Cheers.

Edited to Add: Everyone does love to complain don't they? Lol. You would think as forum owners there would be more understanding.
 
It is a very harsh critique from my side, but the lack of progress throughout all these recent releases speaks volumes in the eyes of long term customers. Particularly those with old and large communities.
This doesn't make any sense, on multiple levels.

First of all, very old and large communities are never the first to upgrade to new major or minor versions (major version being 2.x to 3.x, and minor version being 2.0.x to 2.1.x) as they will be significantly customised, either soft-locking them (read: time & effort) or hard-locking them (read: vital customisations not being offered by the vendor for the new version).

Secondly, very old and large communities also don't like frequent patch releases (patch release being 2.0.0 to 2.0.1) as it involves closing the site, taking backups, testing the restoration of the backup, then performing the upgrade. Or, if they're extra careful, cloning the site and performing the upgrade there.

There's a reason why XF tends to collect more bugfixes into one version as opposed to releasing a new version every time they find a new bug. I wonder, could it possibly be because they have analysed their own dataset of how frequently people are willing to upgrade to new versions? 🤔

People who know what they are doing value stability. There's a reason all enterprise-grade software offer LTS (Long-Term Support) versions.

It is a very harsh critique from my side, but you might want to stop and think a bit more before posting.
 
First of all, very old and large communities are never the first to upgrade to new major or minor versions (major version being 2.x to 3.x, and minor version being 2.0.x to 2.1.x) as they will be significantly customised, either soft-locking them (read: time & effort) or hard-locking them (read: vital customisations not being offered by the vendor for the new version).

Secondly, very old and large communities also don't like frequent patch releases (patch release being 2.0.0 to 2.0.1) as it involves closing the site, taking backups, testing the restoration of the backup, then performing the upgrade. Or, if they're extra careful, cloning the site and performing the upgrade there.
I can attest to this and many times the pain is not worth it. I just upgraded from 2.2 to 2.3 and see no practical difference and all I got for it was a bunch of my custom plugins and style breaking, costing me hundreds of dollars to fix. Unfortuantely I see there is a new editor on the way and those were the plugins that broke from 2.2 to 2.3 and now I'll have to get the plugins rewritten again. I may just not upgrade for a few years and wait for 3. Something I think the devs should be paying attention to is what is happening at Discourse. Their roadmap has been great and have AI integrated into everything.
 
Chances are a beta TipTap may be more stable than a released Froala.
It would be great if backspace and emoji inserts worked correctly in Froala, but alas :P

I am also quite excited for TipTap, even if it means learning a fourth editor API to create my custom [CHARGE] BBCode. First the vB3 editor, then CKEditor, then the XF1 editor, then Froala...

Here We Go Again Gta GIF by Camjaysmith
 
Back
Top Bottom