Bump the elsa group with 4 updates#1324
Merged
github-actions[bot] merged 1 commit intomasterfrom Mar 5, 2026
Merged
Conversation
Bumps Elsa from 3.5.3 to 3.6.0 Bumps Elsa.Identity from 3.5.3 to 3.6.0 Bumps Elsa.Scheduling from 3.5.3 to 3.6.0 Bumps Elsa.Workflows.Api from 3.5.3 to 3.6.0 --- updated-dependencies: - dependency-name: Elsa dependency-version: 3.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: elsa - dependency-name: Elsa.Identity dependency-version: 3.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: elsa - dependency-name: Elsa.Scheduling dependency-version: 3.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: elsa - dependency-name: Elsa.Workflows.Api dependency-version: 3.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: elsa ... Signed-off-by: dependabot[bot] <support@github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated Elsa from 3.5.3 to 3.6.0.
Release notes
Sourced from Elsa's releases.
3.6.0
Elsa 3.6.0 — Release Notes
Compare:
3.5.3...3.6.0Database migrations (EF Core — all providers):
ActivityNodeIdcolumns inActivityExecutionRecordsandWorkflowExecutionLogRecordshave been widened to unlimited types (nvarchar(max)/longtext/NCLOB) to support deeply nested workflows. The corresponding B-tree indexes (IX_ActivityExecutionRecord_ActivityNodeId,IX_WorkflowExecutionLogRecord_ActivityNodeId) are dropped as part of the V3_6 migrations. You must apply the EF Core migrations before upgrading to 3.6.0 in any SQL Server, MySQL, or Oracle deployment. (d4b69be44b) (#7338)Multitenancy — tenant ID convention change: An empty string (
"") is now the canonical default tenant ID for all tenant-aware entities;nullnow means tenant-agnostic (visible to all tenants). EF Core query filters and theActivityRegistryhave been updated accordingly. If your database contains rows with anullTenantIdthat were intended to represent the default tenant, migrate those rows to""before upgrading. The newNormalizeTenantId()extension method onstringhandles the conversion in code. (#7217, #7226)Multitenancy — stored-trigger index updated: Database indexes on stored triggers now include
TenantId. The V3_6 migration adds this index; no manual action is required beyond running migrations. (#7217)DefaultRegistriesPopulatorconstructor change: The constructor now requires an additionalINotificationSenderdependency. If you manually instantiate or overrideDefaultRegistriesPopulatorin tests or custom DI registrations, add the new parameter. Standard DI consumers are unaffected. (#7293)Elsa.Commondependency trimmed: TheDistributedLockmeta-package (which pulled in all provider implementations) has been replaced withDistributedLock.Core. Applications that relied on the transitive provider packages (e.g.DistributedLock.SqlServer) being pulled in viaElsa.Commonmust add explicit package references. (53245cafbd) (#7169)✨ New features
Activity host registration
HostMethodActivity/ activity hosts: Introduces support for registering CLR types as activity hosts. Publicasyncmethods on a registered type are automatically discovered and exposed as individual activities in the workflow designer, enabling code-first activity generation without manual activity boilerplate. New types:HostMethodActivity,HostMethodActivityProvider,IHostMethodActivityDescriber,FromServicesAttribute. (fa04e1ebcd) (#7172)Workflow dispatch notifications
Dispatch lifecycle notifications:
BackgroundWorkflowDispatchernow emits four new notifications at dispatch time, allowing subscribers to react to durable dispatch scenarios without a custom dispatcher:WorkflowDefinitionDispatching/WorkflowDefinitionDispatchedWorkflowInstanceDispatching/WorkflowInstanceDispatched(411ca0a332) (#7157)
WorkflowDefinitionsReloadednotification:DefaultRegistriesPopulatornow dispatches aWorkflowDefinitionsReloadednotification after repopulating the workflow definition store, enabling subscriber nodes to synchronize their registries. (f5505d66c9) (#7293)Consumers API & recursive export
GET /workflow-definitions/{definitionId}/consumers: New endpoint returns all recursive consuming workflow definitions for a given definition. Built on a newIWorkflowReferenceGraphBuilder/WorkflowReferenceGraphmodel that replaces the previous ad-hoc recursive query approach. (0a2e99ad42) (#7309)Export with transitive consumers: The export endpoint and
BulkExportWorkflowDefinitionsRequestnow accept anIncludeConsumingWorkflowsflag (defaultfalse). When enabled, the ZIP export recursively resolves and includes all consuming workflows at their latest version. Exported filenames are now deterministic ({Name}-{DefinitionId}.json). (0a2e99ad42) (#7309)Default commit strategies
WithDefaultWorkflowCommitStrategy()andWithDefaultActivityCommitStrategy()extension methods on the workflows builder let you set application-wide fallback commit strategies. The resolution order for activities is: activity-specific → default activity → workflow-specific → default workflow → no commit. Default strategies are stored separately from the registry so they don't appear in the UI/tooling. (31eff52d24) (#7148)Multitenancy enhancements
TenantIdfor tenant-agnostic entities: Entities with anullTenantIdare now treated as visible across all tenants. EF Core query filters andActivityRegistryquery methods includenull-tenanted records in every tenant's scope. NewActivityDescriptor.TenantId(nullable) property added. (7bc9035f5e) (#7226)... (truncated)
3.6.0-rc5
What's Changed
Full Changelog: elsa-workflows/elsa-core@3.6.0-rc4...3.6.0-rc5
3.6.0-rc4
What's Changed
Resulthandling: by @sfmskywalker in Update multitenancy logic and improveResulthandling: elsa-workflows/elsa-core#7281Full Changelog: elsa-workflows/elsa-core@3.6.0-rc3...3.6.0-rc4
3.6.0-rc3
Compare:
3.6.0-rc2...3.6.0-rc3This release candidate includes significant multitenancy improvements, bug fixes, and enhanced test coverage.
Multitenancy Tenant ID Convention Changes
Affected users: Applications using multitenancy features, especially those with existing tenant data.
What changed:
"") instead ofnull(ADR-0008). (b09a56481) (#7217)"*") as the sentinel value instead ofnull(ADR-0009). (7bc9035f5) (#7226)Triggerstable now includeTenantIdin unique constraints across all EF Core providers. (b09a56481) (#7217)Migration required:
nullTenantIdvalues to empty strings for default tenant data inWorkflowDefinitions,WorkflowInstances, and runtime entities.doc/adr/for detailed rationale and migration guidance.Query filter changes: EF Core query filters have been updated to handle the new tenant ID conventions, ensuring tenant isolation is properly maintained. (7bc9035f5) (#7226)
✨ New features
Multitenancy enhancements
"*"as tenant ID) to make them accessible across all tenants. (7bc9035f5) (#7226)SelectiveMockLockProviderfor precise lock mocking in tests without affecting unrelated background operations. (b09a56481) (#7217)🔧 Improvements
Multitenancy
DefaultWorkflowDefinitionStorePopulatorto ensure workflows are only loaded for the current tenant. (b09a56481) (#7217)WorkflowDefinitionActivityProviderand included tenant ID in activity type names for better separation. (558902bb7)ActivityRegistry.Findto prefer tenant-specific descriptors over tenant-agnostic ones with single-pass iteration for better performance. (7bc9035f5) (#7226)BackgroundWorkflowCancellationDispatcherfor proper tenant context propagation during workflow cancellation. (bc70beff1) (#7040)API improvements
ElsaEndpointbase class with standardized permission configuration. (72569702f) (#7205)Error handling
... (truncated)
3.6.0-rc2
Compare:
3.6.0-rc1...3.6.0-rc2Bookmarkmoved from a positional record to a mutable class (serialization/back-compat oriented). (ca268c16ad) (#7161)Elsa.Commonnow referencesDistributedLock.Coreinstead ofDistributedLock. (#7169)✨ New features
Activity hosts / host-method activities
[FromServices]). (#7172)Penguin) and registered it inElsa.Server.Web. (#7172)Commit strategies (defaults)
Resilience / transient exception detection
Workflow dispatch notifications
Tenant task lifecycle & dependencies
TenantTaskManagerand dependency ordering support ([TaskDependency],TopologicalTaskSorter). (#7174)🔧 Improvements
correlationIdparameter non-optional inWorkflowExecutionContextconstructor. (fa798b0a47)ClearCompletionCallbacksfromWorkflowExecutionContext. (79a64e90fd)🐛 Fixes
ActivityExecutionContext.TryGet(...)correctly handlesLiteralreferences by returning the literal’s value directly. (#7075)🧩 Developer-facing changes
ActivityAttribute: now valid on classes, interfaces, and methods. (3778a14e54)InputAttribute: now valid on properties and parameters. (3778a14e54)OutputAttribute: now valid on properties, classes, methods, and return values. (3778a14e54)🧪 Tests
... (truncated)
3.6.0-rc1
Elsa Workflows 3.6.0 RC1
This release focuses on Flowchart execution improvements, stronger runtime correctness, major test coverage expansion, reliability fixes for scheduling/triggers and HTTP content handling, and a platform upgrade to .NET 10 while retaining support for .NET 8 and .NET 9.
Highlights
MergeMode. (PRs: #6632, #6937, #6993, #7141)ActivityCompletednotification. (PRs: #6675, #6800, #6807)Flowchart: token-based execution + per-activity
MergeMode(opt-in)Elsa 3.6.0 introduces an optional token-based execution algorithm for the Flowchart activity. Instead of relying on the previous counter-based scheduling model, the Flowchart can now track progress using tokens that represent a taken connection (from a source activity outcome to a target activity).
When an activity completes, the flowchart:
MergeMode.New:
MergeMode(configurable per activity)With token-based execution enabled, Flowchart supports a new
MergeModeconcept that determines how a node behaves when it has multiple inbound connections. You can now specify a merge mode per activity, allowing different “join” semantics within the same flowchart.In broad terms, merge modes enable behaviors like:
Merge): waits for tokens from all forward inbound connections (loop/back edges don’t block).Converge): waits for tokens from all inbound connections, including loop/back edges.Cascade/Race): schedules on the first arriving inbound token; inRacemode, other inbound ancestors are canceled so only the “winning” path continues.This improves predictability for joins, forks, and cyclic graphs, while giving you fine-grained control over how each activity merges incoming paths.
How to opt in (Program.cs)
Token-based Flowchart execution is opt-in. Enable it via the Flowchart feature configuration:
Breaking / Upgrading Notes
These are the changes most likely to affect upgrades from 3.5.x.
1) Multi-targeting: .NET 8, .NET 9, and .NET 10
Elsa 3.6.0 multi-targets .NET 8, .NET 9, and .NET 10.
... (truncated)
Commits viewable in compare view.
Updated Elsa.Identity from 3.5.3 to 3.6.0.
Release notes
Sourced from Elsa.Identity's releases.
3.6.0
Elsa 3.6.0 — Release Notes
Compare:
3.5.3...3.6.0Database migrations (EF Core — all providers):
ActivityNodeIdcolumns inActivityExecutionRecordsandWorkflowExecutionLogRecordshave been widened to unlimited types (nvarchar(max)/longtext/NCLOB) to support deeply nested workflows. The corresponding B-tree indexes (IX_ActivityExecutionRecord_ActivityNodeId,IX_WorkflowExecutionLogRecord_ActivityNodeId) are dropped as part of the V3_6 migrations. You must apply the EF Core migrations before upgrading to 3.6.0 in any SQL Server, MySQL, or Oracle deployment. (d4b69be44b) (#7338)Multitenancy — tenant ID convention change: An empty string (
"") is now the canonical default tenant ID for all tenant-aware entities;nullnow means tenant-agnostic (visible to all tenants). EF Core query filters and theActivityRegistryhave been updated accordingly. If your database contains rows with anullTenantIdthat were intended to represent the default tenant, migrate those rows to""before upgrading. The newNormalizeTenantId()extension method onstringhandles the conversion in code. (#7217, #7226)Multitenancy — stored-trigger index updated: Database indexes on stored triggers now include
TenantId. The V3_6 migration adds this index; no manual action is required beyond running migrations. (#7217)DefaultRegistriesPopulatorconstructor change: The constructor now requires an additionalINotificationSenderdependency. If you manually instantiate or overrideDefaultRegistriesPopulatorin tests or custom DI registrations, add the new parameter. Standard DI consumers are unaffected. (#7293)Elsa.Commondependency trimmed: TheDistributedLockmeta-package (which pulled in all provider implementations) has been replaced withDistributedLock.Core. Applications that relied on the transitive provider packages (e.g.DistributedLock.SqlServer) being pulled in viaElsa.Commonmust add explicit package references. (53245cafbd) (#7169)✨ New features
Activity host registration
HostMethodActivity/ activity hosts: Introduces support for registering CLR types as activity hosts. Publicasyncmethods on a registered type are automatically discovered and exposed as individual activities in the workflow designer, enabling code-first activity generation without manual activity boilerplate. New types:HostMethodActivity,HostMethodActivityProvider,IHostMethodActivityDescriber,FromServicesAttribute. (fa04e1ebcd) (#7172)Workflow dispatch notifications
Dispatch lifecycle notifications:
BackgroundWorkflowDispatchernow emits four new notifications at dispatch time, allowing subscribers to react to durable dispatch scenarios without a custom dispatcher:WorkflowDefinitionDispatching/WorkflowDefinitionDispatchedWorkflowInstanceDispatching/WorkflowInstanceDispatched(411ca0a332) (#7157)
WorkflowDefinitionsReloadednotification:DefaultRegistriesPopulatornow dispatches aWorkflowDefinitionsReloadednotification after repopulating the workflow definition store, enabling subscriber nodes to synchronize their registries. (f5505d66c9) (#7293)Consumers API & recursive export
GET /workflow-definitions/{definitionId}/consumers: New endpoint returns all recursive consuming workflow definitions for a given definition. Built on a newIWorkflowReferenceGraphBuilder/WorkflowReferenceGraphmodel that replaces the previous ad-hoc recursive query approach. (0a2e99ad42) (#7309)Export with transitive consumers: The export endpoint and
BulkExportWorkflowDefinitionsRequestnow accept anIncludeConsumingWorkflowsflag (defaultfalse). When enabled, the ZIP export recursively resolves and includes all consuming workflows at their latest version. Exported filenames are now deterministic ({Name}-{DefinitionId}.json). (0a2e99ad42) (#7309)Default commit strategies
WithDefaultWorkflowCommitStrategy()andWithDefaultActivityCommitStrategy()extension methods on the workflows builder let you set application-wide fallback commit strategies. The resolution order for activities is: activity-specific → default activity → workflow-specific → default workflow → no commit. Default strategies are stored separately from the registry so they don't appear in the UI/tooling. (31eff52d24) (#7148)Multitenancy enhancements
TenantIdfor tenant-agnostic entities: Entities with anullTenantIdare now treated as visible across all tenants. EF Core query filters andActivityRegistryquery methods includenull-tenanted records in every tenant's scope. NewActivityDescriptor.TenantId(nullable) property added. (7bc9035f5e) (#7226)... (truncated)
3.6.0-rc5
What's Changed
Full Changelog: elsa-workflows/elsa-core@3.6.0-rc4...3.6.0-rc5
3.6.0-rc4
What's Changed
Resulthandling: by @sfmskywalker in Update multitenancy logic and improveResulthandling: elsa-workflows/elsa-core#7281Full Changelog: elsa-workflows/elsa-core@3.6.0-rc3...3.6.0-rc4
3.6.0-rc3
Compare:
3.6.0-rc2...3.6.0-rc3This release candidate includes significant multitenancy improvements, bug fixes, and enhanced test coverage.
Multitenancy Tenant ID Convention Changes
Affected users: Applications using multitenancy features, especially those with existing tenant data.
What changed:
"") instead ofnull(ADR-0008). (b09a56481) (#7217)"*") as the sentinel value instead ofnull(ADR-0009). (7bc9035f5) (#7226)Triggerstable now includeTenantIdin unique constraints across all EF Core providers. (b09a56481) (#7217)Migration required:
nullTenantIdvalues to empty strings for default tenant data inWorkflowDefinitions,WorkflowInstances, and runtime entities.doc/adr/for detailed rationale and migration guidance.Query filter changes: EF Core query filters have been updated to handle the new tenant ID conventions, ensuring tenant isolation is properly maintained. (7bc9035f5) (#7226)
✨ New features
Multitenancy enhancements
"*"as tenant ID) to make them accessible across all tenants. (7bc9035f5) (#7226)SelectiveMockLockProviderfor precise lock mocking in tests without affecting unrelated background operations. (b09a56481) (#7217)🔧 Improvements
Multitenancy
DefaultWorkflowDefinitionStorePopulatorto ensure workflows are only loaded for the current tenant. (b09a56481) (#7217)WorkflowDefinitionActivityProviderand included tenant ID in activity type names for better separation. (558902bb7)ActivityRegistry.Findto prefer tenant-specific descriptors over tenant-agnostic ones with single-pass iteration for better performance. (7bc9035f5) (#7226)BackgroundWorkflowCancellationDispatcherfor proper tenant context propagation during workflow cancellation. (bc70beff1) (#7040)API improvements
ElsaEndpointbase class with standardized permission configuration. (72569702f) (#7205)Error handling
... (truncated)
3.6.0-rc2
Compare:
3.6.0-rc1...3.6.0-rc2Bookmarkmoved from a positional record to a mutable class (serialization/back-compat oriented). (ca268c16ad) (#7161)Elsa.Commonnow referencesDistributedLock.Coreinstead ofDistributedLock. (#7169)✨ New features
Activity hosts / host-method activities
[FromServices]). (#7172)Penguin) and registered it inElsa.Server.Web. (#7172)Commit strategies (defaults)
Resilience / transient exception detection
Workflow dispatch notifications
Tenant task lifecycle & dependencies
TenantTaskManagerand dependency ordering support ([TaskDependency],TopologicalTaskSorter). (#7174)🔧 Improvements
correlationIdparameter non-optional inWorkflowExecutionContextconstructor. (fa798b0a47)ClearCompletionCallbacksfromWorkflowExecutionContext. (79a64e90fd)🐛 Fixes
ActivityExecutionContext.TryGet(...)correctly handlesLiteralreferences by returning the literal’s value directly. (#7075)🧩 Developer-facing changes
ActivityAttribute: now valid on classes, interfaces, and methods. (3778a14e54)InputAttribute: now valid on properties and parameters. (3778a14e54)OutputAttribute: now valid on properties, classes, methods, and return values. (3778a14e54)🧪 Tests
... (truncated)
3.6.0-rc1
Elsa Workflows 3.6.0 RC1
This release focuses on Flowchart execution improvements, stronger runtime correctness, major test coverage expansion, reliability fixes for scheduling/triggers and HTTP content handling, and a platform upgrade to .NET 10 while retaining support for .NET 8 and .NET 9.
Highlights
MergeMode. (PRs: #6632, #6937, #6993, #7141)ActivityCompletednotification. (PRs: #6675, #6800, #6807)Flowchart: token-based execution + per-activity
MergeMode(opt-in)Elsa 3.6.0 introduces an optional token-based execution algorithm for the Flowchart activity. Instead of relying on the previous counter-based scheduling model, the Flowchart can now track progress using tokens that represent a taken connection (from a source activity outcome to a target activity).
When an activity completes, the flowchart:
MergeMode.New:
MergeMode(configurable per activity)With token-based execution enabled, Flowchart supports a new
MergeModeconcept that determines how a node behaves when it has multiple inbound connections. You can now specify a merge mode per activity, allowing different “join” semantics within the same flowchart.In broad terms, merge modes enable behaviors like:
Merge): waits for tokens from all forward inbound connections (loop/back edges don’t block).Converge): waits for tokens from all inbound connections, including loop/back edges.Cascade/Race): schedules on the first arriving inbound token; inRacemode, other inbound ancestors are canceled so only the “winning” path continues.This improves predictability for joins, forks, and cyclic graphs, while giving you fine-grained control over how each activity merges incoming paths.
How to opt in (Program.cs)
Token-based Flowchart execution is opt-in. Enable it via the Flowchart feature configuration:
Breaking / Upgrading Notes
These are the changes most likely to affect upgrades from 3.5.x.
1) Multi-targeting: .NET 8, .NET 9, and .NET 10
Elsa 3.6.0 multi-targets .NET 8, .NET 9, and .NET 10.
... (truncated)
Commits viewable in compare view.
Updated Elsa.Scheduling from 3.5.3 to 3.6.0.
Release notes
Sourced from Elsa.Scheduling's releases.
3.6.0
Elsa 3.6.0 — Release Notes
Compare:
3.5.3...3.6.0Database migrations (EF Core — all providers):
ActivityNodeIdcolumns inActivityExecutionRecordsandWorkflowExecutionLogRecordshave been widened to unlimited types (nvarchar(max)/longtext/NCLOB) to support deeply nested workflows. The corresponding B-tree indexes (IX_ActivityExecutionRecord_ActivityNodeId,IX_WorkflowExecutionLogRecord_ActivityNodeId) are dropped as part of the V3_6 migrations. You must apply the EF Core migrations before upgrading to 3.6.0 in any SQL Server, MySQL, or Oracle deployment. (d4b69be44b) (#7338)Multitenancy — tenant ID convention change: An empty string (
"") is now the canonical default tenant ID for all tenant-aware entities;nullnow means tenant-agnostic (visible to all tenants). EF Core query filters and theActivityRegistryhave been updated accordingly. If your database contains rows with anullTenantIdthat were intended to represent the default tenant, migrate those rows to""before upgrading. The newNormalizeTenantId()extension method onstringhandles the conversion in code. (#7217, #7226)Multitenancy — stored-trigger index updated: Database indexes on stored triggers now include
TenantId. The V3_6 migration adds this index; no manual action is required beyond running migrations. (#7217)DefaultRegistriesPopulatorconstructor change: The constructor now requires an additionalINotificationSenderdependency. If you manually instantiate or overrideDefaultRegistriesPopulatorin tests or custom DI registrations, add the new parameter. Standard DI consumers are unaffected. (#7293)Elsa.Commondependency trimmed: TheDistributedLockmeta-package (which pulled in all provider implementations) has been replaced withDistributedLock.Core. Applications that relied on the transitive provider packages (e.g.DistributedLock.SqlServer) being pulled in viaElsa.Commonmust add explicit package references. (53245cafbd) (#7169)✨ New features
Activity host registration
HostMethodActivity/ activity hosts: Introduces support for registering CLR types as activity hosts. Publicasyncmethods on a registered type are automatically discovered and exposed as individual activities in the workflow designer, enabling code-first activity generation without manual activity boilerplate. New types:HostMethodActivity,HostMethodActivityProvider,IHostMethodActivityDescriber,FromServicesAttribute. (fa04e1ebcd) (#7172)Workflow dispatch notifications
Dispatch lifecycle notifications:
BackgroundWorkflowDispatchernow emits four new notifications at dispatch time, allowing subscribers to react to durable dispatch scenarios without a custom dispatcher:WorkflowDefinitionDispatching/WorkflowDefinitionDispatchedWorkflowInstanceDispatching/WorkflowInstanceDispatched(411ca0a332) (#7157)
WorkflowDefinitionsReloadednotification:DefaultRegistriesPopulatornow dispatches aWorkflowDefinitionsReloadednotification after repopulating the workflow definition store, enabling subscriber nodes to synchronize their registries. (f5505d66c9) (#7293)Consumers API & recursive export
GET /workflow-definitions/{definitionId}/consumers: New endpoint returns all recursive consuming workflow definitions for a given definition. Built on a newIWorkflowReferenceGraphBuilder/WorkflowReferenceGraphmodel that replaces the previous ad-hoc recursive query approach. (0a2e99ad42) (#7309)Export with transitive consumers: The export endpoint and
BulkExportWorkflowDefinitionsRequestnow accept anIncludeConsumingWorkflowsflag (defaultfalse). When enabled, the ZIP export recursively resolves and includes all consuming workflows at their latest version. Exported filenames are now deterministic ({Name}-{DefinitionId}.json). (0a2e99ad42) (#7309)Default commit strategies
WithDefaultWorkflowCommitStrategy()andWithDefaultActivityCommitStrategy()extension methods on the workflows builder let you set application-wide fallback commit strategies. The resolution order for activities is: activity-specific → default activity → workflow-specific → default workflow → no commit. Default strategies are stored separately from the registry so they don't appear in the UI/tooling. (31eff52d24) (#7148)Multitenancy enhancements
TenantIdfor tenant-agnostic entities: Entities with anullTenantIdare now treated as visible across all tenants. EF Core query filters andActivityRegistryquery methods includenull-tenanted records in every tenant's scope. NewActivityDescriptor.TenantId(nullable) property added. (7bc9035f5e) (#7226)... (truncated)
3.6.0-rc5
What's Changed
Full Changelog: elsa-workflows/elsa-core@3.6.0-rc4...3.6.0-rc5
3.6.0-rc4
What's Changed
Resulthandling: by @sfmskywalker in Update multitenancy logic and improveResulthandling: elsa-workflows/elsa-core#7281Full Changelog: elsa-workflows/elsa-core@3.6.0-rc3...3.6.0-rc4
3.6.0-rc3
Compare:
3.6.0-rc2...3.6.0-rc3This release candidate includes significant multitenancy improvements, bug fixes, and enhanced test coverage.
Multitenancy Tenant ID Convention Changes
Affected users: Applications using multitenancy features, especially those with existing tenant data.
What changed:
"") instead ofnull(ADR-0008). (b09a56481) (#7217)"*") as the sentinel value instead ofnull(ADR-0009). (7bc9035f5) (#7226)Triggerstable now includeTenantIdin unique constraints across all EF Core providers. (b09a56481) (#7217)Migration required:
nullTenantIdvalues to empty strings for default tenant data inWorkflowDefinitions,WorkflowInstances, and runtime entities.doc/adr/for detailed rationale and migration guidance.Query filter changes: EF Core query filters have been updated to handle the new tenant ID conventions, ensuring tenant isolation is properly maintained. (7bc9035f5) (#7226)
✨ New features
Multitenancy enhancements
"*"as tenant ID) to make them accessible across all tenants. (7bc9035f5) (#7226)SelectiveMockLockProviderfor precise lock mocking in tests without affecting unrelated background operations. (b09a56481) (#7217)🔧 Improvements
Multitenancy
DefaultWorkflowDefinitionStorePopulatorto ensure workflows are only loaded for the current tenant. (b09a56481) (#7217)WorkflowDefinitionActivityProviderand included tenant ID in activity type names for better separation. (558902bb7)ActivityRegistry.Findto prefer tenant-specific descriptors over tenant-agnostic ones with single-pass iteration for better performance. (7bc9035f5) (#7226)BackgroundWorkflowCancellationDispatcherfor proper tenant context propagation during workflow cancellation. (bc70beff1) (#7040)API improvements
ElsaEndpointbase class with standardized permission configuration. (72569702f) (#7205)Error handling
... (truncated)
3.6.0-rc2
Compare:
3.6.0-rc1...3.6.0-rc2Bookmarkmoved from a positional record to a mutable class (serialization/back-compat oriented). (ca268c16ad) (#7161)Elsa.Commonnow referencesDistributedLock.Coreinstead ofDistributedLock. (#7169)✨ New features
Activity hosts / host-method activities
[FromServices]). (#7172)Penguin) and registered it inElsa.Server.Web. (#7172)Commit strategies (defaults)
Resilience / transient exception detection
Workflow dispatch notifications
Tenant task lifecycle & dependencies
TenantTaskManagerand dependency ordering support ([TaskDependency],TopologicalTaskSorter). (#7174)🔧 Improvements
correlationIdparameter non-optional inWorkflowExecutionContextconstructor. (fa798b0a47)ClearCompletionCallbacksfromWorkflowExecutionContext. (79a64e90fd)🐛 Fixes
ActivityExecutionContext.TryGet(...)correctly handlesLiteralreferences by returning the literal’s value directly. (#7075)🧩 Developer-facing changes
ActivityAttribute: now valid on classes, interfaces, and methods. (3778a14e54)InputAttribute: now valid on properties and parameters. (3778a14e54)OutputAttribute: now valid on properties, classes, methods, and return values. (3778a14e54)🧪 Tests
... (truncated)
3.6.0-rc1
Elsa Workflows 3.6.0 RC1
This release focuses on Flowchart execution improvements, stronger runtime correctness, major test coverage expansion, reliability fixes for scheduling/triggers and HTTP content handling, and a platform upgrade to .NET 10 while retaining support for .NET 8 and .NET 9.
Highlights
MergeMode. (PRs: #6632, #6937, #6993, #7141)ActivityCompletednotification. (PRs: #6675, #6800, #6807)Flowchart: token-based execution + per-activity
MergeMode(opt-in)Elsa 3.6.0 introduces an optional token-based execution algorithm for the Flowchart activity. Instead of relying on the previous counter-based scheduling model, the Flowchart can now track progress using tokens that represent a taken connection (from a source activity outcome to a target activity).
When an activity completes, the flowchart:
MergeMode.New:
MergeMode(configurable per activity)With token-based execution enabled, Flowchart supports a new
MergeModeconcept that determines how a node behaves when it has multiple inbound connections. You can now specify a merge mode per activity, allowing different “join” semantics within the same flowchart.In broad terms, merge modes enable behaviors like:
Merge): waits for tokens from all forward inbound connections (loop/back edges don’t block).Converge): waits for tokens from all inbound connections, including loop/back edges.Cascade/Race): schedules on the first arriving inbound token; inRacemode, other inbound ancestors are canceled so only the “winning” path continues.This improves predictability for joins, forks, and cyclic graphs, while giving you fine-grained control over how each activity merges incoming paths.
How to opt in (Program.cs)
Token-based Flowchart execution is opt-in. Enable it via the Flowchart feature configuration:
Breaking / Upgrading Notes
These are the changes most likely to affect upgrades from 3.5.x.
1) Multi-targeting: .NET 8, .NET 9, and .NET 10
Elsa 3.6.0 multi-targets .NET 8, .NET 9, and .NET 10.
... (truncated)
Commits viewable in compare view.
Updated Elsa.Workflows.Api from 3.5.3 to 3.6.0.
Release notes
Sourced from Elsa.Workflows.Api's releases.
3.6.0
Elsa 3.6.0 — Release Notes
Compare:
3.5.3...3.6.0Database migrations (EF Core — all providers):
ActivityNodeIdcolumns inActivityExecutionRecordsandWorkflowExecutionLogRecordshave been widened to unlimited types (nvarchar(max)/longtext/NCLOB) to support deeply nested workflows. The corresponding B-tree indexes (IX_ActivityExecutionRecord_ActivityNodeId,IX_WorkflowExecutionLogRecord_ActivityNodeId) are dropped as part of the V3_6 migrations. You must apply the EF Core migrations before upgrading to 3.6.0 in any SQL Server, MySQL, or Oracle deployment. (d4b69be44b) (#7338)Multitenancy — tenant ID convention change: An empty string (
"") is now the canonical default tenant ID for all tenant-aware entities;nullnow means tenant-agnostic (visible to all tenants). EF Core query filters and theActivityRegistryhave been updated accordingly. If your database contains rows with anullTenantIdthat were intended to represent the default tenant, migrate those rows to""before upgrading. The newNormalizeTenantId()extension method onstringhandles the conversion in code. (#7217, #7226)Multitenancy — stored-trigger index updated: Database indexes on stored triggers now include
TenantId. The V3_6 migration adds this index; no manual action is required beyond running migrations. (#7217)DefaultRegistriesPopulatorconstructor change: The constructor now requires an additionalINotificationSenderdependency. If you manually instantiate or overrideDefaultRegistriesPopulatorin tests or custom DI registrations, add the new parameter. Standard DI consumers are unaffected. (#7293)Elsa.Commondependency trimmed: TheDistributedLockmeta-package (which pulled in all provider implementations) has been replaced withDistributedLock.Core. Applications that relied on the transitive provider packages (e.g.DistributedLock.SqlServer) being pulled in viaElsa.Commonmust add explicit package references. (53245cafbd) (#7169)✨ New features
Activity host registration
HostMethodActivity/ activity hosts: Introduces support for registering CLR types as activity hosts. Publicasyncmethods on a registered type are automatically discovered and exposed as individual activities in the workflow designer, enabling code-first activity generation without manual activity boilerplate. New types:HostMethodActivity,HostMethodActivityProvider,IHostMethodActivityDescriber,FromServicesAttribute. (fa04e1ebcd) (#7172)Workflow dispatch notifications
Dispatch lifecycle notifications:
BackgroundWorkflowDispatchernow emits four new notifications at dispatch time, allowing subscribers to react to durable dispatch scenarios without a custom dispatcher:WorkflowDefinitionDispatching/WorkflowDefinitionDispatchedWorkflowInstanceDispatching/WorkflowInstanceDispatched(411ca0a332) (#7157)
WorkflowDefinitionsReloadednotification:DefaultRegistriesPopulatornow dispatches aWorkflowDefinitionsReloadednotification after repopulating the workflow definition store, enabling subscriber nodes to synchronize their registries. (f5505d66c9) (#7293)Consumers API & recursive export
GET /workflow-definitions/{definitionId}/consumers: New endpoint returns all recursive consuming workflow definitions for a given definition. Built on a newIWorkflowReferenceGraphBuilder/WorkflowReferenceGraphmodel that replaces the previous ad-hoc recursive query approach. (0a2e99ad42) (#7309)Export with transitive consumers: The export endpoint and
BulkExportWorkflowDefinitionsRequestnow accept anIncludeConsumingWorkflowsflag (defaultfalse). When enabled, the ZIP export recursively resolves and includes all consuming workflows at their latest version. Exported filenames are now deterministic ({Name}-{DefinitionId}.json). (0a2e99ad42) (#7309)Default commit strategies
WithDefaultWorkflowCommitStrategy()andWithDefaultActivityCommitStrategy()extension methods on the workflows builder let you set application-wide fallback commit strategies. The resolution order for activities is: activity-specific → default activity → workflow-specific → default workflow → no commit. Default strategies are stored separately from the registry so they don't appear in the UI/tooling. (31eff52d24) (#7148)Multitenancy enhancements
TenantIdfor tenant-agnostic entities: Entities with anullTenantIdare now treated as visible across all tenants. EF Core query filters andActivityRegistryquery methods includenull-tenanted records in every tenant's scope. NewActivityDescriptor.TenantId(nullable) property added. (7bc9035f5e) (#7226)... (truncated)
3.6.0-rc5
What's Changed
Full Changelog: elsa-workflows/elsa-core@3.6.0-rc4...3.6.0-rc5
3.6.0-rc4
What's Changed
Resulthandling: by @sfmskywalker in Update multitenancy logic and improveResulthandling: elsa-workflows/elsa-core#7281Full Changelog: elsa-workflows/elsa-core@3.6.0-rc3...3.6.0-rc4
3.6.0-rc3
Compare:
3.6.0-rc2...3.6.0-rc3This release candidate includes significant multitenancy improvements, bug fixes, and enhanced test coverage.
Multitenancy Tenant ID Convention Changes
Affected users: Applications using multitenancy features, especially those with existing tenant data.
What changed:
"") instead ofnull(ADR-0008). (b09a56481) (#7217)"*") as the sentinel value instead ofnull(ADR-0009). (7bc9035f5) (#7226)Triggerstable now includeTenantIdin unique constraints across all EF Core providers. (b09a56481) (#7217)Migration required:
nullTenantIdvalues to empty strings for default tenant data inWorkflowDefinitions,WorkflowInstances, and runtime entities.doc/adr/for detailed rationale and migration guidance.Query filter changes: EF Core query filters have been updated to handle the new tenant ID conventions, ensuring tenant isolation is properly maintained. (7bc9035f5) (#7226)
✨ New features
Multitenancy enhancements
"*"as tenant ID) to make them accessible across all tenants. (7bc9035f5) (#7226)SelectiveMockLockProviderfor precise lock mocking in tests without affecting unrelated background operations. (b09a56481) (#7217)🔧 Improvements
Multitenancy
DefaultWorkflowDefinitionStorePopulatorto ensure workflows are only loaded for the current tenant. (b09a56481) (#7217)WorkflowDefinitionActivityProviderand included tenant ID in activity type names for better separation. (558902bb7)ActivityRegistry.Findto prefer tenant-specific descriptors over tenant-agnostic ones with single-pass iteration for better performance. (7bc9035f5) (#7226)BackgroundWorkflowCancellationDispatcherfor proper tenant context propagation during workflow cancellation. (bc70beff1) (#7040)API improvements
ElsaEndpointbase class with standardized permission configuration. (72569702f) (#7205)Error handling
... (truncated)
3.6.0-rc2
Compare:
3.6.0-rc1...3.6.0-rc2Bookmarkmoved from a positional record to a mutable class (serialization/back-compat oriented). (ca268c16ad) (#7161)Elsa.Commonnow referencesDistributedLock.Coreinstead of `Distribut..._Descriptio...
Description has been truncated