gobrightspot/nova-detached-actions
Nova Detached Actions for Laravel Nova lets you pull actions out of the dropdown menu and render them as standalone buttons or links on resource index and detail pages, so frequently used workflows stay visible and are always just one click away for your users.
Shipping internal admin features faster. The package does one narrow thing: it moves a Nova action's trigger from the row-selection checkbox into the resource toolbar. That single change turns imports, exports, report generation, cache/search-index rebuilds, and one-click maintenance into buttons on admin screens we already own — no bespoke page, no custom card, no new navigation. For back-office tooling, the lever is time-to-ship measured in days rather than sprints.
Reframing build vs. buy honestly. The package is a thin presentation layer over Nova's own Action class, field definitions, modal lifecycle, and authorization contracts. "Buy" is defensible on effort, but given it was last released in October 2020 and the upstream repo is archived, the accurate decision record is vendor a small MIT utility and own it — "adopt, fork, and maintain," not "add a dependency." The permissive license is what makes that middle path cheap and legitimate.
Reuse over rebuild. Existing action classes, fields, confirmation modals, and authorizedToSee / canRun gating all work unchanged. An ExportAction written for row selection can become a workspace-level command with no new domain code and no second permissions model. That is velocity without accumulating architectural debt.
Drawing an explicit scope boundary. It changes where a trigger lives, not what it does. It is not a workflow engine, scheduler, audit log, or job runner. Any roadmap item needing approvals, retries, run history, or "did it actually run?" observability still requires a queue and durable logging behind the button. Stating this now prevents a mid-build surprise.
Treating roadmap risk as a version bet. A 2020-frozen package is pinned to the Nova major of its era. If a Nova upgrade appears anywhere on the roadmap, this package becomes a migration cost line, not a feature — and that tension belongs in roadmap review today, not discovered at upgrade time.
Managing risk per action, not per package. The package installs once; the value and the blast radius are per action. Product decisions should be made action by action: which commands get a toolbar button, visible to which roles, with what confirmation step. Detached actions bypass the checkbox gate, so a registration mistake can expose a maintenance command to the wrong audience.
Reading ecosystem signal correctly. 164 stars, zero dependents, middling quality score, archived: a niche, low-blast-radius tool with no community to lean on for fixes. Fine as internal plumbing. Not a product narrative and not a signal of strategic value.
Consider adopting when:
Look elsewhere when:
To executives. This is a small, MIT-licensed tool that lets our admin panel run commands — imports, exports, reports, maintenance — without users selecting rows first. It reuses Nova's existing action and permission model, so build effort is low and the security story is inherited rather than invented. The caveat is lifecycle: it is archived upstream and has shipped no release since 2020. That makes it a vendored utility, not a strategic dependency. Recommendation: use it on internal ops screens where it measurably saves operator time, keep it off anything customer-facing, and budget a fork-and-own contingency — the permissive license makes that inexpensive. If a Nova upgrade is on the roadmap, price this package into that migration now rather than later.
To engineering. Adopt it as a pinned, vendored, first-party dependency rather than a live remote package. Step one is the only real unknown and it is disqualifying if it fails: verify compatibility against our Nova, PHP, and Laravel versions, and validate the asset pipeline — a stale compiled bundle is the most likely silent failure, where buttons render but clicking them does nothing. Then write a test proving a user without the policy ability can neither see nor execute a detached action; that single test is the whole security story. Guard handle() explicitly for the empty-model case, since detached invocations receive no selected records, and queue anything slow. Treat registration array order as a deliberate UI decision — the first registered action sits nearest Create. Keep row-specific actions behind checkboxes and resource-wide commands detached, and don't register the same action in both places unless its handle() genuinely behaves for zero models and n models alike. Finally, name an owner and put a compatibility review on the calendar alongside every framework upgrade, so the next Nova bump is a diff rather than an archaeology project.
How can I help you explore Laravel packages today?