alaminfirdows/laravel-editorjs
A Laravel package for integrating Editor.js, the block-style content editor. It helps you store, parse, and render Editor.js JSON output in Laravel apps, making block-based content easier to use in models, controllers, and Blade views.
Architecture fit. laravel-editorjs is a thin integration layer between a Laravel application and Editor.js (a block-based JSON content editor). Architecturally it occupies a narrow but useful seam: it handles asset publishing/registration, server-side sanitization and validation of block JSON, a storage convention for block payloads, and — as of v2.4.0 — Blade-level rendering via @editorJsRender(). That directive is the most consequential change in this release for a TPM, because it moves the package from "editor input handling" into "presentation layer," which is where escaping, XSS surface, and output-consistency concerns live. Teams should treat it as a rendering dependency, not just a form widget.
Integration feasibility. Low-to-moderate effort. Installation is composer + artisan publish, with a config file governing tool registration and upload handling. The v2.4.0 additions (warning tool, Blade directive, PHP 8.4, Laravel 12/13 compatibility) are additive and non-breaking relative to v2.3.0, so an existing integration should upgrade cleanly. The main integration cost is not the package itself but the surrounding decisions it does not make for you: where block JSON is persisted (JSON column vs. text), how media uploads are handled (Editor.js image/file tools expect an endpoint the package stubs but does not own), and how rendered output is styled. Those are real scoping items that tend to surface mid-sprint if not called out upfront.
Technical risk.
Key questions.
@editorJsRender() the intended production rendering path, and has anyone reviewed its escaping behavior with untrusted author input?Stack fit. Strong fit for a conventional server-rendered Laravel monolith using Blade, where content authors are trusted staff (CMS pages, blog posts, internal docs). Weaker fit for API-first or SPA architectures, where the package's Blade-centric rendering adds little and you would use Editor.js directly on the frontend and handle block JSON in your own API layer. The v2.4.0 directive reinforces this bias toward Blade — worth naming explicitly, because it is a directional commitment, not a neutral feature.
Migration path. From v2.3.0 the upgrade is in-place: composer update, republish config/assets if the warning tool needs registration, and clear view caches so the new Blade directive registers. No data migration is implied — block JSON schema is unchanged for existing tools. For teams not yet on the package, this release makes adoption more attractive than v2.3.0 purely because Laravel 12 support removes a blocker for anyone who has already moved to 12.
Compatibility. The matrix now spans a wide band of Laravel and PHP versions, which is good for heterogeneous estates and mildly concerning for test depth — a wide matrix with newly added tests invites the question of whether every cell is actually exercised. Recommend we verify only the cells we run and not rely on the changelog's implication of uniform support. Also flag that "Laravel 13" support is presumptive until that framework ships.
Sequencing.
@editorJsRender() output with representative untrusted content, including a custom tool if we intend to use one.Maintenance. Low ongoing cost — no background services, no migrations, no scheduled work. The recurring cost is upgrade tracking against Laravel releases, which the package currently tracks well (11 → 12 → 13 in successive releases). Budget roughly a small recurring slice per Laravel major to bump and re-verify, and treat the wide compatibility claim as something to test rather than trust.
Support. Support surface is GitHub issues and PRs from a small maintainer group. There is no commercial backing and no LTS commitment. For a non-critical CMS surface that is acceptable; for anything customer-facing at scale, we should hold a fork-ready posture — meaning: keep our integration thin, avoid patching the package in place, and isolate package-specific calls behind our own service or Blade component so a fork or replacement is a contained change.
Scaling. The package is not in the request hot path in any meaningful sense — it validates and renders content. Scaling concerns are the ones it inherits: rendering cost of large documents with many blocks, and image tool upload endpoints (bandwidth and storage), which are ours to own. The new directive adds a per-render cost that is trivial in isolation but worth noting if content-heavy pages render dozens of documents per request; cache rendered HTML at the fragment level if that emerges.
Failure modes.
Ramp-up. A Laravel developer can be productive with the package in under a day; the learning curve is Editor.js's block model, not the wrapper. The Blade directive lowers the bar further by removing the need to hand-write a renderer. Plan for roughly a day of onboarding plus a half-day of security review for whoever owns the rendering path, and make sure at least two engineers have touched the integration so the maintainer-concentration risk is not mirrored internally.
How can I help you explore Laravel packages today?