stinger/ckeditor-widget-bundle
A Laravel/PHP package that bundles CKEditor widgets for easy integration. It provides ready-to-use widget assets and configuration to add custom widgets to CKEditor, helping you build richer content editing experiences with minimal setup.
Architecture fit — poor. Despite being catalogued among Laravel/PHP packages, stinger/ckeditor-widget-bundle is a Symfony2 bundle, not a Laravel package. Its integration contract is Symfony-specific: a Bundle class registered in AppKernel, a DependencyInjection extension that merges configuration, service definitions, and (typically for this era) an Resources/public asset tree published via assets:install or Assetic. Laravel has no equivalent bundle lifecycle — no kernel registration, no automatic config merge, no Twig-by-default, no Assetic. Nothing about the package's PHP surface is reusable in a Laravel app. The only portable payload is the vendored CKEditor 4 "Widget" plugin (plugin.js, icons, dialog/CSS assets) plus whatever config.extraPlugins / allowedContent boilerplate the bundle sets.
Integration feasibility — feasible only as asset vendoring. We are not integrating a library; we are extracting static JS/CSS. That is a half-day of work and does not justify a Composer dependency. Real integration questions sit on the CKEditor side, not the Symfony side: Widget (CKEditor 4) requires nested editable regions and relies heavily on Advanced Content Filter configuration (allowedContent, extraAllowedContent), and misconfiguration causes silent markup stripping — a class of bug that looks like data loss to end users. If the product requirement is "WYSIWYG editing of structured custom content blocks," CKEditor 5's native block/widget architecture or a maintained editor (Tiptap, Lexical) is the better target; CKEditor 4 reached end-of-life in June 2023.
Technical risk — high, concentrated in abandonment and EOL.
php >=5.3 (or at best ^5.3|^7.0) and Symfony ~2.x requirements; Composer will refuse to install it alongside a modern Laravel (php ^8.1+, Symfony 6/7 components pulled in transitively). Conflict resolution would require --ignore-platform-reqs — an unacceptable signal in a production dependency graph.Key questions for the team:
Stack fit — none at the framework layer. Treat this as a reference implementation to read, not a dependency to install. Concretely: clone the repo, diff its Resources/public against the upstream CKEditor 4 Widget plugin distribution, and take the plugin assets plus the configuration snippets. Do not add stinger/ckeditor-widget-bundle to composer.json; the platform requirements will not resolve and the Symfony wiring is dead weight.
Migration path (vendor, don't install):
resources/js/vendor/ckeditor-widget/ (or public/vendor/), preserving MPL headers verbatim.CKEDITOR.plugins.addExternal('widget', '/vendor/ckeditor-widget/', 'plugin.js') and config.extraPlugins = 'widget', then define widget templates and the matching allowedContent rules in one centralised, reviewed config module — not scattered across Blade views.mews/purifier) enforcing an allowlist that mirrors the editor's ACF. This is roughly 200–400 lines and is fully owned by us.Compatibility. Pin CKEditor 4 to the final patched 4.x release and record it in the SBOM. Verify behaviour across the browsers we support; CKEditor 4's dialog/iframe internals are increasingly fragile under modern CSP — test with our production Content-Security-Policy early, since inline styles and unsafe-eval-adjacent patterns are common failure points.
Sequencing. (1) Two-day spike: read the bundle, confirm what it actually contributes, reproduce widget editing in a Laravel branch with vendored assets. (2) Decision gate: adopt vendored-assets-with-first-party-wrapper vs. re-platform to CKEditor 5 / Tiptap. (3) If we proceed with 4.x, build the sanitiser and ACF config before exposing to users. (4) Only after that, harden: CSP, XSS regression tests, upgrade note in the runbook.
Maintenance — we inherit everything. No upstream commits, no issue triage, no releases. Budget an owner and a recurring review slot (at minimum quarterly) to check for CKEditor 4 advisories and browser regressions. MPL-2.0 means our fork's modified files must be made available; if we patch the plugin, publish the patch — cheap to comply with, expensive to discover late during diligence.
Support. Zero community: 1 star and 0 dependents means no Stack Overflow corpus, no third-party patches, no one else hitting our bugs. Internal documentation is the only support tier. Contrast this with a maintained editor where an upgrade path exists at all.
Scaling. Genuinely low risk: static assets only, no runtime server cost, CDN-friendly, no database or queue involvement. The scaling concern is not load, it is content volume — thousands of widget-bearing documents make any future editor migration a content-transformation project, not a code change. That cost compounds with every month of adoption, which argues for deciding the editor direction now rather than after rollout.
Failure modes to instrument:
Ramp-up. Low for the asset extraction (hours); moderate for the parts that actually matter — CKEditor 4's widget API, nested editable regions, and ACF semantics constitute roughly one to two developer-weeks to reach productive proficiency, and that knowledge is scarce and depreciating. Recommend a single named owner rather than spreading it across the team, and capture the config decisions in writing so the knowledge does not leave with them.
Bottom line. The package is not the asset; the underlying CKEditor plugin is. Recommend reject as a dependency, evaluate as a reference — vendor the assets under a first-party wrapper, and run the re-platform decision in parallel, because the real cost here is the EOL editor we would be adopting along with it.
How can I help you explore Laravel packages today?