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.
Architecture fit. The package is a thin presentation layer, not a subsystem. It overrides Nova's resource toolbar Blade partial to render buttons that fire ordinary Laravel\Nova\Actions\Action instances without a checkbox selection, and ships pre-compiled JS/CSS to wire the modal lifecycle. Nothing about our domain model, resource classes, or policy layer changes — a detached action is the same class we already write for row selection. That is the strongest architectural argument: zero new abstraction to learn, zero parallel permissions model, and existing ExportAction-style classes are reusable verbatim. The "architecture" we're really adopting is a Blade partial plus a registration convention.
Integration feasibility. High effort-to-value ratio, contingent on one disqualifying question: our Nova major. The package is frozen at the Nova 2/3 era (PHP 7.4/8.0, Laravel 6–8), last released 2020-10-11, archived upstream, with zero dependents. On Nova 4/5 the answer is fork-or-reimplement, not install. A second unknown is the asset pipeline — the compiled bundle is the silent failure surface (buttons render, clicks do nothing, no PHP exception). Both are 30-minute spikes, but they must happen before any estimate is committed.
Technical risk. Concentrated and knowable:
authorizedToSee/canRun is a genuine strength, but it only holds if we test it.Key questions.
Stack fit. Native fit if and only if we're a licensed Nova shop on the matching major. It composes with things we already use — Nova actions, action fields, confirmation modals, policies — and adds nothing new to reason about at runtime. It is inert for Filament, Inertia/SPA admin surfaces, or custom builds.
Migration path. Treat this as an internalization, not an install:
path or VCS composer repository, tag it, name an owner. MIT makes this free and this step is the whole recovery plan.standalone semantics.Compatibility. Gate everything on composer show laravel/nova matched against the package era. Validate on a staging instance with the real asset pipeline before writing domain code. Do not accept "it installed" as evidence — asset staleness is invisible until a click fails.
Sequencing.
ExportAction detached on an index screen. Prove button placement, ordering, modal lifecycle, and icon rendering. No writes yet.ShouldQueue or an explicit queue dispatch inside handle(), with results written somewhere durable.handle() is correct for both zero and n models.Maintenance. Near-zero until Nova, PHP, or Laravel moves — then we are the maintainer, full stop. Budget this honestly: put a review on the calendar alongside every framework upgrade rather than discovering it at upgrade time. Because the upstream is archived with no dependents and no community to lean on for fixes, every future issue is first-party. That is acceptable for a toolbar partial and unacceptable if anyone starts treating it as infrastructure.
Support. None, and there will not be one. No CVE process, no upstream responsiveness, no compatibility guarantees. Mitigation is structural: vendored source, pinned tag, named owner, and an internal note in the repo explaining what the fork patches and why. Do not adopt if a support contract or security review is a procurement requirement.
Scaling. Two axes, both bounded:
ShouldQueue and persist results outside the package.The package itself scales fine because it does almost nothing; our queue and logging carry the load.
Failure modes.
handle() and decide explicitly whether empty means "all records" or "invalid invocation."Ramp-up. Low, and that's the point. An engineer who has written one Nova action can ship a detached button in an afternoon — the registration snippet is the entire API and the examples are short. The non-obvious knowledge is concentrated in four lessons worth writing down once for the team: registration order is visual order, detached actions receive no models, asset staleness fails silently, and authorization must be proven with a test. Everything else is inherited Nova behaviour. Realistic ramp: half a day to a first read-only button, one to two days to a secure, queued, logged write action.
How can I help you explore Laravel packages today?