Steppr Flow
Workflow orchestration for Spring Boot

Resilient async workflows,
step by step.

Define multi-step workflows with annotations and run them over Kafka or RabbitMQ — with at-least-once delivery, retries, DLQ, signed security context and idempotency built in.

Java 21+ Spring Boot 3.5+ Kafka · RabbitMQ Apache-2.0
order-workflow
broker · at-least-once retry · backoff DLQ 1 2 @Step 3 done
● signed security context propagated across every step
What you get

Batteries-included orchestration, without the framework lock-in.

Each capability is opt-in where it matters and safe by default where it counts.

⬡

Annotation-driven

Declare a workflow and its steps with @Topic and @Step. The engine routes each step to the next over your broker.

⇄

Multi-broker

First-class Apache Kafka and RabbitMQ adapters behind one MessageBroker SPI. Swap brokers without touching workflow code.

↻

Retries & DLQ

Automatic retries with exponential backoff; terminal failures are routed to a dead-letter queue instead of being lost or looping forever.

🔐

Signed security context

The caller's identity flows across steps and is HMAC-signed and verified in transit — a forged or replayed context is rejected, never restored.

⏱

Step timeouts

Enforce a per-step deadline with @Timeout: a step past its budget is aborted on a bounded worker pool and retried.

⊡

Idempotency

Opt-in de-duplication behind a pluggable store — bounded in-memory by default, or distributed via Redis for cross-instance safety.

◈

Circuit breaker

Resilience4j circuit breaker guards broker calls, shedding load and recovering automatically when the broker misbehaves.

◎

Tracing & metrics

Micrometer tracing and workflow meters out of the box, with a Prometheus endpoint on the monitor for scraping.

▦

Optional dashboard

A monitoring module with MongoDB persistence, a REST API and a dashboard — with dual-mode (Basic or OIDC) authentication.

Install

Add one dependency, pick a broker.

Published on Maven Central under io.github.stepprflow. The monitor ships as a container image.

pom.xml — core + Kafka
<!-- set once; see the latest on Maven Central -->
<properties>
  <stepprflow.version>1.1.1</stepprflow.version>
</properties>

<!-- workflow engine -->
<dependency>
  <groupId>io.github.stepprflow</groupId>
  <artifactId>stepprflow-core</artifactId>
  <version>${stepprflow.version}</version>
</dependency>
<!-- Kafka adapter (or -spring-rabbitmq) -->
<dependency>
  <groupId>io.github.stepprflow</groupId>
  <artifactId>stepprflow-spring-kafka</artifactId>
  <version>${stepprflow.version}</version>
</dependency>
shell — run the monitor
# pull the monitoring dashboard + API
docker pull alimhin/stepprflow-monitor:latest

# or from GitHub Container Registry
docker pull ghcr.io/stepprflow/stepprflow-monitor:latest

# then define a workflow:
@Topic("order-workflow")
class OrderWorkflow implements StepprFlow {
  @Step(id = 1) void reserve(Order o) { ... }
  @Step(id = 2) void charge(Order o)  { ... }
}

New to it? Read the getting-started guide and the architecture decision records.

Delivery guarantees

Designed to lose nothing — and say so honestly.

Steppr Flow commits to at-least-once delivery: a step may run again on redelivery, so the framework gives you the tools to stay correct — and documents exactly where the edges are, in its ADRs.

no loss

Confirmed sends. A consumed message is acknowledged only after the next step is durably produced — a broker hiccup redelivers, it never silently drops.

no leak

Context is cleared. The security context is restored, used and cleared per step on pooled threads — it never leaks to the next execution.

no forgery

Signed in transit. The propagated context is HMAC-bound to its execution and verified before use; tampered or replayed contexts go straight to the DLQ.

effectively once

Opt-in idempotency. A processed step is recorded after success; a redelivery is skipped — best-effort, with the residual windows spelled out.

Modules

Take only what you need.

The core engine is broker-agnostic and has no persistence dependency. Everything else is an adapter or an add-on.

stepprflow-coreAnnotations, models, SPIs and the workflow engine — the only required module.
stepprflow-spring-kafkaApache Kafka broker implementation (the default adapter).
stepprflow-spring-rabbitmqRabbitMQ broker implementation.
stepprflow-idempotency-redisDistributed, Redis-backed idempotency store for cross-instance de-duplication.
stepprflow-monitoringMongoDB persistence, REST API and dashboard with dual-mode auth (opt-in).

Orchestrate with confidence.

Open source under Apache 2.0. Built for Spring Boot teams who need async workflows that survive broker failures, restarts and redeliveries.