Studio grew from a workflow editor into an operations console. A dashboard on the home page, three diagnostics workspaces, an alterations designer, SSO and user management, and two new designers — Sequence and StateMachine — alongside an opt-in React Flow rewrite of the flowchart canvas.
This is the release candidate for 3.8.0, covering everything since 3.7.1: 51 pull requests and 18 new modules. It pairs with elsa-core 3.8.0-rc2, which shipped the backend half of most of what's here — the dashboard API, the diagnostics endpoints, the secrets store, the external authentication broker and Weaver. Upgrade both together. Studio 3.8 talks to APIs that 3.7 servers don't expose, and most new screens are gated on a backend feature being present, so against an older server they simply won't appear.
If you tried 3.8.0-rc1: it produced no packages. The rc1 tag was cut on a commit whose build failed, so no
Elsa.Studio*3.8.x package was ever published —dotnet add packagewould have failed for reasons that had nothing to do with your setup. The cause was a dependency pin: Studio moved toElsa.Api.Client3.8.0-rc1, which is built from elsa-core's release branch and did not carry the output-converter API this branch already consumed. elsa-core 3.8.0-rc2 backports that work, and this release pins to it. rc2 is the first installable 3.8 build of Studio. Nothing else changed between rc1 and rc2.
| Commits | 147 |
| Pull requests | 51 |
| Files touched | 966 (+76,024 / −1,860) |
| New modules | 18 (plus 11 new test projects) |
| New contributors | 2 |
| Compare | 3.7.1...3.8.0-rc2 |
Highlights
1. The home page is now an operational dashboard
/ used to be a static welcome page. It now renders metric cards, a needs-attention list, workflow trends, recent activity, a diagnostics snapshot and optional hotspots, backed by the new /dashboard/* endpoints in Core. Unauthorized and backend-unavailable states degrade gracefully rather than erroring.
The part worth knowing about is what happened underneath. The first version hardcoded workflow and diagnostics content into the dashboard page. #879 and #886 replaced that with a widget composition model: descriptors, semantic zones, a registry with validation, and cascading widget context. The dashboard page now renders whatever widgets are registered, and the dashboard module no longer references the workflows module at all.
Widgets ship in companion modules — Elsa.Studio.Workflows.Dashboard, Elsa.Studio.Diagnostics.ConsoleLogs.Dashboard, Elsa.Studio.Diagnostics.StructuredLogs.Dashboard, Elsa.Studio.Diagnostics.OpenTelemetry.Dashboard — each gated on its backend feature being present. So the dashboard shows what your server actually has, and your own modules can contribute panels without the dashboard knowing they exist.
2. Three diagnostics workspaces
Core 3.8 made an Elsa host observable. Studio 3.8 is where you look at it.
/diagnostics/structured-logs — backend server logs with an authenticated SignalR subscription for live updates. Filters for level, text, category, workflow instance, tenant, trace and correlation ID, time and source. Merged clustered views plus source-specific focus for individual pods, processes or containers, with source health indicators and source-change handling. Pause/resume, reconnect, clear, auto-scroll, wrapping, compact mode, copy selected or visible rows, and deep links from the workflow instance viewer. Trace metadata filters were added in #821. (#810 · #816)
/diagnostics/console — raw stdout/stderr capture with its own REST and SignalR clients, URL state mapping, export and highlight helpers. And usefully, a Console tab inside the workflow instance viewer: the viewer was extracted into a reusable component and given a workflow-scoped filter, so you can read what one specific run printed instead of searching a shared stream. (#822 · #831 · #833)
/diagnostics/opentelemetry — views over the OTEL data Core now emits, with live updates, setup helpers and cross-links to the other two diagnostics surfaces. (#834)
3. Two new designers, and a third canvas implementation
StateMachine designer. Core 3.8 added a StateMachine activity; Studio can now draw one. A dedicated diagram provider and canvas wrapper with graph models, a JSON mapper, a validation service and activity-slot drag/drop. (#818)
Sequence designer. Sequences render as ordered structural edges with vertical and horizontal layout controls, rather than being forced into a flowchart. Edge ports are hidden and edge interaction disabled in sequence diagrams, since the ordering is the structure. (#819 · #873)
React Flow flowchart designer (opt-in). A second implementation of the flowchart canvas alongside the existing X6 one. X6 is unchanged and remains the default; both share the same C#-side activity registry, port providers and JSInterop bridge, so switching is one setting:
{
"DesignerOptions": {
"UseReactFlow": true
}
}What it adds: auto-arrange that treats each activity's first declared outcome as the happy path and keeps it on a straight horizontal line with alternate branches stacked below; snap-lines with alignment guides while dragging; smooth-step edges with a subtle pulse on active connections that hides during drag; click an edge to splice an activity between two nodes; "+" buttons on edge midpoints; drag a port for a contextual activity menu; and an empty-state CTA on a blank canvas. (#812 by @cristinamudura)
Choosing between them up front. The New Workflow dialog now has a root activity selector — Flowchart, Sequence or StateMachine — backed by a small root-template abstraction so creation generates the right root JSON without hardcoded dialog logic. Flowchart stays the default. (#878 · #894 · #895)
4. Alterations: change a running workflow from the UI
Elsa Server has been able to apply alterations to running instances for a while. /alterations is the front end for it.
An Alterations menu group with an instance list and a plans history. Opening an instance gives you a read-only render of its flowchart plus a bottom inspector with Selection, Variables and Plan tabs for staging changes. A built-in catalog covers the five alteration types Elsa Server ships: Cancel, CancelActivity, ScheduleActivity, ModifyVariable and Migrate.
Two details that show this was built by someone who has operated it:
- A 3-step submit wizard — Review → Preview JSON → Submit. You see the exact payload before it reaches the backend.
- Dry-run from the toolbar, reporting how many instances the filter would target without submitting anything.
Plan progress polls every 5 seconds and derives a per-row progress chip from the alterations API directly, because the system workflow's own status is unreliable — it commonly sits at Suspended after all jobs have finished.
The whole feature is gated on the backend Alterations shell feature, so the menu and the per-instance "Alter" entry point stay hidden against a server that hasn't enabled it. (#823 · #836 by @cristinamudura · #837)
5. Settings, SSO, and a login screen you can theme
The largest change in the release — 158 files — is the authentication and settings stack, delivered as #920 and then refined through a seven-part series (#925–#931).
Elsa.Studio.Settings is a navigation and composition foundation, not a settings store. It holds no generic name/value settings and adds no backend settings domain; it discovers section descriptors and builds both the overview and the menu from the same permission-filtered collection. Each contributing module keeps ownership of its own schema, API, validation and UI.
SSO connections is the first section: host-wide OpenID Connect management, driven by descriptors, covering immutable connection keys, exact discovery URLs, derived callbacks, basic and post client authentication, managed versus external secrets, explicit configuration overrides, upstream logout, matcher and JIT policy selection, and predefined default roles. It's the front end for Core's external authentication broker.
Elsa.Studio.Authentication.UI replaces competing login pages with one generic shell composed from a login-method catalog plus component and icon providers. Elsa Identity and brokered external providers are now both contributions to that shell rather than rival implementations, so future GitHub, Microsoft or social-login adapters reuse the same chooser. Server confidential-client and WebAssembly public-client boundaries are preserved, and mixed authentication route-owner registrations are rejected outright.
Login themes (#921) are deploy-time configurable and validated at startup. Set Authentication:Login:Theme and restart. The 3.7-style classic theme remains the default; four optional raster-rich themes ship alongside it (workflow-constellation, workflow-aurora, execution-timeline, human-automation), and hosts or modules can register their own with AddLoginTheme<TComponent> or AddLoginThemeProvider<TProvider>. The theme pack is optional — omit it and you keep classic.
User and role management (#936) rounds it out: permission-aware list, create, edit and delete for both, with generated passwords, role assignments, permission tokens and responsive tables, wired for Server and WebAssembly hosts.
Also new
Weaver copilot UI. Elsa.Studio.AI adds a Weaver workspace at /ai/weaver. It talks only to Core-owned endpoints (/ai/capabilities, /ai/tools, streaming /ai/chat) and is deliberately provider-neutral — a scan for provider names in the module returns nothing, so Studio never learns which model is behind it. It renders assistant deltas, tool activity and results, proposal events, context attachments, reconnect state and capability-gated controls. Proposal approve/reject/apply buttons are intentionally disabled until Core exposes governed proposal action endpoints. (#900)
Secrets. /security/secrets manages Core's new secrets store — list, create and rotate — plus a reusable SecretPicker component and a UI hint so activity inputs that accept a secret reference offer the picker rather than a text box. (#826 · #840)
Webhooks. A /webhooks module landed as Elsa.Studio.Http.Webhooks, pairing with the webhook triggers added in Core 3.8. Committed directly rather than through a PR, so it doesn't appear in the list below.
Platform integration. An opt-in Elsa.Studio.PlatformIntegration module that submits workflow definitions to Elsa Platform as deployable artifacts. The interesting part is how it attaches: neutral extension zones were added beside the publish actions in the definition editor toolbar, the bulk menu and the row menu, and Platform registers widgets into those zones — so no Platform UI is hardcoded into the Workflows module. Submission failures are contained so a Platform error can't roll back a Studio publish. (#839)
Fixes
"The instance list jumps back to page 1 whenever I click a row." On /workflows/instances and /workflows/definitions, selecting a row or toggling its checkbox on any page after the first reset the table to page 1 and rewrote the URL. (#817 by @rsiancu, fixes elsa-core#7447)
"My activity's display text is ignored on the designer node." A previous change made node labels prefer the auto-generated activity name over the display text entered in the Common tab, and the journal and call stack were given the same order to stay correlated. Display text now comes first in all three, with the name as fallback ahead of the type name, and the hierarchy lives in a shared ActivityLabelResolver. (#942 by @zer0bugz, fixes #909)
"Saving a workflow failed with an unhelpful Refit error." Core returns useful validation detail for things like duplicate HTTP trigger endpoints, but Studio surfaced generic ApiException text when the response wasn't materialized as a ValidationApiException. Plain JSON 400 responses from save, retract and create are now parsed into ValidationErrors, so the editor snackbar shows the actual server message. (#899, fixes #904)
"The server host wouldn't run out of the box." A local dev configuration was committed into the shipped appsettings.json of Elsa.Studio.Host.Server, flipping Authentication:Provider from ElsaIdentity to ExternalAuthentication and filling in a test client secret. That contradicted a guard test added one commit earlier and broke CI on release/3.8.0. Restored, with an untracked place for local overrides so it can't recur. (#937)
Build hygiene. Focused Studio and workspace-wide warning cleanups. (#897 · #898)
Upgrade notes
Screens appear based on what the backend has. Alterations, the diagnostics workspaces, dashboard widgets and Weaver are all gated on their corresponding backend feature. If a menu entry is missing, the question is which shell features the server has enabled, not whether Studio installed correctly. This is deliberate — it replaced the old behaviour of showing UI whose API endpoints returned errors.
The React Flow designer is opt-in and X6 remains the default. Set DesignerOptions:UseReactFlow to true to try it. Nothing changes for existing users who don't.
Login themes default to classic, which is the 3.7.0 experience. The four-theme pack is optional; omitting it changes nothing.
Flowchart stays the default root activity in the New Workflow dialog, so existing muscle memory and callers are unaffected.
Server host authentication defaults to ElsaIdentity. If you were running a build from release/3.8.0 between the two commits named in #937, your appsettings.json may carry a stray ExternalAuthentication provider and test client secret. Check it.
New modules need registering in your host if you compose Studio yourself rather than using the bundle.
Try it
dotnet add package Elsa.Studio --version 3.8.0-rc2It's a pre-release, so specify the version explicitly or enable pre-release packages in your IDE. Pair it with Elsa 3.8.0-rc2 on the server.
Road to 3.8.0
The feature set is closed and we're looking for bugs. The most useful thing anyone can do is point a 3.8 Studio at a 3.8 server and work through the new surfaces — particularly the alterations submit flow against real running instances, the diagnostics workspaces under a clustered deployment with several log sources, and SSO against a real identity provider.
The React Flow designer is the newest code in the release and the least exercised; if you switch it on, large workflows and copy/paste/splice behaviour are where it's most likely to show cracks.
Found something? Open an issue and mention 3.8.0-rc2.
Thanks
Two people made their first contribution to Studio in this release, and both fixed bugs that would annoy someone every single day:
- @rsiancu — stopped the instance and definition lists snapping back to page 1 (#817)
- @zer0bugz — restored custom display text on activity labels (#942)
Thanks also to @cristinamudura, who built both the React Flow designer and the Alterations module — two of the largest features in this release — and to @jakubkorecek and @GabrielCiochina for their contributions.
Full list of merged pull requests (51)
Note:
Elsa.Studio.Http.Webhookswas committed directly to the release branch rather than through a pull request, so it doesn't appear below.
- Feature/reactflow designer by @cristinamudura in #812
- [codex] Add Studio server logs module by @sfmskywalker in #810
- [codex] Show structured log storage diagnostics by @sfmskywalker in #816
- Implement React Flow sequence designer by @sfmskywalker in #819
- Add StateMachine designer by @sfmskywalker in #818
- Add structured log trace metadata filters by @sfmskywalker in #821
- Bump CodeBeam.MudBlazor.Extensions from 9.0.0-rc.1 to 9.1.0 by @dependabot[bot] in #814
- Fix unwanted refresh of WorkflowInstanceList when a WorkflowInstance … by @rsiancu in #817
- Add diagnostics console logs module by @sfmskywalker in #822
- [codex] Configure Dependabot for Elsa API client by @sfmskywalker in #824
- Feature/alterations designer by @cristinamudura in #823
- Add secrets studio module by @sfmskywalker in #826
- [codex] Add operational dashboard PRD by @sfmskywalker in #829
- [codex] Fix diagnostics console logs by @sfmskywalker in #831
- [codex] Document dashboard widget contribution model by @sfmskywalker in #832
- Bump Elsa.Api.Client and Microsoft.Extensions.DependencyInjection.Abstractions by @dependabot[bot] in #815
- Bump the npm_and_yarn group across 1 directory with 13 updates by @dependabot[bot] in #825
- [codex] Add workflow instance console logs tab by @sfmskywalker in #833
- Add OpenTelemetry diagnostics to Studio by @sfmskywalker in #834
- Add CSS and JavaScript for alterations module styling and functionality by @cristinamudura in #836
- Add Studio Platform artifact submission module by @sfmskywalker in #839
- [codex] Add Studio secret picker UI hint by @sfmskywalker in #840
- [codex] Update Studio OIDC README docs by @sfmskywalker in #841
- Replace Studio home with operational dashboard by @sfmskywalker in #871
- Add root activity selection to new workflow dialog by @sfmskywalker in #878
- Refactor dashboard widgets by @sfmskywalker in #879
- Add feature-gated dashboard widget composition by @sfmskywalker in #886
- Add feature-gated dashboard widget composition by @sfmskywalker in #887
- Add workflow root activity selector by @sfmskywalker in #894
- Allow choosing workflow root activity type by @sfmskywalker in #895
- Add sequence mode support to the workflow designer by @sfmskywalker in #873
- Resolve focused Studio warnings by @sfmskywalker in #897
- [codex] Gate Alterations UX on remote feature by @sfmskywalker in #837
- [codex] Clarify Studio WASM OIDC README setup by @sfmskywalker in #872
- Deliver GitHub project board updates by @sfmskywalker in #896
- Resolve workspace warnings by @sfmskywalker in #898
- [codex] Show workflow validation API errors by @sfmskywalker in #899
- [codex] Add Weaver copilot UI by @sfmskywalker in #900
- Keep agent instructions feature-neutral by @sfmskywalker in #917
- Add Settings, SSO management, and composable authentication UI by @sfmskywalker in #920
- Add configurable login themes by @sfmskywalker in #921
- [1/7] Add application and login themes by @sfmskywalker in #925
- [2/7] Refine authentication navigation and identity flows by @sfmskywalker in #926
- [3/7] Add connection management foundations by @sfmskywalker in #927
- [4/7] Redesign the connection management workspace by @sfmskywalker in #928
- [5/7] Theme the workflow designer and add output converters by @sfmskywalker in #929
- [6/7] Add dashboard and diagnostics experiences by @sfmskywalker in #930
- [7/7] Wire the feature stack into Studio hosts by @sfmskywalker in #931
- Add user and role management by @sfmskywalker in #936
- fix(host): restore runnable server authentication defaults by @sfmskywalker in #937
- fix(activity-labels): prefer custom display text over activity name by @zer0bugz in #942
Full Changelog: 3.7.1...3.8.0-rc2






