Filament Workflow Engine

Filament Workflow Engine changelog

1 month ago
1.6.0

v1.6.0

leek/filament-workflows

Added

  • Run Workflow from the edit page — active manual workflows now have a built-in "Run Workflow" header action on their edit page, so TriggerWorkflowAction no longer needs to be attached to every resource. When the trigger is scoped to a model, the modal prompts for the target record ID (validated against the database) and queues a real run.
  • Notification action buttons — the Send Notification action can add a "View" button (URL, label, color, icon, icon-only, optional mark-as-read-on-click) and a "Mark as Read" button (label, color) to the delivered notification.
  • {{trigger.url}} placeholder — resolves the trigger record's Filament resource URL (view page when registered, otherwise edit) for links in emails and notifications. A real url attribute on the model takes precedence.

Changed

  • Polymorphic user trackingcreated_by/updated_by on workflows and triggered_by on runs no longer hard-reference the users table, so panels authenticating with custom models (e.g. Admin on its own guard) are attributed correctly instead of causing foreign key violations. WorkflowExecutor::start() now accepts an Authenticatable (or a bare id, which keeps the old configured-user-model assumption) for triggeredBy, and the createdBy/updatedBy/triggeredBy relations are now morphTo.

    Upgrade note: existing installs should publish and run the new upgrade_workflows_user_tracking_to_morphs migration — it drops the users foreign keys, adds the *_type columns, and backfills them from the configured user model. Fresh installs need nothing; the create migrations include the columns.

Fixed

  • Nested condition layout — conditions nested inside another condition's branch now stack their True/False branches vertically at full width instead of halving the available width at every depth. The top level keeps the side-by-side layout.

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.5.3...v1.6.0

1 month ago
1.5.3

v1.5.3

leek/filament-workflows

What's Changed

Security and CI-hygiene improvements:

  • SHA-pinned Actions — every GitHub Action in every workflow is pinned to a commit SHA
  • Dependabot cooldown — weekly Composer and Actions updates now wait 7 days before merging
  • Security policy — added SECURITY.md with private vulnerability reporting instructions
  • Repaired PHPStan CI — workflow had been failing since March (PHP version and config incompatibilities); now green with an onboarded baseline
  • Pint code-style check — replaced the broken php-cs-fixer workflow (missing config) with a Pint check
  • Leaner dist archives — extended .gitattributes export-ignore rules

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.5.2...v1.5.3

1 month ago
1.5.2

v1.5.2

leek/filament-workflows

Docs / metadata only — no code or behavior changes.

  • Add a More Filament plugins by Leek section to the README cross-linking the premium plugins (UI Plus, Workflow Engine, Decision Tables) and the free/open-source siblings.
  • Add relevant composer.json suggest entries pointing at companion plugins (sorted alphabetically).
  • Document the Right Click integration: wrap the shipped TriggerWorkflowAction in a ContextMenuItem to trigger a manual workflow on a right-clicked record.
2 months ago
1.5.1

v1.5.1

leek/filament-workflows

Fixed

  • Add dark-mode color variants to the workflow builder's condition branches — the IF TRUE / IF FALSE labels, their dividers, and the condition node icon previously used fixed light-theme colors that did not adapt in dark mode

Documentation

  • Document that custom actions must be registered in AppServiceProvider::boot() (not a Filament-only boot hook) and that queue workers must be restarted (queue:restart / horizon:terminate) after registering or changing an action

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.5.0...v1.5.1

3 months ago
1.5.0

v1.5.0

leek/filament-workflows

Added

  • Add optional Spatie Webhook Client integration with a webhook trigger, queued process job bridge, payload/header condition matching, and workflow context variables for stored webhook calls.
  • Add Composer suggestions for optional integrations: Decision Tables, Laravel Actions, Spatie Model States, and Spatie Webhook Client.

Fixed

  • Prevent event-cache recursion during cache writes by setting an in-memory sentinel before persistent cache population.
  • Avoid persistent event-cache reads/writes in console commands and gracefully fall back when cache or workflow tables are unavailable.
3 months ago
1.4.3

v1.4.3

leek/filament-workflows

Fixed

  • Prevent event-cache recursion during cache writes by setting an in-memory sentinel before persistent cache population.
  • Avoid persistent event-cache reads/writes in console commands and gracefully fall back when cache or workflow tables are unavailable.
3 months ago
1.4.2

v1.4.2

leek/filament-workflows

Performance

  • Drop Schema::hasTable('workflows') probe from WorkflowEventSubscriber::buildEventCache() and StateTransitionListener::buildCache(). Surrounding try/catch already handles missing-table; per-request information_schema/pg_class query was pure overhead under load.
  • Persist event-class lookup across requests via Cache::rememberForever in WorkflowEventSubscriber. Prior in-process static memo rebuilt on every FPM request, scanning all active event-triggered workflows. Cache invalidates automatically on workflow save/delete.

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.4.1...v1.4.2

4 months ago
1.4.1

v1.4.1

leek/filament-workflows

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.4.0...v1.4.1

4 months ago
1.4.0

v1.4.0

leek/filament-workflows

Added

  • Minimal localization scaffold: User-facing strings in WorkflowResource, WorkflowSecretResource, and all enums (RunStatus, StepStatus, FailureStrategy, MetricPeriodType, TemplateCategory, TriggerEvent, TriggerType) extracted into resources/lang/en/ translation files under the filament-workflows namespace
  • Translation files: workflows.php (147 keys), secrets.php (22 keys), enums.php (50 keys)
  • Publish translations with php artisan vendor:publish --tag="filament-workflows-translations"; documented in README

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.3.4...v1.4.0

