dinandmentink/nova-markdown
A Laravel Nova field package that adds Markdown editing and rendering to your admin resources, letting you author content in Markdown with preview and display it as formatted HTML. Easily integrate Markdown-based text fields into Nova.
Architecture fit
This is a single-purpose Nova field package: a PHP field class extending the Nova Field contract, a Vue component registered as a custom field, and a bundled JS/CSS asset pair published into Nova's admin bundle. It is a self-contained extension at the edge of the application, which is architecturally favourable for a TPM's purposes:
text/mediumText column. There is no proprietary serialization, no side tables, and no write path outside Eloquent. The field is a UI affordance over a string, which means it is fully replaceable without a data migration — the single strongest argument in its favour.Integration feasibility
Feasible for a greenfield or Nova 3-and-below installation, with verification gates:
composer.json constraints accept the target laravel/nova version. A package archived at this adoption level almost certainly caps at Nova 3.x, and Nova 4+ is the current line.dist/ is committed. If yes, integration can succeed without touching the front-end toolchain even on an older Nova. If it requires a local npm run prod against Nova's Mix/Vite setup, treat Nova 4+ as a hard incompatibility — Nova 4 migrated the field compilation toolchain and archived field packages reliably break there.illuminate/support to versions that block Laravel 10/11 upgrades. This is the most likely cause of a blocked platform upgrade, and it is a silent blocker until the day you try to move Laravel.Technical risk
| Risk | Severity | Likelihood | Note |
|---|---|---|---|
| Archived upstream — no security or compatibility patches | High | Certain | Mitigation is fork-and-own, not monitoring |
| Blocks Nova major upgrade | High | High | Upgrading Nova becomes an app-wide upgrade blocker |
| Blocks Laravel/PHP upgrade via Composer constraints | High | Medium | Detect in the spike, not in month six |
| XSS via rendered markdown (client preview and/or server output) | High | Medium | Package preview may render raw HTML; sanitization is your job |
| Stale third-party JS editor dependency | Medium | High | Editor libs in this generation are unmaintained |
| Bus factor 1, 36 stars | Medium | Certain | No community fallback; internal SME required |
Key questions
Textarea with a preview tab satisfy editors? The cheaper answer is often "textarea plus server-side render."Verdict: conditionally viable as a vendored, owned component for a Nova ≤3 estate; not viable as a straight Composer dependency for a Nova 4+ or upgrade-active estate. The 0.656 score and 0.53 opportunity score are consistent with "works today, decays predictably."
Stack fit
Laravel + Nova, plain-text storage, server-side rendering via league/commonmark (Str::markdown() on Laravel 9+) with HTML sanitization on the render path. The field slots into a resource's fields() method exactly like a core Textarea. Fit is clean provided the three feasibility gates in the previous section pass.
Migration path
The migration is almost entirely additive and reversible:
text or mediumText and is nullable during rollout.Text/Textarea fields to the markdown field per resource, one at a time.Textarea. Content is untouched. Plan for this and it becomes a near-zero-cost experiment.Compatibility
Build an explicit compatibility matrix before committing: Nova version × PHP version × Laravel version × asset toolchain. Two outcomes:
Sequencing
Maintenance
Archived status means the maintenance burden transfers to you on day one, whether or not you acknowledge it. Budget realistically: 2–5 days per quarter for dependency and asset upkeep, and 1–2 weeks per Nova major release to rebuild the field against the new toolchain. If the organisation cannot commit that, the honest answer is to not adopt the package. A vendored fork with CI that builds assets against the current Nova version and runs a smoke test on field registration converts this from an unknown liability into a bounded, estimable cost.
Support
There is no upstream support channel and effectively no community to draw on at 36 stars. Internal ownership is mandatory: a named engineer who can debug the Vue component and the asset registration. Documentation should be written at adoption time, not at first incident — the field's behaviour and the render/sanitization contract need to be discoverable by someone who did not integrate it.
Scaling
Negligible at any realistic scale. The added cost is a client-side editor bundle in the Nova admin JS payload (a few hundred KB, served to a small population of internal users) and Markdown-to-HTML conversion on the render path. The latter is CPU-cheap but should be cached — convert on write into a persisted HTML column, or cache the rendered output — because it otherwise runs per page view and, more importantly, per sanitization pass. Do not put a sanitizer on an uncached hot read path.
Failure modes
Ramp-up
Developer ramp-up is low — the Nova field API is conventional and the integration is a handful of lines. Content-editor ramp-up is moderate and is the real cost: Markdown is a notation, not a UI, and non-technical authors will need a cheat sheet, a preview they trust, and a support path. Factor a short training artifact into the rollout, and reconsider the requirement if the authoring population is large and non-technical — that is precisely the case where an in-house WYSIWYG or a plain textarea with preview beats a 36-star archived field.
How can I help you explore Laravel packages today?