Packstub.

Filament Flow

Filament Flow

Visual workflow automations for Filament panels: triggers, conditions and actions drawn on a canvas, executed by a runner, optionally through your queue. Free and open source (MIT).

What you get

Feature What it means for you
Visual builder A Workflows resource with a drag-and-drop canvas. Add triggers, conditions and actions from a sidebar, connect them, branch on true / false, and edit each node's settings in a slide-over built from Filament form components.
Triggers Record created / updated / deleted (via the HasWorkflows trait, with "changed from / to" and dedup windows), a date on a record ("3 days before due_at"), spatie model-state transitions, user registered, any Laravel event, cron schedules (with catch-up), webhooks, a manual Run now or a Run workflow action on any resource, and calls from other workflows.
Conditions Record attribute (including "changed from / to"), compare values (placeholders on both sides), multiple conditions (AND / OR) and time of day, with twenty operators.
Actions Send email, Filament database notification, Slack, Discord, Teams, Telegram, SMS / WhatsApp (Twilio), HTTP request, create / update record, assign owner, add tag, transition state, find records + for each, wait, ask for approval, wait for signal, call workflow, write to log. Per-node retries, continue-on-error or an error branch; an on-failure workflow.
Placeholders {{ model.name }}, {{ webhook.order.id }}, {{ event.carrier }}, {{ original.status }}, {{ changes.status }}, {{ model.url }}, {{ secrets.api_key }} — resolved from the payload in every text field.
Secrets An encrypted store for tokens and webhook URLs, resolved only inside actions and masked in run logs; per tenant when you need it.
Multi-tenancy In a panel with tenancy each team manages its own workflows, secrets, runs and approvals; global workflows run for everyone; a plan limit hook caps workflows per tenant.
Versions Every change to a workflow is kept, with who saved it and what changed; compare and restore from the panel; runs pin the version they ran.
Runs Every run is stored with status, trigger, record, payload summary, a step log (one row per step) and the error, shown in a Runs tab and on a cross-workflow Runs page with stats; a Test button for dry runs; packstub-flow:run and packstub-flow:prune commands; WorkflowStarted / WorkflowCompleted / WorkflowFailed / WorkflowDeactivated events.
Queue & scheduling Inline or queued runs, Wait steps served by delayed jobs, and a packstub-flow:cron command registered with the scheduler for you.
Extensible Subclass Trigger, Action or Condition, give it a form schema, and register it on the plugin, in the config or with Flow::register().

Guides

Guide What it covers
Installation Requirements, the install command, the HasWorkflows trait, registering the plugin, queue and scheduler
Building workflows The canvas: adding and connecting nodes, condition outputs, node settings, saving, and how a definition is stored
Triggers Every built-in trigger, its settings, the payload it provides and how it fires
Actions Every built-in action and its settings
Conditions Every built-in condition and all operators
Placeholders Syntax, resolution, aliases, how values become text, what each trigger exposes
Secrets The encrypted secrets store, {{ secrets.* }} in actions, masking in run logs
Approvals & signals Pausing a run for a human decision or an external signal, the Approvals page, Flow::signal()
Multi-tenancy Tenant-scoped workflows, runs and secrets; global workflows; tenant resolution; plan limits
Runs Statuses, the step log, Run now, console commands, retention, failure limits, events and the safety guards
Queue & scheduling Sync versus queued runs, Wait steps, the cron command and scheduler registration
Extending Writing and registering your own triggers, actions and conditions; dispatching from code
Configuration Every config key, the fluent FlowPlugin API, custom models, tables, navigation and webhooks
Testing Testing workflows in your application with Pest or PHPUnit

At a glance

composer require packstub/filament-flow
php artisan packstub-flow:install
use Packstub\Flow\Concerns\HasWorkflows;

class Order extends Model
{
    use HasWorkflows;
}
use Packstub\Flow\FlowPlugin;

$panel->plugin(
    FlowPlugin::make()
        ->navigationGroup('Automation'),
);

Requirements

PHP 8.3+, Laravel 12 or 13, Filament 4 or 5.


These pages are published at packstub.dev/docs/filament-flow from the package's docs/ directory. Spotted a mistake? Open a pull request.