numaxlab/nova-ckeditor5-classic
Integrate the CKEditor 5 Classic rich-text editor into Laravel Nova as a ready-to-use field. Provides a familiar WYSIWYG editing experience for content fields in Nova resources and forms.
Architecture fit. The package is a thin Laravel Nova field: a PHP Field subclass that hands off to a compiled Vue component wrapping a bundled CKEditor 5 Classic build. That shape is idiomatic for Nova 3.x and cheap to reason about — no service provider magic, no database migrations, no runtime services. The value it stores is plain HTML in a column you own, which means the data model is durable even though the integration is not.
The fit problem is version-scoped. Last release January 2021 places it squarely in the Nova 3 / Laravel 8 / PHP 7.x–8.0 window, with asset tooling built on Nova 3's Mix-era conventions. Nova 4 (Vue 3 + Inertia) and Nova 5 reworked the field component contract and the front-end toolchain; a Nova 3 field component is not expected to mount correctly, and the compiled bundle certainly won't match the current asset pipeline. Any team on a supported Nova release should treat this as a port, not an install.
Integration feasibility. Mechanically trivial: composer require, register the field on a Resource, publish assets. The blockers are non-mechanical:
composer.json, or vendor the source.Technical risk. High, concentrated in maintenance rather than in the code being wrong. Concretely: single-maintainer bus factor of one, 38 stars (effectively no community to inherit the fork), archived status, no CI signal, no tests to lean on after a fork, and a pinned third-party editor build. The low composite score (2.16) and opportunity score (2.38) are consistent with "works today, dead tomorrow."
Key questions for the spike.
Verdict: acceptable only as a short-lived, internal, Nova 3 artifact under an explicit fork-and-own commitment. Not acceptable as a component of a platform you intend to upgrade.
Stack fit.
| Stack | Fit | Notes |
|---|---|---|
| Nova 3.x / Laravel 8 / PHP 7.4–8.0 | Workable | Install as-is, then fork immediately |
| Nova 3.x / Laravel 9–10 / PHP 8.1+ | Fork required | Relax Composer constraints; smoke-test the Vue component |
| Nova 4.x / 5.x | Not viable | Component contract and asset pipeline diverge; rewrite |
| Non-Nova Laravel app | N/A | Field is Nova-coupled; use a standalone CKEditor integration |
Migration path. Two clean routes, and the choice should be made before the spike ends:
packages/ or a private VCS, rename the namespace, relax constraints, rebuild the CKEditor bundle from a current CKEditor 5 release under your own license terms. Cost is roughly 2–4 engineer-days for the initial fork plus a recurring tax. Buys you the existing UX with no author retraining.Compatibility work, in order of likelihood of pain. Asset publishing under the current Nova pipeline; Composer constraint relaxation; CKEditor 5 major-version drift in the bundled build config (toolbar/plugin registration API has churned); PHP 8.1+ deprecations in the field class.
Sequencing.
text/longText column with a stable shape. This decouples you from the field entirely — the editor becomes replaceable at any time.Maintenance. You are the maintainer from day one. The package's own maintenance cost is zero because it is zero-value to maintain upstream — archived means no PRs merged, no dependency bumps, no responses. Budget realistically: a few hours per quarter for dependency hygiene, plus a half-day whenever Nova, Laravel, or PHP majors move. That tax is modest but permanent, and it is the kind of line item that quietly disappears from a roadmap until it becomes an incident.
Support. None. No maintainer response, no issue triage, no security advisories. Internal support means an engineer who has read the field's compiled Vue component — a nontrivial ask if that person leaves. This is the dominant operational risk, not the code.
Scaling. Two dimensions, both benign. Author concurrency is bounded by your admin panel's traffic and is nothing CKEditor can't handle. The real scaling consideration is bundle weight in the Nova admin JS payload — CKEditor 5 Classic is a few hundred KB, which is a perceived-performance cost on slow connections and a reason to lazy-load the editor. Stored HTML rendering at scale is an application concern (sanitization, caching, output escaping), not a field concern. No database or queue implications.
Failure modes, ranked by likelihood × impact.
Ramp-up. Low for a competent Laravel developer — half a day to install, register, and configure the field. One to two days to be genuinely productive inside Nova field internals (Vue component contract, asset publishing, resolveUsing/fillUsing hooks). The hidden ramp-up is the replacement work later: whoever inherits this needs to reconstruct the decision context, which is exactly why the exit criteria belong in the repo README rather than a wiki.
Bottom line for planning. Treat this as a tactical, reversible choice with a known expiry date. Green-light it for an internal Nova 3 admin panel with a named owner and sanitization in place; block it for anything customer-facing, anything on a Nova upgrade path, or anywhere a licensing review is a gating step. The 2.16 score isn't a judgment on the code — it's an accurate read on the supportability of an archived, single-maintainer, version-pinned integration.
How can I help you explore Laravel packages today?