Legacy bridge: run Exponential 6 inside the Symfony platform
This page is for teams that move an Exponential 6 site to the Symfony platform, or that want Twig on the public site while editors keep the legacy admin. Reference: Legacy bridge bundle specification.
Repositories: se7enxweb/legacy-bridge (Composer package, repository legacyBridge), se7enxweb/ibexa-legacy-bridge
(Platform 4 port), se7enxweb/site-legacy-bundle, se7enxweb/ngsymfonytools, se7enxweb/exponential-legacy-installer.
What it is
The legacy bridge is a Symfony bundle that loads the Exponential 6 kernel (the system you are reading about) inside a Symfony platform installation. One web application then serves both worlds:
- the legacy admin and legacy templates (your
.tplfiles, your extensions, your content classes), through the siteaccess namedlegacy_admin; - the new stack (Twig templates, Symfony routes, REST, GraphQL, the Platform admin interface).
Both read the same database. Content that editors create in the legacy admin shows up on the Twig front end, and the other way around.
Why you would use it
- You have an Exponential 6 site and want to move to the Symfony platform without freezing editors out. Run both until the migration is done.
- You want Twig, Symfony routing or the Exponential Layouts page builder for the public site, but your editors keep the familiar legacy admin.
- You keep legacy extensions (for example
ezjscore,eztags,ezwebin) available in a platform project.
Which version for which platform
The package has one line per platform generation: the Platform 2.5 line is tagged on master, the later lines each have their own branch. Tags are listed in the release history.
| Branch / tags | Platform | Symfony | PHP | Requires |
|---|---|---|---|---|
master (v2.1.10 to v2.1.12, 2025-08 to 2026-04) | eZ Platform 2.5 LTS | 3.4 | 8.x with fixes | the Exponential legacy kernel |
3.x (3.0.0.1 to v3.0.0.37, 2026-03-25 to 04-11) | eZ Platform 3.3 | 5.4 | ^8.0 | se7enxweb/exponential ^6.0.12, ezsystems/ezplatform-kernel ~1.3 |
4.x (v4.0.0.0 to v4.0.0.3, 2026-04-06 to 04-17) | Ibexa 4.6 compatible installs | 5.4 | ^8.0 | se7enxweb/exponential dev-main |
5.x (v5.0.0.0, v5.0.1 to v5.0.10) | Platform v5 | 7.4 | ^8.4 | adds se7enxweb/site-bundle, se7enxweb/site-legacy-bundle, se7enxweb/ngsymfonytools |
Install (Platform 2.5 style projects)
composer require --update-with-all-dependencies "se7enxweb/legacy-bridge"- Enable the bundle in
app/AppKernel.php: addnew eZ\Bundle\EzPublishLegacyBundle\EzPublishLegacyBundle( $this ),at the end of the$bundlesarray. The$thisargument is required. - Prepare the project:
php bin/console ezpublish:legacy:initThe Platform 2.5 line (v2.1.x, on master) has only the ezpublish:* command names; the exponential:legacy:* names described under Console commands do not exist there.
The command prints what to do next: move your legacy files (extensions, settings, optionally designs) into the project, then add the legacy_admin siteaccess to the siteaccess list and site_group it points out. The legacy backoffice needs legacy_mode: true for that siteaccess, which the init step writes at the end of your platform configuration.
- Run
composer symfony-scriptsonce or twice so the assets are generated and symlinked. - Optional: allow the legacy setup wizard in
app/config/security.yml:
ezpublish_setup:
pattern: ^/ezsetup
security: false- Add the legacy rewrite rules to your Apache virtual host so legacy assets are served as files (storage images,
design,share/icons, the icon themes of extensions, extension designs,packages/styles,var/storage/packages); an Nginx equivalent is in the bridge'sINSTALL.md. - Fix permissions as for any platform project.
Missing legacy extensions that older kernels bundled (ezfind, eztags, the script monitor, the system info extension) are added to the project's composer.json with composer require.
Cache behaviour
By default the bridge also clears the platform's persistence (SPI) cache when the legacy content view cache is cleared, and bin/console cache:clear clears it too. Switch each off in the platform configuration:
| File | Key | Default | Effect |
|---|---|---|---|
platform config (for example app/config/ezplatform.yml) | ez_publish_legacy.clear_all_spi_cache_from_legacy | true | clear SPI cache when the legacy view cache is cleared |
| same | ez_publish_legacy.clear_all_spi_cache_on_symfony_clear_cache | true | clear SPI cache on cache:clear |
| same | ez_publish_legacy.enabled | true | bridge on or off |
| same | ez_publish_legacy.root_dir | none | path of the legacy root; must exist |
| same | ez_publish_legacy.legacy_aware_routes | empty list | routes (or route prefixes) allowed while legacy_mode is on |
| siteaccess scope | ez_publish_legacy.<scope>.legacy_mode | unset | let the legacy kernel handle URL aliases |
| siteaccess scope | ez_publish_legacy.<scope>.templating.view_layout | unset | Twig pagelayout used when a content view is rendered in legacy |
| siteaccess scope | ez_publish_legacy.<scope>.templating.module_layout | unset | Twig pagelayout for legacy modules (legacy pagelayout otherwise) |
Console commands
The bridge's six commands were renamed in April 2026, on the 3.x, 4.x and 5.x lines only. The old names stay as deprecated aliases there, so scripts keep working.
| Bridge line | Command names available |
|---|---|
master (v2.1.10 to v2.1.12, Platform 2.5) | only the old ezpublish:* names |
3.x up to v3.0.0.29 | only the old ezpublish:* names |
3.x from v3.0.0.30 | exponential:legacy:*, with the old names as aliases |
4.x v4.0.0.0 and v4.0.0.1 | only the old ezpublish:* names |
4.x from v4.0.0.2 | exponential:legacy:*, with the old names as aliases |
5.x (all tags) | exponential:legacy:*, with the old names as aliases |
| Command | Old name (alias) | Does |
|---|---|---|
exponential:legacy:init | ezpublish:legacy:init | prepares the platform installation for legacy use |
exponential:legacy:configure | ezpublish:configure | creates platform configuration from an existing legacy directory |
exponential:legacy:install-extensions | ezpublish:legacybundles:install_extensions | installs legacy extensions that Symfony bundles define (symlink by default) |
exponential:legacy:symlink | ezpublish:legacy:symlink | installs legacy settings and design files from src into ezpublish_legacy/ |
exponential:legacy:assets-install | ezpublish:legacy:assets_install | installs legacy assets and front controller wrappers (for example index_cluster.php) |
exponential:legacy:script | ezpublish:legacy:script | runs a legacy CLI script in the bridged kernel |
Example: run a legacy script with the platform's database settings. The script path is relative to the legacy root; every further option is passed on to the legacy script, and --legacy-help shows the script's own help:
php bin/console exponential:legacy:script bin/php/ezcache.php --legacy-help
php bin/console exponential:legacy:script bin/php/ezcache.php --clear-id=content --siteaccess=legacy_adminSQLite
Since v4.0.0.1 (2026-04-07) a platform installation on SQLite can run the legacy kernel too. The bridge maps the Doctrine driver pdo_sqlite to the legacy DatabaseImplementation=sqlite3 setting and injects the database file path into the legacy site.ini [DatabaseSettings] Database. Before that fix the bridge stopped with "Could not map database driver". See SQLite for the platform.
What changed over time
- 2025-08: first Exponential releases (
v2.1.10): the wrapper install command accepts a quoted web directory when installed through Composer, vendor names switched to se7enxweb. - 2026-02: admin design
admin3replacesadmin2as the default design of thelegacy_adminsiteaccess (v2.1.11), see the responsive admin. - 2026-03: branch
3.x: ported to Symfony 5.4 and PHP 8: newTreeBuilderAPI, Symfony contracts events,RequestEvent/ResponseEvent, typed config resolver, Twig 3, DI-registered commands with constructor injection (noContainerAwareCommand), permission resolver API of platform 3. - 2026-04: branch
4.x: Ibexa 4.6 service aliases, session handling for Symfony 5.3+ (factory based sessions), SQLite, command rename, extra GUI chrome forlegacy_adminthrough thengsiteextension.
Limits
- The upstream project stated that the bridge is not supported on eZ Platform 3.x because the schema would diverge from the legacy one. The se7enxweb branches keep the legacy schema in place for the platform kernels listed above; use the branch that matches your platform.
- The ledger of the repository records the checked-out branch (
4.x); branches3.xand5.xcarry their own tags.
Related pages
- Platform features: site bundles and Twig tools, Nexus starter, SQLite for Exponential Platform, platform administration interface, DXP skeleton, Layouts on the platform, PHP 8.5 framework forks, AdminNeo database manager
- Specifications: legacy bridge bundle, platform console command names, platform package map, platform SQLite installer
- Upgrade notes: package forks and command renames
- Changelog: platform changelog
- History: legacyBridge (49 changes, 34 releases), ibexa-legacy-bridge---7x, site-legacy-bundle, exponential-legacy-installer, ecosystem overview, ecosystem months, change ledger
Become an Exponential Partner
Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.