advoor/nova-editor-js
A Laravel Nova field that brings Editor.js block-style editing to your admin panel, letting you create clean structured content and render it as HTML. Easy to install and customize for any Nova resource.
Admin authoring strategy — where content gets written. Choose between (a) block-based editing inside the Nova admin the team already runs, (b) standing up a separate CMS, or (c) commissioning a bespoke Nova field. This package makes option (a) a realistic near-term move: it is the shortest path from "we need better content editing" to a working Editor.js surface in Nova, without a new system or a new tool for editors to learn.
Build vs. buy vs. adopt — a concrete "adopt" option. Against "build a custom Nova + Editor.js field," adoption trades a few weeks of engineering for a thin, low-signal dependency (92 stars, 0 dependents, niche maintenance). Frame it as a tactical bet, not a platform commitment: buy the capture layer, own the content contract.
The content model decision (the real decision). The package forces an explicit product call: is content structured block JSON — where rendering, validation, sanitization, and schema versioning are downstream responsibilities we own — or an opaque HTML string? The package captures the choice; it does not solve it. Everything that makes content useful is ours.
Roadmap enablement without a CMS migration. Unlocks blog posts, marketing/landing pages, knowledge bases, help centers, documentation, and richer product descriptions inside Nova — provided the rendering path is scoped in the same breath as the authoring path. A roadmap item that looked like a Q+ CMS project becomes a scoped engineering task.
CMS-light product direction. Keeps content in the same admin as the rest of the business data, with a portable JSON representation, instead of bolting on a second system with its own users, permissions, and editorial model.
Operational consolidation. Reduces tool sprawl: ops and content teams author where they already work. Cuts onboarding surface and any per-seat or license overhead for a separate editorial tool.
Multi-channel distribution strategy. If the same content feeds a Blade site, a mobile API, an email, and a search index, this package's JSON-first model supports a "JSON as source of truth, normalized HTML/Markdown as the fast path" architecture — but it commits us to writing and maintaining that normalization layer ourselves.
Dependency and risk posture. The niche profile should trigger an explicit maintenance, compatibility, and fork-budget review before it becomes roadmap-critical. Treat it as a "pilot, then decide" input, not a default-yes.
Resourcing ownership. An undeclared but real decision: someone must own the renderer, sanitizer, block contract, and Nova-upgrade maintenance. This package is a capture component; the content platform around it is our build.
Consider it when:
public/vendor must be published in every environment — the single most common "works locally, blank editor in production" failure).editorjs-php, editorjs-html, or a custom Blade/Inertia component — plus a sanitizer and a block allowlist. These are effectively undeclared hard dependencies the team must own.json column, not an existing text/longtext column holding HTML or Markdown (Editor.js will overwrite legacy content on first save).Look elsewhere when:
packages/ within a year so an upstream delay never blocks a release.Gate the decision on a 1–2 day spike: install, publish assets, author a post with a heading, paragraph, and list, dump the raw JSON column, and render it on a staging Blade page with a server-side renderer. If rendering is painful, stop — the package gives you capture, and rendering is the whole job. Exit criteria: a green/red call on rendering effort and on Nova/Editor.js version compatibility.
Executive summary. We can bring modern, block-based content editing into the admin we already run — blog posts, docs, help center, marketing pages — without buying or building a CMS. This package is a Nova field that gives editors a clean Editor.js experience and stores content as structured JSON rather than raw HTML, so the same content can later be rendered to the website, apps, or email. It is a small, single-purpose dependency, not a platform: it handles editing, and we own rendering. The recommendation is a short, bounded pilot, not a permanent commitment.
For engineering. Thin surface area: a Vue field component, a config file listing enabled Editor.js tools, and image uploads routed through existing Nova disk configuration. Real work is ours and should be planned explicitly: a server-side renderer (editorjs-php or equivalent) with caching, a block allowlist/normalizer on save, HTML sanitization at write time (raw HTML blocks are a stored-XSS vector against both admin and public site), a plain-text shadow column for search and index previews, and envelope/schema versioning. Two operational must-dos: asset publishing in the deploy pipeline, and pinning Editor.js tool versions. Assume we fork or vendor the package within a year.
For the content/ops team. Fewer tools, fewer formatting accidents, and structured output that renders consistently across pages. Two honest caveats to set expectations early: paste-from-Word will look ugly unless we enable a paste cleaner, and two editors on the same record will overwrite each other — no locking.
Risks and asks.
Timeline framing. The install is trivial; the first real milestone is rendering the stored JSON back to safe HTML. Scope the pilot to one low-risk resource, one block vocabulary, and one staging page. Decide to expand, fork, or replace once that path is proven end-to-end.
How can I help you explore Laravel packages today?