Hello World - Console

In this quickstart, we will take a look at a minimum console application that executes a workflow.

We will:

  • Programmatically define a workflow definition that displays the text "Hello World" to the console using Elsa's Workflow Builder API.
  • Run the workflow.

The Project

Create a new .NET Core Console project called ElsaQuickstarts.ConsoleApp.HelloWorld:

dotnet new console -n "ElsaQuickstarts.ConsoleApp.HelloWorld"

CD into the created project folder:

cd ElsaQuickstarts.ConsoleApp.HelloWorld

Add the following packages:

dotnet add package Elsa
dotnet add package Elsa.Activities.Console

The Workflow

Create a new file called HelloWorld.cs and add the following code:

using Elsa.Activities.Console;
using Elsa.Builders;

namespace ElsaQuickstarts.ConsoleApp.HelloWorld
    /// <summary>
    /// A basic workflow with just one WriteLine activity.
    /// </summary>
    public class HelloWorld : IWorkflow
        public void Build(IWorkflowBuilder builder) => builder.WriteLine("Hello World!");

The above workflow has only one step (a.k.a. activity): WriteLine, which writes a line of text to the standard out (the console).

The Program

Open Program.cs and replace its contents with the following:

using System.Threading.Tasks;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;

namespace ElsaQuickstarts.ConsoleApp.HelloWorld
    class Program
        private static async Task Main()
            // Create a service container with Elsa services.
            var services = new ServiceCollection()
                .AddElsa(options => options
            // Get a workflow runner.
            var workflowRunner = services.GetRequiredService<IBuildsAndStartsWorkflow>();

            // Run the workflow.
            await workflowRunner.BuildAndStartWorkflowAsync<HelloWorld>();


Run the program and observe the following output:

Hello world!

Success! You have successfully created and executed an Elsa workflow.

Next Steps

Now that you've seen how to write and execute a workflow, you might want to learn more about the following: