genealabs/nova-gutenberg
Adds a Gutenberg block editor field to Laravel Nova, letting you build rich content with WordPress-style blocks inside your admin panel. Stores block content as JSON/HTML and renders it on the front end, bringing flexible page building to Nova resources.
Architecture fit. The package is a single Laravel Nova Field, not a new subsystem. It registers alongside Text, Markdown, and File fields, so the integration boundary is narrow: one Gutenberg::make('content') call, one json (or longText) column, published assets. Server-side behavior is essentially "persist block JSON, render HTML." That is a favorable architectural profile for a TPM — low blast radius, reversible, and easy to scope. The consequence to surface early is that content becomes an opaque block document: Nova's native search, sorting, filtering, and validation treat it as a blob, so any querying, indexing, or server-side transformation becomes custom application work rather than field configuration.
Integration feasibility. A proof of concept is genuinely cheap — Composer install, publish assets, migrate a column, drop the field into one resource. That is a day, maybe two. Production readiness is the real estimate: CI asset publishing, a media/embed resolution decision (the supplied docs do not state whether image blocks accept URLs, Nova file references, or disk paths — this must be established from source), an HTML sanitization and render pipeline for anything public-facing, and a content migration from the existing storage format. Crucially, feasibility here is established by reading source and testing, not by reading documentation; the docs are a changelog entry plus a marketing blurb.
Technical risk — high. The repository is archived, last released 2024-03-12 (a Composer dependency fix), with 106 stars and zero dependents. Zero dependents matters to a TPM: there is no downstream population to discover breakage first, no community fork, no de facto compatibility testing against newer Nova releases. The package transitively pins Laraberg plus a bundled Gutenberg/React asset set — a large JavaScript surface with a recurring advisory cadence — and its coupling to Nova major versions is unproven beyond early 2024. The JSON block schema also becomes your system of record, which is a format lock-in and schema-drift decision made implicitly if you adopt without planning. Sanitization ownership is undocumented, and stored HTML rendered on public pages is a direct XSS consideration.
Key questions the TPM must close before committing.
Stack fit. Valid only where Laravel Nova is already a committed platform choice (Nova is paid and per-project licensed, so this is a pre-existing bet, not one this package justifies). It is an admin-authoring tool, not a front-end rich-text component; if the need is rich editing on public-facing forms, the correct dependency is Laraberg directly, not this field. Verify the Composer constraints shipped in 0.6.1 against our PHP and Nova versions before any scheduling commitment.
Migration path. Add a new nullable json column; do not overwrite existing content. Legacy HTML or Markdown enters the editor as raw-HTML or classic blocks at best — expect fidelity loss on the first pass and budget a dry run against a production snapshot to quantify it. Persist rendered HTML into a separate cache column so public pages never parse blocks per request. Keep the legacy field mounted and readable behind a feature flag so rollback is a configuration change rather than a data restore.
Compatibility. Pin everything explicitly: package tag, transitive Laraberg version, Nova major/minor, PHP, and the Node toolchain if assets are rebuilt. Because upstream is archived, treat "compatibility" as an internal capability rather than an upstream promise — vendor or fork the package into a private repository at the pinned commit so we control patch timing instead of waiting on an absent maintainer. Every Nova upgrade becomes a gated change with a regression pass on this field.
Sequencing.
Maintenance. Archived status converts this from "a dependency" into "an owned component." The carrying cost is not code volume; it is upgrade coupling plus periodic security review of a large bundled front-end. Budget a recurring line item for a named owner, a Gutenberg/React advisory review on a fixed cadence, and a patch path exercised at each Nova upgrade. Without that commitment, the field becomes a latent blocker sitting on the admin layer — the layer nobody wants broken.
Support. No vendor, effectively no community. Editors will file issues against our team, not GitHub. Provide an internal runbook covering the three predictable tickets — "editor won't load," "block content disappeared," "page renders raw markup" — with a triage route to the fork owner. The compensating factor is Gutenberg familiarity: anyone who has used WordPress already knows the interaction model, so first-line confusion and training cost are unusually low for a rich editor.
Scaling. Two dimensions. Data: JSON documents grow with length and embed count, affecting row size, backup volume, and searchability — plan on generated/extracted columns or an external index for anything that must be queried. Delivery: rendering must be cached as HTML; if it is not, every page view pays block-parsing cost. Editor load adds a heavy JS/CSS payload to admin screens, which is fine for a small editorial team and noticeable for a large one. Media belongs on shared storage or a CDN so block URLs survive deployments and environment rebuilds.
Failure modes. Highest likelihood: a Nova major upgrade breaks field registration or asset loading. Highest severity: unsanitized block HTML rendered publicly (XSS), or a render exception blanking content pages when JSON is malformed. Also expect asset-publish 404s and CSP violations after deploys, broken image/embed references after storage moves, silent loss of in-progress edits without autosave or revisions, and simple abandonment — bugs that will never be fixed upstream. Attach a detection signal to each: admin-side error logging, render-failure alerting with a fallback to raw content, CSP violation reporting, and a smoke test in the deploy pipeline that opens the field and saves a block.
Ramp-up. Engineering: one to two days for a developer already fluent in Nova to reach a working POC; one to two sprints to reach production readiness once sanitization, migration, and the fork are in place. Editorial: near zero — that is the core value proposition and the strongest argument for adopting. Leadership: one page of framing — "free, archived, we own it, accelerating now, reviewed at each Nova upgrade, revisit if fork cost exceeds a purpose-built editor on a maintained library." That last sentence is the TPM's standing exit criterion and should be written down before the pilot begins.
How can I help you explore Laravel packages today?