diff --git a/README.md b/README.md index 562ba2cf4..815bb3650 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,39 @@ Workflows can be defined not only using code but also as JSON, YAML or XML. Follow the [Getting Started](https://elsa-workflows.github.io/elsa-core/docs/installing-elsa-core) instructions on the [Elsa Workflows documentation site](https://elsa-workflows.github.io/elsa-core). +## Roadmap + +Version 1.0 + +- [x] Workflow Invoker +- [x] Long-running Workflows +- [x] Workflows as code +- [x] Workflows as data +- [x] HTML5 Workflow Designer Web Component +- [x] ASP.NET Core Workflow Dashboard +- [x] JavaScript Expressions +- [x] Liquid Expressions +- [x] Primitive Activities +- [X] Control Flow Activities +- [x] Workflow Activities +- [x] Timer Activities +- [x] HTTP Activities +- [x] Email Activities + +Version 2.0 + +- [ ] Service Bus Messaging +- [ ] Generic Command & Event Activities +- [ ] Workflow Host REST API +- [ ] Workflow Host gRPC API +- [ ] Distributed Hosting Support (support for multi-node environments) +- [ ] Localization Support + +Version 3.0 + +- [ ] State Machines +- [ ] Container Activities + ## Workflow Designer Workflows can be visually designed using [Elsa Designer](https://github.com/elsa-workflows/elsa-designer-html), a reusable & extensible HTML5 web component built with [StencilJS](https://stenciljs.com/). @@ -69,107 +102,6 @@ The following providers will be supported: Currently, workflows can be stored in YAML or JSON format. The following demonstrates a simple workflow expressed in YAML and JSON, respectively: -**YAML** -```yaml -activities: -- name: WriteLine - id: activity-1 - textExpression: - syntax: PlainText - expression: Hi! What's your name? -- name: ReadLine - id: activity-2 - argumentName: name -- name: WriteLine - id: activity-3 - textExpression: - syntax: JavaScript - expression: '`Nice to meet you, ${name}!`' -connections: -- source: - activityId: activity-1 - name: Done - target: - activityId: activity-2 -- source: - activityId: activity-2 - name: Done - target: - activityId: activity-3 -``` - -**JSON** -```json -{ - "activities": [ - { - "name": "WriteLine", - "id": "activity-1", - "textExpression": { - "syntax": "PlainText", - "expression": "Hi! What's your name?" - } - }, - { - "id": "activity-2", - "name": "ReadLine", - "argumentName": "name" - }, - { - "name": "WriteLine", - "id": "activity-3", - "textExpression": { - "syntax": "JavaScript", - "expression": "`Nice to meet you, ${name}!`" - } - } - ], - "connections": [ - { - "source": { - "activityId": "activity-1", - "name": "Done" - }, - "target": { - "activityId": "activity-2" - } - }, - { - "source": { - "activityId": "activity-2", - "name": "Done" - }, - "target": { - "activityId": "activity-3" - } - } - ] -} -``` - -The following demonstrates loading a workflow from a YAML string: - -```c# -// Setup a service collection and use the FileSystemProvider for both workflow definitions and workflow instances. -var services = new ServiceCollection() - .AddWorkflowsInvoker() - .AddConsoleActivities() - .AddSingleton(Console.In) - .BuildServiceProvider(); - -// Load the data and specify data format. -var data = Resources.SampleWorkflowDefinition; -var format = YamlTokenFormatter.FormatName; // "YAML" - -// Deserialize the workflow from data. -var serializer = services.GetService(); -var workflowDefinition = await serializer.DeserializeAsync(data, format, CancellationToken.None); - -// Invoke the workflow. -var invoker = services.GetService(); -await invoker.InvokeAsync(workflowDefinition); -``` - ## Long Running Workflows Elsa has native support for long-running workflows. As soon as a workflow is halted because of some blocking activity, the workflow is persisted.