robyconte/filament-flow
Filament Flow is a plugin for building visual, node-based workflows and pipelines inside Filament panels. Design flows with a drag-and-drop canvas, connect steps, and control transitions without leaving your admin panel.
$only argument lets a PM decide, per surface, which transitions deserve a bulk button (e.g. "Approve" and "Reject" in bulk, but "Cancel" only one-at-a-time because it needs a reason). [] disables bulk entirely for a surface, null keeps the previous "everything" behavior. This is a product-policy lever, not just an API detail: it is how you avoid shipping a bulk action for a destructive or irreversible transition.metadata fix is the strongest argument here — it's exactly the class of bug a team would ship and not notice for months.metadata and applies them to workflows already persisted in the database. That turns "we want to change a state's config without a data migration" into a decision you can actually make, and it de-risks iterative rollout of workflow tweaks.Consider adoption when most of the following hold:
Look elsewhere when:
draft → published with no branching and no ops intervention). A column and a button will do.For executives: This is an operational-efficiency and correctness release for the admin tooling our back-office teams use. It lets staff move many records through their lifecycle in a single action, while guaranteeing each record still respects the same permission and approval rules as acting on it individually. That directly reduces the manual click-per-record cost of clearing queues, and it removes a class of silent-failure bug: changes to a workflow's state configuration were previously never applied to records already in the database, meaning configuration drifted from reality without anyone noticing. The package is pre-1.0, so we should expect API churn and plan for upgrade work; but the alternative is maintaining our own bulk-transition and workflow-migration plumbing, which is a larger and more permanent cost.
For engineering: v0.5.0 makes StateBulkActionGroup::forDatabaseRecord() production-usable. Highlights: (1) an $only filter to restrict which transitions are offered in bulk — null means all, [] means none, preserving backwards compatibility; (2) deduplication of transitions that are identical from the user's perspective (same label, same target state), with each record resolving the one transition getAvailableTransitions() actually offers to the current user; (3) per-record outcomes are now honest — skipped when the state doesn't apply, reported (not silently dropped) when it applies but access rules, actor or guards block it, backed by a new filament-flow.bulk_action.not_available string in EN/IT. (4) The planner's DiffsWorkflowDefinition::stateChanged now detects metadata changes, so metadata edits are applied to already-persisted workflows instead of being silently discarded.
Two things worth flagging in review: the deduplication is a behavioral change — panels that previously rendered two visually identical actions will now render one, and the surviving action is resolved per record, so snapshot existing admin screens before upgrading. And the metadata fix means diffs that were previously ignored will now be applied the next time definitions are planned against a database; test the plan output against staging before running it on production, because it may surface drift that was invisible until now. The docblock correction — that a bulk action cannot be hidden per record — is documentation catching up to reality rather than a functional change, but it should be reflected in our UX copy: unavailable records are reported, not hidden.
How can I help you explore Laravel packages today?