Behaviour changes of July and August 2026 (6.0.15 development)
Read this page before you update an installation to the changes made between 1 July and 31 August 2026. It is the upgrade checklist for that period: what can break, the new settings, and the fixes you may notice. Release 6.0.15 had no tag then; everything below is part of the 6.0.15 line. For September and October see Behaviour changes of 16 to 30 September 2026 and Behaviour changes of October 2026. The stories of the months are July and August.
Quick checklist
Make sure every user account has an
ezuser_settingrow (how to find the ones that do not).If you use the extensions
bciconextensionsorbciconextensions_share_icons, remove them fromActiveExtensions[].If you have templates that rely on XHTML self-closing tags or
type="text/css", read "HTML5 markup in the kernel designs".Review your
override.inifiles if some blocks have aPriorityand others do not.Regenerate autoloads and clear all caches:
php bin/php/ezpgenerateautoloads.php -e php bin/php/ezcache.php --clear-all --allow-root-user
Changes that can break something
Accounts without an ezuser_setting row cannot sign in (16 August)
What changed. At sign-in, kernel/classes/datatypes/ezuser/ezuser.php treated a user with no settings row as
enabled. It now treats it as disabled. Accounts made in the admin always have the row; accounts made by SQL, packages
or migrations may not.
How to check and fix. Find and repair such accounts with the queries in the security specification.
Override order follows Priority (12 July)
What changed. The template engine sorts override blocks by the key Priority of override.ini: the lowest number
is checked first, and a block without Priority comes last. A block created in the
template editor gets Priority=0.
Who is affected. If you mix hand-written blocks without Priority with editor blocks, the editor's blocks now win.
How to fix. Add Priority to the hand-written blocks to set the order you want.
HTML5 markup in the kernel designs (18 July)
What changed. The templates of design/standard, and the markup written by PHP in lib and kernel (the nl2br
template operator, the debug and statistics output, the kernel web entry point), in ezjscore and in ezoe, now pass
HTML validators: <br /> became <br>, <input ... /> became <input ...>, and <style type="text/css"> became
<style>. Browsers treat both forms the same.
Who is affected. Only code that compares markup byte for byte (snapshot tests) or post-processes it as XML. Your own overrides are not changed by the kernel.
jQuery 3.7.1 in ezjscore (16 August)
Pages that load ezjsc::jquery got jQuery 3.7.1 and jQuery Migrate 3.4.1 (muted). Code that still needs jQuery 1.x
behaviour usually works through Migrate. This was superseded in October by jQuery 4; see the
6.0.15 changelog and YUI removal.
Kickstart and the setup wizard
kickstart.iniis no longer shipped active. The example iskickstart.ini--example, the templatekickstart.ini-dist. If you relied on a shippedkickstart.ini, copy the example tokickstart.iniand edit it. See Kickstarter.- A kickstart install always creates the siteaccesses
siteandadmin. - A new installation defaults to
eng-USand the Exponential content ofshare/db_data.dba; existing installations are not touched. See Clean install defaults.
The autoload generator
kernel/private/classes/ezautoloadgenerator.php compares real paths, and its exclusion filter (var, settings,
bin, autoload, tmp, lib/ezc ...) now ends at a directory boundary: a folder called settings_backup is no
longer skipped by the filter settings. The "Scan complete" log line is gone, so the generator stays as quiet as
designed. If a class went missing after you renamed or symlinked extension folders, run
php bin/php/ezpgenerateautoloads.php -e again.
New settings
| File | Block | Key | Default | Scope | Meaning |
|---|---|---|---|---|---|
site.ini | [TemplateSettings] | ShowTemplatePathComments | disabled | global/siteaccess | START/STOP comments naming each template. Feature. |
site.ini | [ExtensionSettings] | AdditionalExtensionDirectories[] | empty | global | More extension roots. Feature. |
site.ini | [SiteSettings] | EzInstallationName, ProductionInstallationList[] | not set | global | Installation name filter. Feature. |
ezscript.ini | [eZScriptSettings] | RootDelay | 10 | global | Seconds a script run as root with --allow-root-user waits so you can press Ctrl-C. 0 removes the delay. |
icon.ini | [ExtensionSettings] | IconExtensions[] | empty | global/siteaccess | Extensions whose icons/ folder is searched. Feature. |
menu.ini | [Leftmenu_design] | Links[template_editor] | visual/templatelist | global | Template Editor in the Design menu. |
transform.ini | [search] | Commands[]=lowercase | added | global | The lowercase transformation in the search group. |
Example: no root delay in an automated deployment.
# settings/override/ezscript.ini.append.php
[eZScriptSettings]
RootDelay=0Fixes you may notice
- Console output: every
bin/php/consoleentry shows a description;ezpmis a console command (ezpm). - PHP 8.0 to 8.5 (PHP 7.4 usable without support): string offsets with curly braces (ISBN13 datatype, WebDAV backend);
#[AllowDynamicProperties]oneZINI,eZPersistentObjectandeZWorkflowProcess(PHP 8.2); nullable array type hints (generateUrl,fetchRelatedObjects); an integer cast for the next order number (PHP 8.4); the removedimagedestroy()call (PHP 8.5); guards for null values ineZSiteAccess::load,eZCharsetInfo,eZMail, the GD colour functions,eZLocale, the content cache manager, XHTML output of embedded images and URL alias caches. - INI files: saving in round-trip mode leaves every untouched key as it was on disk, including bare
Key[]reset lines. Extension activation and package install no longer reformat unrelated settings (16 August,0a0f4f876b). See eZINI keeps comments. - Debug handler honours
error_reporting(3ce2a1e76c). The eng-US translation file is not looked up, which removes "missing translation" noise (e3c8d078f4). - Permissions SQL: an empty class or section limitation list no longer produces invalid SQL (
acb8e002c5). - Imported Ibexa docbook:
ezembed,parawith a CSS class andliterallayoutrender in XHTML; the class whitelist is enforced only for tags of the eZXML schema (5857c5baa8,d7bebcb39b). - Image aliases: a missing source file is a notice that names the object, the attribute, the missing alias and the
existing aliases, not a fatal error (
52277db85f). - Object not found errors name the id and the file and line of the caller (
c7a5eac571). - SQLite: connection debug messages are readable and appear only with SQL output on; the schema generator emits
INTEGER PRIMARY KEY AUTOINCREMENTand no second primary key constraint (dfba7274e8,24c03393db,9678728ccc). - MongoDB: the driver reports errors through
eZDebug::writeError()with the prefixexpMongoDB, noterror_log(888297a0ca). - Package tools: see ezpm for the install lock, delayed indexing and batched commits.
Smaller changes, explained
Each of these has a commit in the ledger and a small, visible effect.
| Change | What you see | What to do |
|---|---|---|
Script descriptions in the console (4ce57a7224) | ./console list shows one line per script. The console reads it from the 'description' key of the array given to eZScript::instance() (strategy 1 in the comment block of bin/php/console), or from an @description docblock tag. | Give your own scripts a 'description' key (or // @description ...) and they appear in the list. Check: ./console list ezpm. |
RootDelay (11095f902f) | A script run as the operating system root user with --allow-root-user prints "With great power comes great responsibility." and waits RootDelay seconds so you can press Ctrl-C (kernel/classes/ezscript.php). | 0 in ezscript.ini [eZScriptSettings] removes the wait in deployments; default 10. |
Layouts tab in the admin node view (8df2654e3f) | The window controls of design/admin3 take an extra tab beside Ordering; design/admin/javascript/node_tabs.js marks the window controls with the class layouts-active while the tab node-tab-layouts is open. The layouts extensions supply the tab itself. | Nothing; see Exponential Layouts. |
Nice URL update script revert (9c4946075d) | bin/php/updateniceurls.php is back to its earlier, stable version after a change made during testing proved unstable. | Nothing. |
Autoload generator (f46c08c18e, 62c14b36dd) | Real paths are compared and the exclusion filter stops at a directory boundary; the "Scan complete" line is gone. | Described above under "The autoload generator". |
Media theme templates (c013093b52) | Templates of the media theme guard false and missing values; the Google Tag Manager template parses. | Nothing; the theme is an ordinary directory of the repository since 6 August. |
Composer and extensions
The root composer.json changed as follows (suggestions are only listed in the suggest block and never installed):
| Date | Change |
|---|---|
| 12 July | git_manager ~2.0.1 required |
| 19 July | suggestions for owsimpleoperator, adminaid, the private message extension, hcaptcha, syndication |
| 20 July | sevenx_dse ~1.0.0 and syndication ~1.2.0 required; sevenx_valkey_cache suggested |
| 21 July | powercontent required |
| 30 July | the explayouts packages (12), the expsite packages, expquery-translator and sevenx-themes-media, all ~1.0.0, declared as runtime requirements |
| 31 July | powercontent ~2.0.0; exppayment-stripe removed from the requirements |
| 15 August | exp_enhanced_link ~1.0.1 (the media theme needs it) |
| 22 August | eztags ~2.3.3 and cjw_newsletter ~4.0.0.0 required |
| 31 August | ngclasslist ~1.1 required (the datatype of the ng_menu_item class) |
The table is the history of July and August. The constraints have moved on since (in the composer.json of 2 October
2026, for example, git_manager ~2.0.14, eztags ~2.4.11, cjw_newsletter ~4.1.16). List the current ones with:
grep -n '"se7enxweb/' composer.jsonAfter pulling these changes, run Composer yourself in the way you always do, then
php bin/php/ezpgenerateautoloads.php -e.
README note
The README header explains that a downloaded copy of Exponential 6.0 needs composer install before it runs
(04d17780ae, 84ebe2f59f).
Related pages
- Security specification of August 2026 and the CI specification
- Console, PHP 8 support, Kickstarter CLI, YUI removal
- Features of the period: ezpm, Template editor, Template path comments, Kickstarter, Clean install defaults, Reset a user password, Redis and Valkey caches, Extension list, Additional extension directories, Icon themes, Installation name, jQuery 4 and YUI
- Changelog 6.0.15
- Behaviour changes of 16 to 30 September 2026 (next)