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

Nova Tinymce Laravel Package

emilianotisato/nova-tinymce

Nova TinyMCE adds a full-featured TinyMCE WYSIWYG editor field to Laravel Nova, enabling rich text editing with configurable toolbars, plugins, and media support for managing HTML content directly in Nova resources.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. emilianotisato/nova-tinymce is a Nova field package, not a standalone editor or CMS. It contributes two thin artifacts: a PHP field class extending Laravel\Nova\Fields\Field and a Vue component registered into Nova's asset pipeline. It does not own content storage, routing, rendering, or the media library — content persists as an HTML string in whatever column the resource already maps, and uploads land on a Laravel filesystem disk. From a TPM lens, this is favorable: the integration is additive and reversible, the blast radius is confined to Nova resource forms, and the package imposes no new architectural pattern the team must learn. The coupling that matters is to Nova and TinyMCE, two independently versioned third parties, not to the package itself.

Integration feasibility. Low ceremony: Composer install, publish config/assets, register TinyMCE::make('Body') on one or more resources, point uploads at a disk. The genuine prerequisites are decisions, not code — a paid Nova license, a TinyMCE distribution strategy (self-hosted bundle vs. Cloud API key with quotas), a storage target (local public disk vs. object storage), and a server-side HTML sanitization control. The package's differentiated value over Nova's stock fields is the inline image-upload path; everything else wraps TinyMCE's mature editor. That framing matters for scoping: you are buying an upload plumbing shortcut plus a field wrapper, not editor capability.

Technical risk.

  • Single-maintainer, thin ecosystem. 116 stars and effectively zero reported dependents means bus factor of one and little community validation. Treat as "adopt with a pre-approved exit plan," not a strategic dependency.
  • Dual version-drift exposure. The package must track Nova majors (Vue component API and field conventions shift across releases) and TinyMCE majors (v5→v6→v7 changed and removed APIs). A lag on either axis can strand you mid-upgrade, and the package's release cadence is the pacing item.
  • TinyMCE licensing/distribution. The editor's own terms — self-hosted community build vs. Cloud API key with usage quotas and premium gating — are a procurement/compliance question that must be resolved before rollout, not discovered in production.
  • XSS surface. Client-side editor filtering is not a security boundary. Stored rich HTML later rendered to users is a classic injection vector, and sanitization is the application's responsibility, not the package's.
  • Upload hardening unverified. MIME sniffing, size caps, per-disk authorization, and Nova field-level authorization on the upload endpoint must be read in source and tested rather than assumed.

Key questions.

  1. Which Nova and TinyMCE majors are actually tested in the current release — is there a compatibility matrix, and how stale is the last release relative to the latest Nova?
  2. Does the upload endpoint enforce authentication, MIME/size validation, and Nova's field-level authorization?
  3. Does the package ship or document any server-side sanitization hook on save, or is that entirely ours?
  4. How are TinyMCE assets sourced (bundled, CDN, Cloud key), and what is the failure behavior when that source is unreachable?
  5. Are uploads routed through a configurable disk abstraction (S3-compatible) or hardcoded to local public storage?
  6. What is the maintainer's responsiveness on issues and PRs — a proxy for whether upstream will absorb the next Nova major?
  7. Is there a documented path from an existing Text/Trix field with populated HTML content?

Integration Approach

Stack fit. Strong if and only if the application already runs Laravel Nova; the package has zero value outside it. Teams on Filament, plain Blade, or a separate CMS should stop here. Within Nova the fit is clean and conventional: PHP field class on the backend, Vue component in the Nova asset pipeline, HTML column in the database, files on a Laravel disk.

Migration path. Structural compatibility is easy — the field stores HTML, so columns previously edited by Trix, a textarea, or a CMS import are already the right shape. The real work is normalization: HTML from different editors diverges in tag vocabulary, inline styles, and embed conventions, and will render inconsistently under TinyMCE's schema. Budget a one-time audit-and-sanitize pass over existing content rather than assuming byte-compatible round-tripping; this is the step most likely to be underestimated in a sprint plan.

Compatibility. Pin a verified matrix before committing: PHP, Laravel, Nova, and TinyMCE majors, with the package version pinned in composer.json under a non-floating constraint. Given the thin maintainer base, an unattended minor bump is a credible regression vector. Also confirm the publish/build step (nova:publish / vendor:publish) works in your deployment model — particularly if you build immutable container images without a writable public/vendor at runtime. That is a build-pipeline concern a TPM should surface early because it crosses team boundaries.

Sequencing.

  1. Spike (1–2 days): install on a disposable branch, wire one non-critical resource, verify upload destination, inspect sanitization behavior, and load the editor with network egress restricted.
  2. Sanitization first: land server-side allowlist-based HTML cleaning before the editor reaches authors. Security control precedes feature exposure.
  3. Thin internal wrapper: wrap the field in your own class so a future editor swap touches one file, not every resource.
  4. Pilot: one internal, low-traffic resource with 2–3 trusted editors, observed for a sprint against explicit success criteria.
  5. Broad rollout: remaining resources, with a documented field configuration snippet to keep resources consistent.
  6. Exit hatch live: pinning policy, fork budget, and named owner documented before general availability.

Operational Impact

Maintenance. Ongoing cost is modest but recurring and non-zero: tracking Nova upgrades, tracking TinyMCE releases, and re-validating the upload path whenever filesystem or auth configuration changes. The dominant risk is abandonment. Budget for a fork as a pre-approved option — cheap here, since the surface is one PHP class plus one Vue component — rather than an emergency scramble in the middle of a Nova upgrade.

Support. No commercial support and no SLA. Support is GitHub issues plus reading source. For a surface content authors touch daily, your internal team is the first and often only line of support; assign a named owner explicitly, because "the team" means "nobody" when the editor breaks on a Tuesday.

Scaling. Content scaling is a non-issue — HTML in a text column behaves like any other text. The pressure point is media: uploads grow storage and egress linearly with editorial activity. Route uploads to object storage behind a CDN from day one rather than retrofitting, and plan server-side resizing/compression, which the package will not do for you. Editor assets should be self-hosted or cached so a third-party CDN is not in the critical path of every admin page load.

Failure modes.

  • Asset/CDN failure: TinyMCE fails to load, the field degrades to blank or broken, and authors are blocked. Mitigate by self-hosting assets and testing with egress blocked.
  • API key exhaustion or revocation (Cloud mode): same symptom, slower diagnosis. Prefer self-hosted; alert on editor load errors.
  • Upload misconfiguration: wrong disk or missing storage:link produces successful uploads and broken images — silent from the author's view. Smoke-test in staging after every storage-touching deploy.
  • Nova upgrade breakage: field component incompatible with a new Nova major; editor vanishes or errors on forms. Pin versions and upgrade Nova and this package together on a branch.
  • Unsanitized HTML → stored XSS: highest severity, and the one the package cannot prevent. Sanitize on write, escape or sanitize on render, and cover it with tests as a named security control.

Ramp-up. Author ramp-up is near zero — TinyMCE is the Word-like editor content people already know, and that familiarity is a legitimate argument for this package over Nova's stock fields. Developer ramp-up is also low for anyone fluent in Nova: one field class and one Vue component. The ramp-up that actually costs time is operational — understanding the upload path, the asset pipeline, and the sanitization boundary. Budget half a day to write that down so the knowledge does not live solely with whoever ran the spike.

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.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route