ericlagarda/nova-embed
A Laravel Nova package that adds an embed field for displaying videos, iframes, and other external content inside your admin panel. Configure embed URLs in resource forms and detail views to preview media without leaving Nova.
Architecture fit. Nova field packages are one of the smallest, most contained extension points in the Laravel ecosystem: a service provider registers a field class with Nova::serving(), the field class maps to a compiled Vue component, and the component renders in the Nova resource form/detail views. ericlagarda/nova-embed follows exactly that pattern — an "embed" field that renders external content (iframe/oEmbed-style) inside a Nova resource. Fit is therefore good in principle: no migrations, no queue workers, no service container gymnastics, and the blast radius is confined to admin UI. The catch is that Nova's extension API is proprietary, undocumented in places, and changes across majors, so "fits the pattern" is not the same as "fits our version."
Integration feasibility. Composer-installable, MIT-licensed, and shipped with compiled assets (typical for Nova packages), so there is no npm build step for consumers. Feasibility is gated almost entirely by the Nova major version. The last release is October 2020, which places it squarely in the Nova 3.x era; Nova 4 (2021) and Nova 5 (2024) both reworked front-end tooling and field APIs. Expect a composer.json constraint like laravel/nova: ^3.0 that will either hard-block installation or, worse, install and then fail at runtime. Verify first: the exact Nova constraint, whether the field persists a value or is display-only (this determines whether there is any data to migrate), and whether the PHP code is PHP 8.x-clean.
Technical risk. High, and clustered in three places:
frame-src and any X-Frame-Options posture.Key questions to answer before commitment: Which Nova major(s) are supported? Display-only or persisted? Is embed URL input validated/allow-listed? Are compiled assets committed and reproducible? Does the maintainer respond to issues at all? And decisively: is the total surface area small enough — likely a few hundred lines — that writing it in-house is cheaper than adopting and forking it?
Stack fit. Laravel + Nova, Composer-managed, no database footprint if display-only. It slots in beside existing field packages and should not interact with application domain code at all, which keeps the decision reversible.
Migration path. Do not install directly into a production branch. Sequence it as: (1) read the full source — PHP field class, Vue component, service provider, composer.json; (2) test-install against our current Nova in a throwaway branch and observe whether Composer resolves and the field renders; (3) security review of the embed rendering path; (4) timeboxed PoC on one resource; (5) make an explicit build-vs-fork call.
Given the age, the realistic outcomes are: it installs and works (only if we are on Nova 3), it installs but the component is broken (dead end, fork required), or Composer refuses (fork required). A fork means bumping the Nova/Laravel/PHP constraints, recompiling the Vue component against the current Nova toolchain, and re-testing rendering — typically a day or two of work for a component this size.
Compatibility. Treat PHP 8.1+, Laravel 10/11, and Nova 4/5 as unverified until tested. The 2020 vintage makes PHP 8.1+ deprecation warnings and Laravel 9-era nova constraint mismatches likely. Also confirm compiled assets are present in the tagged release, not .gitignored, or the package is unusable without a build.
Sequencing. Gate the decision on Nova version compatibility before evaluating features — if it cannot run on our Nova, the feature comparison is moot and the fork/rebuild question dominates. If a fork is required, scope it as an internal package (vendored, pinned, our namespace) rather than a long-lived patch against an upstream that will not merge.
Maintenance. Effectively zero upstream. Budget for an internal owner and a fork from day one; do not plan on upstream releases, security patches, or issue triage. The genuine ongoing cost is not bug-fixing — the code is small and static — but the periodic Nova/Laravel upgrade cycle, where this package becomes an extra item on a checklist that already has a hard deadline.
Support. No community leverage: 12 stars and 0 dependents means no Stack Overflow corpus, no third-party forks to crib from, no shared debugging history. Escalation path is "read the source," which is acceptable here only because the source is small. Make that expectation explicit with the owning team.
Scaling. Runtime cost is negligible — a field render per admin page view. The scaling concern is client-side and compliance-side: embedded third-party iframes add page weight, third-party requests from the admin panel, and potential GDPR/privacy exposure if embeds point at external providers. If the admin panel is on a locked-down network, CSP will silently block the iframe and the field will render blank — a confusing, low-signal failure.
Failure modes. Ranked by likelihood and pain: (1) Nova upgrade breaks the field — blank or errored column with no useful error; (2) Composer constraint conflict blocks a Laravel/Nova upgrade, forcing unplanned forking under deadline; (3) CSP or network policy blocks the embed, producing a silent empty render that looks like a data bug; (4) unvalidated URL rendering enables stored XSS in the admin UI; (5) embedded provider changes or deprecates its embed endpoint. Each is individually survivable; the compounding risk is that (1) and (2) arrive together, mid-upgrade.
Ramp-up. Low technical ramp-up — a mid-level Laravel developer can read and understand the whole package in under an hour, and Nova field conventions are familiar. The hidden ramp-up is the Nova upgrade treadmill and the internal decision to own a fork, both of which are organizational rather than technical. Net: cheap to try, cheap to replace, but not cheap to depend on indefinitely.
How can I help you explore Laravel packages today?