Orchestrate complex business processes.

Axoniq Flows is built natively into the Axoniq Framework as the modern, simplified replacement for legacy Sagas. Imperative, top-down code for orchestrating multi-step business processes, without standing up new infrastructure.

app.axoniq.io
Axoniq Platform·Workflows
acme-store
StatusRunning
Run IDwrun_02456KXR
Duration0ms
0300ms600ms900ms1200ms
workflow()
fetchOrder()
validate()
processPayment()
waiting
processPayment()
saveOrder()
sendEmail()

From open source to enterprise, Axoniq powers mission-critical software across global organizations.

From open source to enterprise, Axoniq powers mission-critical software across global organizations.

From open source to enterprise, Axoniq powers mission-critical software across global organizations.

THE CHALLENGE OF TRADITIONAL EVENT SOURCING FRAMEWORKS

Most workflow engines run the workflow and discard the trail. Axoniq makes the trail your system of record.

Multi-step business processes — order fulfillment, claims approvals, customer onboarding — are the backbone of every enterprise application. They're also the most fragile thing your team owns.

The Saga pattern was the original answer. It scattered orchestration logic across event handlers, made retries and compensating actions a nightmare, and left every senior engineer with at least one war story.

Then came other standalone workflow tools, but with a real cost: a new infrastructure cluster to operate, a new database to monitor, opaque execution logs that expire on retention, and a runbook your platform team has to learn.

Most teams are now choosing between two bad outcomes: keep the saga complexity, or take on a new infrastructure dependency. Axoniq Flows is the third option.

What Axoniq Flows is

What you get when orchestration lives inside the framework.

Axoniq Flows is a lightweight module of the Axoniq Framework. It runs inside your existing application and uses the event store you already have.

Replaces complex Sagas with simple, top-down code

Instead of building scattered event handlers and brittle saga logic, developers use an imperative programming model to write workflows as readable, top-down code. One central orchestration layer coordinates commands, queries, parallel tasks, and external service calls from one easy-to-understand place.

src/order/
Saga
OrderSaga.java
StockReservedHandler.java
PaymentRejectedHandler.kt
PaymentConfirmedHandler.java
PaymentTimedOutHandler.java
OrderCanceledHandler.java
ShipmentDispatchedHandler.java
ShipmentFailedHandler.java
TSShipmentTracker.ts
9 handlers · 9 state fields
OrderWorkflow.java
Workflow
1
@Workflow(startOnEvent = "OrderPlaced",
2
idProperty = "orderId")
3
public void execute(
4
SimpleWorkflowContext ctx) {
5
ctx.awaitExecute("reserveStock",
6
inventory::reserve);
7
ctx.awaitExecute("initiatePayment",
8
payment::initiate,
9
RetryPolicy.maxRetries());
10
ctx.awaitEvent("awaitConfirmation",
11
PaymentConfirmed.class,
12
Duration.ofMinutes());
13
ctx.awaitExecute("shipOrder",
14
shipping::ship);
15
}
1 method · 0 state fields · durable by default
Order Fulfillment
Running
OrderFulfillment.process·7 steps · 2 retries
Validate payment
running
validate(order)
Durable execution · resumes from last completed step0.0s

Handles the hard parts
of distributed systems

Orchestration primitives

Pause for days or years, wait for approvals, fan-out/fan-in, handle timeouts.

Automatic crash recovery

Workflows resume from the exact point of interruption. No restarts from zero

No manual error handling

Retries, compensating actions, and failure logic live in the engine.

Generates a business-meaningful audit trail

Other workflow tools emit opaque, temporary technical logs (workflow.timer.fired, step.started) that are eventually deleted. Axoniq Flows record every single step directly into your event store as a business-meaningful domain event (PaymentStepStarted, OrderConfirmed). This integrates the workflow directly into your domain model and gives you a forensic-grade, permanent history of the process.