5 months ago
1.3.4

v1.3.4

leek/filament-workflows

Fixed

  • Guard all dynamic getAttribute() calls with hasAttribute() to prevent MissingAttributeException when models use preventAccessingMissingAttributes (e.g. User model during logout)
5 months ago
1.3.3

v1.3.3

leek/filament-workflows

Fixed

  • Check filament-workflows.tenancy.enabled in getTenantId() to prevent errors when tenancy is not enabled (e.g. on user logout)
6 months ago
1.3.2

v1.3.2

leek/filament-workflows

Fixed

  • Use @svg() directive instead of Blade components for icon rendering in selection grids, fixing compatibility when blade-icons components are disabled
6 months ago
1.3.1

v1.3.1

leek/filament-workflows

Bug Fix

  • Fixed empty Record Type dropdown: HasModelSelection was reading directly from config('filament-workflows.triggerable_models') instead of using the TriggerableModelDiscovery service, causing the Record Type dropdown to be empty when auto-discovery is enabled.
6 months ago
1.3.0

v1.3.0

leek/filament-workflows

Added

  • Spatie Model States integration (#3): StateTransitionTrigger fires workflows on state changes, TransitionToStateAction transitions models to target states as a workflow step, and StateTransitionListener with cached workflow lookups for fast filtering
  • Laravel Actions bridge (#3): RunActionAction invokes registered Laravel Action classes as workflow steps with reflection-based parameter resolution and context variable mapping
  • New integrations.model_states, integrations.actions_bridge, and integrations.action_classes config options (auto-detected, individually toggleable)
  • Schedule execution locking (#7): Cache::lock() prevents duplicate dispatches from concurrent workers on the same schedule minute
  • Non-retryable workflow exceptions (#7): NonRetryableWorkflowException permanently fails queue jobs for config/validation errors instead of retrying
  • ExecuteWorkflowJob now implements ShouldBeUniqueUntilProcessing to prevent duplicate job execution
  • Atomic terminal-state check with row-level locking in ExecuteWorkflowJob to prevent race conditions
  • TriggerWorkflowAction now checks rate limits and dispatches via queue instead of synchronous execution
  • http_request config section for SSRF protection: blocked_domains, allowed_domains, block_private_networks, max_response_body_size
  • ResolvesModelMorphClass concern for consistent model type resolution
  • Workflow::syncTriggerMetadata() auto-syncs trigger type/event on save via model saving event

Fixed

  • Race condition in ExecuteWorkflowJob where concurrent workers could execute the same run (#8)
  • Allowlist bypass in model trigger validation (#8)
  • Error handling improvements: failed queue dispatch now marks run as failed with error message (#8)
  • CloneRecordAction and DeleteRecordAction error handling hardened (#8)
  • ProcessScheduledWorkflowsCommand lock release on failure so another worker can retry (#8)
  • Model allowlist validation now respects auto-discovered models with HasWorkflowTriggers trait, not just the triggerable_models config array

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.2.4...v1.3.0

6 months ago
1.2.4

v1.2.4

leek/filament-workflows

Fixed

  • Fix if/else conditional branching not executing from builder (#6)
  • Fix execution history table not displaying on edit page (#5)
  • Fix variable autocomplete dropdown not selectable (#4)

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.2.1...v1.2.4

6 months ago
1.2.1

v1.2.1

leek/filament-workflows

Documentation Updates

  • Update README for v1.2.0 features: metrics, templates, Decision Tables integration, event discovery, model introspection, and notification roles
  • Update config block to match current source of truth
  • Add Integration action table with evaluate_decision_table and auto-detection callout
  • Add Manual Trigger usage docs with TriggerWorkflowAction example
  • Fix Filament version requirement to 4.x or 5.x
6 months ago
1.2.0

v1.2.0

leek/filament-workflows

What's Changed

  • Drop leek- prefix from config keys, view namespace, Blade component prefix, and publish tags to align with Filament conventions

Breaking Change

  • Config file renamed from leek-filament-workflows.php to filament-workflows.php
  • All config('leek-filament-workflows.') calls are now config('filament-workflows.')
  • View namespace changed from leek-filament-workflows:: to filament-workflows::
  • Blade component prefix changed from x-leek-filament-workflows:: to x-filament-workflows::
  • Publish tags updated (e.g. filament-workflows-config instead of leek-filament-workflows-config)
6 months ago
1.1.0

v1.1.0

leek/filament-workflows

Added

  • Event-triggered workflows via WorkflowEventSubscriber wildcard listener
  • EventDiscoveryService with app event scanning and curated vendor events (Auth, Mail, Notification, Queue)
  • ModelIntrospectionService for variable autocomplete and field discovery in workflow builders
  • TriggerWorkflowAction Filament action for manual workflow triggering
  • EventTrigger condition matching and event property introspection
  • event_discovery and introspection config sections
  • Optional Decision Tables integration with promotional action tiles

Fixed

  • Tenant isolation bypass: tenant-scoped workflows no longer fire for null-tenant events
  • Illuminate event blocking: curated Auth/Mail/Queue class events now pass through the subscriber
  • vendor_events config set to null now correctly falls back to built-in defaults
  • Event subscriber now uses rate limiter and async job dispatch (matching observer pattern)
  • Event cache staleness in Octane/workers: static cache with automatic invalidation on Workflow save/delete
  • Workflow form value sync, test runner side-effect types, and model loading

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.0.0...v1.1.0

6 months ago
1.0.0

v1.0.0

leek/filament-workflows

Initial Release

Full Changelog: https://github.com/leek/filament-workflows/commits/v1.0.0