ibexa/fieldtype-richtext
The official Ibexa RichText field type for Ibexa DXP stores rich formatted text as structured XML, enabling clean rendering and editing of content. Part of Ibexa DXP; install via the platform.
Architecture fit — This is not a Laravel package, and treating it as one is the single biggest risk in this assessment. ibexa/fieldtype-richtext is a component of Ibexa DXP (formerly eZ Systems / eZ Platform), a Symfony-based enterprise content management platform. It implements the Ibexa Field Type SPI for a ibexa_richtext field, storing formatted text as structured XML (validated against an ezpublish.rngschema) rather than HTML, and it ships a coupled frontend editor layer (CKEditor-based, built with Symfony Webpack Encore/TypeScript). There is no Laravel service provider, no facade, no Eloquent integration, and no plausible seam for one — the field type only functions inside the Ibexa kernel's content repository, field type registry, and view layer.
Integration feasibility — Effectively zero as a standalone dependency. The README's own install instruction is "install Ibexa DXP"; pulling this package alone yields an unrunnable component against a non-Ibexa stack. The 6 stars and 0 dependents are consistent with this being a read-only split of the Ibexa monorepo rather than an independently adopted library — community engagement happens upstream in the Ibexa DXP repos and Jira. Any evaluation that begins with "can we composer require this into an existing PHP app" should terminate here.
Technical risk — Four material risks:
NOASSERTION because the package is dual-licensed: Ibexa Business Use License (BUL) v2.4+, granted only with a paid Ibexa DXP subscription, or GPLv2. GPLv2 is copyleft and will not survive legal review for a closed-source or SaaS-proprietary product without the commercial subscription. This is a budget and procurement decision before it is an engineering decision.Key questions — (1) Are we, or are we about to be, an Ibexa DXP customer? If no, this evaluation ends. (2) Do we hold an Ibexa DXP subscription, and has legal cleared BUL vs GPLv2 for our distribution model? (3) Which maintenance line do we target — 4.6 (LTS, older Symfony) or 5.0 (Symfony 7.4 LTS)? (4) Who consumes the XML — do we render through Ibexa's own Twig/view layer, or do we need to emit HTML/JSON headlessly to a separate frontend? (5) Do we need custom tags or styles, and if so who owns the RNG schema extensions (note IBX-10827 added the ability to extend ezpublish.rng — that is now our schema, our problem)? (6) Is our team staffed for Symfony + Encore + CKEditor 5 plugin work, or only Laravel?
Stack fit — Poor outside Ibexa. The dependency graph runs inward from Ibexa DXP to this package, not the reverse: it expects ibexa/core, the Symfony kernel, the Field Type SPI, and the Ibexa admin UI asset pipeline. For a Laravel codebase, the honest mapping is that the equivalent capability — a rich text field with a WYSIWYG editor, structured content, and link/embed handling — is better served by a Laravel-native option (Filament's TipTap/RichEditor field, Nova's Trix/Markdown fields, or a standalone CKEditor 5 or TipTap integration behind a custom cast). Those give you HTML or JSON storage you control, Composer install with no license gate, and an editor bundle that fits Vite rather than Encore.
Migration path — There is no path into a Laravel app, and the path out of Ibexa is lossy. The stored value is XML conforming to an ezpublish.rng schema with custom-tag semantics; converting to HTML requires the Ibexa rendering layer plus your custom tag templates, and round-tripping back is not guaranteed. If the real requirement is "exit Ibexa," scope a dedicated content-extraction workstream (XML → normalized HTML/JSON, with custom tags mapped explicitly and image/link references re-resolved against the new media store) — do not assume this package helps you leave. If the requirement is "add rich text to a Laravel app," there is nothing to migrate; choose a native library.
Compatibility — Two parallel support lines are maintained with near-simultaneous backports (4.6.x and 5.0.x currently), and 5.0.7 bumped symfony/* to 7.4 LTS. That means PHP and Symfony constraints are dictated by the DXP release you are on, not chosen by you. The editor assets are compiled through Encore with a TypeScript config (added in IBX-11736); if your product standard is Vite, you are maintaining a second, parallel frontend build for one field type. Confirm the PHP minor version, the Ibexa DXP release, and the CKEditor major version all align before committing.
Sequencing — Conditional on the answers above:
ibexa_richtext field with one custom tag end-to-end — authoring, XML persistence, RNG validation, front-end render — to expose the real cost of the schema-extension and template work.Maintenance — You are not maintaining this package; you are consuming it, but the coupling is tight. Upgrades arrive bundled with DXP releases, and the dual 4.6/5.0 lines mean a 5.0 adoption is a platform migration, not a dependency bump. The split-repo model also means issue tracking, PRs, and roadmaps live in Ibexa's Jira and monorepo — the GitHub repo has 6 stars and no independent community, so there is no external contributor base to lean on for fixes. Budget for the DXP upgrade cycle as a recurring, scheduled program rather than ad hoc patching.
Support — Support quality is contractually gated: the BUL route comes with Ibexa subscription support; the GPLv2 route comes with community-only channels and, realistically, self-support for a component this specialized. For a team without Ibexa experience, self-support on an XML-schema-validated field type with a custom CKEditor plugin layer is a poor position. Escalation paths and SLAs must be written into the subscription, not assumed.
Scaling — Content scale is the DXP's concern, not this package's; the field type stores XML per content object, so read amplification is a function of how you query and render. The scaling pressure that is attributable here is editorial and frontend: every custom tag and style you add multiplies the render templates, the RNG schema surface, and the editor plugin configuration that must stay in sync across environments. Keep custom tags few and centrally registered; config drift between backend schema and frontend editor is the classic failure at scale.
Failure modes — Watch for: (1) RNG schema validation failures on save when custom tags or config drift from the schema — content authoring blocks, and the error surfaces to editors, not developers; (2) XSS via custom tags, the exact class of defect patched in IBX-10288 — treat any custom tag renderer as untrusted-input code and require escaping review at every upgrade; (3) editor initialization fallback, per IBX-10565, where a failed init silently degrades the authoring experience; (4) silent data-quality bugs of the sort fixed in IBX-11480 (setBooleanValue cast) — small cast errors in field-type value handling are the kind that corrupt content quietly and are found late; (5) presentation regressions in link balloons, image dropdowns, and table toolbars, which are numerous enough in the changelog to warrant a visual regression suite in CI if you customize the editor at all.
Ramp-up — Steep and multi-disciplinary. A productive contributor needs Ibexa DXP content-model and Field Type SPI knowledge, Symfony bundle/config conventions, Encore/TypeScript asset builds, CKEditor 5 plugin development, and enough XML/RNG literacy to own schema extensions. Realistically 2–4 weeks before a competent PHP developer is independently productive in the editor-customization layer, longer for the field type backend. This is a specialist skill set, not a skill set a Laravel team acquires incidentally — staff it deliberately, or do not adopt.
How can I help you explore Laravel packages today?