Feature: Dual-Kernel Architecture

Exponential Platform (formerly eZ Platform / eZ Publish 6) is built on the idea of continuity without compromise. By combining a modern Symfony kernel with the Exponential Legacy kernel, the platform gives developers the best of both worlds: a future-ready PHP 8 framework and a fully preserved legacy system.
This dual-kernel architecture is unique in content management: it allows businesses to modernize step by step while guaranteeing that existing projects and custom code remain compatible. Exponential ensures 100% API compatibility with the legacy stack, so no features are lost in transition.

1. What is Exponential Platform Legacy?

Exponential Platform is an award-winning, enterprise-grade Open Source Content Management System and development framework with functionality for web publishing, media portals, intranets, e-commerce and extranets. Exponential has a flexible content engine that serves as the core for dynamic and personalized websites. Exponential comes with much functionality out-of-the-box, but its power lies in its award-winning customization capabilities.

Exponential Platform is free and open source software that uses well organized PHP software stacks to help you easily manage and run Website web apps on Linux / MacOS / Windows / BSD.

Exponential Platform helps all kinds of organizations – including multinational corporations, humanitarian organizations and educational institutions – succeed at sharing their information.

User interaction and user-generated content is made easy with Exponential, enabling you to quickly build powerful, customized Web 2.0 websites. These strengths, along with a flexible cost model, are what attract tens of thousands of organizations, including the leading media groups in the world, to choose Exponential as their digital platform.

Exponential Platform includes both a modern Symfony-based kernel and the proven Legacy kernel, working together in one system. This dual-kernel design ensures 100% API compatibility, letting developers use old and new features side by side without breaking existing projects.
2. What is the Dual-Kernel Architecture?
2.1 Symfony Kernel (Modern Stack)

  • Based on Symfony full-stack framework (service container, routing, event dispatcher).
  • Handles modern APIs, controllers, and application logic.
  • Provides REST, GraphQL-ready APIs, and admin UI in Symfony.

2.2 Legacy Kernel (Proven Stack)

 • Originating from eZ Publish Legacy, written before Symfony adoption.
 • Includes the eZ Template Language (eZTPL), modules, workflows, and long-standing enterprise features.
 • Stable and reliable for projects built over 20 years.

2.3 How They Work Together

 • Every request passes through the Symfony front controller.
 • Symfony decides whether to handle the request directly or delegate to Legacy through the Exponential Legacy Bridge.
 • Developers can:
 • Mix legacy templates with modern Symfony controllers.
 • Call Legacy modules inside Symfony routes.
 • Migrate features gradually without breaking live sites.

3. Why Dual-Kernel Matters

1. Migration without downtime
 • Old eZ Publish projects can be lifted into Exponential without rewrites.
 • Developers modernize incrementally.
 2. 100% API Compatibility
 • Legacy APIs and extensions still function.
 • Symfony APIs extend the platform without replacing existing business logic.
 3. Stable + Modern at once
 • Legacy ensures reliability.
 • Symfony enables growth with the PHP ecosystem.

4. API Compatibility in Depth

4.1 Legacy API Layer

 • Uses the eZ Publish Legacy PHP APIs (content, user, workflow, publishing).
 • All custom extensions written for eZ Publish Legacy still work in Exponential.
 • Database schema is backward compatible.

4.2 Public Content Repository API

 • Symfony kernel exposes a Content Repository API that maps 1:1 to legacy features.
 • Developers can call the same content operations (create, read, update, delete).
 • REST endpoints mirror legacy functionality.

4.3 Bridging Tools

 • Exponential Legacy Bundle: The bridge between Symfony and Legacy kernels.
 • Provides services to wrap legacy calls in modern Symfony code.
 • Developers can inject legacy API results into Symfony templates or Vue/React frontends.

5. Practical Usage Examples

5.1 Calling Legacy Templates from Symfony

# routing.yaml
legacy_content:
    path: /legacy/{module}/{view}
    defaults: { _controller: ezpublish_legacy.controller:moduleAction }
This makes a legacy module accessible from Symfony routes.

5.2 Mixing Legacy and Symfony APIs

$contentService = $this->get('ezpublish.api.service.content');
$legacyNode = eZContentObjectTreeNode::fetch($nodeID);
// Use Symfony API for new content
$newContent = $contentService->createContent(...);
// Still able to fetch legacy objects
echo $legacyNode->attribute('name');
Both APIs run in the same project seamlessly.

5.3 Migration Path

 • Start with Legacy templates.
 • Move controllers to Symfony.
 • Replace templates step by step.
 • Eventually phase out Legacy once everything runs natively in Symfony.

6. Advantages for Developers

 • Preserves investment: 20+ years of eZ Publish extensions keep working.
 • Modern tooling: Symfony ecosystem, Composer packages, PHP 8.3 support.
 • Gradual migration: No “big bang rewrite” required.
 • Flexibility: Use both kernels together or choose one per project.

7. Roadmap & Future

 • Exponential will continue supporting Legacy APIs to ensure continuity.
 • Long-term roadmap includes optional full Symfony-only operation, but with compatibility layers available as long as humanly possible and beyond.
 • Community extensions built for eZ Publish Legacy will remain first-class citizens.

