openstudio/page-builder-bundle
A Laravel package that provides a flexible page builder for composing and managing content pages from reusable blocks, with bundled components and tools for defining, rendering, and editing page layouts in your application.
Architecture fit. The package is a Symfony 7 bundle wrapping GrapesJS, not a Laravel package. That distinction drives the entire evaluation. A Symfony bundle is a packaging convention — DI extension, service configuration, Twig/asset registration, bundle registration in config/bundles.php. None of that is portable to Laravel. The README's "standalone, framework-agnostic" claim is the only path to reuse in a Laravel codebase, and it is unverified: with 1 star and 0 dependents there is no evidence of anyone consuming the framework-agnostic layer independently of the Symfony integration. Architecturally, the reusable asset is the GrapesJS editor shell plus a persistence contract for page/block JSON; the Symfony glue is disposable. Treat this as "a GrapesJS integration reference implementation we may fork or vendor," not "a dependency we install."
Integration feasibility. Medium-to-low for a Laravel target. Realistic path: extract the GrapesJS front-end assets and the HTML/JSON storage shape, then re-implement the server side as a Laravel package (service provider, config publish, migrations, storage driver, policy/authorization hooks). That is closer to a 2–4 week build than an afternoon composer require, and the effort is dominated by the parts this package cannot supply for us — multi-tenancy, revision history, content sanitization, and media handling. If the target stack were Symfony 7, feasibility rises sharply to maybe a 1-week spike, because the bundle conventions do the wiring for us.
Technical risk.
Key questions for the maintainer / spike.
Stack fit. Poor as a direct dependency for Laravel; good as a reference implementation. The GrapesJS editor is the genuinely valuable, genuinely framework-agnostic half — it is a JS library that talks to a save/load endpoint. Our Laravel side wants: a route group for load/save/publish, an Eloquent-backed pages table with a JSON content column, a media/asset endpoint, policy-based authorization on edit vs. publish, and Blade/Vite-delivered editor assets. The Symfony bundle gives us a worked example of that boundary, not a drop-in.
Migration path. Do not attempt to run the bundle under Laravel via a Symfony-compat shim. Two viable options:
Compatibility. Verify PHP version ceiling/floor against our runtime, Symfony 7 constraint (irrelevant for Option A except as a signal of recency), and GrapesJS major version. Check whether the bundle assumes Doctrine ORM for persistence — if so, the storage layer is entirely non-portable to Eloquent and Option A is forced. Also confirm asset delivery assumptions (Webpack Encore vs. Vite) since that determines how much front-end glue we rewrite.
Sequencing.
Maintenance. We should assume we own this code. Forking under LGPL-3.0 is permitted, and given the adoption profile, a maintained internal fork — with upstream syncing as an optional courtesy rather than a dependency — is the realistic operating model. Budget roughly 10–15% of one engineer's time ongoing for GrapesJS upgrades, security patches, and editor bug triage. If we adopt the Symfony bundle directly in a Symfony app, maintenance drops but we inherit the upstream bus factor.
Support. No commercial support indicated, no dependents to consult, and a single publisher. Internal support will be first-line; there is no community to escalate to. Document the fork's ownership explicitly in the service catalog so it does not become orphaned code nobody claims.
Scaling. The PHP side is thin — save/load of a JSON blob — so it scales like any CRUD endpoint and is not the bottleneck. The real scaling questions are (a) payload size of saved page documents as pages grow, which affects DB row size and API latency, and (b) rendering: if pages are server-rendered per request, cache aggressively; if rendered client-side from JSON, the editor bundle size and asset caching become the concern. Neither is unusual, but both must be designed rather than inherited.
Failure modes.
schema_version field in stored documents from day one.Ramp-up. Low for a mid-level Laravel engineer to use the editor; moderate to own it. GrapesJS has a real learning curve for plugin and block customization, and the team will need one engineer comfortable with its block/component model rather than just its config. Expect 1–2 weeks of ramp for the owning engineer, plus a short design handoff so the content team's block requirements are expressed as GrapesJS blocks rather than ad-hoc HTML — otherwise the first six months produce an unmaintainable pile of hand-authored markup. Overall recommendation: do not adopt as a dependency; do run a one-week spike and treat it as a reference implementation for a native build. The opportunity score (~58) reflects genuine demand for a PHP page-builder capability; the package score (~18) says this specific artifact is not the thing to bet production on.
How can I help you explore Laravel packages today?