3.6.0 — Release Notes
Compare: 3.5.3...3.6.0
⚠️ Breaking Changes / Upgrade Notes
-
Repository rebranding & pervasive namespace changes: The repository has been rebranded from Elsa Integrations to Elsa Extensions. All packages shipped from this repo carry updated namespaces. Consumers must update their
usingstatements and package references accordingly:- All
EntityFrameworkCorenamespaces →EFCore(e.g.Elsa.EntityFrameworkCore→Elsa.EFCore). Elsa.ProtoActor.Core→Elsa.Actors.ProtoActor.- Persistence projects now include
Persistencein their namespaces. - ServiceBus projects now include
ServiceBusin their namespaces. - Storage projects now include
Storagein their namespaces. - Webhooks namespace now includes
Http. - Scripting namespace now includes
Scripting. - Scheduling namespace now includes
Scheduling. - The
Integrationssegment has been removed from all package/namespace names.
- All
-
Elsa.DevOps.GitHubpackage rename: The GitHub integration has been moved from theElsa.Integrations.GitHubnamespace/package toElsa.DevOps.GitHub. Update your package reference and allusingdirectives. (#51) -
Core EF Core projects removed from this repo: EF Core persistence projects (e.g. SQL Server, PostgreSQL, SQLite providers) previously housed here have been moved back to
elsa-core. Remove references to theelsa-extensionsbuilds of these packages and depend on the equivalent packages fromelsa-coreinstead. (#86) -
SQL Evaluator expression syntax changes (
Elsa.Sql): Hard-coded expression keys have been replaced with object-path navigation. Update any SQL expressions that use the old prefixes:Old expression New expression {{Variables.foo}}{{Variable.foo}}{{Workflow.Definition.Id}}{{Workflow.Identity.DefinitionId}}{{Workflow.Definition.Version.Id}}{{Workflow.Identity.Id}}{{Workflow.Definition.Version}}{{Workflow.Identity.Version}}{{Workflow.Instance.Id}}{{Activity.WorkflowExecutionContext.Id}}{{Correlation.Id}}{{Activity.WorkflowExecutionContext.CorrelationId}}New context prefixes
Activity.,Execution., andWorkflow.are now available for navigating nested properties, POCOs,ExpandoObject,IDictionary, arrays, lists, and JSON objects. (#87) -
Agents activity system refactored:
ConfiguredAgentActivityhas been renamed toAgentActivity;ConfigurationAgentActivityProviderhas been renamed toAgentActivityProvider. The code-first agent system and its related abstractions have been removed in favour of the new Microsoft Agent Framework–based approach. Update any direct references to these types. (#99, #107)
✨ New Features
SQL (Elsa.Sql)
- SQL Integration module: Ports the
Elsa.Sqlactivities fromelsa-coreinto this repo, including a fix for the upstream variable-retrieval bug and improvements to the SQL evaluator. (#38) - Object-property navigation in SQL expressions: Expressions can now dereference nested properties, array indices, and JSON fields directly using dot-path syntax. See the updated README for full examples. (#87)
HTTP (Elsa.Http.OpenApi)
-
OpenAPI documentation for HTTP workflow triggers: New
Elsa.Http.OpenApiextension auto-generates an OpenAPI 3.0 specification from published workflow HTTP trigger endpoints, with an interactive ReDoc UI served at/documentation.// Registration elsa.UseHttp(http => http.UseOpenApi()); // Middleware app.MapWorkflowOpenApi();
AI / Agents (Elsa.Agents)
- AI Copilot app-bar component: A new in-Studio AI Copilot panel lets users generate workflows from natural language prompts, with email integration and agent communication built in. (#70)
- Microsoft Agent Framework integration: Multi-agent workflows powered by the Microsoft Agent Framework; code-first agent definitions with strongly typed inputs/outputs. (#99)
- Service provider discovery endpoint: New
/ai/service-providersAPI endpoint exposes available AI service provider names; the Studio "edit service" panel now dynamically populates from this endpoint. (#60) - GitHub DevOps integration (
Elsa.DevOps.GitHub): GitHub workflow activities (create/delete/get comments, etc.) usingOctokit. (#47, #51)
Data Processing
- CSV module (
Elsa.Csv): NewReadCsvactivity reads and parses CSV data from strings, streams, or files. Supports configurable headers, delimiters, and strongly-typed record mapping. Registered viaCsvFeature. (#91) - IO module (
Elsa.IO): Ports the IO activity set fromelsa-core 3.5to this repo. (#74, #75, #76, #77)
Logging (Elsa.Logging)
- Modular logging framework: Introduces a
Logactivity for emitting structured log entries from within workflows, backed by pluggable sinks (console and Serilog included). Replaces the deprecatedWorkflowContextsmodule. (#83)
Scheduling (Elsa.Scheduling.Quartz)
- Clustering convenience API: New
QuartzFeature.ConfigureClusteringIdentity()method configures sensible defaults (instanceId = AUTO, scheduler nameElsaScheduler) for cluster-safe operation in multi-pod / Kubernetes deployments. (#110)
Azure Service Bus (Elsa.ServiceBus.AzureServiceBus)
- Custom client overloads for
UseAzureServiceBus: New overloads accept a pre-builtServiceBusClient, enabling token-credential–based auth (DefaultAzureCredential, managed identity, etc.) instead of being limited to connection strings. (#100)
Platform
.NET 10 (LTS)target framework: All library packages now multi-targetnet8.0,net9.0, andnet10.0.System.Linq.Asyncis conditionally excluded on .NET 10 where it is now part of the runtime. Existing .NET 8/9 consumers are unaffected. (#94)
🔧 Improvements
AI / Agents
IKernelFactoryextensibility: The Semantic KernelIKernelFactoryinterface is now public, allowing host applications to customise or replace theKernelinstance — useful for injecting MCP servers or other external tools. (#64)- Handlebars prompting in
AgentInvoker: Agent prompt rendering switched to Handlebars for richer template support and consistency with Elsa Studio. (#69) - External tool support via
ChatCompletion: The agent invocation path now callsChatCompletiondirectly (instead of an SK prompt function), enabling external tools such as MCP server plugins. (#64)
Scheduling / Quartz.NET
- Shared resilience module: Quartz job resilience migrated to the shared
Elsa.Resilience.Corepackage; database-specific transient exception detectors removed. (#104) - Idempotent job & trigger registration:
RegisterJobsTaskandQuartzWorkflowSchedulernow gracefully handleObjectAlreadyExistsException, preventing startup failures in concurrent multi-node deployments. (#110, #114) - SQLite clustering parameter:
UseEFCoreSQLite()extension now accepts auseClusteringparameter (defaults tofalse), consistent with the SqlServer/PostgreSQL/MySQL extensions. (#110)
Azure Service Bus
- Configuration validation:
UseAzureServiceBusnow throws a descriptive exception when the connection string or name is missing or unresolvable, rather than failing silently at runtime. (#114) - Factory delegate deduplication: Fixed an issue where calling
UseAzureServiceBusmore than once would concatenate factory delegates instead of replacing them, causing multipleServiceBusAdministrationClientinstances to be created. (#114)
Databases / Persistence
IWorkflowReferenceQueryabstraction:DatabaseFacadeExtensionsremoved; replaced by the newIWorkflowReferenceQueryinterface with default implementations, giving consumers a cleaner extension point. (#71)- V3.6 schema migrations: PostgreSQL, MySQL, and Oracle providers include updated schema migrations for the V3.6 data structure. (#71)
🐛 Fixes
- SQL Integration (
Elsa.Sql): Fixed off-by-one error in the substring index used during variable retrieval. (#55) - SQL Integration (
Elsa.Sql): SQL evaluator now correctly resolves theVariables.prefix in expressions. (#57) - MongoDB (
Elsa.Persistence.MongoDb):FindManyAsyncwrapped in try-catch to prevent unhandled exceptions from propagating to callers. (#81) - MongoDB (
Elsa.Persistence.MongoDb): Fixes toMongoDbStore,MongoDbFeature,ExpressionHelpers, andWorkflowInstanceStore. (#65, #66, #67, #68) - Dapper Migrations (
Elsa.Dapper): FixedAggregateFaultCountcolumn in the V3.5 migration:.WithDefault(0)was incorrectly resolving toSystemMethods.NewGuid(enum ordinal 0); corrected to.WithDefaultValue(0). (#97) - Drop-in Monitor: Fixed unhandled exceptions thrown by asynchronous filesystem events in the drop-in workflow monitor. (#59)
🧪 Tests
- Added unit and component tests for
Elsa.Scheduling.Quartz, covering transient-retry behaviour and job resilience. (#104) - Fixed resource leak in
AppComponentTestby properly disposing service scopes. (#105) - Refactored
QuartzJobTransientRetryTeststo use manually constructed job instances consistently. (#106)
📦 Full Changelog
- Sql Integration, new README-TEMPLATE, and solution folder grouping. (#38)
- Rebrand repo to Extensions; move non-core projects from
elsa-core. (#40) - Realign core and extension repos. (#41)
- Apply code changes from old project files. (#42)
- Remove SasToken project. (#45)
- Add GitHub integration (initial). (#47)
- Refactor GitHub integration to
Elsa.DevOps.GitHub. (#51) - Fix substring index for variable retrieval in SQL. (#55)
- SQL evaluator supports
Variables.prefix. (#57) - Fix unhandled exceptions in drop-in monitor. (#59)
- Agents: add
/ai/service-providersdiscovery endpoint. (#60) - Agents:
IKernelFactoryinterface + external tool support viaChatCompletion. (#64) - MongoDB store fixes. (#65, #66, #67, #68)
- Improve Agents module: Handlebars prompting, dependency updates, alteration background job scope fix. (#69)
- Agents: AI Copilot, document query plugin, OpenAI embedding generator. (#70)
- Database extensions refactor + V3.6 migrations for PostgreSQL, MySQL, Oracle. (#71)
- Add IO module from
elsa-core. (#74, #75, #76, #77) - MongoDB: try-catch in
FindManyAsync. (#81) - Add OpenAPI documentation extension for HTTP workflow triggers. (#80)
- Add Logging features from
elsa-core 3.5; replace WorkflowContexts module; move Slack to Communication folder. (#83) - Remove core EF Core projects (moved to
elsa-core). (#86) - BREAKING: Enhance SQL evaluator — object-property navigation, new context prefixes, deprecated key removal. (#87)
- Add CSV data processing module. (#91)
- Add
.NET 10 (LTS)target framework support. (#94) - Fix
AggregateFaultCountint column default in Dapper V3.5 migration. (#97) - Microsoft Agent Framework integration; code-first agents; multi-agent workflows. (#99)
UseAzureServiceBusoverloads for customServiceBusClient. (#100)- Fix resource leak in
AppComponentTest. (#105) - Refactor
QuartzJobTransientRetryTests. (#106) - Refactor agent activity system; rename
ConfiguredAgentActivity→AgentActivity. (#107) - Add
Elsa.Http.OpenApiproject to solution. (#108) - Quartz.NET resilience via
Elsa.Resilience.Core; add retry unit tests. (#104) - Quartz.NET clustering hardening:
ConfigureClusteringIdentity, idempotent job/trigger registration. (#110) - Azure Service Bus factory fix; Quartz
ObjectAlreadyExistsExceptionhandling; ASB config validation. (#114) chore: update Elsa and ElsaStudio versions to 3.6.0. (e626ace)
👋 New Contributors
- @mohdali — drop-in monitor fix & agents service-provider endpoint (#59, #60)
- @pugafran —
IKernelFactory& external tool support (#64) - @lukhipolito-nexxbiz / @lukhipolito — IO module port (#74–#77)
- @mhichb — MongoDB
FindManyAsyncfix (#81) - @cristinamudura —
Elsa.Http.OpenApiextension (#80) - @kremi151 — Dapper migration column default fix (#97)