In the eighties, crowds flocked to the cinema halls for Robot Number 5, which was struck by lightning. Almost 40 years later, a lot has changed, but it's a five again that stands for something big. The latest version of our favourite CMS has just landed. With your help, Contao 5 will write an unforgettable piece of software history. Have fun with the new arrival.
What can you expect from Contao 5?
During the development of the new major version, the focus this time was not on new features, but on getting rid of as much old code as possible. The so-called "BC layers" slow down the development of Contao and tie up a lot of resources. So Contao 5 is just a number. It is basically Contao 4.14 without ballast from older versions and therefore it must be labeled version 5.0 according to our versioning strategy.
You can read more about this in Yanick's detailed article on the developer meeting 2022.
Nevertheless, there are also new features in Contao 5. For example, the Contao install tool has been removed and moved completely to the Contao Manager.
Other improvements and changes for users:
- Unification of the user interface for child elements.
- Pages and files move under "Content"
- No saving of incomplete content elements
- New content element for unfiltered HTML
- Contao core templates are based on TWIG
You can find a complete list of all changes in the changelog at the end of the blog post.
Extensions and Contao 5
Due to the clean-up in Contao 5, most extensions also need to be adapted to be compatible again. This means that you will hardly be able to install any extensions at the moment.
Depending on the effort, it may take a few weeks until the packages are fit for Contao 5 again and work without errors.
It is a good time to remember that for seven years now, little to no financial support was needed for the most popular extensions. This is precisely because the Contao core team has taken so much effort to always ensure backwards compatibility.
We have all been able to benefit from this for years. Now it is up to us to support the programmers financially and make sure that the ecosystem around the Contao core can be updated step by step.
trakked is ready for Contao 5
With the release of Contao 5, a new Contao Manager version 1.6 was released. As usual, trakked has performed the manager update for you automatically.
Of course, all known trakked feature are also available for Contao 5.
Changelog of the fixed issues in Contao 5.0.0:
- #5200 Fix the limit-height.js script (leofeyer)
- #5199 Fix Input compatibility with Symfony 6 (ausi)
- #5198 Fix skipping backups with schema diff (ausi)
- #5001 Use Controller::getContentElement() in the alias element (leofeyer)
- #5169 Fix server check in migrate command and improve message (aschempp)
- #5195 Fix back end preview redirect (ausi)
- #5193 Clear the DEPRECATED.md file and remove some leftovers (leofeyer)
- #5179 Fix download element back end layout (ausi)
- #5189 Fix compatibility with Symfony 6 session (ausi)
- #5188 Add compatibility with symfony/cache ^6.0 (leofeyer)
- #5176 Add CSS class for number of columns to gallery template (ausi)
- #5180 Fix configuration of TemplateOptionsListener (ausi)
- #5175 Fix loading empty DCAs in unit tests (ausi)
- #5173 Move media above rich text (ausi)
- #5174 Fix compatibility with Symfony 6 (ausi)
- #5171 Fix icons.css compatbility in downloads element (ausi)
- #5163 Fix check for existing label in DcaLoader (ausi)
Changelog of the fixed issues in Contao 5.0.0-RC4:
- #5141 Don’t use sprintf() for alias URLs (ausi)
- #5156 Correctly handle RTL layout and window border in tips (aschempp)
- #5158 Do not define ptable for tl_content (fritzmg)
- #4326 Fix the remaining relative URLs (fritzmg)
- #5139 Add static URLs to data-icon attributes (ausi)
- #5147 Fix loop when loading DCA and BackendUser (ausi)
- #5144 Fix type error in slug generation (ausi)
- #5135 Fix the headline template (ausi)
- #5146 Fix Input::isPost() behavior for empty requests (ausi)
- #5140 Fix division by zero in _list.html.twig (ausi)
- #5065 Rename the database error type (aschempp)
- #5117 Change default CSS class names for content elements (ausi)
- #5115 Fix member registration issues (fritzmg)
Changelog of the new features in Contao 5.0.0-RC2:
- #5103 Use CSS variables in the back end (leofeyer)
- #4893 Modern fragments: article teaser + player content elements (m-vo)
- #4862 Modern fragments: download content elements (m-vo)
- #5017 Use the new features of ACE 1.8 (leofeyer)
- #4371 Tune the back end theme (leofeyer)
Changelog of the fixed issues in Contao 5.0.0-RC2:
- #5076 Handle empty array when preloading records (aschempp)
- #5060 Do not modify the global TL_LANG array (ausi)
- #5097 Allow null query on unique fields and implement early return (fritzmg)
- #5048 Fix modulewizard.js (fritzmg)
- #4826 Throw correct exceptions on error in DC (aschempp)
- #5035 Check DCA config when adding default operations (aschempp)
- #4939 Fix sectionwizard.js (fritzmg)
- #5036 Don’t cast null values in Model::convertToPhpValue (ausi)
- #5093 Fix undefined array key breadcrumb (ausi)
- #5094 Fix compatibility with doctrine/dbal 3.3.8 (ausi)
- #5070 Fix DcaLoader exceptions (ausi)
- #5066 Auto-generate and dump the APP_SECRET during contao-setup (m-vo)
- #5088 Show the video URL in the backend preview (bytehead)
- #5083 Fix invalid parameter number error (ausi)
- #5079 Add the removed count increment again (ausi)
- #5073 Fix broken insert tag flags (ausi)
- #5038 Remove two redundant body classes (leofeyer)
- #5057 Fix empty form uploads causing an error (fritzmg)
- #5063 Drop support for MAILER_URL (aschempp)
- #5037 Fix a wrong method call in the Newsletter class (leofeyer)
- #5023 Correctly handle NDJSON exceptions when checking the DB configuration (aschempp)
- #5022 Lazy-load the RememberMeRepository (aschempp)
- #5008 Fix useSSL default value (fritzmg)
- #5005 Fix database type error in contao:user:create command (fritzmg)
- #5000 Fix requirements with Symfony 6.x (bytehead)
- #4976 Improve currentRecord checks and permissions (aschempp)
Changelog of the new features in Contao 5.0.0-RC1:
- #4834 Validate start/stop date (aschempp)
- #4995 Use PHP 8 attributes everywhere (leofeyer)
- #4983 Make Contao compatible with Symfony 5.4 and 6.x (bytehead)
- #4663 Automatically generate DCA operations with permission checks (aschempp)
- #4992 Remove the old app.php entry point (leofeyer)
- #4991 Stop using src/Resources (leofeyer)
- #4903 Show until/from values for content elements (ameotoko)
- #4709 Add a generic voter for editable table fields (aschempp)
- #4343 Implement the new Symfony 6.x security interfaces (bytehead)
- #4823 Modern fragments: video content elements (m-vo)
- #4958 Remove the Contao 4 migrations (leofeyer)
- #4935 Remove the install tool (m-vo)
- #4915 Modern fragments: template for the markdown element (m-vo)
- #4929 Deprecate writing dynamic properties in the DataContainer class (leofeyer)
- #4922 Remove $arrCache from the insert tag hooks (ausi)
- #4921 Deprecate uppercase letters in insert tags (ausi)
- #4920 Keep unknown insert tags as plain strings (ausi)
- #4912 Remove the "move" operation from DC_Table (aschempp)
- #4918 Move pages and files to the "content" category (leofeyer)
- #4797 Change boolean columns from char(1) to tinyint(1) (fritzmg)
- #4874 Replace the contao_figure function (m-vo)
- #4876 Allow reading from VFS storages in the FigureBuilder (m-vo)
- #4875 Improve the `debug:contao-twig` command (m-vo)
- #4810 Modern fragments: text content elements (part 2) (m-vo)
- #4888 Move the installer into the core (m-vo)
- #4892 Use the current record in the `findCurrentPid()` method (leofeyer)
- #4770 Permission rework (Toflar)
- #4851 Get rid of the base tag (leofeyer)
- #4866 Use asset packages for vendor packages (aschempp)
- #4775 Modern fragments: link content elements (m-vo)
- #4825 Use chevron characters to expand and collapse sections (leofeyer)
- #4730 Modern fragments: image and list content elements (m-vo)
- #4820 Remove CURRENT_ID constant and session (ausi)
- #4800 Cast model values to the correct PHP type (ausi)
- #4816 Remove the remaining deprecated stuff (leofeyer)
- #4813 Execute the unique check after the save_callback (leofeyer)
- #4768 Replace modulewizard with VanillaJS (aschempp)
- #4729 Remove deprecated localconfig keys (ausi)
- #4761 Use .yaml files everywhere (leofeyer)
- #4726 Remove the deprecated request token (ausi)
- #4788 Remove the `imagemargin` field (bezin)
- #4745 Remove deprecated TL_ROOT constant (ausi)
- #4741 Remove deprecated TL_MODE constant (ausi)
- #4754 Replace the "edit header" icon with an "edit child elements" icon (leofeyer)
- #4773 Remove the news meta fields (leofeyer)
- #4772 Remove the wrapper around custom layout sections (leofeyer)
- #4749 Add the unfiltered HTML element (ausi)
- #4760 Replace `personalData` with `personalDetails` (leofeyer)
- #4751 Remove the orderField (ausi)
- #4345 Rewrite the Backend.autoFocusFirstInputField to vanilla JS (aschempp)
- #4756 Use the same icons for expanding and collapsing everywhere (leofeyer)
- #4734 Remove more legacy deprecations (ausi)
- #4740 Remove the deprecated FORM_FIELDS feature (leofeyer)
- #4746 Remove deprecated TL_SCRIPT constant (ausi)
- #4748 Add AVIF to the default image formats (ausi)
- #4750 Move assets/images/deferred to var/deferred-images (ausi)
- #4742 Allow overwriting the default "read more …" link text (leofeyer)
- #4648 Implement news archive permissions as a voter (Toflar)
- #4735 Use uppercase country codes for tl_member (ausi)
- #4738 Remove some deprecated constants (ausi)
- #4737 Remove contao:version command (ausi)
- #4721 Remove support for deprecated value in tl_article.printable (Toflar)
- #4716 Add two more FilesystemItemIterator related helper functions (m-vo)
- #4715 Support our template hierarchy in the Twig "use" tag (m-vo)
- #4375 Rewrite fieldset toggling to vanilla JS (aschempp)
- #4706 Remove deprecated TL_CRON support (fritzmg)
- #4624 Implement sectionWizard in vanilla JS (fritzmg)
- #4634 Remove TL_CRON usage from calendar-bundle (fritzmg)
- #4635 Remove TL_CRON usage from comments-bundle (fritzmg)
- #4671 Modern fragments: text content elements (part 1) (m-vo)
- #4642 Remove TL_CRON usage from core-bundle (fritzmg)
- #4640 Allow single and forced cron job execution (fritzmg)
- #4703 Remove deprecated stuff from AbstractPickerProvider (bytehead)
- #4701 Remove hook addLogEntry and its usages (bytehead)
- #4664 Add conditional setting/unsetting to the HtmlAttributes class (m-vo)
- #4379 Remove the textarea toggleWrap feature (aschempp)
- #4651 Remove the deprecated "show to guests only" function (leofeyer)
- #4674 Use constants for return values of commands (m-vo)
- #4441 Add a bag for file metadata (m-vo)
- #4637 Remove TL_CRON usage from newsletter-bundle (fritzmg)
- #4636 Remove TL_CRON usage from news-bundle (fritzmg)
- #4657 Allow adding document scoped content from within Twig templates (m-vo)
- #4658 Add a Twig runtime for code highlighting (m-vo)
- #4653 Drop support for an empty `tl_content.ptable` column (leofeyer)
- #4655 Remove the deprecated `disableInsertTags` config option (leofeyer)
- #4652 Cleanup the response context BC layer (Toflar)
- #4650 Remove support for runonce.php files (Toflar)
- #4649 Remove the deprecated onrestore_callback (Toflar)
- #4495 Add permission checks on global operations (Toflar)
- #4582 Remove the getSearchablePages hook (Toflar)
- #4073 Replace the getSearchablePages hook in the news bundle (fritzmg)
- #4578 Replace the getSearchablePages hook in the FAQ bundle (Toflar)
- #4620 Adjust name of Twig marker file that denotes roots of nested template paths (m-vo)
- #4522 Add the `Controller::$Template` property again (leofeyer)
- #4593 Remove the Backend::getTinyTemplates() method (de-es)
- #4579 Support the `|defer` flag in the Template::generateScriptTag() method (Wusch)
- #4585 Remove Backend::addFileMetaInformationToRequest() (Toflar)
- #4584 Remove the legacy markdown content element (Toflar)
- #4576 Adjust the FormTextarea widget according to the @todo comment (leofeyer)
- #4564 Remove languages.php and getLanguages hook (ausi)
- #4563 Remove countries.php and getCountries hook (ausi)
- #4562 Remove TL_CROP (ausi)
- #4565 Remove tabindex (ausi)
- #4566 Cleanup widget (ausi)
- #4510 Rewire the Input and Environment classes to use the Symfony request (ausi)
- #4559 Remove the remaining helper files (leofeyer)
- #4557 Remove more BC layers (leofeyer)
- #4553 Complete more TODOs for Contao 5.0 (leofeyer)
- #4554 Remove the BC layers in the .yml files (leofeyer)
- #4319 Drop the user agent class and insert tag (aschempp)
- #4552 Remove the "fullscreen" option in the back end (leofeyer)
- #4548 Replace the "getSearchablePages" hook in the calendar-bundle (Toflar)
- #4537 Allow TinyMCE 6 (leofeyer)
- #4393 Modern fragment foundation (m-vo)
- #4545 Remove the deprecated Model.php stuff (m-vo)
- #4544 Remove the deprecated Controller.php stuff (m-vo)
- #4453 Rework the input encoding (ausi)
- #4543 Remove the deprecated System.php stuff (m-vo)
- #4539 Remove the deprecated template stuff (m-vo)
- #4541 Remove the deprecated Frontend.php stuff (m-vo)
- #4540 Remove the deprecated insert tag stuff (m-vo)
- #4536 Allow partial mocks and row()/setRow() when mocking classes with properties (leofeyer)
- #4369 Remove deprecated StringUtil stuff (Toflar)
- #4531 Remove Contao\Request (Toflar)
- #4518 Carry out the planned renaming (leofeyer)
- #4178 Remove the "first", "even", "odd" and "last" CSS classes (fritzmg)
- #4383 Rewrite tooltips to vanilla JS (aschempp)
- #4330 Remove in-memory cache (Toflar)
- #4304 Clean up page controllers (aschempp)
- #4511 Remove the deprecated textStore widget (Toflar)
- #4450 Make replacing insert tags more granular (m-vo)
- #4372 Rewrite MetaWizard to vanilla JS (aschempp)
- #4367 Remove the orderField support in the picker widgets (Toflar)
- #4364 Remove the legacy session access (Toflar)
- #4355 Add the SQL import to the backend (ausi)
- #3930 Resolve page model in request (aschempp)
- #4417 Feature HtmlAttributes in the image studio (m-vo)
- #4440 Support sorting and any/all search in FilesystemItemIterator (m-vo)
- #4308 Drop database.sql support (Toflar)
- #4323 Add the DefaultDcaVoter (Toflar)
- #4328 Remove deprecated image methods (ausi)
- #4342 Rewrite the Backend.limitPreviewHeight to vanilla JS (aschempp)
- #4416 Some small improvements for the HtmlAttribute class (m-vo)
- #4381 Allow to json-serialize the HtmlAttributes class (m-vo)
- #4368 Remove all sorts of deprecated stuff in the Database namespace ([ausi], [Toflar])
- #4365 Removed deprecated FrontendCron controller (Toflar)
- #4361 Documented missing UPGRADE.md entries (Toflar)
- #4362 Use gulp-uglify-es (aschempp)
- #3973 Support nested template paths in Twig (m-vo)
- #4354 Use PHP8 attributes instead of annotations (sheeep)
- #4335 Removed deprecated legacy simple token parsing (Toflar)
- #4313 Update the meta files (leofeyer)
- #4018 Remove deprecated log_message() (Toflar)
- #4344 Handle VFS deprecations and remove BC layers (m-vo)
- #4333 Removed deprecated TL_CSS_UNITS superglobal (Toflar)
- #4327 Drop deprecated JS stuff (aschempp)
- #4332 Remove the article keywords (Toflar)
- #4289 Add the missing type hints to our interfaces and abstract classes (leofeyer)
- #4316 Drop legacy routing (aschempp)
- #3993 Drop the pageSelector and fileSelector widgets (aschempp)
- #4306 Drop the initialize.php BC layer (aschempp)
- #4317 Drop the `acceptLicense` config option (aschempp)
- #4318 Drop `debugMode` leftovers (aschempp)
- #4203 Add a HtmlAttributes class and Twig function (m-vo)
- #4305 Drop the Google+ remnants (aschempp)
- #4314 Remove the Contao 3 class loader (leofeyer)
- #4315 Remove the Contao 3 ModuleLoader (leofeyer)
- #4291 Remove the first bunch of BC layers (leofeyer)
- #4307 Drop the deprecated Encryption library (Toflar)
- #4298 Remove the internal CSS editor (leofeyer)
- #4290 Do no longer fall back to "web" if "public" does not exist (leofeyer)
Changelog of the fixed issues in Contao 5.0.0-RC1:
- #4997 Make the "twig" service public (leofeyer)
- #4994 Always use PHP 8 attributes in the maker bundle (leofeyer)
- #4989 Make the Input::post() method compatible with Symfony 6 (leofeyer)
- #4984 Always retrieve the session from the request instead of the container (leofeyer)
- #4985 Fix the draft view in column mode (leofeyer)
- #4977 Fix the pasteinto button if access is denied (aschempp)
- #4971 Fix the getCurrentRecord() method (leofeyer)
- #4972 Adjust the priority of the DataContainerCallbackListener (leofeyer)
- #4938 Always report the installation as being complete (ausi)
- #4960 Fix broken subpalette toggling (ausi)
- #4947 Add permission checks for paste_buttons (aschempp)
- #4940 Fix default callback order (fritzmg)
- #4954 Use "website root page" consistently (leofeyer)
- #4931 Remove uncached insert tag flag (ausi)
- #4934 Document changes to unknown insert tags (ausi)
- #4928 Add a template helper method to prefix relative URLs (leofeyer)
- #4909 Fix the cache and clientCache values (leofeyer)
- #4899 Use `disable=0` instead of `disable!=1` (leofeyer)
- #4916 Fix boolean fields always being saved as true (fritzmg)
- #4911 Use 0 instead of '' when toggling subpalettes via Ajax (leofeyer)
- #4908 Pass the request object to the Environment::phpSelf() method (leofeyer)
- #4904 Fix the "click2edit" function (ameotoko)
- #4905 Remove redundant type casts (leofeyer)
- #4901 Correctly cast the column types (leofeyer)
- #4897 Remove InitializeApplicationListener from manager bundle (rabauss)
- #4859 Fix the double encoding in DC_File (leofeyer)
- #4830 Fix the frontend_user_provider service definition (leofeyer)
- #4827 Remove LegacyRoutingException (aschempp)
- #4792 Save and submit database records (aschempp)
- #4764 Re-add keyboard events for section wizard (aschempp)
- #4765 Drop unused toggleAddLanguageButton (aschempp)
- #4744 Remove permission check from FrontendIndex::renderPage (aschempp)
- #4743 Fix two issues (leofeyer)
- #4736 Fix CronTest::testDoesNotRunCronJobIfAlreadyRun (fritzmg)
- #4704 Remove DCA view permissions (aschempp)
- #4705 Remove leftover callbacks (ausi)
- #4348 Fix an execute statement (ausi)
- #4677 Drop the "loadNavigation" Ajax action (aschempp)
- #4675 Undeprecate the third Input::get() parameter (ausi)
- #4666 tl_content.ptable is mandatory now (Toflar)
- #4661 Add missing try catch blocks (Toflar)
- #4613 Fix access of global DropZone class (Toflar)
- #4598 Remove leftover contao.encryption_key occurences (bytehead)
- #4589 Re-introduce autowiring aliases for subscribed services (fritzmg)
- #4587 Add missing service argument for Version410Update (fritzmg)
- #4555 Correctly build Twig logical name from fragment template name (m-vo)
- #4517 Fix miscellaneous minor issues (leofeyer)
- #4446 Support nested paths when generating Twig IDE autocompletion file (m-vo)
- #4438 Fix several errors that now appear due to removed BC layers (m-vo)
- #4377 Require Flysystem 3 only (m-vo)
- #4360 Templates should end with an empty line (leofeyer)
- #4358 Fix code style for InsertTags::executeReplace (fritzmg)
- #4338 Remove the article keyword leftovers (leofeyer)
- #4325 Stop prefixing the DC driver (bytehead)
- #4337 Use the FQCN in the newsletter DCA (leofeyer)
- #4190 Remove left-over url field in tl_module (bytehead)
About Contao 5.0
The first stable version of Contao 5.0 has been released on 18 August 2022 and will be the successor of Contao 4.13. 5.0 has been updated until 14 February 2023, after which it has been replaced by Contao 5.1.