* Avoid null endpoint DTO metadata in tests * Enforce console logs hub read permission * Remove unused console logs hub import * Support mapped endpoint metadata in auth tests * Reduce console log capture throughput impact * Address Copilot console logs review * Refactor task scheduling to support tenant-level background work and enhance logging functionality. * Introduce ConsoleStreamHook for stdout/stderr tee and enhance logging validation. Adjust test cases and startup warnings for distributed lock provider usage. * Refactor console logging pipeline with capture optimization and new ConsoleLogsHost; update tests accordingly. * Add Ansi SGR parser for console logs and associated unit tests * Remove ANSI color renderings and parsers; integrate ConsoleLogScopeAccessor for improved logging context with workflow instance ID support. * Address console logs code quality feedback * Address PR review feedback * Preserve console logs extension points * Stabilize console logs host lifecycle * Address final automated review comments * Tighten console log capture shutdown * Address console log review feedback * Address follow-up review feedback * Cover final review feedback * Avoid recursive console provider initialization * Guard console host lease shutdown * Preserve console log scope and provider lifetime * Correlate console log scope fallback * Tighten console scope correlation * Expose host services during provider construction * Redact ANSI-normalized console lines * Remove `ConsoleCaptureTee` and related services and tests * Use pipeline contributors for console log context * Update CShells package versions to 0.0.24-preview.132 * Filter live console logs by workflow instance * Enhance console logging with activity execution metadata and extend test coverage. * Address console logs stream consumption comment * Add diagnostics OpenTelemetry backend * Introduce dedicated workflow JSON type registry and hardening This change addresses GitHub issue #7541 by establishing a separate type registry (`IWorkflowJsonTypeRegistry`) for workflow JSON serialization. This decouples workflow type resolution from expression type aliases, enforcing a strict trust boundary. Key aspects: - New workflow JSON emits preferred aliases for registered types. - Existing persisted workflows can be loaded via registered legacy names. - Unknown, abstract, interface, open generic, or inappropriate collection types are rejected during deserialization, enhancing security. - Public APIs (e.g., incident strategies) now expose consistent workflow JSON type identifiers. This ensures secure, predictable, and backward-compatible handling of types within workflow definitions and payloads. * Remove unused project references and streamline console log endpoint * Move serialization type aliases to Elsa.Common * Update serialization integration fixtures for aliases * Stabilize missing rate limiter policy test |
||
|---|---|---|
| .. | ||
| activities-and-authoring.md | ||
| architecture.md | ||
| build-run-operate.md | ||
| diagnostics-console-logs.md | ||
| diagnostics-structured-logs.md | ||
| expressions-and-scripting.md | ||
| extension-guide.md | ||
| health-checks.md | ||
| http-scheduling-resilience.md | ||
| identity-tenancy-security.md | ||
| module-system.md | ||
| opentelemetry-workflows.md | ||
| persistence.md | ||
| README.md | ||
| repository-map.md | ||
| specs-and-adrs.md | ||
| testing-guide.md | ||
| workflow-api.md | ||
| workflow-core.md | ||
| workflow-management.md | ||
| workflow-runtime.md | ||
Elsa Core Wiki
This wiki is a repo-local, code-grounded map of Elsa Core. It is intended for contributors who need the same kind of fast orientation that a DeepWiki-style generated wiki gives: what the system is, where the important code lives, how the pieces connect, and how to safely extend or test them.
The source of truth is still the code, specs, ADRs, and tests. Each page links back to the relevant files so you can jump from explanation to implementation.
Start Here
Elsa Core is a modular .NET workflow engine. The main solution is Elsa.sln. Production code lives under src, tests under test, specifications under specs, and architecture decisions under doc/adr.
The shortest mental model:
- An application calls
services.AddElsa(...). - Elsa builds an
IModuleand configures feature objects. - Features register services, activities, API endpoints, middleware, hosted services, and persistence stores.
- Workflow definitions are created by code, JSON, imported files, or providers.
- The runtime starts, resumes, dispatches, and persists workflow instances.
- APIs, SignalR hubs, HTTP endpoint activities, diagnostics, and persistence packages layer around that core.
flowchart LR
App["Host app"] --> Module["Elsa module system"]
Module --> Core["Workflow core"]
Module --> Management["Workflow management"]
Module --> Runtime["Workflow runtime"]
Module --> Api["Workflow API"]
Module --> Extensions["HTTP, Scheduling, Expressions, Identity, Tenants"]
Management --> Persistence["Stores / EF Core providers"]
Runtime --> Persistence
Runtime --> Logs["Execution logs and diagnostics"]
Api --> Studio["Elsa Studio / API clients"]
Page Map
| Page | Use it for |
|---|---|
| Repository Map | Top-level folders, projects, and where to look first. |
| Architecture | The main system layers and request/execution flow. |
| Module System | How IModule, FeatureBase, feature dependencies, and shell features work. |
| Workflow Core | Activities, execution contexts, pipelines, variables, bookmarks, graphs, and flowchart execution. |
| Workflow Management | Workflow definitions, instances, import/export, materializers, validation, and activity descriptors. |
| Workflow Runtime | Dispatch, triggers, bookmarks, queues, background activity scheduling, graceful shutdown, and recovery. |
| Workflow API | FastEndpoints, route prefixing, API categories, SignalR, and client-facing contracts. |
| Activities And Authoring | How workflows are authored in C#, JSON, ElsaScript, and host methods. |
| Expressions And Scripting | Expression evaluators and language feature packages. |
| HTTP, Scheduling, And Resilience | Inbound HTTP workflows, outbound HTTP, scheduled triggers, and resilience strategies. |
| Persistence | In-memory stores, EF Core stores, provider packages, migrations, and multi-provider rules. |
| Diagnostics Structured Logs | ILogger capture, live feed, REST/SignalR surface, redaction, and SQLite persistence. |
| Diagnostics Console Logs | Raw stdout/stderr capture, live feed, REST/SignalR surface, and redaction. |
| Health Checks | Elsa runtime readiness probes, liveness/readiness mapping, and Kubernetes probe guidance. |
| Identity, Tenancy, And Security | Users, applications, roles, API keys, tenant resolution, and authorization touch points. |
| Testing Guide | Test project layout, fixture choices, and targeted commands. |
| Extension Guide | How to add features, activities, expression providers, stores, endpoints, and ingress sources. |
| OpenTelemetry Workflow Instrumentation | First-party workflow and activity traces and metrics emitted through System.Diagnostics. |
| Specs And ADRs | How current specs and ADRs explain design intent. |
| Build, Run, And Operate | Build commands, sample hosts, runtime knobs, Docker notes, and operational endpoints. |
Source Landmarks
- Main public entry: src/modules/Elsa/Extensions/DependencyInjectionExtensions.cs
- Default umbrella feature: src/modules/Elsa/Features/ElsaFeature.cs
- Module implementation: src/common/Elsa.Features/Implementations/Module.cs
- Core workflow feature: src/modules/Elsa.Workflows.Core/Features/WorkflowsFeature.cs
- Management feature: src/modules/Elsa.Workflows.Management/Features/WorkflowManagementFeature.cs
- Runtime feature: src/modules/Elsa.Workflows.Runtime/Features/WorkflowRuntimeFeature.cs
- API feature: src/modules/Elsa.Workflows.Api/Features/WorkflowsApiFeature.cs
- Reference server: src/apps/Elsa.Server.Web/Program.cs
- Structured-log persistence design: specs/005-structured-log-persistence/plan.md
Contributor Workflow
Use targeted reads first, then targeted tests. For most changes, start with the relevant module page, inspect the linked feature class and contracts, add or update tests in the matching test/unit, test/integration, or test/component project, and run the narrowest dotnet test command that proves the behavior.
When changing public behavior, update the related README, spec quickstart, or wiki page in the same PR. This repository is strongly modular, so the best changes keep ownership boundaries clear.