Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Ux Editorjs Laravel Package

makraz/ux-editorjs

makraz/ux-editorjs brings Editor.js to Laravel with Blade components and helpers for storing, editing, and rendering block-based JSON content. Add a clean, customizable block editor to your app with minimal setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Framing correction (blocking): The request frames this as a "Laravel/PHP package," but v0.1.0 is a Symfony UX Bundle (symfony/stimulus-bundle, EditorjsType form type, EasyAdmin field, Live Components). It is not usable from Laravel: there is no Laravel service provider, no Blade/Vue/React binding, no equivalent of Symfony's Form component or Twig form themes. Any Laravel-side evaluation should stop here and be re-scoped; the remainder of this assessment assumes a Symfony estate and is written so a TPM can re-target it if the underlying requirement was actually "block editor for a PHP app."

Architecture fit: Good fit for Symfony apps that already render forms server-side and want rich text without owning a JS build. The value proposition is genuinely architectural, not cosmetic: tool configuration is expressed as PHP enums/DTOs (CustomTool, AbstractTool, TuneInterface), so editor capability becomes declarative application config rather than a hand-maintained JS bundle. That shifts ownership from frontend specialists to backend teams and is the single strongest reason to adopt. Fit is poor for API-only/headless backends, for SPA frontends that already own their editor, and for any app where content must be authored or rendered outside a Symfony form.

Integration feasibility: Low-to-moderate effort for a single Symfony 6.4/7.x app on PHP 8.1+. Prerequisites are real but standard: Stimulus bundle present, an asset pipeline (AssetMapper or Encore — both supported), and for the 11 community tools, adding and pinning the corresponding npm packages. No custom JS is required for the 16 built-in tools, which is the headline feasibility win. The friction points are (a) EasyAdmin and Live Component paths are advertised but only lightly described, and (b) content is fundamentally Editor.js JSON blocks, not HTML — integration is not complete until a renderer and a sanitization layer exist on the read path, and that work is not in this bundle.

Technical risk:

Risk Severity Why
Experimental status, explicit no-BC-guarantee High v0.x with stated breaking changes between releases; unsuitable for a critical authoring path without a pin-and-fork policy
Raw HTML tool + editorjs:change payloads High Stored JSON is rendered later; without a strict sanitizer this is a stored-XSS vector. Not addressed in the notes
Built-in upload controller High Three backends is convenience; auth, CSRF, per-user authorization, path traversal, MIME sniffing (declared vs. actual), and image re-encoding are unmentioned. Must be reviewed before exposure
Single-maintainer dependency Medium-High One-person project, v0.1.0, no stated license, SLA, or release cadence
JSON schema drift Medium Saved blocks embed tool names/versions; upgrading Editor.js or a tool package can orphan stored content
Asset pipeline drift Medium Dual AssetMapper/Encore support widens the test matrix; the supported path may lag

Key questions for the maintainer / internal spikes:

  1. License and long-term maintenance intent — is there a commit to a 1.0 with a BC policy?
  2. Does the upload controller ship with authorization/CSRF guidance, and does it validate real MIME type and re-encode images?
  3. Is there a recommended server-side JSON→HTML renderer or a Symfony Twig extension, or is that wholly ours to build?
  4. What is the tested-against Editor.js version, and how are community tool DTOs versioned against their npm packages?
  5. Behavior and limits under Stimulus/Turbo navigation and Live Components — is the data-live-ignore path production-tested or advisory?
  6. Is a stable JSON schema/migration story planned before 1.0?

Integration Approach

Stack fit: Target Symfony 6.4/7.x (8.x supported, but pin to what the estate can actually run) on PHP 8.1+, with symfony/stimulus-bundle >= 2.9.1. Confirm the asset strategy first — AssetMapper is the lower-friction path and removes a Node dependency for the 16 built-in tools; Encore is only justified if the app already has a Webpack build and needs the community tool packages. EasyAdmin and Live Components should be treated as optional, separately validated surfaces, not assumed.

Migration path (content is the hard part): The bundle swaps the authoring widget; it does not migrate or render existing content. Sequence:

  1. Read-path first. Build the JSON→HTML/Twig renderer and sanitizer against the existing field, so the app can display Editor.js JSON before any author writes it.
  2. Dual-read. Renderer accepts both legacy HTML and new JSON during transition; no data rewrite at cutover.
  3. Write-path pilot. Enable EditorjsType on one low-traffic content type behind a feature flag.
  4. Backfill decision. HTML→Editor.js JSON conversion is lossy in general (custom markup, embeds, tables); default to lazy conversion on next edit, not bulk rewrite.
  5. Deprecate dual-read only after the legacy tail is measurably gone.

