2024-06-23, 04:26 PM
Following the general template conversion to Twig, the new theming system began taking shape across our platforms: from its scope and high-level goals on the Forums, to minutiae in the Discord server, specification in design documents, and code in Pull Requests and Issues on GitHub — in addition to other improvements in the series. In this thread, we'll review a number of puzzle pieces that come together to outline the experience coming in MyBB 1.9.
- The internal code of the 1.9 theme system was merged.
The new implementation revolves around JSON-based Extension metadata, inheritance resolution, Twig interaction, and asset management. The SCSS-based stylesheets and Templates of the Base Theme are now handled by the system.
The integrated, and upcoming features are described in the updated specification document (sections for some details are collapsed for ease of reading).
We also keep an eye on features coming to web browsers that may boost performance and expand MyBB's built-in customization. In particular, browser support for nesting, variables, and additional functions in CSS would enable Themes to use modern code without the overhead of an SCSS compiler, and reduce the amount of logic necessary to pass values from the DOM to stylesheets.
Notably, with Templates handled as files and compiled to PHP code, further optimization will be possible with opcache.
- A resource versioning logic scheme was prepared for the Extension system.
As MyBB aims to make the Extension authoring experience easier, starting with improving Theme updates and version management, we looked into how changes would propagate through inherited Themes to make sure nothing gets left out by accident (which can otherwise break functionality after upgrading).
The system will be able to link Extensions in the ancestry line according to explicit declarations and fallback metadata, ensuring their authors' ability to apply upstream changes across Extensions.
- The modification & data sharing API design was completed.
The feature adds support for Theme modification instructions — declared in Plugin Packages, and handled by the Extension system. This mirrors and builds upon existing options in the core and helper libraries, offering more in-built tools to adjust Themes for activated Plugins, and to reliably restore original content.
The data sharing functionality — available to authors from Plugins' PHP code — adds shortcuts to manage custom variables in Twig templates (and, eventually, scripts and stylesheets). In conjunction with the asset management system, the API will aid in the planned phase-out of inline assets in the future to improve security.
- A 1.9 Admin CP Theme was introduced.
The update joins overall visual updates in the new series, matching the front-end design and refreshed branding. The Admin CP is also one of the candidates for future contained refactoring (similar to the installation process), with other sections now finished and maturing.
- The minimum requirements were updated to PHP ≥ 8.2.
If you contributed to MyBB 1.8, you likely noted that some code needed adjustments for old PHP versions. This resulted from the time elapsed since the last requirements bump, which happens with a new series release. MyBB 1.9 allows us to once again keep the range short, sweet, and reasonable, thus avoiding over-stretching of resources and improving code quality.
The bump also brings us in line with requirements for Twig 4 and components from Laravel 11 and Symfony 7.
We expect similar bumps for database engines and servers to modern versions, which will altogether permit us to shed fallback code that covers old software.
- The Security Log feature was implemented.
Pages previously known from the plugin will be available out-of-the-box, bringing storage and monitoring to users and administrators, who will be able to keep an eye on failed login attempts and other security-related events.
- A new, global debug mode was added.
The modernized page comes with more detailed measurements, stack traces for database queries, and additional system details. The View domain also populates information about ancestry resolution, Asset compilation, Template generation, and Twig's profiler output.
The debug display is now also usable in the Admin CP.
- MyBB 1.9 includes new web- & CLI-based installation and upgrading.
The setup process is made more straight-forward for regular use, skips unnecessary details to speed up development, and opens the door for various PHP- and client line-based automation. In addition, new error and closed pages were introduced.
You can read more about how the new OOBE and CLI parts came to be in the MyBB Blog post.
- Several quick-start methods are now available to run MyBB 1.9.
The new CLI tool is used in MyBB's Docker Compose stack and GitHub Codespaces configurations, letting contributors set up new instances without manual installation.
Additionally, a complete installable package with dependencies is now generated, making it easy to get the new branch up and running by webmasters and developers — in experience similar to MyBB ≤ 1.8.
- The next key steps revolve around completing the View system's integration and UI.
This includes a database layer for Themes — handling default and user- & forum-specific Theme selection; and Theme management interface in the Admin CP.
With Extensions playing an important role in our ecosystem, a foundation for the Theme modification API is also on the horizon, bringing MyBB 1.9 over the threshold of feature parity with MyBB ≤ 1.8. More advanced features taking advantage of all data available in the View system, and interfaces for options managed through JSON declarations, may also be added in the 1.9.x line.
One of the work areas in the final stretch before the series' first version will cover a number of housekeeping issues related to the release process, and the MyBB.com platform.
Finally, with a new set of templates, code regions, and miscellaneous tweaks, we expect various stability and performance corrections — therefore, the release timeline will be impacted by the Community effort to monitor the upcoming branch from a quality perspective, track any remaining work, and start getting the new series ready for a stable release.