The highly anticipated new LTS version of Contao, 4.13, is here! We hope you enjoy it as much as we do and wish you plenty of success for all your projects with our favorite CMS. To make sure you don't lose track of anything worth knowing, seeing and reading about it, we wrote a blog post summing it all up for you!
Changelog of the new features in Contao 4.13.0:
- #4123 Add a link to the Contao manual in the back end (MDevster)
- #3990 Fast manual file sync for the back end (m-vo)
- #4004 Support virtual filesystem in CLI backup management (Toflar)
- #4042 Enable SQL strict mode by default (m-vo)
- #4012 Allow filtering for files/directories when listing contents (m-vo)
- #3613 Add a root page dependent module selector (bytehead)
- #3419 Add options to customize the layout inheritance for pages (SeverinGloeckle)
- #3774 Add a DBAFS service and integrate Flysystem (m-vo)
- #3872 Add front end preview links (aschempp)
- #3702 Add a system logger service (SeverinGloeckle)
- #3785 Show member groups for content elements when protected (fritzmg)
- #3684 Use the metadata for the player caption (fritzmg)
- #3180 Render be_main with custom back end controller (m-vo)
- #2959 Add the back end attributes and badge title to the preview toolbar (rabauss)
- #3498 Improve the undo module for better editor experience (bezin)
- #3926 Add CSS definitions for info texts in widgets (leofeyer)
- #3914 Show route path with regexp in page settings (aschempp)
- #3883 Improve the maintenance mode command (aschempp)
- #3848 Add file previews for downloads (ausi)
- #3644 Allow MODE_PARENT without child_record_callback (fritzmg)
- #3911 Support Typescript in the code editor (leofeyer)
- #3630 Support image sizes in news and calendar feeds (bezin)
- #3489 Add the "send newsletter" event (SeverinGloeckle)
- #3888 Deprecate System::getTimeZones() (ausi)
- #3843 Add route priority and allow the same page alias with different parameters (aschempp)
- #3862 Add an "overview page" field (leofeyer)
- #3889 Add generic toggle operation handling (aschempp)
- #3793 Allow creating nested folders in the file manager (leofeyer)
- #3737 Improve the system maintenance mode (Toflar)
- #3850 Add a backup retention policy (Toflar)
- #3729 Maintenance mode per root page (aschempp)
- #3628 Make image width and height overwritable in the upload widget (doishub)
- #3839 Remove page from index if "Do not search" is checked (aschempp)
- #3819 Add comments to our interfaces and abstract classes (leofeyer)
- #3812 Increase the length of URL fields (fritzmg)
- #3797 Allow previewing unroutable pages (aschempp)
- #3813 Replace ramsey/uuid with symfony/uid (m-vo)
- #3804 Always show debug log and fetch crawl status earlier (Toflar)
- #3798 Use unroutable pages types to limit queries (aschempp)
- #3605 Do not generate routes for error pages (fritzmg)
- #3660 Add Chosen to select menus in the backend DCA filters (qzminski)
- #3674 Add a DCA option to collapse inactive checkbox groups (SeverinGloeckle)
- #3604 Use the back end access voter instead of hasAccess() and isAllowed() (aschempp)
- #3615 Add the maker bundle (sheeep)
- #3727 Link parent elements in the back end breadcrumb trail (Toflar)
- #3750 Make Symfony 5.4 the minimum requirement (leofeyer)
- #3719 Forward error handling to routing controller (aschempp)
- #3614 Add a nonce to all string placeholders (m-vo)
- #3620 Deprecate the request_token insert tag (m-vo)
- #3631 Backup management on CLI (Toflar)
- #3611 Decorate the access decision manager (Toflar)
- #3706 Add a service ID linter and adjust the service IDs (leofeyer)
- #3686 Do not use FQCN service IDs for non-autowiring services (leofeyer)
- #3458 Add deprecations (ausi)
- #3603 Add a setting for allowed insert tags (ausi)
- #3619 Add PHP8 attributes for our existing service annotations (aschempp)
- #3659 Add a cache tag service for entity/model classes (m-vo)
- #3638 Add an insert tags service (ausi)
- #3622 Make replacing insert tags more granular (m-vo)
- #3472 Make the backend path configurable (richardhj)
- #3616 Support canonical URLs in the front end (Toflar)
- #3207 Relay statement parameters to doctrine dbal (ausi)
- #3617 Do not index documents if the canonical URL does not match (Toflar)
- #3625 Add a template element and module (ausi)
- #3609 Move the simple token parser into the String namespace (leofeyer)
- #3602 Add the HtmlDecoder service (leofeyer)
- #3606 Keep insert tags as chunked text and handle them in the HTML escaper (m-vo)
- #2892 Add constants for the DCA sorting modes and flags (bezin)
- #3535 Set the contao.web_dir parameter from composer.json (m-vo)
- #3230 Add blank insert tag argument to open links in new window (ausi)
- #3542 Support image formats AVIF, HEIC and JXL (ausi)
- #3523 Upgrade to Doctrine 3 (ausi)
- #3530 Replace patchwork/utf8 with symfony/string (leofeyer)
- #3391 Always show the parent trails in the tree view (Toflar)
- #3522 Optionally delete the home directory in the "close account" module (leofeyer)
- #3524 Add an event count to the event list (leofeyer)
- #3379 Add "Do Not Track" option to the Vimeo content element (MarkejN)
- #3445 Allow to pass the actual 40x page to the page type (aschempp)
- #3442 Change all occurrences of master (request) to main (aschempp)
- #3439 Use the PHP 7.4 syntax (leofeyer)
- #3436 Drop the contao/polyfill-symfony package (leofeyer)
- #3191 Use v2 of league/commonmark (Toflar)
- #3434 Update the dependencies and remove the BC layers (leofeyer)
Changelog of the fixed issues in Contao 4.13.0:
- #4151 Make the `crontao.cron` service lazy (aschempp)
- #4149 Use static description for commands (m-vo)
- #4133 Improve the preview links back end (aschempp)
- #4141 Support symlinks in the upload directory (m-vo)
- #4145 Fix time sensitive tests (ausi)
- #4126 Check return type of generateLabelRecord method (bezin)
- #4143 Do not use transactions for restoring backups (ausi)
- #4139 Adjust labels for root page dependent modules (bytehead)
- #4121 Show custom Twig templates in the back end dropdowns (m-vo)
- #4140 Add feed image size property doc comment (bezin)
- #4136 Increase the minimum version of the Composer runtime API (dmolineus)
- #4117 Do not add the element name to the PHP attribute in the maker bundle (leofeyer)
- #4134 Remove custom template option (bytehead)
- #4099 Do not store record preview for DC_Folder instances (bezin)
- #4114 Allow DCAs without driver (leofeyer)
- #4113 Return an empty string if there is no driver (leofeyer)
- #4112 Skip all dot files when syncing the DBAFS (m-vo)
- #4103 Fix the color of bold strings inside error messages (leofeyer)
- #3992 Automatically generate Twig IDE auto-completion mappings (m-vo)
- #4096 Fix an undefiend array key (richardhj)
- #4065 Fix order of parameters in AsContentElement and AsFrontendModule constructors (m-vo)
- #4078 Fix 'Purge the preview cache' (path not found) (AlexanderWillner)
- #4095 Fix the logger service calls (SeverinGloeckle)
- #4094 Fix missing fallback for densities in preview factory (m-vo)
- #4093 Allow autowiring of preview factory (m-vo)
- #4074 Fix `contao:user:list` with empty database (AlexanderWillner)
- #4052 Do not fetch similar pages with empty alias (aschempp)
- #4046 Encode binary data as hex literal in backup dump (ausi)
- #3994 Pre-render record preview for undo view on delete (bezin)
- #4057 Limit image width in tl_undo_preview (bezin)
- #4021 Fix time sensitive test (ausi)
- #4022 Add missing option showFilePreview to fileTree widget (ausi)
- #4049 Support \Attribute::TARGET_METHOD for our DI attributes (m-vo)
- #4060 Fix the missing request token in ModulePassword.php (dennisbohn)
- #4034 Fix 'Warning: Undefined array key 1' in insert tags (xprojects-de)
- #4032 Add a conflict for doctrine/dbal:3.3.0 (leofeyer)
- #4027 Also make the AvailableTransports service alias public (fritzmg)
- #4028 Fix replacing insert tags on non-strings (aschempp)
- #4030 Correctly handle parameter for requireItem (aschempp)
- #4001 Check `$objPage` in `Controller::getTemplate()` (xprojects-de)
- #4002 Add a better exception message if a page is unroutable (leofeyer)
- #4005 Fixed missing service name adjustments (Toflar)
- #3991 Fix an 'Attempt to read property "language" on null' warning (dennisbohn)
- #3987 Fix the available transports service (fritzmg)
- #4000 Make sure the `requestToken` variable is defined (leofeyer)
- #3979 Sort the root IDs if there is a `sorting` column (leofeyer)
- #3978 Change the root page icon in maintenance mode (aschempp)
- #3935 Allow Flysystem v3 (m-vo)
- #3975 Allow custom labels for the overview links (leofeyer)
- #3970 Handle quoted column names in the Statement class (leofeyer)
- #3969 Do not enable the maintenance mode for new pages (leofeyer)
- #3968 Correctly hash the preview file path (ausi)
- #3943 Generate useful error message on routing issues (aschempp)
- #3961 Gray out expired preview links (leofeyer)
- #3953 Fix the PackageUtil class (ausi)
- #3962 Fix the button alignment in the parent view (leofeyer)
- #3934 Fix the permission check for preview links (aschempp)
- #3949 Fix a leftover System::log call (fritzmg)
- #3952 Fix default log context for Email::sendTo (SeverinGloeckle)
- #3945 Make security.encoder_factory public again (bytehead)
- #3927 Explicitly set rootPaste, deprecate implicit rootPaste (ausi)
- #3937 Various small filesystem tweaks (m-vo)
- #3938 Remove remaining deprecations (bytehead)
- #3896 Improve the toggle operation (aschempp)
- #3909 Correctly handle types and empty values in DC_Table::save() (aschempp)
- #3929 Adjust the SERP preview formatting (leofeyer)
- #3916 Fixed tl_page permissions for routing fields (aschempp)
- #3912 Move the imgSize labels to the default.xlf file (leofeyer)
- #3917 Update maintenance response and add to preview endpoint (aschempp)
- #3905 Deprecate the PackageUtil class (leofeyer)
- #3829 Handle `$objPage` not being set in the InsertTags class (leofeyer)
- #3892 Fix method name to get default token value (aschempp)
- #3891 Fix memory issues in the backup command (aschempp)
- #3884 Check for unpublished elements when generating the RSS feed (leofeyer)
- #3885 Unify the command output format (aschempp)
- #3873 Stop using BE_USER_LOGGED_IN constant (aschempp)
- #3871 Rename the token value method (aschempp)
- #3866 Fix some minor issues (leofeyer)
- #3865 Use generic image format labels (leofeyer)
- #3868 Set logout response depending on scope (bytehead)
- #3846 Fixed debug:pages command and show dynamic content composition (aschempp)
- #3858 Revert replacing insert tags in the template inheritance trait (leofeyer)
- #3859 Deprecate two global variables (leofeyer)
- #3863 Harden the Picker class against undefined array keys (leofeyer)
- #3861 Fix the back end pagination menu (leofeyer)
- #3845 Register a controller for error page types (aschempp)
- #3816 Rework the @throws annotations (leofeyer)
- #3835 Remove the alias field from unroutable pages (aschempp)
- #3837 Do not check on null as the username can be empty (bytehead)
- #3810 Use mode constants in Picker widget (bezin)
- #3801 Add a missing isset() when checking for the mailer DSN (aschempp)
- #3795 Fix issues with non-admin users (leofeyer)
- #3799 Make the page registry service public (aschempp)
- #3796 Correctly handle unroutable legacy types (aschempp)
- #3778 Ensure type-safety when replacing legacy insert tags (aschempp)
- #3765 Do not deprecate the autowiring aliases (leofeyer)
- #3695 Switch to Symfony's version of the Path helper (m-vo)
- #3764 Make the autowiring aliases of renamed services public (leofeyer)
- #3744 Show bubbled exceptions in the pretty error screen listener (aschempp)
- #3743 Fix the PasswordHasherFactory usage (bytehead)
- #3746 Upgrade symfony/security-bundle to 5.4 and fix TokenInterface usage (bytehead)
- #3735 Correctly fix a wrong method usage (leofeyer)
- #3723 Stop using the LegacyEventDispatcherProxy class (leofeyer)
- #3720 Fix security permissions for custom backend paths (aschempp)
- #3714 Do not unnecessarily fetch the PageRoute twice (aschempp)
- #3705 Fix a typo in a listener ID (leofeyer)
- #3691 Fix an array to string conversion (leofeyer)
- #3696 Lower the maximum insert tag recursion level (m-vo)
- #3680 Fix a wrong method usage (leofeyer)
- #3681 Fix the fragment handler (leofeyer)
- #3676 Replace FragmentRendererPass with tagged locator (aschempp)
- #3257 Fix the Symfony 5.3 security deprecations (bytehead)
- #3658 Correctly check whether the root page allows canonical URLs (leofeyer)
- #3645 Restore backwards compatiblilty for DB Statement (ausi)
- #3653 Do not block the `contao.backend` namespace (leofeyer)
- #3643 Fix the DB query in the Versions class (leofeyer)
- #3641 Replace the remaining mode/flag numbers with constants (leofeyer)
- #3596 Fix the visible root trail check in the extended tree view (Toflar)
About Contao 4.13 LTS
The first stable version of Contao 4.13 has been released on February 17, 2022, replacing Contao 4.9 as the long term support version. As an LTS version, 4.13 will be provided with bug fixes until February 14, 2025 and security-related updates until February 14, 2026. Contao 5.3 will be the next LTS version of Contao and has been released in February 2024, ensuring a stress-free transition.