Skip to content

A flexible workflow engine that helps to create and orchestrate business processes as domain code.

License

Notifications You must be signed in to change notification settings

lisegmbh/fluxflow

FluxFlow
FluxFlow

Maven Central License Build Status

A flexible workflow engine that helps to create and orchestrate business processes using domain code. The fundamental idea behind FluxFlow is to provide a "lightweight" and non-intrusive orchestrator around your domain logic, which will ultimately define your business process. Unlike some BPMN engines, the logic isn't spread across various (hard to test) artifacts like *.bpmn files but consolidated within your code.

In a nutshell

With FluxFlow, your Java/Kotlin class becomes a workflow step,
its properties hold the step's state (step data),
and its methods will define the available step actions and workflow transitions to be performed.

FluxFlow works best with Spring Boot, providing dependency injection and support for persistence. Nevertheless, the core functionality doesn't depend on Spring and might also be used standalone or with any another framework.

Quick links

Sample

import java.time.Instant

class CreateVacationRequestStep(
    var firstname: String, // Step data
    var lastname: String,  // Step data  
    var start: Instant,    // Step data
    var end: Instant       // Step data
) {
    
    // Step action that transitions into the next step
    fun submit(): CheckVacationRequestStep {
        return CheckVacationRequestStep(
            // Step data passed into the next step
            firstname,
            lastname,
            start,
            end
        )
    }
}

Features

  • Lightweight workflow engine, including
    • Workflow data: Information shared during the entire workflow
    • Steps: The building blocks of workflows
    • Step data: Information specific to a step that can be fetched and update
    • Step actions: Actions and transitions that can be invoked within a step
    • Jobs: Automatic execution of logic at a specified time (requires Quartz)
    • Validation: Validation powered by the standard Jakarta Bean Validation
  • Spring Boot compatible
  • Allows easy (unit) testing of your workflow logic
  • Extensible
  • Open Source

Getting started

Spring Boot dependencies

build.gradle.kts

dependencies {
  // Base dependencies
  implementation("de.lise.fluxflow:springboot:0.1.0")
  
  // Persistence options
  // a) In-Memory: no persistence between executions; can be used for testing or experiments 
  implementation("de.lise.fluxflow:springboot-in-memory-persistence:0.1.0")
  // b) MongoDB
  implementation("de.lise.fluxflow:mongo:0.1.0")
  
  // ... your other Spring Boot dependencies
  // e.g. implementation("org.springframework.boot:spring-boot-starter-web")
}

Contributors