Skip to content
GitHub
BPMN 2.0 .NET · Orleans

Fleans

A BPMN workflow engine built on .NET Orleans. Design workflows visually, deploy them as BPMN XML, and run every instance as an event-sourced actor — scale out by adding silos, not by tuning a central orchestrator.

Architecture

Your backend talks REST to one Orleans cluster. Core and worker silos share it, and custom-task workers connect over gRPC; state, clustering, reminders and streams plug into whichever storage and queues you already run — Fleans ships SQLite, PostgreSQL, Redis, Kafka and Azure Queue, and any other Orleans provider fits the same seams. Start on one PostgreSQL and grow into the layout built for scale.

Interactive diagram. Open full screen ↗

Admin UI

Design, deploy and operate workflows from one browser app.

  • Live instancesThe path taken, lit up on the diagram, with journal and variables.
  • Replay & debugStep through the journal and see the variables at every step.
  • BPMN editorDraw or import a diagram, simulate it, deploy a new version.
  • Deploy approvalsReview deploy requests and promote versions between environments.
  • ProcessesVersions and instances; start, disable or enable a process.
  • Tasks & eventsCustom tasks on gRPC workers; waiting messages, signals and timers.
Fleans admin UI: a completed Pizza Customer instance. The customer pool's path from 'Hungry for pizza' through 'Select a pizza', 'Order a pizza', the event-based gateway, 'pizza received', 'Pay the pizza' and 'Eat the pizza' to 'Hunger satisfied' is highlighted; the journal panel lists each activity started and completed, with the 60-minute timer cancelledFleans admin UI: a completed Pizza Customer instance. The customer pool's path from 'Hungry for pizza' through 'Select a pizza', 'Order a pizza', the event-based gateway, 'pizza received', 'Pay the pizza' and 'Eat the pizza' to 'Hunger satisfied' is highlighted; the journal panel lists each activity started and completed, with the 60-minute timer cancelled
A completed order of the bpmn.io pizza collaboration in the Fleans admin UI. Download the BPMN ↓ · original on bpmn.io ↗

Execution model

How a workflow instance runs, survives failure, and stays fast.

grainactor

Actors, not orchestrators

Every workflow is an independent Orleans grain. No shared coordinator, no lock contention — add silos, get linear throughput.

journalreplay

Event-sourced, crash-safe state

Append-only event log with deterministic replay. Silo dies mid-workflow? Orleans reactivates the grain on another silo — no orphaned state.

memorybatch

In-memory hot path

Active workflows run from RAM — mid-workflow steps skip the database. Events batch into one transaction at the end of each grain call.

bpmnerrors

Typed BPMN recovery paths

Compensation, error boundaries, and escalation events are first-class. Failure modes get explicit semantics, not ad-hoc try/catch.

Data & operations

Reads, storage and transport are split so each can scale or be swapped on its own.

cqrsreplica

Scale reads separately from writes

Built-in CQRS split routes read traffic through a NoTracking query context and an optional PostgreSQL replica.

projectionef

Materialized read projections

Lists and finished instances read a pre-built EF projection. No event replay to render a list or open a finished instance.

sqlitepostgres

Bring your own database

SQLite for laptops, PostgreSQL for production — selected at startup via a single config key, no code change. The provider model is open if you need to add another.

streamskafka

Plug in your stream provider

Domain events flow through Orleans Streams. Flip Fleans:Streaming:Provider=kafka to use the bundled Kafka adapter for cross-silo durability — or ship your own provider against the same extension point.

dockerhelm

Run in your infrastructure

Fleans ships as a container image you can run anywhere — laptop, VM, or Kubernetes. Your data never leaves your network, and there is no SaaS dependency to ramp.

pluginworker

Extend with your own tasks and workers

Wrap REST calls, queues, or any custom integration as a BPMN task by shipping a gRPC worker from a GitHub template, in any language. Engine and workers scale independently, so one workflow can fan out across your own fleet.

Next steps