pdewit/nova-external-url
Laravel Nova field for adding clickable external URL links to resources. Display a link or button in index and detail views, point it at any URL, and optionally open it in a new tab. Easy to configure in Nova resource classes for quick access to related external pages.
Operator efficiency in back-office tooling. This is a presentational Nova field that turns a stored or derived URL into a clickable anchor on admin index/detail screens, so support, ops, and finance teams jump straight to Stripe dashboards, vendor portals, or internal docs instead of copy-pasting raw URLs. The win is small but tangible — seconds per ticket — and worth quantifying only if you need to justify the work at all.
Build vs. buy — reframed as "own vs. write thirty lines." The entire functional surface is one PHP field class and one Vue component. With a last release of November 2018, 30 stars, and zero dependents, the real decision isn't install and forget, it's vendor, patch, and carry forward through every Nova upgrade. Treat this as a maintenance decision disguised as a purchasing decision, because that's what it is.
Roadmap boundary setting. Useful for drawing a clean line between a presentational link and an integration. If a stakeholder asks "let admins open the customer in Stripe," this satisfies it. If they ask "let admins refund the customer in Stripe," that is a separate roadmap item this package does nothing for — no auth handoff, no deep-link signing, no link-health monitoring, no workflow automation. Naming that boundary early prevents scope creep into a much larger build.
Nova upgrade planning. The package targets Nova 1.x/2.x with pre-Vue-3 assets, so its presence in the codebase becomes a concrete line item in any Nova 4/5 migration estimate. It also serves as a forcing function to audit how many resources rely on custom field packages versus native fields — a useful inventory before committing to an upgrade timeline.
Dependency governance. A clean, low-stakes test case for your policy on unmaintained, low-adoption Composer packages. Whatever rule you apply here generalizes to the next dozen lookalikes, and getting the rule written down is more valuable than the specific verdict.
Documentation drift as a procurement signal. The package description advertises configurable external links in Nova's sidebar, while the implementation is a resource field. Before any work is scoped off the README, confirm the deliverable. That kind of mismatch is itself a reason to trust source code over marketing copy on every future evaluation.
Consider it only when all of the following hold:
laravel/nova Composer constraint this package actually satisfies. Verify this first — it is the fastest kill signal available.Look elsewhere — or simply build the field — when:
Laravel\Nova\Fields\URL that renders as a link, and Text::make('Website')->displayUsing(...)->asHtml() covers most detail-page cases. Using the native field eliminates the dependency outright and delivers the identical user-visible outcome.rel="noopener noreferrer" on target="_blank" — modest but real — and it signals a broader lack of active maintenance.resolveUsing fields don't sort correctly (Nova sorts the underlying column), so the package contributes nothing on index views.nova-components/ is cheaper over any horizon longer than a quarter.To executives: This is a minor admin-screen convenience for internal tools built on Laravel Nova — it makes external links clickable for the operations team instead of showing raw URLs. It is not strategic or roadmap-critical: one release in 2018, negligible adoption, no active maintainer. Recommendation: skip it for new work and use Nova's built-in URL field, which delivers the same user-facing outcome with zero added maintenance burden. If a legacy Nova 2 app already depends on it, leave it alone until the next Nova upgrade and budget roughly half a day to replace it then.
To engineering: Treat this as a vendored snippet, not a dependency. The whole package is one field class and one Vue component; the cleanest path is to copy it into nova-components/ (or use Nova's native URL field on 4+), add rel="noopener noreferrer", default to ->onlyOnDetail() so long URLs don't wreck index layout, and apply ->rules('nullable', 'url', 'max:2048') at every call site — the package validates nothing and renders whatever string it's given. If you do install it, pin the commit SHA, publish and symlink assets via nova:publish, and expect the classic blank-column failure to be a missing asset symlink or stale config cache rather than a code bug. Assign an owner for the Nova-upgrade line item, and add QA checks for URL escaping and safe link behavior before this reaches an operator screen.
To the requesting stakeholder: You will get the clickable "Open in [system]" link you asked for. The user-visible result is identical whether we use this package or a short in-house field, so we're choosing the in-house route to avoid carrying an abandoned 2018 dependency through future Nova upgrades. Same outcome, fewer future surprises — and if the ask ever grows from opening the external system to acting inside it, that's a separate and much larger conversation.
How can I help you explore Laravel packages today?