metrixinfo/nova-iframe
Easily embed external or internal web pages inside Laravel Nova with this simple iframe component. Add an iframe field to resources or a dashboard card, configure the URL, height, width, and other display options, then render trusted content alongside your admin data.
frame-src, sandbox/allow/referrerpolicy, third-party cookie and session behaviour, and whether authenticated internal tools may be framed at all. These policy calls are the real work item and would be required for any iframe solution, including a homegrown one — so they belong on the roadmap as a deliverable, not a side effect.Consider it when:
fields() method.X-Frame-Options and content-security-policy headers before committing to the spike — a DENY header ends the evaluation regardless of package quality).frame-src can be scoped to an allowlist for that origin, and someone owns that configuration.composer.lock, audit the small source, and name an internal owner (or fork it). Tolerable precisely because the code is tiny.Look elsewhere when:
sandbox, allow, referrerpolicy, loading states, or flexible (non-fixed-pixel) sizing. You'll be forking the Vue component anyway, at which point "adopt vs. build" collapses into "build."To executives: This is a small, cheap experiment in consolidating operator tooling inside the admin panel we already pay for — not a platform investment. The upside is fewer tabs and faster answers for the team that lives in Nova; the cost is roughly one engineer-day of spike plus a security review we'd owe for any embedding approach. It's behind a feature flag on a single resource, rollback is one line, and we go in with an explicit link-out fallback if the pilot doesn't show a measurable win.
To engineering: Treat it as reference code, not a dependency. It's a ~50-line single-maintainer field with no CI and no Nova 4+ signal — so we pin the version, commit the lockfile, read the compiled bundle to confirm the API surface, and decide up front whether we fork. Three risks to name now rather than discover later: the target's framing headers (a DENY kills the plan), CSP frame-src scoping (deployment config, not package config), and missing sandbox/allow attributes (we add them at our layer; that's the security deliverable). One test asserting the expected src on a detail page is the difference between a five-minute signal and a production incident on the next Nova upgrade. Half a day per Nova major for re-validation.
To the operator using it: The content appears inside the record you're already looking at, in read-only form. If the embed fails — and sometimes it will, because third-party sites can refuse to be framed — there's always a link to open it in a new tab. An embed failure never blocks you from finishing the task.
How can I help you explore Laravel packages today?