ibexa/rest
Adds a REST remote API to Ibexa DXP and Ibexa Open Source, letting applications manage content, users, and repositories over HTTP. Useful for building integrations, headless frontends, and third-party clients against Ibexa.
Architecture fit
ibexa/rest is not a general-purpose library — it is a Symfony bundle that registers a REST server surface on top of an existing Ibexa DXP (or Ibexa Open Source) installation. Its architectural role is the HTTP contract layer over the Ibexa Content Repository: controllers, input parsers (criteria, sort clauses), output visitors, media-type negotiation, and the authentication firewall for /api/ibexa/v2/*. Evaluate it as a platform capability, not as an integration dependency. The correct architectural question is never "should we adopt this package?" but "should we expose our Ibexa content repository over REST at all, and via this bundle versus GraphQL or direct PHP API." Fit is strong only where the consuming systems are non-PHP (mobile apps, iPaaS, middleware, partner integrations) or where you need synchronous CRUD/trash/version workflows rather than read-optimised delivery.
Integration feasibility
Feasible with low technical effort and high organisational effort. Installation is a single Composer requirement plus bundle registration inside a host Ibexa app; there is no greenfield integration surface to build. The friction is entirely in the surrounding decisions: license entitlement, version-line pinning (4.6 and 5.0 are maintained in parallel and are not interchangeable), and client-side contract work. Note the 5.x line requires PHP 8.3 and now tracks Symfony 7.4 LTS, so the real constraint is your host platform's PHP/Symfony baseline, not this package.
Technical risk
NOASSERTION SPDX result reflects this ambiguity. Under GPLv2 the copyleft obligations are material for any distributed product. Legal review before any code touches a shipped artifact is non-negotiable.class_alias BC layers, and deprecated parsers. Legacy and OpenAPI-compatible shapes coexist. Any client you build will be pinned to a specific minor and will need re-verification at each upgrade.ENCODER_CONTEXT leaked into responses for nested objects is a reminder that output visitors are security-adjacent; response shape verification belongs in test, not in production discovery.Key questions
Stack fit
Assumes an existing Ibexa DXP application. Required baseline: PHP 8.3 for the 5.x line, Symfony 7.4 LTS on 5.x, and a compatible ibexa/* core set. Auth is handled by a dedicated Symfony authenticator-based firewall, with token-based authentication as a first-class service (added in 5.0) and session routes available including a check-session route that supersedes the deprecated refresh-session route. Clients are any HTTP-capable system. There is no meaningful stack fit for a non-Ibexa PHP application.
Migration path
Treat this as an exposure decision, not a migration. Sequence:
Compatibility
Pin to an exact patch, not a floating constraint. Dual-branch maintenance (4.6.x and 5.0.x receiving the same fixes, e.g. the logout token removal and CI changes landing in both) means fixes are available on both lines — but it also means you must consciously choose a line and track its deprecations. 5.0 dropped class-alias BC layers and deprecated RequestParser implementations; if any custom extension code exists, migration to the newer parser and base-processor abstractions is prerequisite work. Media-type granulation is configurable, so verify the negotiated content types your clients send and accept match what the deployment enables — a supported_media_types flag now governs accepted request media types.
Sequencing
License → version pin → auth model → endpoint scope → contract freeze → client build → contract test → soak → external exposure. Do not parallelise license clearance with client development; a GPLv2 finding late invalidates work.
Maintenance
Low code maintenance, moderate upgrade maintenance. You are not maintaining a fork; Ibexa ships patches (the visible cadence shows frequent patch releases across both lines, including routine CI and dependency bumps). Your cost is verifying each Ibexa upgrade against your frozen contract, plus re-testing after Symfony patch upgrades given the demonstrated regexp regression. Assign explicit ownership of the version-pin bump decision — this is the most common place such integrations silently rot.
Support
Commercial, gated behind subscription. There is no independent community to fall back on: 0 dependents, 5 stars, and a README that defers entirely to Ibexa's official documentation and a separate REST API reference site. If the subscription lapses, you have GPLv2 code and no vendor. Model this as a vendor-support dependency in the risk register, not an OSS dependency.
Scaling
Inherits the host Ibexa application's scaling profile — REST adds HTTP overhead, request parsing, and serialisation on top of repository operations that already dominate cost. The dominant scaling concerns are per-request authentication cost (favour token auth over session creation per request), content search query cost through the criteria parser path, and rate limiting at the edge. There is no separate scaling story here; if the platform's repository tier does not scale, the REST layer will not either. Cache read-heavy endpoints at the gateway rather than expecting the bundle to absorb load.
Failure modes
Content-Type or unsupported media types produce request rejections that look like client bugs.Ramp-up
Fast for a PHP/Symfony team already on Ibexa — days, not weeks, for a first endpoint. Slow for everyone else: the learning curve is Ibexa content model concepts (content types, type groups, locations, versions, trash, criteria and sort-clause grammar) and the REST media-type conventions, not the bundle itself. Budget for one engineer to own the contract and one to own client-side integration. The absence of in-repo documentation beyond a pointer means onboarding depends on external docs and, realistically, a subscription-backed support channel.
How can I help you explore Laravel packages today?