CMS / content platform12 min readSource status not verified

Ibexa DXP: a PHP content platform and how to approach it

Orientation to Ibexa DXP as a PHP-based CMS and content platform, using only its developer documentation index, with a safe local preflight example and clear unknowns.

PHP compatibility and project lifecycle

Supported PHP versions, extensions, and Ibexa release versions are unknown from the supplied source; see the Requirements page. The learning track uses PHP 8.4 with PHP 8.5 planned. The preflight example checks only for PHP 8.4 or newer and makes no Ibexa compatibility claim.

Official sources checked 2026-10-22. Browser lessons on this site run PHP 8.5.

It relies on a single source: the Ibexa developer documentation landing page at https://doc.ibexa.co/. That page is mostly a navigation index. It shows what topics the documentation covers, but not version numbers, licenses, prices, or support dates. Where those matter, this guide says unknown.

What this project is

Ibexa DXP is a CMS and content platform, which its documentation calls a digital experience platform. It is a product built on PHP. It is not part of PHP core, not a PHP runtime, and not a framework component library you drop into your own app. It also is not Drupal CMS. It is a different product with its own content model, back office, and APIs.

The documentation index lists three editions: Ibexa Headless, Ibexa Experience, and Ibexa Commerce. The page does not say what separates them in features, licensing, or price, so check the Editions section before planning.

Historical note: eZ Publish

eZ Publish is a historical name that our course assignment asks you to keep separate from Ibexa DXP. The supplied source never mentions it, so this guide says nothing about its architecture or relationship to Ibexa. Treat eZ Publish as historical and do not choose it for new production work. For new projects, use the current Ibexa documentation.

Architecture and content model

The navigation shows a layered product, with the following areas.

  • Project organization: Architecture and Bundles sections suggest an extensible, bundle-based application. The packet does not name the underlying framework, so confirm that in the Architecture page.
  • Content management: a content model, content types, locations, content relations, content availability, sections, object states, and taxonomy.
  • Field types: a documented list that includes TextLine, RichText, Image, Relation, Matrix, and many more. Custom field types have their own tutorial.
  • Page and Forms: a Page Builder with blocks, and a Form Builder.
  • Workflow and collaborative editing.
  • Templating: Twig templates, a Twig function reference, view matchers, a design engine, and Twig Components.
  • APIs: a PHP API, a REST API, GraphQL, and an event reference.
  • Further areas: data migration, an administration panel, AI Actions, MCP Servers, a product catalog, Quable PIM integration, and Commerce features such as cart and shopping list.

In practice, editors model content as content types made of typed fields. Items live at locations in a tree, and templates and controllers render them. Developers extend the product through bundles, events, and the APIs.

Execution model

A classic PHP request lifetime means each HTTP request starts the application, handles one request, and ends, discarding PHP-level state. A persistent worker keeps the application in memory across many requests. The packet does not say whether Ibexa supports or recommends persistent workers, and it does not mention Swoole or Open Swoole. Those are different projects, and neither is an Ibexa feature as far as this source shows. Assume classic request lifetimes unless the official documentation says otherwise.

If you ever run any PHP application in a persistent worker, state leakage becomes your problem. Static properties, singletons, cached user or session data, open transactions, and request-scoped services can survive into the next request. One visitor's data could then appear for another. A CMS makes this worse because it carries permissions, language, site context, and caches. Mitigations include resetting or recreating request-scoped services after every request, avoiding static mutable state in your own code, closing connections, and testing with repeated requests from different users. Do not enable such a mode on Ibexa without explicit official guidance.

Practical use cases

The documentation suggests several uses: structured editorial websites with a back office, headless delivery through REST or GraphQL, landing pages assembled from blocks, forms such as newsletter sign-ups, and catalog or commerce sites. Beginner and Page and Form tutorials are listed. A tutorial for building a custom field type is also listed.

Installation approach

The Getting started section lists Requirements, Install Ibexa DXP, Install on MacOS and Windows, Install with DDEV, First steps, and Troubleshooting. The packet contains none of the actual commands, package names, or image tags, so this guide does not invent them. Read Requirements first, then follow the installation page that fits your machine. Use DDEV only as the official documentation describes it. Because the supported PHP versions and extensions are not stated in the packet, treat compatibility as unknown until you read that page.

The example below is a small preflight script, not an Ibexa installer. It reports your local PHP version and loaded extensions so you can compare them with the official Requirements page. It targets PHP 8.4, our learning track, with PHP 8.5 planned.

Strengths

  • Broad documented scope: content, pages, forms, workflow, templating, APIs, and catalog features in one product.
  • Several integration paths: PHP API, REST, GraphQL, and events.
  • Tutorials for beginners, page building, and custom field types.

Limitations

  • The source gives no versions, PHP compatibility, license, pricing, or support status, so lifecycle is unknown here.
  • It is a full product, so expect a larger learning curve than a component library.
  • Edition differences are not detailed in the packet.
  • Runtime PHP examples need Composer or a local PHP install and are not browser exercises.

Deployment

The packet has no deployment instructions. Plan from the official Install and Requirements pages, and treat any production topology as something to confirm in the documentation. Never expose FastCGI publicly. Bind development servers to 127.0.0.1 only.

Links

The only supplied reference is the Ibexa Developer Documentation at https://doc.ibexa.co/. Recheck all claims against it.

Practical examples

These examples have not been run in a live environment yet. Commands and versions follow the official documentation linked on this page; check them before relying on them, and report a problem if one does not work.

Local PHP 8.4 preflight before reading Ibexa Requirements

A Composer-managed CLI script that prints PHP version and loaded extensions so you can compare them with the Requirements page at doc.ibexa.co. It does not install or contact Ibexa, and it opens no network port. It needs PHP and Composer on the host and is not a browser exercise.

composer.json

{
    "name": "learnphponline/ibexa-preflight",
    "description": "Local PHP environment report to compare against the Ibexa Requirements page",
    "type": "project",
    "require": {
        "php": ">=8.4"
    },
    "scripts": {
        "preflight": "php bin/preflight.php"
    }
}

bin/preflight.php

<?php

declare(strict_types=1);

$meetsTrack = PHP_VERSION_ID >= 80400;

echo 'PHP version: ' . PHP_VERSION . PHP_EOL;
echo 'Learning track (PHP 8.4 or newer): ' . ($meetsTrack ? 'yes' : 'no') . PHP_EOL;

$extensions = get_loaded_extensions();
sort($extensions, SORT_STRING | SORT_FLAG_CASE);

echo 'Loaded extensions (' . count($extensions) . '): ' . implode(', ', $extensions) . PHP_EOL;
echo 'Next step: compare this output with the Requirements page at https://doc.ibexa.co/ because supported versions and extensions are not verified here.' . PHP_EOL;

exit($meetsTrack ? 0 : 1);

Install and run

php --version
composer validate
php bin/preflight.php
composer run preflight

Expected behavior

The script prints the PHP version, whether it is 8.4 or newer, a sorted list of loaded extensions, and a reminder to check the official Requirements page. It exits with status 0 on PHP 8.4 or newer and 1 otherwise.

This is not an Ibexa installation and does not verify Ibexa compatibility. It does not check Ibexa's actual requirements, because the supplied source does not list them. Installation commands, package names, and configuration must come from the official Install Ibexa DXP or DDEV pages, which this packet does not reproduce.