lilac-wysiwyg/lilac
Lilac is a modern WYSIWYG editor for Laravel applications. It offers a simple Blade component, clean HTML output, image upload support, and configurable toolbars, making it easy to add rich text editing to your app.
0.7.1), this is a low-signal dependency. The PM decision it supports is whether to absorb maintenance risk in exchange for speed — and whether to budget a fork/escape hatch up front.dist/lilac.umd.js) because a publish hook deleted it before packing — meaning the previous release was effectively broken for anyone installing it. A patch one release later fixed it. This is a concrete data point for "how much release QA does a solo maintainer do?", and it strengthens the case for pinning exact versions and smoke-testing every bump rather than floating constraints.text column and rendered behind authentication.Consider it when all of the following hold:
window.Lilac — so no JS build step on your side, but also no ESM/module import path: plan on a script tag or publishing the asset, and be aware of the global namespace and any CSP implications.0.x semver, treat every minor bump as potentially breaking.Look elsewhere — or plan to build — when:
Evaluation questions — status after v0.7.1: Bundled JS or build step? Answered: prebuilt UMD at dist/lilac.umd.js, window.Lilac global, no consumer build required (and it's built from TypeScript in the maintainer's pipeline). Still open: What's the storage format and can you export it? How are image/file uploads handled and validated? Is content sanitized on input, output, or not at all? Is the toolbar configurable per role? What's the upgrade path if the maintainer stops shipping? Add one more: Does a release actually contain the artifacts it claims? — v0.7.0 proves that isn't guaranteed, so verify dist/ contents on install rather than trusting the tag.
To executives: This is a small, MIT-licensed editor component that lets us ship rich-text authoring inside our Laravel admin without dedicating engineering time to building an editor from scratch. It converts roughly a sprint of undifferentiated frontend work into an afternoon of integration, and it's easy to replace later if content authoring becomes a competitive surface. The trade-off is maturity: it's early-stage (version 0.7.x), single-maintainer, with effectively no production users — and the most recent minor release shipped broken and needed a patch a release later to restore its main JavaScript file. That's a fair proxy for how much release QA we should expect. I'd recommend it for internal and low-risk authoring only, with an exactly pinned version, a smoke test on every upgrade, and a plan to swap it out. Cost is near zero; the real risk is maintenance, which we cap by isolating it behind our own editor abstraction.
To engineering: Treat this as a thin, replaceable adapter, not a foundation. Wrap it so the rest of the app depends on our editor component contract, not the package's API or the window.Lilac global — that keeps a swap to Tiptap/TinyMCE a one-file change and keeps the global out of the rest of our code. Two non-negotiables before merge: server-side HTML sanitization on render (never trust editor output), and validated, non-executable image uploads; note that 0.7.1 contains zero security-relevant changes, so nothing about paste handling or sanitization got better between 0.7.0 and now. On packaging: the asset question is settled — it's a prebuilt UMD bundle, no build step, but also no ESM path, so decide now whether a script tag plus a global is acceptable under our CSP and bundling conventions. Pin the version exactly and diff dist/ on upgrade; v0.7.0's publish hook was silently deleting the UMD build before packing, which is the kind of failure that only shows up at runtime. Assume any 0.x minor bump can break us.
Ask: Approve a timeboxed spike (1–2 days) to validate sanitization, uploads, artifact integrity on install, and upgrade ergonomics. If the spike is clean, adopt for internal authoring and revisit when we either hit a feature ceiling or see the maintainer go quiet for two consecutive release cycles.
How can I help you explore Laravel packages today?