3.0.0
Elsa 3.0 π¨
This is the official Elsa 3.0 release and is a complete departure from Elsa 2.
What's new
- Redesigned workflow execution engine for increased flexibility.
- Redesigned activity model with intrinsic support for composition.
- Parallel activity execution.
- Parallel For Each activity with support for long-running processes.
- Implicit forking and joining for a simplified flowchart modelling.
- Actor model implementation of the workflow runtime for lock-free workflow execution.
- Support for C# and Python expressions.
- A new designer with support for drag & drop, multi-selection, undo/redo, copy & paste, pane & zoom.
- Use the designer to create workflows that can be invoked as reusable activities
- Elsa Studio, a modular, extensible Blazor application to create and manage workflows.
- Alterations API to modify existing workflow instances.
See also the Elsa 3.0 Release blog post.
Known Issues & Limitations
- Documentation is still a work in progress.
- The designer is not yet fully embeddable in other applications; this feature is planned for a future release.
- C# and Python expressions are not yet fully tested.
- Bulk Dispatch Workflows is a new activity and not yet fully tested.
- Input/Output is not yet implemented in the Workflow Instance Viewer.
- Starting workflows from the designer is currently supported only for workflows that do not require input and do not start with a trigger; this is planned for a future release.
- The designer currently only supports Flowchart activities. Support for Sequence and StateMachine activities is planned for a future release.
- UI input validation is not yet implemented.
Migrating from Elsa 2
Elsa 3 is a complete rewrite and not backwards compatible with Elsa 2.
As a consequence, migrating to Elsa 3 means manually porting over your workflow definitions, instances and custom activities.
Guidance will be provided in written form to highlight some of the more common differences between Elsa 2 and 3 to help understand how certain scenarios done in Elsa 2 should be handled in Elsa 3.
Change History
- Upgrade all projects to .NET6.0 by @yopichy in #2616
- implemented delete for single workflow definitions and workflow instance by @cristinamudura in #2855
- implemented sub actions : new, unpublish, retract by @cristinamudura in #2933
- V3 finish activity by @sfmskywalker in #2963
- V3 StartAt Activity by @sfmskywalker in #2969
- Implement Default Workflow Invoker by @sfmskywalker in #2979
- Implement V3 stores by @sfmskywalker in #2980
- Provide tag support for workflows by @gurkanguran in #2990
- Revert "Provide tag support for workflows" by @sfmskywalker in #2991
- fixed property panel published status update by @im-ihrynevytskyi in #2993
- V3 import export by @sfmskywalker in #3030
- Activity display name by @sfmskywalker in #3034
- Auto name activity by @sfmskywalker in #3035
- Labels by @sfmskywalker in #3037
- Query workflows by labels API by @sfmskywalker in #3041
- activity description tooltip added by @im-ihrynevytskyi in #3036
- Copy Text Tool by @im-ihrynevytskyi in #3043
- V3 label management UI by @sfmskywalker in #3055
- Assign labels to workflows by @sfmskywalker in #3060
- V3 Bulk Actions API Endpoints by @sfmskywalker in #3064
- workflow definition pagination and bulk actions by @im-ihrynevytskyi in #3069
- V3 modular configuration by @sfmskywalker in #3070
- V3 labels UI module by @sfmskywalker in #3071
- Features API by @sfmskywalker in #3081
- tooltip minor fixes by @im-ihrynevytskyi in #3083
- added ability to resize panels by @im-ihrynevytskyi in #3092
- V3 workflow instance viewer by @sfmskywalker in #3098
- added label filter to workflow definition modal by @im-ihrynevytskyi in #3106
- added visual feedback for copying by @im-ihrynevytskyi in #3109
- added toolbar layouts by @im-ihrynevytskyi in #3113
- fixed incorrect positioning on zoom or graph move by @im-ihrynevytskyi in #3129
- added zoom-to-fit functionality by @im-ihrynevytskyi in #3130
- added bottom panel with resize functionality by @im-ihrynevytskyi in #3149
- added bottom panel for activity editor by @im-ihrynevytskyi in #3167
- added bottom panel on instance viewer, fixed issue with activity size by @im-ihrynevytskyi in #3176
- added simple notifications by @im-ihrynevytskyi in #3184
- Designer Activity Definitions by @sfmskywalker in #3221
- Added proto actor implementation for kubernetes and refactored releva⦠by @cristinamudura in #3256
- Refactor proto actor runtime with snapshot support by @sfmskywalker in #3283
- V3 default runtime by @sfmskywalker in #3285
- Default Runtime & Persistence by @sfmskywalker in #3287
- Implement async workflow state exporter for DB workflow instance by @sfmskywalker in #3291
- Exportable & importable workflow state + execution by @sfmskywalker in #3317
- Implicit fork & join by @sfmskywalker in #3331
- Queue-based activity scheduler by @sfmskywalker in #3344
- Feature/send http request by @cristinamudura in #3355
- Asynchronous Activities by @sfmskywalker in #3386
- Telnyx integration by @sfmskywalker in #3453
- Implemented delete of workflow definitions on Delete button click by @cristinamudura in #3462
- Add email module by @sfmskywalker in #3469
- Update import / export by @sfmskywalker in #3471
- Ensure unique friendly activity ID after copy paste by @sfmskywalker in #3474
- Implement types API endpoint by @sfmskywalker in #3479
- Auto rotating by @gurkanguran in #3482
- Add support for accessing workflow variables from liquid expressions by @sfmskywalker in #3491
- Add JS functions by @sfmskywalker in #3492
- V3 bugfix by @LevVadim in #3503
- Composite Activity fixes and improvements by @sfmskywalker in #3512
- V3 bugfix by @LevVadim in #3521
- Added correlation activity by @cristinamudura in #3530
- Fix workflow navigation by @sfmskywalker in #3541
- Workflow activation strategies by @sfmskywalker in #3559
- Persistent variables by @sfmskywalker in #3563
- Improve variable vs non-variable persistence by @sfmskywalker in #3568
- Add support for workflows as a function by @sfmskywalker in #3569
- Connect to to Azure DevOps feed by @sfmskywalker in #3570
- Additional samples + fixes and improvements by @sfmskywalker in #3574
- Normalize extensions namespaces by @sfmskywalker in #3577
- Implemented workflow sink module by @gurkanguran in #3571
- Implemented PostgreSql provider for data persistence by @gurkanguran in #3581
- Restore workflow journal by @sfmskywalker in #3582
- Implement ProtoActor snapshot + event cleanup by @sfmskywalker in #3588
- Implement variables panel on workflow instance viewer by @sfmskywalker in #3589
- Publish Event activity + MassTransit dispatcher by @sfmskywalker in #3593
- RunTask activity by @sfmskywalker in #3594
- Webhooks by @sfmskywalker in #3598
- Apply scroll overflow to activity picker by @sfmskywalker in #3599
- Fix tool buttons by @sfmskywalker in #3604
- MassTransit activities by @sfmskywalker in #3613
- Implemented Elasticsearch for workflow instance and execution logs by @gurkanguran in #3600
- Finish Azure Service Bus activities by @sfmskywalker in #3617
- Elastic updates by @sfmskywalker in #3623
- Refresh tokens by @sfmskywalker in #3626
- Removed EFCore.BulkExtensions and used EF7 bulk operations by @gurkanguran in #3630
- HTTP activity body parsing by @sfmskywalker in #3631
- JavaScript intellisense by @sfmskywalker in #3639
- Use workflow definition as activity by @gurkanguran in #3654
- Tweaks and fixes by @sfmskywalker in #3672
- Workflow as Activity - input/output by @sfmskywalker in #3699
- Access HTTP headers by @sfmskywalker in #3704
- Dispatch Workflow activity by @sfmskywalker in #3710
- Fix deadlock + multiple trigger support by @sfmskywalker in #3720
- Workflow input/output by @sfmskywalker in #3726
- Add output picker for SetWorkflowOutput activity by @sfmskywalker in #3728
- Enable composite activity version control by @sfmskywalker in #3732
- Update NuGet package references by @sfmskywalker in #3734
- Refactor store APIs by @sfmskywalker in #3740
- Sycnrhonize access to publish / save workflow definition endpoint by @sfmskywalker in #3743
- Feature/workflow execution status codes by @MariusVuscanNx in #3750
- Fix Version Constraint error when saving workflows by @ifranlaloe in #3752
- Update Dial activity and fix Switch by @sfmskywalker in #3753
- Fix cyclic input argument evaluation by @sfmskywalker in #3755
- Implemented workflow instance journal partially by @gurkanguran in #3749
- Rename "services" to "contracts" and "implementations" to "services" by @sfmskywalker in #3758
- do not select just pasted activities (because property panel connected) by @herblinernexxbizz in #3762
- V3 on delete workflowdefinition update routes by @herblinernexxbizz in #3757
- HTTP Request with status codes as outcomes by @sfmskywalker in #3768
- Get route parameters, querystring parameters and headers by @herblinernexxbizz in #3769
- Implement flexible header parsing by @sfmskywalker in #3771
- Store & display evaluated activity state in workflow instance viewer by @sfmskywalker in #3776
- V3 return routedata querystring headers by @herblinernexxbizz in #3772
- Implemented workflow authorization by @MariusVuscanNx in #3773
- Undefined json element value fix by @gurkanguran in #3777
- Handle workflow fault after workflow execution by @MariusVuscanNx in #3778
- Implemented journal for composite activities by @gurkanguran in #3779
- V3 update routetable on startup by @herblinernexxbizz in #3780
- Add support for HTTP status codes as outcomes by @sfmskywalker in #3787
- Fixes for Journal by @sfmskywalker in #3792
- Added github workflow to automate designer package update process by @gurkanguran in #3791
- Features/v3 add short and full guid by @herblinernexxbizz in #3800
- Refactor composite activity input and scoped memory by @sfmskywalker in #3815
- Reference variable with Id instead of Name to prevent issues with updating name by @gurkanguran in #3814
- Import workflows with subworkflow properly by @gurkanguran in #3825
- V3 designer/angular wrapper by @jdevillard in #3829
- Implement API key authentication by @sfmskywalker in #3834
- Importing workflows regardless of the order by @gurkanguran in #3833
- V3 designer/react wrapper by @jdevillard in #3851
- Handle multiple output connections on import by @gurkanguran in #3857
- Changed notification implementation by @simona-taran in #3863
- feat(toolbar-activities.tsx): Added Search for activities in the designer toolbar by @NrujalSharma in #3853
- add pack/publish actions to GitHub Actions by @jdevillard in #3860
- update package path and wrapper version by @jdevillard in #3868
- adding set var and main/sub workflow tests by @herblinernexxbizz in #3855
- Features/v3 test setvar getvar by @herblinernexxbizz in #3870
- Import publish execute integration test by @MariusVuscanNx in #3872
- Refactor scheduling and background activity execution by @sfmskywalker in #3884
- Fixed workflow instances layout issues. Fixed context menu position. by @simona-taran in #3877
- Added error handling messages. by @simona-taran in #3878
- Update RunTask XML Comment by @VictorioBerra in #3886
- Quartz.NET integration by @sfmskywalker in #3887
- Update Hangfire integration by @sfmskywalker in #3898
- Cron activities by @sfmskywalker in #3900
- Improve JSON serializationfor workflow state by @sfmskywalker in #3913
- Take latest version if none specified by @sfmskywalker in #3914
- Simplify Proto.Actor bookmarks and triggers by @sfmskywalker in #3917
- #3845 Tooltip Fixed Positioning by @Daxton47 in #3920
- Fix flowchart completion bug by @sfmskywalker in #3928
- Display generated version number on the designer by @gurkanguran in #3923
- #3890 Fixed Workflow Definition and Instance Browser Pagination by @Daxton47 in #3930
- Workflow Context Updates by @sfmskywalker in #3933
- Send HTTP error when workflow faults by @sfmskywalker in #3937
- Fix timer issues by @sfmskywalker in #3938
- Implement Onboarding sample by @sfmskywalker in #3944
- Refactor SendEmail inputs to support list of strings and single string by @sfmskywalker in #3952
- Add JSON workflow provider by @sfmskywalker in #3955
- Publish workflows imported programmatically by @gurkanguran in #3958
- Auto update consuming workflows' composite activity references by @gurkanguran in #3950
- Features/fix serialization issues by @herblinernexxbizz in #3966
- added sqlserver extension for 'ExecutionLogRecordPersistenceFeature' by @Yunus0497 in #3971
- Add link between workflow definition version ID and workflow definition activity by @sfmskywalker in #3979
- ACA cluster provider support for multiple images + pluggable member store by @sfmskywalker in #3981
- Fix HTTP triggers not being updated by @sfmskywalker in #3985
- Simplify IActivity by @sfmskywalker in #3991
- Cleanup IActivity interface by @sfmskywalker in #4010
- remove polymorphicobjectconverter for http serialization by @herblinernexxbizz in #4018
- add ordering to workflowdefinitions by @herblinernexxbizz in #4040
- Configure CORS policy by @Gambitier in #4022
- Prefix tailwind classes with tw- by @sfmskywalker in #4060
- Allow the user to select the start activty when calling through the api by @MariusVuscanNx in #4064
- Added workflow execution context to the workflow executred and workfl⦠by @MariusVuscanNx in #4065
- add Elsa.EntityFrameworkCore.MySql by @Gambitier in #4047
- Added modes to the switch activities by @MariusVuscanNx in #4067
- Update DSL integration by @sfmskywalker in #4073
- Schema Name editable in V3 by @Gambitier in #4072
- Support sub-workflow dependency handling of JSON workflows by @sfmskywalker in #4098
- make it so you can start a specific version of a workflow by @herblinernexxbizz in #4103
- update model (with connections) on change activity Id by @herblinernexxbizz in #4108
- Dapper persistence provider by @sfmskywalker in #4109
- Implement Dapper for Identity by @sfmskywalker in #4110
- Update Workflow model with support for Inputs, Outputs and Outcomes by @sfmskywalker in #4112
- Implement direct access to activity output and last result by @sfmskywalker in #4119
- V3 make workflowdefinition have readonly by @herblinernexxbizz in #4068
- move copy button in fron of text by @herblinernexxbizz in #4122
- V3 search workflows definitions and instances by @herblinernexxbizz in #4123
- V3 make workflowdefinition have readonly by @herblinernexxbizz in #4124
- make readonly work by @herblinernexxbizz in #4126
- make isReadonly editable on workflow model by @herblinernexxbizz in #4130
- Fixed workflow definition populator to also take into consideration t⦠by @MariusVuscanNx in #4138
- Fixed spacing issue and panel display issue on workflow instances. by @simona-taran in #4145
- Refactor connection model by @sfmskywalker in #4146
- Publish event improvements by @MariusVuscanNx in #4150
- UnscheduleCron triggers by @sNakiex in #4149
- Cleanup schedulers by @sNakiex in #4160
- Change StringData from nvarchar(2000) to NCLOB in oracle by @borjaferv in #4159
- Prevent variable overriding when setting output in activity by @gurkanguran in #4157
- Fixed the issue with setVariable execution in javascript activity by @gurkanguran in #4158
- Fixes dynamic deserilization in proto actor by @gurkanguran in #4168
- Show suspended activities in journal by @gurkanguran in #4170
- Fixes the issue with httpendoint not being suspended #4143 by @gurkanguran in #4171
- Mongodb implementation by @gurkanguran in #4127
- Implemented workflow validation for httpendpoint path by @gurkanguran in #4181
- Redis proto cluster member store by @gurkanguran in #4241
- Fixed getting and setting variables in context by @gurkanguran in #4267
- Workflow Inbox by @sfmskywalker in #4292
- Fix source + line number not being used by @sfmskywalker in #4293
- Telnyx fixes by @sfmskywalker in #4300
- Bookmarks & Activity Instances by @sfmskywalker in #4301
- Add PR body generator by @sfmskywalker in #4304
- Parallel Execution & Add ability to push variables to scheduled work by @sfmskywalker in #4306
- Update output selector with support for activity instances by @sfmskywalker in #4307
- Update ForEach activity with local variables by @sfmskywalker in #4315
- V3 improve dispatch endpoint by @RuslanSay in #4317
- V3 Add to ConfigureHttpClient access to the service provider by @RuslanSay in #4318
- Allow variable shadowing in child activity scopes by @sfmskywalker in #4321
- Fix WriteHttpResponse when NoContent by @sfmskywalker in #4322
- EF Core NoTracking by @sfmskywalker in #4323
- Delete ActivityExecutionRecords when deleting workflow instances by @sfmskywalker in #4324
- Implement workflow inbox cleanup service by @sfmskywalker in #4327
- Implement HTTP correlation ID selectors by @sfmskywalker in #4349
- Enhanced Logging for Activity Outcomes and Outputs by @sfmskywalker in #4352
- Support serialization of non(de)serializable values by @sfmskywalker in #4356
- Refactor activity state serializer by @sfmskywalker in #4357
- Refactor safe serializer by @sfmskywalker in #4361
- Fix Default Workflow Runtime Race condition by @sfmskywalker in #4362
- V3 get type definitions request by @sNakiex in #4353
- Enrich trigger validation to take into consideration path and method β¦ by @MariusVuscanNx in #4363
- Fix Break behavior by @sfmskywalker in #4365
- Implement stale member handling by @sfmskywalker in #4369
- Package DistributedLock upgraded to V2.3.3 by @dev-maxx in #4360
- Refactor proto files and fix snapshot loading of running workflows grain by @sfmskywalker in #4371
- Fixed IsNameUnique for InMemory WorkflowDefinition store by @yspanj in #4370
- Remove WorkflowStateStore by @sfmskywalker in #4374
- Use mapping expression for correct EF core projections by @sfmskywalker in #4376
- Make Liquid TextEncoder configurable by @sfmskywalker in #4380
- Fix Dapper persistence provider by @sfmskywalker in #4381
- fix: WorkflowContextsPlugin not enable by @Nokecy in #4397
- Add PostgreSql dapper provider by @herblinernexxbizz in #4398
- update connector by @herblinernexxbizz in #4402
- Dynamic Outcomes + JavaScript Outcomes by @sfmskywalker in #4410
- replace DistributedLock package with DistributedLock.FileSystem by @happtim in #4399
- Incidents by @sfmskywalker in #4436
- WriteHttpFileResponse Activity by @sfmskywalker in #4445
- WriteFileHttpResponse updates by @sfmskywalker in #4446
- make type name helper aware of generics by @rose-a in #4442
- Implement resumable downloads by @sfmskywalker in #4448
- Terminal Activities by @sfmskywalker in #4454
- File Uploads by @sfmskywalker in #4457
- Exclude Activity from being serialized in instance and execution log by @sfmskywalker in #4464
- HTTP File Response Improvements by @sfmskywalker in #4465
- Enhance HTTP Endpoint + Flowchart fix by @sfmskywalker in #4469
- Add DropIn support by @sfmskywalker in #4471
- Implement SAS tokens by @sfmskywalker in #4476
- REturn workflowstate around faulted workflowinstances to make it cons⦠by @herblinernexxbizz in #4484
- Feature: Alterations by @sfmskywalker in #4501
- Activity Preconditions by @sfmskywalker in #4507
- bugfix using editor as standalone by @bskfrederik in #4487
- Feature/postgresql efcore by @jeanbaptistedalle in #4500
- Corrected behaviour of 'For' activity. by @solutionmania in #4497
- Enhancements/servicebus activity by @jdevillard in #4492
- Alteration Improvements and fixes by @sfmskywalker in #4518
- Capture activity state by @sfmskywalker in #4530
- update hangfire version to 1.8.5 by @Nokecy in #4537
- Adds Swagger documentation generation and UI. by @solutionmania in #4525
- bugfix publish workflow results in 415 response by @bskfrederik in #4517
- MassTransit Alterations Dispatcher by @sfmskywalker in #4547
- fix: fix hashSet deserialize error by @Nokecy in #4545
- Replace Stencil dashboard with Blazor in AllInOne.Web project by @sfmskywalker in #4554
- Service Bus Activities enhancements - Workflow Inbox and Test by @jdevillard in #4512
- Include NodeId for unique addressability within graph by @sfmskywalker in #4575
- Update NotFoundActivity display text + description by @sfmskywalker in #4578
- Add WorkflowContext client API by @sfmskywalker in #4585
- Add Quartz.NET Migrations by @sfmskywalker in #4586
- fix issue 4576 text alignment by @bskfrederik in #4577
- Storage module by @sfmskywalker in #4588
- V3 - Support for Oracle DB in Runtime Module by @b0rv3g4r4 in #4592
- Add C# expression support by @sfmskywalker in #4594
- Add Python Expression support by @sfmskywalker in #4600
- Enhancement/runtime options provider#4491 by @jdevillard in #4614
- Add Input Validation for Elsa.Identity Login Endpoint by @polferov in #4601
- Decouple Expression Types by @sfmskywalker in #4622
- Add Azure Service Bus for MassTransit by @sfmskywalker in #4624
- Change endpoint to Post by @jdevillard in #4619
- V3 - Add to sample activity execution log pipeline and exception handler pipeline by @b0rv3g4r4 in #4607
- V3 - Fix ParallelForEach Behaviour when empty items by @b0rv3g4r4 in #4623
- fix: workflow definition editor autoLayout by @Dharmang92 in #4634
- Features : Allow Customization of DbContext Schema by @jdevillard in #4638
- Bulk Import + Export of Workflow Definitions and Instances by @sfmskywalker in #4643
- Updated Api.Client to include instance bulk import and export by @MariusVuscanNx in #4652
- Target .NET 8 by @sfmskywalker in #4660
- Add Bulk Dispatch Workflow activity by @sfmskywalker in #4683
- Implemeted FlowFork activity by @MariusVuscanNx in #4684
- Enhanced ObjectConverter to Return JsonObject Instead of JsonElement by @sfmskywalker in #4686
- Update README to add access information when user tried to run elsa with docker by @zergmk2 in #4708
- Feature HTTP Activity : Allow adding Authorization Header without validation by @jdevillard in #4721
- Add a more generic UIHandler to customize how inputAttributes can be handle by UI by @jdevillard in #4688
New Contributors
- @yopichy made their first contribution in #2616
- @cristinamudura made their first contribution in #2855
- @gurkanguran made their first contribution in #2990
- @LevVadim made their first contribution in #3503
- @MariusVuscanNx made their first contribution in #3750
- @ifranlaloe made their first contribution in #3752
- @herblinernexxbizz made their first contribution in #3762
- @NrujalSharma made their first contribution in #3853
- @VictorioBerra made their first contribution in #3886
- @Daxton47 made their first contribution in #3920
- @Yunus0497 made their first contribution in #3971
- @Gambitier made their first contribution in #4022
- @sNakiex made their first contribution in #4149
- @RuslanSay made their first contribution in #4317
- @dev-maxx made their first contribution in #4360
- @yspanj made their first contribution in #4370
- @happtim made their first contribution in #4399
- @rose-a made their first contribution in #4442
- @bskfrederik made their first contribution in #4487
- @jeanbaptistedalle made their first contribution in #4500
- @solutionmania made their first contribution in #4497
- @b0rv3g4r4 made their first contribution in #4592
- @Dharmang92 made their first contribution in #4634
- @zergmk2 made their first contribution in #4708