Bump the elsa group with 4 updates - #1528
Merged
github-actions[bot] merged 1 commit intoSep 7, 2026
Merged
Conversation
Bumps Elsa from 3.7.1 to 3.8.0 Bumps Elsa.Identity from 3.7.1 to 3.8.0 Bumps Elsa.Scheduling from 3.7.1 to 3.8.0 Bumps Elsa.Workflows.Api from 3.7.1 to 3.8.0 --- updated-dependencies: - dependency-name: Elsa dependency-version: 3.8.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: elsa - dependency-name: Elsa.Identity dependency-version: 3.8.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: elsa - dependency-name: Elsa.Scheduling dependency-version: 3.8.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: elsa - dependency-name: Elsa.Workflows.Api dependency-version: 3.8.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: elsa ... Signed-off-by: dependabot[bot] <support@github.com>
github-actions
Bot
deleted the
dependabot/nuget/Elsademo/ElsaCore.Server/elsa-a5b8d49b57
branch
September 7, 2026 17:38
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.7.1 to 3.8.0.
Release notes
Sourced from Elsa's releases.
3.8.0
Compare:
3.7.1...3.8.0Elsa 3.8.0 — Release Notes
🌟 Highlights
ILoggerlogs can remain in memory or be persisted to SQLite, while console output and OpenTelemetry traces, metrics, and logs can be ingested and queried through dedicated diagnostics modules. (#7445, #7462)DevelopmentorDemo; setIdentity__Tokens__SigningKey(or the shell feature equivalent) to a secure random value. (#7496, #7500)EnableLocalHostPermissionGrantForSecurityRoot(); otherwise configure an explicit admin bootstrap or authenticated identity. (#7498)AllowHostCodeExecutionoption andexec:csharp-expressions/exec:python-expressionspermission. Treat both runtimes as host-code execution rather than sandboxes and enable them only for trusted authors. (#7519)Use...registration, and map its routes/hub where applicable; existing hosts do not opt into these surfaces automatically. (e2e00ff23, 322d65d46, 43108c2e4)ElsaEndpointrequest constraints no longer requirenew(), and the runtime resume endpoint usesFastEndpoints.EmptyRequest;ResumeRequestis obsolete. Review custom endpoint wrappers and resume integrations when targeting .NET 10. (#8019)✨ New features
Secretexpression, JavaScriptgetSecret, versioned encrypted storage, configuration-backed read-only secrets, and metadata-only management APIs. (#7468; e083d3b30, b438551c78, 556e931662)WithVariableoverloads, and runtime descriptor/version metadata. (#7523, #7699, #7701; c66f9aed45, 92f451e655, 7941a9d72e)🔧 Improvements
🐛 Fixes
ForEachcompletion, catch scheduling startup backlog, and correct StateMachine transition ordering. (#7415, #7416, #7431, #7435, #7702; c7912fd2c8, 051e12f864)... (truncated)
3.8.0-rc2
3.8 is the release where Elsa grew up operationally. Safe-by-default security, graceful shutdown, a real observability stack, first-class secrets, single sign-on — plus an AI copilot and a dashboard API for Studio.
This is the release candidate for 3.8.0, covering everything since 3.7.1: 114 pull requests across two pre-releases. The theme running through most of it is running Elsa in production and being able to tell what it's doing — the runtime now drains instead of dying, logs and traces are first-class, dispatch survives a crash, and a set of dangerous defaults have been closed off.
That last part matters before you upgrade: 3.8 removes several production-usable defaults, and a host that relied on them will now refuse to start. That's deliberate — see Upgrade notes first, then come back.
Coming from 3.8.0-rc1? rc2 adds one thing: output converters. It exists because Elsa Studio's 3.8 branch already consumes the client API for it, and rc1's
Elsa.Api.Clientdid not ship it — so Studio could not build against a released client. Everything else below is unchanged from rc1.3.7.1...3.8.0-rc2Highlights
1. Security: several defaults were unsafe, and are now gone
A dedicated remediation pass ran across identity, expressions, and the API surface. Most of it is invisible; the parts that aren't will stop a misconfigured production host at startup, on purpose.
Defaults that no longer ship. Default admin credentials are now development-only — outside Development, username, password, and API key must be configured explicitly (#7500). Known public/default JWT signing keys are rejected outside explicit Development or Demo mode, failing fast with an
OptionsValidationExceptionrather than quietly signing tokens anyone can forge (#7496). Localhost permission grants are opt-in instead of a production default (#7498).Scripting is now a privileged capability. Roslyn C# and Python.NET expressions execute host code — they are not sandboxes, and 3.8 stops pretending otherwise. Both are disabled unless the host explicitly opts in, their descriptors and authoring surfaces are hidden when it hasn't, and author/publish/dispatch/execute paths carrying scripts require dedicated permissions (
exec:csharp-expressions, and the Python equivalent). Python and C# share one preflight authorization path. (#7519 · #7507, fixes #7096)Identity internals. Random string and API-key generation moved to cryptographic RNG, and new secrets hash with versioned PBKDF2-SHA256 and per-record salts. Legacy SHA-256 hashes stay verifiable and are upgraded in place after a successful validation — no forced reset (#7511). Issued JWTs carry a
token_useclaim so a refresh token can no longer be presented as an API access token;/identity/refresh-tokengets its own scheme (#7509).Authorization gaps closed across workflow imports (#7510), role assignment (#7501), SignalR workflow-instance observation (#7504), the console-logs hub (#7531 · #7533), and the resilience simulate-response endpoint (#7505). Bookmark-resume SAS tokens now fail closed before input parsing, ZIP cache download IDs are validated as opaque tokens with path containment enforced (#7495), HTTP workflow request body limits are enforced while reading rather than after (#7497), workflow timestamp filter columns are whitelisted (#7506), HTTP bookmark lookup is scoped to tenant (#7508), and polymorphic workflow JSON no longer resolves arbitrary types through unrestricted
Type.GetType(#7499).2. Graceful shutdown: the runtime drains instead of dying
On host stop or shell deactivation, in-flight workflow executions now get a bounded chance to finish their current burst before the process exits — and anything cut short is recovered automatically on the next start.
The mechanism is worth understanding because it's extensible:
IQuiescenceSignalcomposes two flags —Drain(forward-only, triggered by host stop) andAdministrativePause(reversible, operator-triggered). Both are idempotent; pause can optionally persist viaIKeyValueStoreso it survives a restart.IIngressSourceis the contract every component that injects external events implements — HTTP, scheduling, message consumers, internal workers, and third-party modules alike. Drain pauses all sources in parallel with per-source timeouts, escalating toIForceStoppablewhere available. A source that claimsPausedand then starts a burst anyway is detected and flipped toPauseFailedrather than trusted.BurstTrackingMiddlewareregisters a handle for the lifetime of every execution burst, so the orchestrator can wait on real work rather than a guess. The wait is deadline-clamped; on breach, bursts are force-cancelled, instances persist asInterrupted, and aWorkflowInterruptedlog entry is written.Interruptedinstances — a scan deliberately disjoint from the existing timeout-basedRestartInterruptedWorkflowsTask, so the two don't fight.There's also an authenticated admin surface in
Elsa.Workflows.Api—GET /admin/workflow-runtime/statusplusPOSTtopause,resume, andforce-drain— letting operators quiesce a node without stopping the host. While paused, HTTP middleware short-circuits to503withRetry-Afterinstead of accepting work it won't run. First-party ingress adapters ship for HTTP triggers and scheduled triggers.... (truncated)
3.8.0-rc1
3.8 is the release where Elsa grew up operationally. Safe-by-default security, graceful shutdown, a real observability stack, first-class secrets, single sign-on — plus an AI copilot and a dashboard API for Studio.
This is the release candidate for 3.8.0, covering everything since 3.7.1: 114 pull requests across two pre-releases. The theme running through most of it is running Elsa in production and being able to tell what it's doing — the runtime now drains instead of dying, logs and traces are first-class, dispatch survives a crash, and a set of dangerous defaults have been closed off.
That last part matters before you upgrade: 3.8 removes several production-usable defaults, and a host that relied on them will now refuse to start. That's deliberate — see Upgrade notes first, then come back.
3.7.1...3.8.0-rc1Highlights
1. Security: several defaults were unsafe, and are now gone
A dedicated remediation pass ran across identity, expressions, and the API surface. Most of it is invisible; the parts that aren't will stop a misconfigured production host at startup, on purpose.
Defaults that no longer ship. Default admin credentials are now development-only — outside Development, username, password, and API key must be configured explicitly (#7500). Known public/default JWT signing keys are rejected outside explicit Development or Demo mode, failing fast with an
OptionsValidationExceptionrather than quietly signing tokens anyone can forge (#7496). Localhost permission grants are opt-in instead of a production default (#7498).Scripting is now a privileged capability. Roslyn C# and Python.NET expressions execute host code — they are not sandboxes, and 3.8 stops pretending otherwise. Both are disabled unless the host explicitly opts in, their descriptors and authoring surfaces are hidden when it hasn't, and author/publish/dispatch/execute paths carrying scripts require dedicated permissions (
exec:csharp-expressions, and the Python equivalent). Python and C# share one preflight authorization path. (#7519 · #7507, fixes #7096)Identity internals. Random string and API-key generation moved to cryptographic RNG, and new secrets hash with versioned PBKDF2-SHA256 and per-record salts. Legacy SHA-256 hashes stay verifiable and are upgraded in place after a successful validation — no forced reset (#7511). Issued JWTs carry a
token_useclaim so a refresh token can no longer be presented as an API access token;/identity/refresh-tokengets its own scheme (#7509).Authorization gaps closed across workflow imports (#7510), role assignment (#7501), SignalR workflow-instance observation (#7504), the console-logs hub (#7531 · #7533), and the resilience simulate-response endpoint (#7505). Bookmark-resume SAS tokens now fail closed before input parsing, ZIP cache download IDs are validated as opaque tokens with path containment enforced (#7495), HTTP workflow request body limits are enforced while reading rather than after (#7497), workflow timestamp filter columns are whitelisted (#7506), HTTP bookmark lookup is scoped to tenant (#7508), and polymorphic workflow JSON no longer resolves arbitrary types through unrestricted
Type.GetType(#7499).2. Graceful shutdown: the runtime drains instead of dying
On host stop or shell deactivation, in-flight workflow executions now get a bounded chance to finish their current burst before the process exits — and anything cut short is recovered automatically on the next start.
The mechanism is worth understanding because it's extensible:
IQuiescenceSignalcomposes two flags —Drain(forward-only, triggered by host stop) andAdministrativePause(reversible, operator-triggered). Both are idempotent; pause can optionally persist viaIKeyValueStoreso it survives a restart.IIngressSourceis the contract every component that injects external events implements — HTTP, scheduling, message consumers, internal workers, and third-party modules alike. Drain pauses all sources in parallel with per-source timeouts, escalating toIForceStoppablewhere available. A source that claimsPausedand then starts a burst anyway is detected and flipped toPauseFailedrather than trusted.BurstTrackingMiddlewareregisters a handle for the lifetime of every execution burst, so the orchestrator can wait on real work rather than a guess. The wait is deadline-clamped; on breach, bursts are force-cancelled, instances persist asInterrupted, and aWorkflowInterruptedlog entry is written.Interruptedinstances — a scan deliberately disjoint from the existing timeout-basedRestartInterruptedWorkflowsTask, so the two don't fight.There's also an authenticated admin surface in
Elsa.Workflows.Api—GET /admin/workflow-runtime/statusplusPOSTtopause,resume, andforce-drain— letting operators quiesce a node without stopping the host. While paused, HTTP middleware short-circuits to503withRetry-Afterinstead of accepting work it won't run. First-party ingress adapters ship for HTTP triggers and scheduled triggers.This is on by default —
UseWorkflowRuntime()registers the drain hosted service unconditionally. The drain deadline defaults to 30 seconds and is automatically clamped to the host's own shutdown budget less a 500 ms safety margin, so the runtime never gets killed mid-persistence by a shutdown timeout it was already exceeding. Tuning knobs live onGracefulShutdownOptions:DrainDeadline, per-sourceIngressPauseTimeout(5 s), stimulus-queue depth while paused (10,000,Bufferoverflow policy), and whether an administrative pause survives a runtime generation boundary. (#7424)... (truncated)
3.8.0-preview1
What's Changed
... (truncated)
Commits viewable in compare view.
Updated Elsa.Identity from 3.7.1 to 3.8.0.
Release notes
Sourced from Elsa.Identity's releases.
3.8.0
Compare:
3.7.1...3.8.0Elsa 3.8.0 — Release Notes
🌟 Highlights
ILoggerlogs can remain in memory or be persisted to SQLite, while console output and OpenTelemetry traces, metrics, and logs can be ingested and queried through dedicated diagnostics modules. (#7445, #7462)DevelopmentorDemo; setIdentity__Tokens__SigningKey(or the shell feature equivalent) to a secure random value. (#7496, #7500)EnableLocalHostPermissionGrantForSecurityRoot(); otherwise configure an explicit admin bootstrap or authenticated identity. (#7498)AllowHostCodeExecutionoption andexec:csharp-expressions/exec:python-expressionspermission. Treat both runtimes as host-code execution rather than sandboxes and enable them only for trusted authors. (#7519)Use...registration, and map its routes/hub where applicable; existing hosts do not opt into these surfaces automatically. (e2e00ff23, 322d65d46, 43108c2e4)ElsaEndpointrequest constraints no longer requirenew(), and the runtime resume endpoint usesFastEndpoints.EmptyRequest;ResumeRequestis obsolete. Review custom endpoint wrappers and resume integrations when targeting .NET 10. (#8019)✨ New features
Secretexpression, JavaScriptgetSecret, versioned encrypted storage, configuration-backed read-only secrets, and metadata-only management APIs. (#7468; e083d3b30, b438551c78, 556e931662)WithVariableoverloads, and runtime descriptor/version metadata. (#7523, #7699, #7701; c66f9aed45, 92f451e655, 7941a9d72e)🔧 Improvements
🐛 Fixes
ForEachcompletion, catch scheduling startup backlog, and correct StateMachine transition ordering. (#7415, #7416, #7431, #7435, #7702; c7912fd2c8, 051e12f864)... (truncated)
3.8.0-rc2
3.8 is the release where Elsa grew up operationally. Safe-by-default security, graceful shutdown, a real observability stack, first-class secrets, single sign-on — plus an AI copilot and a dashboard API for Studio.
This is the release candidate for 3.8.0, covering everything since 3.7.1: 114 pull requests across two pre-releases. The theme running through most of it is running Elsa in production and being able to tell what it's doing — the runtime now drains instead of dying, logs and traces are first-class, dispatch survives a crash, and a set of dangerous defaults have been closed off.
That last part matters before you upgrade: 3.8 removes several production-usable defaults, and a host that relied on them will now refuse to start. That's deliberate — see Upgrade notes first, then come back.
Coming from 3.8.0-rc1? rc2 adds one thing: output converters. It exists because Elsa Studio's 3.8 branch already consumes the client API for it, and rc1's
Elsa.Api.Clientdid not ship it — so Studio could not build against a released client. Everything else below is unchanged from rc1.3.7.1...3.8.0-rc2Highlights
1. Security: several defaults were unsafe, and are now gone
A dedicated remediation pass ran across identity, expressions, and the API surface. Most of it is invisible; the parts that aren't will stop a misconfigured production host at startup, on purpose.
Defaults that no longer ship. Default admin credentials are now development-only — outside Development, username, password, and API key must be configured explicitly (#7500). Known public/default JWT signing keys are rejected outside explicit Development or Demo mode, failing fast with an
OptionsValidationExceptionrather than quietly signing tokens anyone can forge (#7496). Localhost permission grants are opt-in instead of a production default (#7498).Scripting is now a privileged capability. Roslyn C# and Python.NET expressions execute host code — they are not sandboxes, and 3.8 stops pretending otherwise. Both are disabled unless the host explicitly opts in, their descriptors and authoring surfaces are hidden when it hasn't, and author/publish/dispatch/execute paths carrying scripts require dedicated permissions (
exec:csharp-expressions, and the Python equivalent). Python and C# share one preflight authorization path. (#7519 · #7507, fixes #7096)Identity internals. Random string and API-key generation moved to cryptographic RNG, and new secrets hash with versioned PBKDF2-SHA256 and per-record salts. Legacy SHA-256 hashes stay verifiable and are upgraded in place after a successful validation — no forced reset (#7511). Issued JWTs carry a
token_useclaim so a refresh token can no longer be presented as an API access token;/identity/refresh-tokengets its own scheme (#7509).Authorization gaps closed across workflow imports (#7510), role assignment (#7501), SignalR workflow-instance observation (#7504), the console-logs hub (#7531 · #7533), and the resilience simulate-response endpoint (#7505). Bookmark-resume SAS tokens now fail closed before input parsing, ZIP cache download IDs are validated as opaque tokens with path containment enforced (#7495), HTTP workflow request body limits are enforced while reading rather than after (#7497), workflow timestamp filter columns are whitelisted (#7506), HTTP bookmark lookup is scoped to tenant (#7508), and polymorphic workflow JSON no longer resolves arbitrary types through unrestricted
Type.GetType(#7499).2. Graceful shutdown: the runtime drains instead of dying
On host stop or shell deactivation, in-flight workflow executions now get a bounded chance to finish their current burst before the process exits — and anything cut short is recovered automatically on the next start.
The mechanism is worth understanding because it's extensible:
IQuiescenceSignalcomposes two flags —Drain(forward-only, triggered by host stop) andAdministrativePause(reversible, operator-triggered). Both are idempotent; pause can optionally persist viaIKeyValueStoreso it survives a restart.IIngressSourceis the contract every component that injects external events implements — HTTP, scheduling, message consumers, internal workers, and third-party modules alike. Drain pauses all sources in parallel with per-source timeouts, escalating toIForceStoppablewhere available. A source that claimsPausedand then starts a burst anyway is detected and flipped toPauseFailedrather than trusted.BurstTrackingMiddlewareregisters a handle for the lifetime of every execution burst, so the orchestrator can wait on real work rather than a guess. The wait is deadline-clamped; on breach, bursts are force-cancelled, instances persist asInterrupted, and aWorkflowInterruptedlog entry is written.Interruptedinstances — a scan deliberately disjoint from the existing timeout-basedRestartInterruptedWorkflowsTask, so the two don't fight.There's also an authenticated admin surface in
Elsa.Workflows.Api—GET /admin/workflow-runtime/statusplusPOSTtopause,resume, andforce-drain— letting operators quiesce a node without stopping the host. While paused, HTTP middleware short-circuits to503withRetry-Afterinstead of accepting work it won't run. First-party ingress adapters ship for HTTP triggers and scheduled triggers.... (truncated)
3.8.0-rc1
3.8 is the release where Elsa grew up operationally. Safe-by-default security, graceful shutdown, a real observability stack, first-class secrets, single sign-on — plus an AI copilot and a dashboard API for Studio.
This is the release candidate for 3.8.0, covering everything since 3.7.1: 114 pull requests across two pre-releases. The theme running through most of it is running Elsa in production and being able to tell what it's doing — the runtime now drains instead of dying, logs and traces are first-class, dispatch survives a crash, and a set of dangerous defaults have been closed off.
That last part matters before you upgrade: 3.8 removes several production-usable defaults, and a host that relied on them will now refuse to start. That's deliberate — see Upgrade notes first, then come back.
3.7.1...3.8.0-rc1Highlights
1. Security: several defaults were unsafe, and are now gone
A dedicated remediation pass ran across identity, expressions, and the API surface. Most of it is invisible; the parts that aren't will stop a misconfigured production host at startup, on purpose.
Defaults that no longer ship. Default admin credentials are now development-only — outside Development, username, password, and API key must be configured explicitly (#7500). Known public/default JWT signing keys are rejected outside explicit Development or Demo mode, failing fast with an
OptionsValidationExceptionrather than quietly signing tokens anyone can forge (#7496). Localhost permission grants are opt-in instead of a production default (#7498).Scripting is now a privileged capability. Roslyn C# and Python.NET expressions execute host code — they are not sandboxes, and 3.8 stops pretending otherwise. Both are disabled unless the host explicitly opts in, their descriptors and authoring surfaces are hidden when it hasn't, and author/publish/dispatch/execute paths carrying scripts require dedicated permissions (
exec:csharp-expressions, and the Python equivalent). Python and C# share one preflight authorization path. (#7519 · #7507, fixes #7096)Identity internals. Random string and API-key generation moved to cryptographic RNG, and new secrets hash with versioned PBKDF2-SHA256 and per-record salts. Legacy SHA-256 hashes stay verifiable and are upgraded in place after a successful validation — no forced reset (#7511). Issued JWTs carry a
token_useclaim so a refresh token can no longer be presented as an API access token;/identity/refresh-tokengets its own scheme (#7509).Authorization gaps closed across workflow imports (#7510), role assignment (#7501), SignalR workflow-instance observation (#7504), the console-logs hub (#7531 · #7533), and the resilience simulate-response endpoint (#7505). Bookmark-resume SAS tokens now fail closed before input parsing, ZIP cache download IDs are validated as opaque tokens with path containment enforced (#7495), HTTP workflow request body limits are enforced while reading rather than after (#7497), workflow timestamp filter columns are whitelisted (#7506), HTTP bookmark lookup is scoped to tenant (#7508), and polymorphic workflow JSON no longer resolves arbitrary types through unrestricted
Type.GetType(#7499).2. Graceful shutdown: the runtime drains instead of dying
On host stop or shell deactivation, in-flight workflow executions now get a bounded chance to finish their current burst before the process exits — and anything cut short is recovered automatically on the next start.
The mechanism is worth understanding because it's extensible:
IQuiescenceSignalcomposes two flags —Drain(forward-only, triggered by host stop) andAdministrativePause(reversible, operator-triggered). Both are idempotent; pause can optionally persist viaIKeyValueStoreso it survives a restart.IIngressSourceis the contract every component that injects external events implements — HTTP, scheduling, message consumers, internal workers, and third-party modules alike. Drain pauses all sources in parallel with per-source timeouts, escalating toIForceStoppablewhere available. A source that claimsPausedand then starts a burst anyway is detected and flipped toPauseFailedrather than trusted.BurstTrackingMiddlewareregisters a handle for the lifetime of every execution burst, so the orchestrator can wait on real work rather than a guess. The wait is deadline-clamped; on breach, bursts are force-cancelled, instances persist asInterrupted, and aWorkflowInterruptedlog entry is written.Interruptedinstances — a scan deliberately disjoint from the existing timeout-basedRestartInterruptedWorkflowsTask, so the two don't fight.There's also an authenticated admin surface in
Elsa.Workflows.Api—GET /admin/workflow-runtime/statusplusPOSTtopause,resume, andforce-drain— letting operators quiesce a node without stopping the host. While paused, HTTP middleware short-circuits to503withRetry-Afterinstead of accepting work it won't run. First-party ingress adapters ship for HTTP triggers and scheduled triggers.This is on by default —
UseWorkflowRuntime()registers the drain hosted service unconditionally. The drain deadline defaults to 30 seconds and is automatically clamped to the host's own shutdown budget less a 500 ms safety margin, so the runtime never gets killed mid-persistence by a shutdown timeout it was already exceeding. Tuning knobs live onGracefulShutdownOptions:DrainDeadline, per-sourceIngressPauseTimeout(5 s), stimulus-queue depth while paused (10,000,Bufferoverflow policy), and whether an administrative pause survives a runtime generation boundary. (#7424)... (truncated)
3.8.0-preview1
What's Changed
... (truncated)
Commits viewable in compare view.
Updated Elsa.Scheduling from 3.7.1 to 3.8.0.
Release notes
Sourced from Elsa.Scheduling's releases.
3.8.0
Compare:
3.7.1...3.8.0Elsa 3.8.0 — Release Notes
🌟 Highlights
ILoggerlogs can remain in memory or be persisted to SQLite, while console output and OpenTelemetry traces, metrics, and logs can be ingested and queried through dedicated diagnostics modules. (#7445, #7462)DevelopmentorDemo; setIdentity__Tokens__SigningKey(or the shell feature equivalent) to a secure random value. (#7496, #7500)EnableLocalHostPermissionGrantForSecurityRoot(); otherwise configure an explicit admin bootstrap or authenticated identity. (#7498)AllowHostCodeExecutionoption andexec:csharp-expressions/exec:python-expressionspermission. Treat both runtimes as host-code execution rather than sandboxes and enable them only for trusted authors. (#7519)Use...registration, and map its routes/hub where applicable; existing hosts do not opt into these surfaces automatically. (e2e00ff23, 322d65d46, 43108c2e4)ElsaEndpointrequest constraints no longer requirenew(), and the runtime resume endpoint usesFastEndpoints.EmptyRequest;ResumeRequestis obsolete. Review custom endpoint wrappers and resume integrations when targeting .NET 10. (#8019)✨ New features
Secretexpression, JavaScriptgetSecret, versioned encrypted storage, configuration-backed read-only secrets, and metadata-only management APIs. (#7468; e083d3b30, b438551c78, 556e931662)WithVariableoverloads, and runtime descriptor/version metadata. (#7523, #7699, #7701; c66f9aed45, 92f451e655, 7941a9d72e)🔧 Improvements
🐛 Fixes
ForEachcompletion, catch scheduling startup backlog, and correct StateMachine transition ordering. (#7415, #7416, #7431, #7435, #7702; c7912fd2c8, 051e12f864)... (truncated)
3.8.0-rc2
3.8 is the release where Elsa grew up operationally. Safe-by-default security, graceful shutdown, a real observability stack, first-class secrets, single sign-on — plus an AI copilot and a dashboard API for Studio.
This is the release candidate for 3.8.0, covering everything since 3.7.1: 114 pull requests across two pre-releases. The theme running through most of it is running Elsa in production and being able to tell what it's doing — the runtime now drains instead of dying, logs and traces are first-class, dispatch survives a crash, and a set of dangerous defaults have been closed off.
That last part matters before you upgrade: 3.8 removes several production-usable defaults, and a host that relied on them will now refuse to start. That's deliberate — see Upgrade notes first, then come back.
Coming from 3.8.0-rc1? rc2 adds one thing: output converters. It exists because Elsa Studio's 3.8 branch already consumes the client API for it, and rc1's
Elsa.Api.Clientdid not ship it — so Studio could not build against a released client. Everything else below is unchanged from rc1.3.7.1...3.8.0-rc2Highlights
1. Security: several defaults were unsafe, and are now gone
A dedicated remediation pass ran across identity, expressions, and the API surface. Most of it is invisible; the parts that aren't will stop a misconfigured production host at startup, on purpose.
Defaults that no longer ship. Default admin credentials are now development-only — outside Development, username, password, and API key must be configured explicitly (#7500). Known public/default JWT signing keys are rejected outside explicit Development or Demo mode, failing fast with an
OptionsValidationExceptionrather than quietly signing tokens anyone can forge (#7496). Localhost permission grants are opt-in instead of a production ..._Des...
Description has been truncated