akunbeben/fluid-actions
Fluid Actions is a UX toolkit for Filament Actions, offering inline confirmation, hold-to-confirm gestures, and ActionGroup support with per-action timeouts and smart fallbacks to Filament's default behavior.
Architecture fit. Fluid Actions is a Filament panel plugin that augments the existing Action fluent API rather than replacing it. Registration is the standard $panel->plugin(FluidActionsPlugin::make()) path, and behavior is opt-in per action. There is no schema, migration, model, or service-layer footprint — it is a presentation-layer extension sitting on top of Filament's Action lifecycle (Livewire component + Alpine state + Blade views). Architecturally this is the lowest-risk category of third-party dependency: it can be added and removed without touching domain code.
The "smart fallback" design is the most important architectural property. Actions that aren't configured keep Filament's stock behavior, so the blast radius of an unconfigured or failed interaction is a degraded UX, not a broken workflow.
Integration feasibility. Effort is measured in hours, not sprints. composer require plus one line of panel configuration gets a working install; per-action customization is two or three fluent calls. The realistic cost is not the integration — it's the design decision of when each pattern (inline confirm vs. hold-to-confirm vs. default) is appropriate, which is a product/design governance question, not an engineering one.
Technical risk. The dominant risks are supply-chain and coupling, not correctness:
Key questions to put to the maintainer or resolve internally:
composer.json?Stack fit. The package targets exactly one stack — Laravel + Filament admin panels running Livewire and Alpine — and we are on it. Because it is confined to panels, it can be scoped to internal/staff admin surfaces and kept entirely away from customer-facing UI, which caps the downside.
Migration path. There is no migration. Adoption is strictly additive and per-action: existing actions continue to render Filament's default confirmation until explicitly opted in. Rollback is deleting one line of plugin registration (plus the composer entry). This is a reversible decision, which is why it clears a TPM's bar for a time-boxed trial even at this maturity level.
Compatibility work required before commitment.
composer.json and confirm the package's constraint matches our current major; do not assume forward compatibility.artisan serve.Sequencing.
ConfirmationStyle enum plus default timeout/hold durations) so magic numbers and per-developer taste don't fragment the admin UX. This also gives us a single seam to swap or remove the package later.Maintenance. Expect to own this. At 12 stars and zero dependents, the realistic maintenance model is "we are the maintainers in practice." MIT licensing and a small, readable codebase make a fork or vendored copy feasible — budget a half-day once to assess forkability (source size, test coverage, build tooling). Keeping it behind our own helper abstraction turns any future removal into a find-and-replace rather than an audit. Assign a named internal owner; an unowned single-maintainer dependency in a destructive-action path is the failure mode to avoid.
Support. Community-only, no SLA, no vendor escalation. Acceptable for an internal admin convenience layer; not acceptable as the sole confirmation mechanism on a financially or legally consequential action without an internal fallback story. Mitigation: destructive actions retain Filament's default modal as an available configuration, so a break degrades to "clunky but correct."
Scaling. Effectively zero backend impact — no queries, no queue, no cache, no persistence. Cost is client-side: a small JS payload and Alpine state per action. This will not register in capacity planning at any realistic panel concurrency. The only scaling-adjacent concern is bundle discipline if the package pulls in frontend dependencies that duplicate Filament's own.
Failure modes to watch.
Ramp-up. Low for developers: the README covers the whole API, and the per-action calls are self-explanatory — well under an hour to productivity. The real ramp-up cost is on design and QA, who need a short written interaction standard so "fluid" doesn't become three different confirmation paradigms across one admin panel. Estimate roughly two developer-days end-to-end including the spike, the accessibility review, the internal wrapper, and the pattern documentation.
Verdict. Worth a time-boxed pilot on internal admin destructive actions; not worth taking as an unowned dependency on customer-facing or financially material flows. The package's low coupling and clean fallback make the trial cheap and reversible — the decision to make is whether we're willing to effectively co-maintain it.
How can I help you explore Laravel packages today?