Exponential 6 and Exponential Platform DXP
Exponential Platform DXP is the Symfony-only platform of the family. "DXP 1.x" and "DXP 2.x" are its two project skeletons:
| Name | Repository | Latest release | Generation | Symfony | PHP |
|---|---|---|---|---|---|
| DXP 1.x | se7enxweb/exponential-platform-v4x-dxp-skeleton | v1.0.0.2 | 4.6 (exponential-platform-dxp 4.6.x-dev) | 5.4 | ^7.4 to ^8.5 |
| DXP 2.x | se7enxweb/exponential-platform-dxp-skeleton | v2.0.0.2 | v5 (exponential-platform-dxp dev-master) | 7.4 | >=8.3 |
Both require the metapackage se7enxweb/exponential-platform-dxp (releases 0.0.0.1, v0.0.0.2), whose kernel is
se7enxweb/exponential-platform-dxp-core (v5.0.9 the newest release; v4.6.x tags for the 4.6 line). A
ready-to-run variant is se7enxweb/exponential-platform-dxp-starter (1.0.0.0).
Migration hub · Checklist · DXP skeleton · Platform package map
Contents
- 1. What DXP contains, and what it does not
- 2. From Exponential 6 to DXP
- 3. Content, templates and code
- 4. From DXP to Exponential 6
- 5. Verify, roll back
- 6. Risks
- 7. Checklist
1. What DXP contains, and what it does not
From the composer.json of se7enxweb/exponential-platform-dxp (master, read 2026-10-18):
| Contains | Does not contain |
|---|---|
the core (exponential-platform-dxp-core), admin UI, content forms, REST, GraphQL with GraphiQL, HTTP cache, Solr and core search, RichText, Matrix and Query field types, notifications, messenger, cron, the standard design, Twig components, JWT authentication | the Exponential 6 legacy kernel and the legacy bridge |
se7enxweb/layouts-core | the Layouts editor UI, the standard block set or the Ibexa integration of Layouts (Nexus has them) |
| a workflow or scheduler package | |
| the legacy features that have no platform counterpart: shop, legacy workflows, collaboration, information collection, newsletters, RSS import/export, PDF export |
So a site that uses any of the right-hand column loses it on DXP, or needs a replacement. Check every feature against the package list before you promise it.
2. From Exponential 6 to DXP
There is no converter that moves an Exponential 6 database straight to a v5 database. The route goes through the shared content tables, one platform generation at a time, the way the vendor's own update path does:
- Exponential 6 to the 2.5 generation: put the Symfony stack next to the legacy kernel with
Exponential Platform Legacy
v2.5.0.x(or Nexus1.0.0.x). The content is now readable by the platform kernel. - Convert XmlText to RichText while the 2.5 generation is in place:
ezxmltext:convert-to-richtextofse7enxweb/ezplatform-xmltext-fieldtype(branch1.8,bundle/Command/ConvertXmlTextToRichTextCommand.php). Later generations have no XmlText field type. Test the result on your most complex items (custom tags, embeds, tables) and fix the source where the converter reports errors. - Users: platform generations from 3.0 on accept only password hash types 6 and 7. Users with older types must reset their passwords, or sign in once while the 2.5 generation is running (the legacy kernel re-hashes on sign-in) (17.7).
- 2.5 to 3.3: the
upgrade/db/<engine>/files on themasterbranch ofse7enxweb/exponential-platform(Platform Legacy, section 4). - 3.3 to 4.6: the vendor's 3.3 to 4.0 database update and the configuration renames to
ibexa:(chapter 16.5.6). At this point you can arrive on DXP 1.x: create thev4xskeleton project, point it at the database without running the installer, and remove the legacy half. - 4.6 to v5: the 4.6 to 5.0 update renames every core table to
ibexa_*(16.5.6, "The 5.0 table renames"). Then arrive on DXP 2.x. - Leave the legacy-only tables (shop, workflow and others) in an archive copy; the platform does not use them.
Each generation step is a project of its own: run it on a copy, verify, and only then take the next one. The vendor's pages for each step are listed in chapter 16.3.
An alternative for a small site, or for a site whose model you want to redesign anyway: create a fresh DXP project and import the content through the platform's own APIs (a Symfony command that reads an xrowextract export, see Exponential's tools). It avoids four schema steps at the cost of writing the importer and losing the version history.
3. Content, templates and code
| Exponential 6 | DXP |
|---|---|
| content classes, attributes | content types, fields (the same tables up to 4.6) |
| datatypes | field types; check every datatype in 17.3 |
ezxmltext | ezrichtext / ibexa_richtext (converted, step 2) |
| TPL templates, overrides | Twig templates, content view configuration in YAML (rewritten by hand, 17.5) |
| INI settings | YAML configuration (17.4) |
| extensions, modules | Symfony bundles, controllers |
| Exponential Layouts | none in DXP; rebuild the pages, or use Nexus for Exponential Layouts on Symfony |
| URL aliases | the same aliases, regenerated by the platform command (ibexa:urls:regenerate-aliases upstream, 17.9) |
REST v1/v2 of ezprestapi | REST v2 of the platform (different routes and media types); clients must be adapted |
| Velocity, SQLite, MongoDB, Oracle | a web server with PHP-FPM; MySQL/MariaDB or PostgreSQL (SQLite in the starters) |
4. From DXP to Exponential 6
This is "path B" of chapter 16.6, which is written for exactly this direction:
- Inventory the field types in use; each needs a legacy datatype (16.6.3). RichText stays DocBook and is rendered as described there, or is converted to XmlText.
- Database: on a v5 database reverse the
ibexa_*renames (or use the translator extension), recreate the legacy-only tables withezsqldiff.php(reference first), set the version rows, apply the Exponential 6 update files (16.6.4). - Configuration from YAML to INI (16.6.5), Twig to TPL (16.6.6).
- Users keep their type 6/7 hashes, which Exponential 6 reads.
- Serve with Velocity or PHP-FPM; redirect the platform-only routes (REST v2, admin paths).
If editors need the legacy admin while the Symfony site keeps running, use Exponential Platform Legacy of the same generation instead (16.6.8).
5. Verify, roll back
- After each generation step: counts per content type and language, the admin, one edit and publish, an image
variation, search reindexed (
exponential:reindexon the Exponential lines),doctrine:schema:validate. - Rich text: compare a sample of the most complex items, rendered, before and after the conversion.
- Rollback: the backup taken before each step. The platform's update files cannot be undone by another SQL file.
6. Risks
| Risk | Counter-measure |
|---|---|
| Features the site uses are not in DXP | check the package list (1) before the decision |
| XmlText conversion errors | convert on the 2.5 generation, test the worst items first |
| Old password hashes | resets or a sign-in while the legacy kernel still runs |
| Four schema steps in one go | one generation per project phase, each verified |
| Templates underestimated | Twig rewrite planned as its own work package |
7. Checklist
- To do: Every feature in use checked against DXP's
composer.json. - To do: Route chosen: through the generations, or a fresh project with an import.
- To do: 2.5 generation in place (Platform Legacy or Nexus); XmlText converted and checked.
- To do: Password hashes 6/7 for all active users.
- To do: 2.5 to 3.3 to 4.6 (DXP 1.x) to v5 (DXP 2.x), each verified on a copy.
- To do: Templates rewritten in Twig; REST clients adapted.
- To do: Legacy-only tables archived; redirects for addresses that change.
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.
This page is part of the Exponential documentation and is free documentation under the GNU Free Documentation License 1.3 or any later version (the license of this documentation).