TYPO3 Version 10 Roadmap
Version | Focus of development | Release date |
---|---|---|
10.0 | Paving the way for new concepts and APIs, necessary changes | 23.07.2019 |
10.1 | Improvements in routing, site handling V2 | 01.10.2019 |
10.2 | Improvements in the rendering engine and Fluid | 03.12.2019 |
10.3 | Feature Freeze (no more new features will be added, stability improvements, bug fixes, etc.) | 25.02.2020 |
10.4 | Release of the LTS version | 21.04.2020 |
Version 10.0 (sprint release, published on 23.07.2019)
Version 10.0, the first sprint release on the way to version 10 LTS, was published on 23.07.2019.
As the focus of version 10.0 is on "clean-up work", a large number of changes have been made in this release. This makes it possible to introduce new libraries, modern concepts and optimized APIs at an early stage of development.
What is planned for version 10?
Ambitious and important goals have been set for TYPO3 v10 LTS. The following improvements are at the top of the list and will continue to evolve in all upcoming sprint releases:
- Enable TYPO3 integrators to easily configure the system
- Allow TYPO3 editors, administrators and extension developers to benefit from best practices
- Use stable and established standards and PHP packages to achieve stable APIs throughout the TYPO3 core
- Make daily work with TYPO3 even more enjoyable
The most important changes in version 10.0
As version 10.0 is the first version of the v10 series, its main purpose is to get rid of features that are considered obsolete or have been kept for legacy reasons.
In TYPO3 9, new concepts and methods were introduced that have proven to be successful. Now the focus is on removing the legacy layer and stabilizing the new APIs. In addition, new concepts were introduced in version 10.0, which will be further improved in the subsequent sprint releases of the TYPO3 10 series.
Site handling
TYPO3 9 LTS introduces native site handling - the basis for URL handling as well as multi-site and multi-language functionalities.
TYPO3 9 still allows integrators to use sys_domain records (the old method of a multi-domain setup). This compatibility has been removed and the setup of a site configuration is now mandatory in v10.0. TYPO3 integrators benefit from the numerous advantages of uniform and standardized website handling.
PHP class/property analysis
Extbase (the MVC framework used in TYPO3) enables core and extension developers to write functions for TYPO3 cleanly and consistently ("convention over configuration"). The analysis of user-defined PHP classes and their properties is a key function of Extbase. This task is now taken over by the PropertyInfo component of Symfony. Using a PHP package that is industry standard, well known and maintained by a large community ensures that this component of Extbase will remain state of the art for years to come.
New dependency injection
The above-mentioned goal of using robust and established standards and PHP packages throughout the TYPO3 core is also evident in another area of paramount importance: "Dependency Injection" (DI). This technique is used when an object provides the dependencies of another object. PHP objects that do not contain any state are referred to as services and are logically encapsulated in service containers.
By using Symfony's service container architecture, dependency management and dependency injection for PHP classes is taken to a new level. This approach aims to replace the Extbase Dependency Injection Container and the Object Manager, which means that in future GeneralUtility::makeInstance() can be dispensed with in order to obtain singletons and static methods such as getInstance().
Developers are advised to read the Symfony documentation and keep an eye on the PSR-11 initiative and its subtasks.
Event dispatcher
As already mentioned: TYPO3 version 10.0 is the perfect release to introduce new, modern technologies.
Hooks and the signal/slot concept is one of TYPO3's strengths. The latter makes it possible to add a signal to the core functionality and inform other components about a specific event. TYPO3 extension developers can use this technology and build on this core feature.
Event Dispatcher has been added to the TYPO3 core (clearly specified in PSR-14), which has the same API as the Zend Framework or Symfony's EventDispatcher component. "Events" will be added in the course of the next TYPO3 sprint releases and this technology is expected to replace hooks and signal/slots in the medium term.
Extension developers need not worry: Hooks and registered slots will remain as they are now and will work as before for the time being.
New "mailer" API
TYPO3 previously used the SwiftMailer library to create and send emails. However, active development has stagnated and it was decided to use another Symfony solution with a modern API: the "Mime" package for creating emails and the "Mailer" package for processing and sending them.
Both components are state-of-the-art and make it possible to generate HTML-based emails at various points in the core where previously only simple text emails were implemented.
System extensions outsourced
The previously included system extensions "RSA Authentication" (extension key rsaauth), "Task Center" (extension key taskcenter), "Actions" (extension key sys_action) and "Frontend Editing" (extension key fe_edit) have been moved to the TYPO3 public extension repository.
These extensions are kept up to date, but are no longer part of the TYPO3 support and maintenance guidelines that apply to the TYPO3 core.
Version 10.1 (Sprint Release, published on 01.10.2019)
On 01.10.2019 TYPO3 10.1 was published as another sprint release.
The new release received more than 250 Git commits (reviewed, tested and released source code changes) since the previous version 10.0, which was released 10 weeks ago. Although backend users won't see many obvious changes or significant new features as such, TYPO3 version 10.1 received a number of improvements under the hood.
Recognize conflicts in redirects
The Redirects backend module was introduced with TYPO3 9 and allows administrators to add and configure redirects.
The source path can be any name or it can be represented as a regular expression. This provides great functionality, but what if a redirect has the same name as a page URL? Such configuration errors can happen and TYPO3 offers a simple solution to detect conflicting redirects: a CLI command that displays a list of conflicts (if any). This command can also be configured as a scheduler task, and the results are displayed in the backend under "SYSTEM ➜ Reports".
URL path (slug) changes and redirects
Supporting backend users in their daily work and making TYPO3 as robust and user-friendly as possible have always been high on the list of TYPO3 developers.
Sometimes it is necessary to change the URL path of a page (the so-called "slug"), and backend users can easily do this in TYPO3 if they have the appropriate access rights.
However, such an action usually results in a "page not found" error when a website visitor tries to access a page using the old slug.
With TYPO3 version 10.1 there is now an intelligent solution: the relevant slugs for all subpages are automatically updated and redirects from the old to the new URL are created. Backend users are informed about these actions and can simply reset the changes with a click of a button.
Cache presets
As an enterprise content management system, TYPO3 is known for its ability to run very large websites and applications with ease. But small to medium-sized web projects running on shared hosting environments also use TYPO3 for a number of reasons. Two of these are performance and the ability to fine-tune almost every aspect of an installation.
By default, TYPO3's caching framework uses the database as the storage space for caching. However, various tests show that this is not the perfect and most performant configuration under certain circumstances. Depending on the environment and hosting setup, a cache stored in the file system is faster. Integrators and administrators can now configure the storage type for caches.
Standard action for file uploads
The default action when backend users upload files is now configurable.
In previous TYPO3 versions, the default is "Skip this file" when backend users try to upload an already existing file. This is of course the safest option, but with TYPO3 v10.1 you can reconfigure it, making the file upload functionality more flexible and user-friendly. The available options are "Replace", "Rename" and "Cancel".
Own file processors
Developers can now register their own file processors. This allows various operations to be applied to files uploaded by a backend user, for example: Adding watermarks to images, compressing uploaded files into a ZIP archive, saving a copy of a cropped image, transferring uploaded files to a second location, etc.
Notifications in the backend
"Notifications" are an essential element of the user interface. These are small boxes that sometimes appear in the top right corner of the TYPO3 backend and inform the user about certain events. This can be a notification of a successfully completed process, a warning that something unexpected has happened or an indication of a fatal error.
Buttons can now be added to these notifications, which can be used to trigger actions to execute JavaScript functions.
Cache dependency injection
Caching has always been an important factor in TYPO3 and is therefore constantly being improved. Symfony's Service Container was introduced in TYPO3 version 10.0 and now makes it possible to include cache objects directly and no longer via the CacheManager.
In other words, the TYPO3 core now makes all core caches available as dependency injection services and extension developers can now use this feature. To do this, you add the cache service to the "Configuration/Services.yaml" file and the dependency injection takes care of passing the cache to your class constructor. Since TYPO3 version 10.1, developers no longer need to use the "CacheManager".
You can find some code examples in the documentation.
Cleanup work
As with every other TYPO3 release, some functions have been simplified in TYPO3 version 10.1 and some old code fragments have been cleaned up. These include the well-known "jumpToUrl()". JavaScript function (which has been marked as "deprecated") and some JavaScript variables that will be removed in TYPO3 v11.
Some internal changes have also been made to the "RecordHistory" class and two new events have been added that are triggered when records are reset. This allows developers to access and manipulate data before and after a record history entry has been undone.
Are you still using the old XML format for your language files? To put it succinctly - migrate all your XML files to the XLIFF standard now! XLIFF was introduced with TYPO3 version 4.6 (almost 8 years ago!) and has been the recommended format for language files ever since. The use of XML for language files has been deprecated in TYPO3 version 10.1 and will no longer be supported in the near future. If you need a tool to convert XML language files, the extension EXT:ew_llxml2xliff by Sebastian Fischer might be helpful.
Security improvements
Any improvement that strengthens the security of a website and protects the privacy of its users is important, regardless of whether it is a major or minor change. From now on, all external links processed by TypoLink will have the tag attribute rel="noopener noreferrer" by default.
While the first value "noopener" instructs browsers to open the link and block access to the document containing the link, the second value "noreferrer" instructs browsers not to send any data about the origin in the HTTP header "Referer:".
Further changes and innovations
This was only a relatively small part of the changes and new features in version 10.1.
You can find a detailed list in the ChangeLog.
Version 10.2 (sprint release, published on 03.12.2019)
Fluid-based frontend registration form
System integrators use the Frontend Login (felogin) system extension to provide users with an easy way to log in and access protected areas of a website, including a password recovery feature.
However, it was cumbersome for integrators and developers to change the templates. While all other system extensions use the modern Fluid Templating Engine, Frontend Login was the only extension that was still based on "marker-based" templates.
TYPO3 v10.2 now includes an Extbase version of this frontend login functionality. This solution has several advantages:
- Easier changes to templates.
- HTML-based password recovery emails.
- Customization of validators possible to configure password restrictions.
The new Extbase plugin is now available for new installations. To avoid the loss of changes to existing TYPO3 instances during TYPO3 upgrades, old templates will continue to be used by default (the Extbase version can be explicitly activated via the "Feature toggles").
System extension "form"
Based on the experience and feedback from the community over the last few months, several improvements have been made to the Form system extension.
These changes affect editors as well as integrators and developers. Backend users benefit from an enhanced form creation wizard that supports navigation to previous steps and descriptive labels such as "Start" or "Finish" instead of the numerical display "Step x of y".
Integrators benefit from an optimized setup (only one general configuration file "FormSetup.yaml" is used) and an optimized configuration structure.
Site configuration
The website title is now defined via the Site Configiration module. This means that the title can also be easily adapted per language in multilingual websites.
The title field in the template (sys_template) has been marked as "deprecated" and will no longer be available in TYPO3 11.
No more broken links with the Link Validator
TYPO3's Link Validator is configured as a scheduler task and aims to detect broken links throughout the system. This function has been further extended and now supports pages, files and even external links. External links can now also be validated on-the-fly.
Further changes
As always, a lot more has happened under the hood, which is particularly relevant for core and extension developers.
All changes are again summarized in the "What's new" PDF, which you can download from the TYPO3 website.
Version 10.3 (sprint release, published on 25.02.2020)
Important changes
lockIP setting deactivated by default
The default value for the lockIP settings has been changed to "disabled". This affects the following four settings:
- FE->lockIP
- FE->lockIPv6
- BE->lockIP
- BE->lockIPv6
Although the setting is actually intended to increase security, there are some use cases where its use leads to problems, such as suddenly logging out of the backend. Especially when using ipV4 and ipV6, it can be problematic if the user's IP address suddenly changes.
New translation server
Work on the new translation server has been completed so that it is used by default.
The SaaS solution Crowdin is used to make the localization of the TYPO3 core and all involved extensions as easy as possible for everyone.
If you are interested in improving the localization, register at crowdin.com and suggest translations to the official TYPO3 project, which can be found at crowdin.com/project/typo3-cms.
The documentation about the integration is part of the official TYPO3 documentation and
is available at docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Internationalization/TranslationServer/Crowdin.html.
It also covers how to make your extension available to Crowdin as a developer.
Only import files with the extension .typoscript
With the new @import method, you can also import entire directories in TypoScript. Previously, however, all files in the respective directory were imported, regardless of the file extension.
The new behavior only takes into account files with the extension .typoscript.
If you also want to import files with other extensions (e.g. *.ts, *.txt etc.), you must specify this explicitly.
New features
SEO and social media fields in the info module
There are two new areas in the info backend module (SEO and Social Media) where you can display an overview of the corresponding fields.
Asset collector for JavaScript and CSS
The new asset collectors, which can be used as view helpers in the Fluidtemplate or via PHP, can be used to integrate CSS and JavaScript in a modular way. For example, CSS and JS files for custom content elements can only be loaded if these content elements are actually used on a page (keyword: web components). The "identifier" parameter ensures that the integration is not carried out more than once.
Example for fluid templates:
<f:asset.css identifier="identifier123" href="EXT:my_ext/Resources/Public/Css/foo.css" />
<f:asset.css identifier="identifier123">
.foo { color: black; }
</f:asset.css>
<f:asset.script identifier="identifier123" src="EXT:my_ext/Resources/Public/JavaScript/foo.js" />
<f:asset.script identifier="identifier123">
alert('hello world');
</f:asset.script>
Lazy loading for images
Browser-native lazy loading for images can be activated via a Fluid Styled Content constant. Many current browsers already support this.
Improved backend user module
The "Backend users" module now shows more details about TYPO3 administrators and editors:
- All assigned groups, including subgroups, are now evaluated
- All data that can be set in the backend user or an assigned group is now displayed, including the allowed page types
- Read and write access to tables
- A new "detail view" for a TYPO3 backend user has been added
The comparison of users is now more powerful. It is now easier for TYPO3 administrators to check backend user permissions without having to switch to the actual user.
View YAML configuration of forms
If forms are used via the "Form" system extension, their YAML configuration can be viewed in the "Configuration" backend module.
Dashboard
In the new "Dashboard" backend module, various information can be displayed to the user via so-called widgets. This can be, for example, the display of external RSS feeds, links to documentation, graphs on the number of errors in the system log and much more.
Some widgets are already supplied, it is also documented how you can create your own widgets and in the TER you will also find one or two extensions that provide new widgets.
Each backend user can create one or more customized dashboards with information that is important to them.
Improvements in the Extension Manager
The Extension Manager has two new filter functions to display only system or third-party extensions. The table of extensions can also be sorted according to various criteria by clicking on the column name.
Fluid-based system e-mails
Emails sent by TYPO3 (e.g. from the install tool) are now multipart emails and are based on fluid templates. The templates can therefore also be customized as desired, e.g. via a custom extension.
Further changes
Of course, there are many more changes and innovations in this version, especially under the hood, which is interesting and relevant for core and extension developers.
As usual, all changes can also be found in the official documentation: https: //docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/10.3/Index.html
Version 10.4 (LTS release, published on 21.04.2020)
On April 21, 2020, the time had finally come and TYPO3 10.4 LTS, the final version with Long Term Support (i.e. the regular supply of updates for 3 years), was released.
We show a few of the most interesting features here. A complete list is of course available at docs.typo3.org
New functions
Content Element Filter
A backend user can now search for a range of content types in the New Content Element wizard. When a user enters a search query, any content type whose title or description does not match the query will be hidden from the user. Since content types are grouped into tabs, tabs with no content will be disabled for the user. If the currently active tab becomes empty, the next available tab is activated.
"Forgot password" function for backend users
It is now possible for TYPO3 backend users who log in with the default username/password mechanism to reset their password by triggering an email via the login form.
The reset link will only be displayed if there is at least one user who meets the following criteria:
- The user has a previously entered password (used to indicate that no third party login has been used)
- The user has added a valid email address to their user record
- The user is neither deleted nor deactivated
- The email address is only used once among all backend users of the instance
Once the user has entered their email address, an email is sent with a link to set a new password, which must be at least 8 characters long.
The link is valid for 2 hours and a token is added to the link.
If the password is entered correctly, it will be updated for the user and they will be able to log in.
Some notes on security:
No reset function is provided for multiple users with the same e-mail address.
There is no built-in information sharing, i.e. if the e-mail address is not in the system, it is not visible to the outside world.
Only a maximum of three e-mails per e-mail address are permitted within 30 minutes.
The tokens are stored in the database for the backend users, but are hashed again just like the password
If a user has successfully logged in (e.g. because they have remembered the password), the token is removed from the database, rendering all existing email links invalid.
The function is activated by default and can be completely deactivated via the system-wide configuration option:
$GLOBALS['TYPO3_CONF_VARS']['BE']['passwordReset']
Optionally, it is possible to restrict this function to non-administrators only by setting the following system-wide option to "false".
$GLOBALS['TYPO3_CONF_VARS']['BE']['passwordResetForAdmins']
Both options can be configured in the Maintenance Area => Settings module or in the Install Tool, but can also be set manually via typo3conf/LocalConfiguration.php or typo3conf/AdditionalConfiguration.php.
It is also possible for administrators to reset a user's password. This is particularly useful for security reasons, so that an administrator does not have to send a user a password in plain text (e.g. by e-mail).
The administrator can use the CLI command:
./typo3/sysext/core/bin/typo3 backend:resetpassword https://www.example.com/typo3/ editor@example.com
where the URL to the backend and the user's email address must be specified:
backend:resetpassword <backendurl> <email>
Alternatively, it is possible for administrators to use the "Backend user" module and select the reset password button to initiate the process of resetting the password for a specific user.
Both options are only available for users who have set an email address and password.
Compare backend user groups
Integrators are now able to compare individual backend user groups. Backend user groups are used to divide permissions into smaller parts that can later be assigned to a backend user. With this function, it is possible to compare the defined authorizations including the authorizations inherited from subgroups.
Site settings as constants in TypoScript and TSconfig
Before TYPO3 v10.0 it was possible to insert information from the PageTSconfig into TypoScript constants with TSFE.constants.const1 = a.
This could be used to e.g. centralize the configuration of record storagePids, which could then be used in the backend for modules or for IRRE and for frontend plugins.
This old function has been removed as it was recommended to include site settings. However, the corresponding new feature that was added with TYPO3 v10 was reverted in v10.1.
This new implementation now allows site settings to be defined via config/sites/<site-name>/config.yaml.
The newly introduced settings within config.yaml are provided as TypoScript constants and Page TSconfig constants.
An example configuration in config/sites/<site-name>/config.yaml:
settings:
categoryPid: 658
styles:
content:
loginform:
pid: 23
This makes these constants available both in the TypoScript template and in PageTSconfig:
- {$categoryPid}
- {$styles.content.loginform.pid}
The newly introduced constants for PageTSconfig can be used just like constants in TypoScript.
They can be used in PageTSconfig as follows:
# store tx_ext_data records on the given storage page by default (e.g. through IRRE)
TCAdefaults.tx_ext_data.pid = {$categoryPid}
# load category selection for plugin from out dedicated storage page
TCEFORM.tt_content.pi_flexform.ext_pi1.sDEF.categories.PAGE_TSCONFIG_ID = {$categoryPid}
Obsolete functions and changes for developers/programmers
A number of functions have also been marked as deprecated, and there are a number of changes that are of particular interest to developers and programmers. Here we refer to the ChangeLog.
Stay informed about changes
There are several ways to stay informed about changes during the development of TYPO3 10 LTS.
One possibility is the Twitter account t3git_master, which automatically tweets all changes to the TYPO3 code, including a link to the corresponding commit message on Github, where you can then read details about the change.
However, the integrated upgrade documentation in the TYPO3 install tool is certainly easier. Here you can view all changes including descriptions.