Today we are pleased to share our plan for the Joomla! 3.8 release and we would like your help in getting ready for the release.
Joomla! 3.8 will have two primary major features: the new routing system and the beginning of a forward compatibility layer with Joomla! 4.0.
A project that has taken years to complete, the new routing system will finally be available to users in Joomla! 3.8. The router defines a new and more flexible interface for developers to handle creating and processing URLs and gives end users more options as it relates to how URLs are displayed (including the often requested ability to remove content item IDs from the URL). In this release, for the components which support the new router (Content, Contact, Users, and Newsfeeds), it is possible to set up the router to run in one of three different configurations: the current routing system (which will remain the default behavior for new installations and the option that will be generally recommended for existing sites when upgrading), the new routing system, and the new routing system with content item IDs removed.
For users eager to upgrade to the new routing system, there are some things to take into consideration. The new system is not 100% backward compatible with the existing router, there are some well known quirks with how URLs are generated and processed and those quirks will not exist in the new system. To demonstrate the changes, here are two pages from the testing sample data set with each of the routing configurations.
Animals Photo Gallery Category Page:
- Existing router:
- New router with IDs:
- New router without IDs:
Koala Article Page:
- Existing router:
- New router with IDs:
- New router without IDs:
As demonstrated, there are cases where changing the routing system can change a page’s URL and cause an existing page to give a 404 response. At GitHub, issue #14848 is open to discuss ideas for a migration plan to keep old URLs working to some extent. Additional discussion on this is welcome and encouraged.
Joomla! 4.0 Compatibility Layer
In Joomla! 4.0, the core architecture will be supporting and largely using namespaced PHP code. To add compatibility with the new namespaced classes in our libraries directory, starting in 3.8 the majority of the library classes now use the namespaced class names and the existing class names are still supported through the use of class aliases (something we have been doing since 3.3). Support for the old class names will be present until 5.0, but backporting this work enables developers to start using some Joomla! 4 concepts in their Joomla! 3 extensions.
As part of this change, the update to 3.8 will be a bit more resource intensive than normal. During a core update, when a file is moved or deleted in our package, there is an update step which removes the old version of the file from your site. The majority of the files in the libraries/cms and libraries/legacy directories have been moved to a new libraries/src directory, so the update to 3.8 will mean that most of the files in these two directories will also have to be deleted as part of the update process.
Although our main focus for 3.8 is on these two major features, we will also evaluate other feature proposals and consider them for this release. We have already highlighted several open items on our 3.8 General project board on GitHub we would consider “nice to have” in this release if the work is complete before feature freeze. There are also many other feature proposals which can be found with the New Feature label on GitHub which either require testing and review from our community or are feature requests from community members and require a developer to write code to implement.
Presently, our plan is to release the first 3.8 beta during the week of July 24 and to publish the stable release during the first half of September. We will have a feature freeze on July 14, which means that all new feature proposals must be tested and either in a “ready to commit” state or already merged to be included in the release. As always, these timelines are subject to change based on a wide variety of issues and concerns. The most up-to-date information regarding this timeline can be found in our project roadmap.
How Can I Help?
To help ensure the 3.8 release and our major features are “production ready”, we need your help with additional testing of these features to ensure they meet user expectations and that there are no unexpected issues. Here are some general guidelines for testing the 3.8 release.
Upgrading a Site
To upgrade an existing website to 3.8, a backup of your site should be taken and moved to a testing/development area. Once you’ve restored your backup to your testing area, you can upgrade to 3.8 by either downloading the upgrade package from our nightly builds page and upload the package using the “Upload & Update” area in our Joomla! Update component or by setting the update channel to the custom URL noted in the 3.8 release area.
Testing the Namespaced Classes
A potential concern with this upgrade is the number of files that will have to be deleted during the update process. Our Bug Squad and Release Teams will continue testing this aspect of the 3.8 upgrade with their own systems, however getting feedback from more users would be very beneficial to us.
Testing the New Router
Once upgraded to 3.8, users who are interested in using the new router on existing sites are welcome to enable the router in each component’s configuration. Prior to enabling the router, we suggest crawling your site and generating a list of URLs that are currently active and valid on your site and repeating this step after enabling the router. In a majority of cases, when IDs are not removed from URLs there should be no changes. In our internal testing and review, we have found that URLs which do change are for category and item paths nested under a menu item (similar to the examples shown earlier), but items that are either set as a menu item or a direct child of a menu item (i.e. an article under a category menu item) should not change. When reviewing your sites with the new router enabled, if you find that certain URLs and configurations are broken, we ask that you open an issue on GitHub so this can be reviewed to determine if it is an expected change in behavior or a possible issue in the new code; when filing an issue, please provide specific details as much as practical (such as the old and new URLs, whether the site is multilingual, and the menu item configuration for the menu item that page is under).