24 March 2021

Your Joomla sites may have multiple versions of FOF and FEF installed. This article explains what they are and what you should do with them.

We develop and publish a backend framework called FOF (Framework-On-Framework). You may find that your Joomla site has one or more versions of the FOF framework installed, all of the attributed to Akeeba Ltd. However, not all versions of FOF are part of our software. FOF is a generic backend framework which is used by third party developers, including Joomla itself.

Further to that, we develop and publish a front-end framework called FEF (Akeeba Front-End Framework). This is the common CSS and JavaScript for all of our extensions.

Below you will find all the different versions of FOF and FEF you might see on your site, as well as information about their updates.

FOF 2.x

Extensions, Manage name: FOF

Extensions, Manage type: Library

Folder on your site: libraries/fof (f oh f)

This is a very old version of FOF we stopped developing in May 2015 and has been End of Life since June 2016. You will see that this is a protected extension. It is part of Joomla 3 and used for its Two Factor Authentication and Post-update Messages features. Do not remove it, you will break your site.

FOF 2.x – Alternate version

Extensions, Manage name: F0F (NEW) DO NOT REMOVE (note: this reads f zero f)

Extensions, Manage type: Library

Folder on your site: libraries/f0f (f zero f)

This is also a very old version of FOF we stopped developing in May 2015 and has been End of Life since June 2016. We have not been using it in our software since mid-2015. However, third party software may still be using it! We are aware of at least two commercial extensions still using this out of date framework.

Always make a copy of the libraries/f0f folder before trying to remove it. If something breaks on your site please restore that folder.

FOF 3.x — Older version

Extensions, Manage name: FOF30

Extensions, Manage type: Library

Folder on your site: libraries/fof30

This is an older version of FOF version 3. It was eventually replaced by a File extension which installs in the same folder.

You can uninstall it but there's a caveat. If you have the file_fof30 extension installed you will need to follow some extra steps before and after the uninstallation. First, make a copy of your libraries/fof30 folder. Then uninstall the FOF30 library extension. Finally, restore the libraries/fof30 folder from the copy you had made.

FOF 3.x — Newer version

Extensions, Manage name: file_fof30

Extensions, Manage type: File

Folder on your site: libraries/fof30

This is the previous version of FOF version 3. It's deprecated since March 2nd, 2021 and will become End of Life on December 31st, 2021. We have stopped using it in our software published since March 2nd, 2021.

Even though we no longer use it, it's possible that third party extensions use it. Before trying to uninstall it please take a copy of the libraries/fof30 folder. If your site breaks after uninstalling it restore the libraries/fof30 folder from your copy.

Please note that it might refuse to uninstall itself if extensions are still marked as dependent on it — this may or may not be correctly detected. If this is the case please do not try to uninstall it manually and do not delete its folder. After December 31st, 2021 we will publish a final update which will automatically remove FOF 3.x. If you have any old Akeeba extensions please update them. If you have any third party extensions using FOF 3 please ask their developers to update them before December 31st, 2021.

FOF 4

Extensions, Manage name: file_fof40

Extensions, Manage type: File

Folder on your site: libraries/fof40

This is the current version of FOF, version 4. Its first version was released March 2nd, 2021 and is used by our extensions published on or after that date.

Do not try to uninstall it or delete its folder. It will be automatically uninstalled when it's no longer needed.

FEF

Extensions, Manage name: file_fef

Extensions, Manage type: File

Folder on your site: media/fef

This is the front-end (CSS and JavaScript) framework we use in our extensions. We do not allow anyone else to use it and we do not expect that any third party developer uses it.

Do not try to uninstall it or delete its folder. It will be automatically uninstalled when it's no longer needed.

Updates to FOF and FEF

In the past we only included FOF and FEF in our extensions, meaning that the only way to update them was to install our software. However, this created an obvious problem. If we discovered an issue that was addressed in all of our software by making a change in either framework (FOF or FEF) we'd have to release a new version of all of our extensions. In an effort to address this issue we are now publishing updates to FOF and FEF themselves.

If you see that an update to FOF or FEF is available, please install it. It will address some issue we discovered after the last release of our extensions.

Since FEF and FOF are still included with our software you will see that the updates to FOF and FEF may disappear when you install a new version of our extensions. This is perfectly normal and exactly how Joomla is supposed to work. Joomla compares the currently installed version of FOF and FEF to the latest version available on our site that's compatible with your Joomla version. If they differ, it shows an update is available. Our extensions, however, include the latest FOF and FEF version available at the time of their release. Therefore, when you install a new version of our extensions you are also updating FOF and FEF. Joomla sees the new FOF and FEF versions and stops displaying an update available for them.