This ordering is deliberate: it removes the only irreversible step (content rewrite) from the critical path.

Compatibility: Pin exactly — package version, Editor.js core version, and every community tool npm version — and record the trio in a lockfile plus a short ADR. Because the bundle's versioning is pre-1.0, treat minor bumps as potentially breaking and gate them behind a changelog review. If adoption is approved, plan to vendor/fork the bundle so a breaking upstream release or an abandoned maintainer is not a delivery blocker.

Sequencing for a TPM:

  • Week 0 (spike, ~2–3 days): prototype one form field on the target stack; confirm asset pipeline, multiple-instances-per-page, and Turbo/Live Component behavior.
  • Week 1–2: security review of the upload controller and the Raw HTML/editorjs:change path; decide local vs. Flysystem vs. custom UploadHandlerInterface.
  • Week 2–3: build the renderer + sanitizer (this is the real work item and should be its own ticket, not an afterthought).
  • Week 3–4: pilot one content type, instrument editor init failures and upload errors.
  • Post-pilot: decide on wider rollout, fork strategy, and internal ownership.

Explicit non-fit: Do not sequence this into a Laravel application. If the underlying need is "block editor in a Laravel app," the correct next step is to evaluate JavaScript-side Editor.js integration directly (or a Laravel-specific wrapper) and discard this bundle.

Operational Impact

Maintenance: The bundle absorbs JS configuration, which is a durable reduction in the maintenance surface — tool changes become PHP edits reviewed like any other config. But it adds a dependency you must track closely: pre-1.0, single maintainer, no stated BC policy. Budget a named internal owner and a quarterly "pin review." Assume you may need to patch the bundle yourself; confirm your team can read the Stimulus controller and the form type before committing.

Support: Community support only (GitHub issues). No commercial backing, SLA, or LTS. Ramp-up for a Symfony-fluent developer is genuinely short — a day or two to a working field, since no JS is required for built-ins — but the operational knowledge that matters (JSON schema, renderer behavior, upload security) lives with your team, not upstream. Document the content schema and the version trio in an internal runbook; that document, not the package, is what makes this supportable.

Scaling: Editor-side cost is per-user and negligible. Server-side considerations are content-shaped: JSON payloads are larger than equivalent HTML, so watch column size, request body limits, and the cost of parsing JSON on every render (cache rendered HTML). Uploads are the scaling pressure point — volume and egress are governed by your chosen backend (local disk does not scale horizontally; Flysystem/S3 does; the custom UploadHandlerInterface is the escape hatch for CDN-backed or virus-scanned pipelines). Search is a real gap: if content search matters, plan a JSON→plaintext extraction job, because block JSON will not index usefully as-is.

Failure modes to monitor from day one:

  • Editor fails to initialize (asset load, Stimulus controller not connected, Turbo navigation) → silent degradation to an empty or unstyled field; users may lose work. Instrument init success/failure explicitly.
  • Asset pipeline breakage after a deploy (AssetMapper versioned asset mismatch, Encore chunk split) → same symptom, harder to diagnose.
  • Upload endpoint failure or rejection (size/MIME policy) → editor reports an error mid-authoring; ensure the message is user-legible and the draft is not lost.
  • Stored XSS via Raw HTML or a community tool → highest-severity failure; sanitize on write and render.
  • Schema drift after an upgrade → previously saved blocks render blank or throw; this is the failure mode most likely to appear months later and be attributed to "the editor broke."
  • Upstream breaking release or abandonment → mitigated by pinning and, ideally, a fork you control.
  • Live Component / EasyAdmin edge behavior → the least-tested advertised paths; validate before promising either to stakeholders.

Ramp-up and recommendation: Treat v0.1.0 as pilot-grade, not platform-grade. Approved use: a time-boxed pilot on one non-critical content type in a Symfony app, with the renderer and sanitizer treated as first-class deliverables and the package pinned and vendored. Not approved: a Laravel integration (technically inapplicable), a bulk content migration at cutover, or exposure of the upload endpoint to untrusted users before a security review. Re-assess at 1.0 or on any sign of maintainer activity stalling.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels