kms/froala-editor-bundle
A Laravel bundle that integrates the Froala WYSIWYG editor into your application, providing a ready-made rich text editing field with its assets, configuration, and framework-friendly setup for quickly adding Froala to forms and content management screens.
Architecture fit — poor for a Laravel estate. Despite being filed under a Laravel/PHP package review, kms/froala-editor-bundle is a Symfony bundle, not a Laravel package. It ships a Symfony Bundle class, a DI extension, a configuration tree, and Twig-based form themes. Laravel has no bundle loader, no Configuration/Extension semantics, and uses Blade rather than Twig. Adopting it inside Laravel means either (a) pulling symfony/* components into a Laravel app and hand-wiring the service definitions outside the framework's container conventions, or (b) extracting the small amount of value it provides (a form type and asset registration) and reimplementing it natively. Option (b) is almost always cheaper.
Integration feasibility — technically possible, strategically low-leverage. The bundle is thin: it registers Froala assets, exposes a config tree, and provides a Symfony form type wrapper. That surface area is roughly 100–200 lines of glue in a Laravel context (a Blade partial, a config file, a Vite entry). The cost of bridging Symfony DI into Laravel exceeds the cost of writing the glue. There is also an asset-pipeline mismatch: the bundle assumes Symfony's asset/Webpack Encore conventions, while a modern Laravel app uses Vite.
Licensing is the dominant risk, not the code. Froala Editor is commercial software. Production use requires a paid license key that is typically domain-bound; the PHP bundle is only the integration shell and does not grant rights to the editor. Any adoption decision is really a procurement decision: per-seat/per-domain cost, key rotation, staging vs. production domain binding, and whether a self-hosted build is permitted under the chosen tier. This must be resolved before technical evaluation continues — a license blocker invalidates all downstream work.
Community and lifecycle risk — high.
Key questions to put to the vendor/team:
Verdict: Do not adopt the bundle in a Laravel codebase. Treat the underlying Froala editor as the actual decision, evaluate it against TinyMCE, CKEditor 5, and Tiptap on license cost and feature fit, and if Froala wins, integrate it directly via npm + Vite rather than through this bundle.
Stack fit. Target stack assumption: Laravel 10/11, PHP 8.2+, Vite, Blade. The bundle targets Symfony 5/6/7 + Twig + Symfony Form. The overlap is the PHP language and nothing else structural. There is no Laravel service provider, no facade, no publishable config, and no Blade views. Fit is poor; the honest framing is "reuse the idea, not the package."
Recommended migration path (greenfield).
npm i froala-editor, import in resources/js/app.js, register the license key from config('services.froala.key') (env-driven, never committed), and bind the editor in a small Alpine or vanilla JS module.<x-rich-text name="body" :value="$model->body" /> that renders a <textarea> plus a data- attribute hook. This replaces the bundle's form type entirely and is ~20 lines.mews/purifier or HTML Purifier) on save. The editor's client-side validation is not a security boundary.link on success, error on failure). Implement a dedicated controller with MIME sniffing, size caps, randomized storage names, and auth checks — the bundle does not provide this, and it is where most real integration effort lands.Migration path (if a Symfony service already exists). In that case the bundle is a reasonable fit and the calculus inverts: it provides the form type, config tree, and asset registration for free, and the migration is a Composer require plus a config block. If the organization is mid-migration Symfony→Laravel, run the two in parallel and do not carry the bundle across the boundary — port to the Blade component at cutover.
Compatibility caveats.
package.json. Do not let the PHP bundle's transitive editor version and the npm version diverge if both are ever present — that produces two editor instances on one page.Sequencing.
Do not sequence this as "install the bundle, then adapt." The adaptation work is the entire work, and the bundle contributes nothing to it in a Laravel context.
Maintenance. Two maintenance surfaces, both vendor-controlled: the editor (frequent releases, security-relevant) and the bundle (sporadic). In the recommended direct-npm path you eliminate the second surface and inherit only the editor, which you upgrade on your own cadence via Dependabot/Renovate. In the bundle path you inherit a version-matrix dependency — the bundle's supported editor version, its supported Symfony version, and your PHP version must all align, and you cannot move any one independently. With 1 star and 0 dependents, expect to be the first to hit any incompatibility, with no Stack Overflow trail to search.
Support. The editor has a commercial support channel — that is the main argument for Froala and it is real. The bundle has no separate support commitment; issues are triaged as a side effect of vendor maintenance. Budget for the team to own the Laravel-side glue regardless of tier. If the license lapses or the tier is downgraded, the editor typically degrades to a watermarked/limited mode rather than failing hard — which is worse operationally, because it can ship silently to production.
Scaling. Editor work is client-side, so server scaling impact is minimal — the real costs are (a) JS payload, roughly 200–400 KB gzipped depending on plugins and language packs, which matters on mobile and on Core Web Vitals; (b) upload storage and bandwidth, which grows with content volume and needs lifecycle rules and CDN offload; and (c) sanitization CPU on save, which is negligible per request but should not run on read paths. Serve editor assets from your own CDN with long cache TTLs and versioned filenames. Avoid the CDN-hosted editor build if you need offline/air-gapped operation or strict CSP.
Failure modes to design against.
<textarea> fallback so content is never unreachable.script, on* handlers, javascript: URLs, and dangerous iframe/svg content on write. Treat every submission as hostile.Ramp-up. Frontend effort is low — a mid-level developer configures toolbar and plugins in under a day; the API is well documented by the vendor. Ramp-up cost concentrates in three places: license/procurement admin (legal + finance), the upload contract (backend), and sanitization policy (security review of the allowed-tag set, which is a product decision about what authors may embed). Plan roughly one sprint end-to-end for a Laravel integration including sanitizer, uploads, tests, and rollout — versus an indeterminate amount of time fighting a Symfony bundle adapter that no one on the team has run before. Onboarding new engineers to the direct-npm integration is trivial; onboarding them to a hand-rolled Symfony-in-Laravel bridge is a permanent tax.
How can I help you explore Laravel packages today?