reedware/nova-html-field
Laravel Nova field that renders raw HTML directly within resource forms and detail screens. Embed custom markup, links, or inline content alongside standard Nova fields to build richer, more flexible admin panels without writing custom components. Simple to install and configure.
Architecture fit. reedware/nova-html-field is a single-purpose Nova field: a Laravel\Nova\Fields\Field subclass plus a compiled Vue component that renders arbitrary HTML in a Nova form (and presumably detail/index contexts). Architecturally it is a thin presentation layer, so it carries no data model, no migrations, no service providers of consequence, and no runtime coupling to our domain code. That makes it exceptionally easy to swap out — which is the most important architectural fact about it.
The binding constraint is not Laravel, it is Nova. Nova is a paid, privately distributed package served from nova.laravel.com, not Packagist. Any composer install of this field requires that our application already has the Nova repository + credentials configured, and that the field's laravel/nova version constraint intersects our installed Nova major. The last release was 2020-10-23, which places it squarely in the Nova 3.x era (Nova 4 shipped mid-2022, Nova 5 in 2024). Unless the constraint is unusually permissive, this will not resolve against a modern Nova install without a fork.
Integration feasibility. High in effort-to-value terms, low in risk terms. The total surface area is small enough (likely <300 lines of PHP + a prebuilt dist/js/field.js) that a fork-and-own strategy is realistic. The main unknown is whether the committed compiled asset targets a Vue runtime compatible with our Nova build; a mismatch produces a silently blank field rather than a hard failure, which is the worst kind of failure to discover in production.
Technical risk. Ranked:
v-html (or PHP-side raw output). If the value is developer-authored static copy, risk is contained. If it ever derives from model data, user input, or a CMS, it is a stored-XSS vector with no sanitization layer visible in the package description. This must be audited before merge.Key questions.
composer.json constraint actually satisfy them?dist/js/field.js committed, and does it match the source? Is the build reproducible?Stack fit. The package assumes a Laravel + Nova monolith with a Node/laravel-mix build pipeline available at install time. If we consume the prebuilt dist/ asset, we can skip Node entirely and treat it as a drop-in field — the cleanest path. If we must rebuild, we inherit a 2020 webpack/mix toolchain that will fight modern Node LTS.
Migration path. Do not composer require this directly. Fork it into our internal VCS (or a private Packagist/Satis repo) and:
laravel/nova constraint to our installed major, and set PHP/Laravel floors to match.dist/ for deterministic CI.Compatibility. Treat Nova 3 as the only plausible supported target out of the box. Nova 4/5 support is a fork-and-port task, not a config change. Validate with a smoke test asserting the field renders visible markup in create, update, and detail views — a blank render is the expected failure signature.
Sequencing.
v-html/raw output.Field subclass with ->asHtml()-style rendering plus a minimal FormField.vue); owning that is cheaper than owning a dead dependency.Maintenance. Effectively zero upstream maintenance; all maintenance is ours from day one. That is acceptable only because the code volume is tiny. Budget a recurring line item for "verify against each Nova major upgrade," since Nova upgrades are the single trigger that will break this field.
Support. No vendor, no SLA, no docs beyond a README. Internal support means reading the source. Ramp-up for a Laravel developer is low — an hour to understand, a day to confidently modify. The risk is not comprehension, it is discoverability: a silently broken HTML field in an admin form may go unnoticed by engineering and be reported by an operator instead.
Scaling. Negligible. It renders server-side-passed props into a Vue component on form load; no queries, no queues, no external calls. It will not be a throughput bottleneck at any realistic admin-panel scale.
Failure modes.
Recommendation. Do not adopt as-is. Either fork with a hard 1-day cap on remediation, or — my preference given zero stars, zero dependents, and a five-year-old release — reimplement the ~100-line field in-house, which eliminates the dependency, the private-repo coupling, and the upgrade-drift risk for roughly the same effort as making the fork safe.
How can I help you explore Laravel packages today?