Choose storage
Create workflow tables and connect a database provider such as MS SQL, PostgreSQL, MongoDB, MySQL, Oracle, or SQLite.
990 · Workflow Engine by Optimajet · v22.1.0 stable · August 2026 · .NET 10 down to .NET Framework 4.6.2
The embeddable .NET library that adds durable, stateful business processes to your application. Your database, your deployment, your identity layer. No separate cluster to operate, no SDK afterthought.
Releases, samples, and issues are available on GitHub. Full engine source access is available with selected editions under a commercial EULA.
Workflow Engine is the commercial product of the embeddable .NET workflow library by Optimajet. It is the same engine as Workflow Engine Free with the limits lifted: Team raises the schema and thread ceilings, Complete removes them and adds multi-server mode, and the license covers commercial use. You buy it per product, as a perpetual on-premise license or as a subscription, with no royalties and no per-execution fees. Annual support plans with committed response times are sold separately from the license.
Moving from free to commercial takes one line: pass your key to WorkflowRuntime.RegisterLicense() before the runtime starts. Same NuGet packages, same API, same database, so a proof of concept built on Workflow Engine Free ships to production unchanged. When you need a multi-tenant HTTP API, your schemes and process logic carry into the separate Workflow Engine NEO; when you want a ready-made service instead of a library, there is the standalone Workflow Server. The full matrix is on the product comparison page.
One license per product, perpetual or subscription. No royalties, no per-execution fees.
Initial activity
The free-tier caps are lifted. Exact numbers per edition are on the pricing page.
Annual support plans with committed response times are sold separately from the license.
From the Complete edition: several equal instances on one shared database.
Workflow Engine NEO is the separate product for the Workflow Engine HTTP API and full multitenancy. Workflow Server is the standalone product.
WorkflowRuntime.RegisterLicense(key) is the entire migration from Workflow Engine Free.
Current activity
Workflow Engine ships with a web-based HTML5 workflow designer your team hosts inside your own .NET app. Model schemes visually, configure steps, reuse custom steps, define custom data, and connect workflow behavior to server-side C# actions. No external tool, no SaaS hop, no third-party designer to integrate.
For production and AI-assisted scenarios, keep sensitive behavior in reviewed server-side C# actions or a curated action catalog. The designer makes the process visible. Your application still controls authorization, side effects, data access, and integration boundaries. Code Actions compile dynamically with full server access and should be disabled for end users in production.
A scheme built in the designer, commands wired to transitions, actors deciding who may run which command, a process started and driven over an HTTP API, and finally a new step plus a timer added to a scheme that is already running. For a clear picture we show all of it inside Workflow Server: the engine is what beats inside that product, and in your own application the same runtime sits behind your own screens.
The engine has a deliberately small surface. Internalize these two concepts and the rest of the API reads predictably.
Describes what a process looks like: activities (states), transitions (moves between states with triggers and conditions), commands (what users or APIs invoke), actions (custom code that runs), rules (who can do what), and parameters (data the process carries).
Schemes are versioned, stored as XML in WorkflowProcessScheme, and can be modified while processes are running (auto scheme update mechanism).
One instance per entity: one document, one order, one invoice. The instance carries state, history, parameters, and a status code. State is persisted to WorkflowProcessInstance, history to WorkflowProcessTransitionHistory, and parameters to WorkflowProcessInstancePersistence.
CreateInstanceStart a process for an entity.
(wait)The process moves through activities until it needs input.
GetAvailableCommandsAsk what the current user can do right now.
ExecuteCommandRun the chosen command. The process advances.
| Code | Status | Meaning |
|---|---|---|
| 0 | Initialized | Just created, has not started executing. |
| 1 | Running | Currently executing transitions. |
| 2 | Idled | Waiting for a command, a timer, or external input. |
| 3 | Finalized | Completed normally. |
| 4 | Terminated | Stopped with no commands or timers left to continue with. |
| 5 | Error | Failed; see logs and history for details. |
Five concrete steps: storage, runtime, designer, rules and actions, first process run. A typical ASP.NET Core MVC integration takes about an hour, walked through end to end in the integration guide.
Create workflow tables and connect a database provider such as MS SQL, PostgreSQL, MongoDB, MySQL, Oracle, or SQLite.
Add the runtime that creates processes, returns available commands, executes transitions, and persists state.
Add the HTML5 Workflow Designer to model schemes visually inside your application.
Connect your authorization model through rules and your business logic through server-side actions.
Create an instance, call GetAvailableCommands, execute a command, and inspect parameters, timers, history, and state.
One Runtime per app or service. Register as a singleton in DI. The builder is the only place you opt into features (code actions, auto scheme update, multi-server). Everything else is data: schemes you author in the Designer, parameters you pass at CreateInstance, commands users execute.
public static class WorkflowInit
{
private static readonly Lazy<WorkflowRuntime> LazyRuntime =
new Lazy<WorkflowRuntime>(InitWorkflowRuntime);
public static WorkflowRuntime Runtime => LazyRuntime.Value;
public static string ConnectionString { get; set; }
private static WorkflowRuntime InitWorkflowRuntime()
{
// WorkflowRuntime.RegisterLicense("your license key text");
var dbProvider = new MSSQLProvider(ConnectionString);
var builder = new WorkflowBuilder<XElement>(
dbProvider, new XmlWorkflowParser(), dbProvider
).WithDefaultCache();
var runtime = new WorkflowRuntime()
.WithBuilder(builder)
.WithPersistenceProvider(dbProvider)
.RunMigrations()
.EnableCodeActions()
.SwitchAutoUpdateSchemeBeforeGetAvailableCommandsOn()
.AsSingleServer();
runtime.WithPlugin(new BasicPlugin());
runtime.OnProcessActivityChanged += (sender, args) => { };
runtime.OnProcessStatusChanged += (sender, args) => { };
runtime.Start();
return runtime;
}
}For ASP.NET Core, convert this into a WorkflowRuntimeLocator service and register it as Singleton. Do not use Scoped or Transient; one runtime serves the whole app.
Everything below is code your team does not have to write. Install the package and start on the parts that make your product different.
HTML5 drag-and-drop scheme editor, embedded in your UI. npm packages for React, Angular and vanilla JS, and a documented Blazor path.
Bring diagrams from any BPM tool that exports BPMN 2.0. Import only, no export back. Analysts model, developers ship.
The Forms Plugin binds forms to workflow activities. It is an add-on for the Workflow Engine Complete edition and included in every edition of Workflow Engine NEO. Form Engine Core is MIT-licensed. The Form Engine Enterprise license covers Form Engine Designer and the other features of that edition; Workflow Engine NEO Enterprise includes it with OEM rights.
Core TenantId storage with every Workflow Engine license. Ready multitenancy across the built-in Workflow Engine HTTP API operations in NEO.
MS SQL (plus Azure SQL and Managed Instance), PostgreSQL, MongoDB (plus Azure Cosmos DB), MySQL, Oracle, SQLite. Auto migrations via FluentMigrator. Your schema, your stack.
No user store in the engine. One interface, IWorkflowRuleProvider, hands every command check to your LDAP, Active Directory or custom identity system.
Eight plugins ship, three of them inside the Core package. Your own take the same path: implement IWorkflowPlugin, register it in one line.
Write C# transition logic inside the Designer. Compiled dynamically at runtime, so changing behavior needs no redeploy.
Modify a scheme while processes are running. The engine validates and applies the change on the next call.
Call AsMultiServer(), share one database, scale horizontally. Distributed locking, timers, recovery built in.
Durable timers that survive restarts. Wait days, weeks, or months for an event without polling code.
Every transition is persisted with actor, timestamps, and duration. Inbox, outbox, and approval history ship out of the box.
Five concepts cover the whole model: activities, transitions, commands, timers, actors. Learn it in weeks, not the months a full BPMN platform takes.
SetState, SetActivity, and Resume move any process to any state, with or without executing actions. Recover a stuck process without touching the database.
Simulation mode that walks the route ahead without changing process state: show users the coming approval stages and who signs, before they submit.
Specially marked transitions spawn subprocesses that run in parallel, act independently, and merge back into the parent process state.
Six NuGet provider packages cover nine databases. The MSSQL provider also runs Azure SQL and Azure SQL Managed Instance, and the MongoDB provider also runs Azure Cosmos DB. Pick a provider, point the runtime at a connection string, and Workflow Engine creates and maintains its own tables and three stored procedures for you via FluentMigrator (since v13.0.0). Your business data stays in your own schema.
| Database | NuGet package | Target framework |
|---|---|---|
| MS SQL Server, Azure SQL, Azure SQL Managed Instance | WorkflowEngine.NETCore-ProviderForMSSQL | netstandard2.0 |
| PostgreSQL | WorkflowEngine.NETCore-ProviderForPostgreSQL | netstandard2.0 |
| MongoDB, Azure Cosmos DB | WorkflowEngine.NETCore-ProviderForMongoDB | netstandard2.0 |
| MySQL | WorkflowEngine.NETCore-ProviderForMySQL | netstandard2.0 |
| Oracle | WorkflowEngine.NETCore-ProviderForOracle | netstandard2.1 (.NET Core 3.0+) |
| SQLite | WorkflowEngine.NETCore-ProviderForSQLite | net8.0 and net10.0 |
SQLite is fine for development and small projects but is not recommended for industrial use; it may not work on macOS with Apple Silicon. For production, prefer MS SQL, PostgreSQL, or MongoDB.
Plugins attach to the same WorkflowRuntime via runtime.WithPlugin(...). They register actions, conditions, persistence helpers, and event hooks. You opt in to what you need; nothing imposes itself.
Email sender, HTTP request action, predefined actors, parallel approval without branches, expression compilation. Most projects start here.
Approval history, Inbox, Outbox APIs. Backed by WorkflowApprovalHistory and WorkflowInbox tables. Reads via GetApprovalHistoryByIdentityIdAsync, GetInboxByIdentityIdAsync, etc.
StartLoopFor, StartLoopForeach, StartLoopForeachFromParameter actions. Counter types Int or DateTime. DateTime steps support y / month / d / h / m / s / ms suffixes.
FileRead, FileWrite, FileDelete, FileDownload, FileUpload, FileMove, FileCopy, FileRename, plus directory operations. Supports FTP, SFTP and HTTP/HTTPS.
Resolves actors and roles directly from AD or Microsoft Entra ID. Plugs into IWorkflowRuleProvider so the rest of the runtime stays identity-agnostic.
Since v13.0.0. Tracks process state changes for live dashboards. Useful for operations consoles and SLA monitoring.
Since v16. Imports BPMN 2.0 diagrams and converts them into Workflow Engine schemes. Maps a subset of BPMN constructs onto the state machine model.
The Forms Plugin binds forms to workflow activities. It is available as an add-on for the Workflow Engine Complete edition and included in every edition of Workflow Engine NEO.
The minimum supported framework is .NET Framework 4.6.2 (since v7.0). Latest release is v21.0.0 (April 2025), which dropped the synchronous API; only async API is available going forward.
| Package target | Implementation | Versions supported |
|---|---|---|
| netstandard2.0 | .NET Core | 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 |
| netstandard2.0 | .NET Framework | 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
| netstandard2.1 | .NET Core | 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 |
| net6.0 | .NET | 6.0, 7.0, 8.0, 9.0, 10.0 |
Direct answers to the questions .NET teams ask while evaluating Workflow Engine: products, databases, BPMN, versions, and licensing.
Workflow Engine is an embeddable .NET workflow library by Optimajet. It adds durable, stateful business processes (approval flows, document routing, long-running orchestrations, BPMN-style workflows) to a .NET application. The engine ships as NuGet packages, runs inside your process, persists to your database, and integrates with your existing identity layer.
Workflow Engine and Workflow Engine NEO are separate products in the same product family. Workflow Engine NEO has been based on Workflow Engine since v19.0.0. Every edition of Workflow Engine NEO includes the Data API, RPC API, full multitenancy, and the Forms Plugin. The Forms Plugin is also available as an add-on for the Workflow Engine Complete edition. Workflow Server is a separate standalone product with its own HTTP API, admin console, and Docker images, built on top of Workflow Engine. Workflow Engine is cheaper than Workflow Server.
Yes. Microsoft WF was discontinued and Microsoft never shipped a first-class successor. Workflow Engine is actively maintained (v21.0.0, April 2025), supports .NET 6 through 10 and .NET Framework 4.6.2 and up, and provides Workflow Designer plus durable persistence that WF either lacked or required expensive add-ons to deliver.
Yes, with caveats. The BPMN plugin (since v16.0) imports BPMN 2.0 diagrams. Workflow Engine remains a state machine engine internally; it maps a subset of BPMN constructs onto its state machine model. If your team authors workflows in BPMN tools, you can bring diagrams in. If you need full BPMN execution semantics (signal events, complex error boundary events), evaluate against your specific BPMN usage.
Six built-in providers: MS SQL Server (including Azure SQL and Azure SQL Managed Instance), PostgreSQL, MongoDB (including Azure Cosmos DB), MySQL, Oracle, and SQLite. Migrations are automatic via FluentMigrator since v13.0.0. SQLite is suitable for development and small projects but not recommended for industrial use.
Yes, from the Complete edition. Call .AsMultiServer() during runtime construction, share the same database across all instances, and Workflow Engine handles distributed locking, timer scheduling, and recovery. There is no master node; all instances are equal. You bring your own load balancer.
No. Workflow Engine is commercial software with a free tier, not MIT or Apache licensed. Licensed engine-source access is unavailable on Team and NEO Subscription, a one-year add-on on Complete, NEO Business and NEO SaaS, and included for one year with NEO Enterprise, under a commercial EULA. Workflow Engine Free is for personal, non-commercial evaluation, learning and proof-of-concept work within its usage limits.
A separate workflow platform adds operational weight: its own deployment, infrastructure, monitoring, backups, access control, and on-call duty. An embeddable library makes workflows another application component rather than another system to operate: you keep unified logging and observability, your existing CI/CD pipeline, your current database and backup procedures, and your application security model. That is the core trade-off between Workflow Engine and platform-style tools such as Camunda or Temporal.
The documented framework-agnostic setup takes about one hour: install the NuGet packages, configure your database, initialize WorkflowRuntime, connect the Designer, define your first scheme, create a process. The exact steps live in the Getting Started guide.
No. Workflow Engine has no built-in security system. It integrates with your existing identity layer via the IWorkflowRuleProvider interface. The Active Directory plugin connects directly to Active Directory and Microsoft Entra ID. If you use ASP.NET Core Identity or a custom system, you implement the provider once and the engine consults it for actor and role checks.
Workflow Engine is thread-safe but not transactional across commands. There is no single transaction that spans multiple ExecuteCommand calls. Design your workflows assuming each command is the unit of consistency. Use your database's own transactions inside Actions for business data updates.
Workflow Engine and Workflow Engine Free are one codebase, so evaluation is low-risk: integrate free by the documentation, lift the free limits with a trial key, and bring the open questions to a meeting with the team.
01Documentation
Start with the integration guide: install from NuGet, set up storage, initialize the runtime, embed the Designer, and run your first process. No license key needed on the free tier.
02Trial
The trial key lifts the free limits and turns on multi-server mode for your evaluation. Same code and database; the trial key swaps in with one RegisterLicense call.
03Book a meeting
An hour with the team: editions for your case, multi-server topology, migration from WF or a homegrown engine, and anything the docs left open.