After an extended period of silence, the Production Leadership Team is happy to announce that we are moving forward with planning, preparing, and ultimately releasing version 2 of the Joomla! Framework. Over the last several weeks, we have begun building a roadmap and vision for the next major version of the Framework and are now ready to share with the community for review and feedback.

General Goals

Relicensed to LGPL

As voted upon and announced last March, version 2 of the Joomla! Framework will be distributed under the LGPL. At present the DateTime package, a GSoC 2014 contribution, has been released under the LGPL and the Keychain package has been relicensed in the 2.0-dev branch (but not yet released).

Consolidated Code Repository

Presently, the over 30 packages which make up the framework are individually managed as separate repositories within a single GitHub organization. We will be looking at the possibility to reintegrate the full framework stack into a single repository while continuing to utilize the individual repositories to publish each package individually.

Documentation

Documentation for the Framework generally consists of notes placed in each package’s README file, with some packages not having any documentation at all. We aim to complete documentation for each of the Framework’s packages and consolidate it into a single location.

Minimum Supported PHP Version

Framework v1 was released with a minimum requirement of PHP 5.3.10. We will be analyzing our own requirements as well as market trends to determine a minimum supported PHP version for version 2.

Path Constants

Many packages in Framework v1 have a requirement for a JPATH_ROOT path constant. These path constants will be removed in version 2.

Package Specific Goals

Cache

The Cache package is based on a very old version of the PHP-FIG proposed Cache PSR. For version 2, the package should be refactored to implement the current version of the proposed cache PSR or remove references to the PSR.

Database

The existing database package creates an abstraction layer to multiple database platforms for building and executing queries but is missing tools such as the ability to manage database schemas. For version 2, we are looking at possibilities for creating additional tools to cover missing features or potentially consuming a third party database system.

Filesystem

Much of the Filesystem package still follows a procedural based API. In version 2, these classes will be refactored to utilize an object-oriented API. Additionally, we will research expanding the package’s use to potentially support cloud storage operations.

Form

There is a consensus among the Framework team and PLT that the Form package in its present state is somewhat limited in terms of functionality and expandability. We will be looking at ways we can improve the Form package to address these major shortcomings.

HTTP

In version 2, we aim to improve the extendability of the package’s classes through refinements in the internal APIs, mainly within the HttpFactory class itself. The Response class will also be expanded on for additional functionality and potential compatibility with third party systems.

Language

Version 2 of the language package will be refactored to utilize an object oriented API in places where it does not in version 1. The _QQ_ constant for quoting strings will also be removed. As well, we will research expanding the Language package to support additional file formats for language files.

Log

The Log package will not be carried forward to version 2 in part because of its incompatibility with the PSR Logging interface. We recommend using other dedicated logging tools such as Monolog in its place.

Registry

The Registry package contains several classes which assist in reading data from different file types and converting it into a Registry object, or exporting data to the filesystem. We see that these classes have potential use cases beyond the Registry package and may extract them into a separate package to expand their use.

Router

A refactored router has been written for version 2.

Session

The Session package was previously deprecated with plans to discontinue it at version 2. However, the Framework team and PLT are reconsidering this decision and may update the package.

View

The View package will be refactored with an expanded API for version 2. In addition, expanded HTML rendering support is planned via a separate Renderer package which creates a common interface to various PHP templating engines.

Third Party API packages

The Framework contains several packages for integrating with third party APIs to include Facebook, GitHub, and Mediawiki. These packages will be updated for the latest changes in their upstream platforms and additional API coverage added as appropriate. In addition, we may refactor these packages to create a common API for our connector packages with each package implementing platform specific features.

Discussion

Although there are already several ideas and goals in place, these only represent the ideas of a small number of individuals. We welcome feedback and discussion on this initial list, in addition to other ideas for ways the Framework can be improved in its next major release. If you would like to comment on this proposal, we invite you to participate on this thread on the Framework's Google Group.