Event storeEvery workflow step is logged into Axon Server, an immutable event store.
847,213 events
Order·100·OrderFulfillment
Reserve14:37:0014:37:01
Charge14:37:0214:37:04
Await14:37:0514:37:09
Ship14:37:1014:37:12
Loan·150·LoanApproval
CheckCredit14:37:1114:37:12
AwaitDocs14:37:1314:37:16
UnderwriterReview14:37:1714:37:28
Disburse14:37:2914:37:32
Refund·200·RefundProcessing
Validate14:37:2214:37:23
Approve14:37:2414:37:28
Issue14:37:2914:37:38
Notify14:37:3914:37:43
User·250·UserOnboarding
CreateAccount14:37:3314:37:34
VerifyEmail14:37:3514:37:40
AwaitProfile14:37:4114:37:48
Activate14:37:4914:37:54
Report·300·ReportGeneration
Aggregate14:37:4414:37:45
Compute14:37:4614:37:48
Render14:37:4914:37:54
Email14:37:5514:38:01
Doc·350·DocumentReview
Parse14:37:5514:37:56
AwaitApproval14:37:5714:38:00
Stamp14:38:0114:38:13
Archive14:38:1414:38:16
Sub·400·SubscriptionRenewal
Charge14:38:0614:38:07
AwaitConfirm14:38:0814:38:12
Provision14:38:1314:38:23
Notify14:38:2414:38:27
Payment·359·PaymentRetry
Verify14:38:1714:38:18
Authorize14:38:1914:38:24
Settle14:38:2514:38:33
Confirm14:38:3414:38:38
Order·409·OrderFulfillment
Reserve14:38:2814:38:29
Charge14:38:3014:38:32
Await14:38:3314:38:39
Ship14:38:4014:38:45
Loan·459·LoanApproval
CheckCredit14:38:3914:38:40
AwaitDocs14:38:4114:38:44
UnderwriterReview14:38:4514:38:49
Disburse14:38:5014:38:56
Refund·509·RefundProcessing
Validate14:38:5014:38:51
Approve14:38:5214:38:56
Issue14:38:5714:39:08
Notify14:39:0914:39:11
User·559·UserOnboarding
CreateAccount14:39:0114:39:02
VerifyEmail14:39:0314:39:08
AwaitProfile14:39:0914:39:18
Activate14:39:1914:39:22
Report·609·ReportGeneration
Aggregate14:39:1214:39:13
Compute14:39:1414:39:16
Render14:39:1714:39:24
Email14:39:2514:39:29
Doc·659·DocumentReview
Parse14:39:2314:39:24
AwaitApproval14:39:2514:39:28
Stamp14:39:2914:39:34
Archive14:39:3514:39:40
Sub·618·SubscriptionRenewal
Charge14:39:3414:39:35
AwaitConfirm14:39:3614:39:40
Provision14:39:4114:39:53
Notify14:39:5414:40:00
Payment·668·PaymentRetry
Verify14:39:4514:39:46
Authorize14:39:4714:39:52
Settle14:39:5314:40:03
Confirm14:40:0414:40:06
Order·718·OrderFulfillment
Reserve14:39:5614:39:57
Charge14:39:5814:40:00
Await14:40:0114:40:09
Ship14:40:1014:40:13
Loan·768·LoanApproval
CheckCredit14:40:0714:40:08
AwaitDocs14:40:0914:40:12
UnderwriterReview14:40:1314:40:19
Disburse14:40:2014:40:24
Refund·818·RefundProcessing
Validate14:40:1814:40:19
Approve14:40:2014:40:24
Issue14:40:2514:40:29
Notify14:40:3014:40:35
User·868·UserOnboarding
CreateAccount14:40:2914:40:30
VerifyEmail14:40:3114:40:36
AwaitProfile14:40:3714:40:48
Activate14:40:4914:40:55
Order·100·OrderFulfillment
Reserve14:37:0014:37:01
Charge14:37:0214:37:04
Await14:37:0514:37:09
Ship14:37:1014:37:12
Loan·150·LoanApproval
CheckCredit14:37:1114:37:12
AwaitDocs14:37:1314:37:16
UnderwriterReview14:37:1714:37:28
Disburse14:37:2914:37:32
Refund·200·RefundProcessing
Validate14:37:2214:37:23
Approve14:37:2414:37:28
Issue14:37:2914:37:38
Notify14:37:3914:37:43
User·250·UserOnboarding
CreateAccount14:37:3314:37:34
VerifyEmail14:37:3514:37:40
AwaitProfile14:37:4114:37:48
Activate14:37:4914:37:54
Report·300·ReportGeneration
Aggregate14:37:4414:37:45
Compute14:37:4614:37:48
Render14:37:4914:37:54
Email14:37:5514:38:01
Doc·350·DocumentReview
Parse14:37:5514:37:56
AwaitApproval14:37:5714:38:00
Stamp14:38:0114:38:13
Archive14:38:1414:38:16
Sub·400·SubscriptionRenewal
Charge14:38:0614:38:07
AwaitConfirm14:38:0814:38:12
Provision14:38:1314:38:23
Notify14:38:2414:38:27
Payment·359·PaymentRetry
Verify14:38:1714:38:18
Authorize14:38:1914:38:24
Settle14:38:2514:38:33
Confirm14:38:3414:38:38
Order·409·OrderFulfillment
Reserve14:38:2814:38:29
Charge14:38:3014:38:32
Await14:38:3314:38:39
Ship14:38:4014:38:45
Loan·459·LoanApproval
CheckCredit14:38:3914:38:40
AwaitDocs14:38:4114:38:44
UnderwriterReview14:38:4514:38:49
Disburse14:38:5014:38:56
Refund·509·RefundProcessing
Validate14:38:5014:38:51
Approve14:38:5214:38:56
Issue14:38:5714:39:08
Notify14:39:0914:39:11
User·559·UserOnboarding
CreateAccount14:39:0114:39:02
VerifyEmail14:39:0314:39:08
AwaitProfile14:39:0914:39:18
Activate14:39:1914:39:22
Report·609·ReportGeneration
Aggregate14:39:1214:39:13
Compute14:39:1414:39:16
Render14:39:1714:39:24
Email14:39:2514:39:29
Doc·659·DocumentReview
Parse14:39:2314:39:24
AwaitApproval14:39:2514:39:28
Stamp14:39:2914:39:34
Archive14:39:3514:39:40
Sub·618·SubscriptionRenewal
Charge14:39:3414:39:35
AwaitConfirm14:39:3614:39:40
Provision14:39:4114:39:53
Notify14:39:5414:40:00
Payment·668·PaymentRetry
Verify14:39:4514:39:46
Authorize14:39:4714:39:52
Settle14:39:5314:40:03
Confirm14:40:0414:40:06
Order·718·OrderFulfillment
Reserve14:39:5614:39:57
Charge14:39:5814:40:00
Await14:40:0114:40:09
Ship14:40:1014:40:13
Loan·768·LoanApproval
CheckCredit14:40:0714:40:08
AwaitDocs14:40:0914:40:12
UnderwriterReview14:40:1314:40:19
Disburse14:40:2014:40:24
Refund·818·RefundProcessing
Validate14:40:1814:40:19
Approve14:40:2014:40:24
Issue14:40:2514:40:29
Notify14:40:3014:40:35
User·868·UserOnboarding
CreateAccount14:40:2914:40:30
VerifyEmail14:40:3114:40:36
AwaitProfile14:40:3714:40:48
Activate14:40:4914:40:55