8. Conclusion

Exponential Platform Legacy’s dual-kernel system is more than a bridge — it is a guarantee of compatibility. Projects built on eZ Publish can run today on Exponential without code rewrites, while teams gain access to the modern Symfony ecosystem.
This makes Exponential not just a CMS upgrade, but a future-proof evolution of the eZ Publish story.

Further Reading

 • Legacy Bridge Developer Guide
 • API Migration Reference
 • Symfony + Legacy Integration Patterns

Enjoy the free and open source software we provide to the world, with regular updates and community support!

Page Views: 2
Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.

eZ debug

Clear cache:

Quick settings:

Timing: Jun 29 2026 02:59:36
Script start
Timing: Jun 29 2026 02:59:36
Module start 'layout'
Timing: Jun 29 2026 02:59:36
Module start 'content'
Timing: Jun 29 2026 02:59:36
Module end 'content'
Timing: Jun 29 2026 02:59:36
Script end

Main resources:

Total runtime0.2307 sec
Peak memory usage6,144.0000 KB
Database Queries58

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0062 613.6563153.1797
Module start 'layout' 0.00620.0023 766.835951.3750
Module start 'content' 0.00850.2101 818.21092,244.1484
Module end 'content' 0.21870.0120 3,062.3594100.4531
Script end 0.2306  3,162.8125 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00743.2077360.0002
Mysql Total
Database connection0.00100.442510.0010
Mysqli_queries0.040417.5261580.0007
Looping result0.00060.2574560.0000
Template Total0.206889.630.0689
Template load0.092840.206330.0309
String conversion in template resource0.00020.0878400.0000
Template parser: create text elements0.00100.439670.0001
Template parser: remove whitespace0.00020.083670.0000
Template parser: construct tree0.00371.609170.0005
Template load and register function0.00050.199080.0001
Template processing0.114049.426730.0380
states
state_id_array0.00040.182510.0004
state_identifier_array0.00070.305520.0004
Override
Cache load0.00220.9344920.0000
Sytem overhead
Fetch class attribute name0.00080.353240.0002
Fetch class attribute can translate value0.00000.013010.0000
class_abstraction
Instantiating content class attribute0.00000.003040.0000
XML
Image XML parsing0.00090.411710.0009
General
dbfile0.00130.5758170.0001
String conversion0.00010.0288430.0000
Note: percentages do not add up to 100% because some accumulators overlap

CSS/JS files loaded with "ezjscPacker" during request:

CacheTypePacklevelSourceFiles
CSS0extension/ezwebin/design/ezwebin/stylesheets/core.css
JS0extension/ezjscore/design/standard/javascript/jquery-1.10.2.min.js
extension/ezecosystem/design/ezpl/javascript/owl/owl.carousel.min.js
extension/ezecosystem/design/ezpl/javascript/owl/custom-carousel.js
extension/ezecosystem/design/ezpl/javascript/splide/js/splide.min.js
extension/ezecosystem/design/ezpl/javascript/splide/extensions/splide-extension-auto-scroll.min.js
extension/ezecosystem/design/ezpl/javascript/main.js

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1node/view/full.tplfull/folder.tplextension/ezecosystem/design/ezpl/override/templates/full/folder.tplEdit templateOverride template
1content/datatype/view/ezstring.tpl<No override>design/standard/templates/content/datatype/view/ezstring.tplEdit templateOverride template
1content/datatype/view/ezimage.tpl<No override>extension/ezecosystem/design/ezpl/templates/content/datatype/view/ezimage.tplEdit templateOverride template
2content/datatype/view/ezxmltext.tpl<No override>design/standard/templates/content/datatype/view/ezxmltext.tplEdit templateOverride template
15content/datatype/view/ezxmltags/line.tpl<No override>design/standard/templates/content/datatype/view/ezxmltags/line.tplEdit templateOverride template
15content/datatype/view/ezxmltags/paragraph.tpl<No override>extension/ezwebin/design/ezwebin/templates/content/datatype/view/ezxmltags/paragraph.tplEdit templateOverride template
14content/datatype/view/ezxmltags/header.tpl<No override>design/standard/templates/content/datatype/view/ezxmltags/header.tplEdit templateOverride template
1content/datatype/view/ezxmltags/li.tpl<No override>design/standard/templates/content/datatype/view/ezxmltags/li.tplEdit templateOverride template
1content/datatype/view/ezxmltags/ul.tpl<No override>design/standard/templates/content/datatype/view/ezxmltags/ul.tplEdit templateOverride template
1navigator/google.tpl<No override>extension/ezecosystem/design/ezpl/templates/navigator/google.tplEdit templateOverride template
1print_pagelayout.tpl<No override>design/standard/templates/print_pagelayout.tplEdit templateOverride template
1setup/debug_toolbar.tpl<No override>design/standard/templates/setup/debug_toolbar.tplEdit templateOverride template
 Number of times templates used: 54
 Number of unique templates used: 12

Time used to render debug report: 0.0003 secs