If unsure, always install the updates to our extensions before the updates to FOF and FEF.

Future versions and Joomla 4

FOF and FEF were created out of necessity. Joomla 1.5, 1.6, 1.7, 2.5 and 3.x were missing a lot of features we needed to publish software that is compatible with a wide variety of Joomla and PHP versions or even basic features which would make publishing complex software easier to manage. This was particularly true in 2011 — ten years ago! — when the first version of FOF was published. There was also a misguided hope that the Joomla community would appreciate a rapid application development solution, something which was initially embraced by and immediately undermined by the Joomla project itself with a short six months. The latter point meant that any further development of FOF was treated as the red-headed step child by the Joomla leadership which has led to a lot of grief. But that's another story for another time.

In any case, several things have changed in the last decade we've been publishing FOF.

First of all, we decided that trying to support a very wide range of PHP and Joomla versions was a fool's errand. This is backed up by the usage stats we've been collecting since 2014 which indicate that 95% of our clients are using the latest version of Joomla and 90% are using a version of PHP which is either currently supported by the PHP project or has been End of Life for less than 6 months. This means that any extra effort spent to support the long tail of 5% to 10% of users who will never upgrade — who also appear to be overwhelmingly using older versions of our software — makes no sense.

The second point is that a lot of the innovations introduced in various versions of FOF were included into Joomla itself in one form or another, with the exception of a database model that supports relations between objects (i.e. there's nothing that looks like an ORM). Our experience is that the features which were introduced are critical to the maintenance of complex software and while the lack of ORM is a bummer it's not something that cannot be worked around. We certainly managed to publish our own software without an ORM before 2015 and it wasn't much less complex than it is now.

The third point is that the core MVC, JavaScript and CSS in Joomla 4 no longer sucks. We can address the few minor remaining issues with very little code using PHP Traits — something that was impossible when FOF 1, 2 and 3 was released since we were still trying to support PHP versions older than 5.4 which did not support Traits. This was the single major reason for having FOF in the first place and a major driving force behind us dropping support for older PHP versions. In simple terms, newer versions of PHP allow us to work around Joomla's omissions or mildly problematic design choices by writing a few hundred lines of code instead of maintaining an entire framework that's several dozens of thousands of lines long. Less code means less maintenance, less bugs and faster responses.

All of that made us think that we should reimplement our software using core MVC, JavaScript and CSS for Joomla 4 only — Joomla 3 still lacks several features we need to maintain complex software without being driven insane. We are already working on Akeeba Backup and it looks not just possible but actually quite efficient! Moving our extensions to use core code would make them smaller, it would remove the confusion surrounding FOF versions and the confusion about which parts of the installation and update process are handled by Joomla and which are handled by our code (spoiler alert: it's always been Joomla...). The only caveat is that these new versions of our software will only work on Joomla 4 and will be incompatible with Joomla 3. Therefore we will have two versions of our software available for a short period of time, one for Joomla 3 and one for Joomla 4. More on that below.

This is a long process. We have started work on Akeeba Backup and Admin Tools, intending to publish alphas and betas over the next few months. We expect a stable version of these two extensions for Joomla 4 only to be released around Q4 2021, assuming that Joomla 4 will have released a stable version of its own by then. Once there is a stable version of Joomla 4, Akeeba Backup 9 and Admin Tools 7 we will focus development of new features on these versions of our software. The older versions for Joomla 3 (Akeeba Backup 8 and Admin Tools 6) will still be around but they will be in maintenance mode, just like Joomla 3.10. That is to say we will be fixing bugs and security issues but not introducing any new features or working on supporting new PHP versions. These changes will only be made to the Joomla 4 specific versions.

But what about the here and now, you ask. Well, the current versions of all of our extensions are already compatible with Joomla 4. If you want to use Joomla 4 — even though it's still in beta — you can still use Akeeba Backup 8, Admin Tools 6 and Akeeba Ticket System 4. When the new versions come out we will make sure there is a migration path from the older versions to the new ones.

We will eventually migrate all of our other extensions to core Joomla code and discontinue FOF and FEF. We expect that to be a long process that keeps us busy over the next two to three years — we have quite a lot of extensions! This is why we're sharing this news with you. FEF 2 and FOF 4 are the last version families of these frameworks, our intention being to discontinue them over the next few years in favour of core code. They have served us well over the last decade but it's time to let them go.