What makes Axoniq Flows different

Unlike other workflow tools, which operate as standalone orchestration engines, Axoniq Flows are built natively into the Axoniq Framework and operate with a specialized event store. Five differences matter when engineering teams compare them.

Zero new infrastructure

Others require you to deploy and manage heavy, dedicated server clusters and separate worker databases. Axoniq Flows are designed as a lightweight module that plugs natively into your existing Axon Server (or Postgres setup), meaning there is no new infrastructure to provision.

Execution architecture

With others, the state machine actually runs on their dedicated external servers, which then send requests back to your application. Axoniq runs the execution and state machine entirely within your client application, utilizing Axon Server purely to store and deliver the events.

Business-meaningful events vs. technical logs

Others track progress by emitting opaque, low-level technical logs (workflow.step.started or workflow.timer.fired). These logs are generally hidden, have retention limits, and are eventually deleted. Axoniq Flows record every execution step directly into the event store as a business-meaningful domain event (PaymentStepStarted, OrderStepConfirmed).

Permanent history for analytics and AI

Because Axoniq integrates workflow events directly into your permanent domain model, the data becomes fully accessible for business analytics and serves as a forensic-grade, permanent memory backbone for AI agents.

Join the Thousands of Developers

Already Building with Axon in Open Source

Join the Thousands of Developers

Already Building with Axon in Open Source

Join the Thousands of Developers

Already Building with Axon in Open Source

80% of Fortune 100 companies use Axon Framework.

POC and implementation support with our Solutions architects

Cluster sizing and multi-region HA planning with our Solutions architects

Migration support from Kafka, Postgres, or other solutions

Tap into our deep knowledge base on audit and compliance for regulated workloads