Saga orchestration for Spring Boot.Compensate failures automatically, without the infrastructure overhead.
Sagaweaw automatically compensates what it can't complete — running on the PostgreSQL you already have. No new cluster. No new concepts.
A transaction started,
got halfway, and stopped.
Now you have inconsistent state across services. The payment was charged, the inventory is locked, but there's no order to show for it.
Someone writes a recovery script. Another person gets paged. A support ticket appears. And this happens again next week.
Write the business logic. Sagaweaw handles the rest.
- ✓ Compensation runs in reverse order, automatically
- ✓ Exponential backoff retry, per step
- ✓ Full audit trail in your own database
- ✓ OpenTelemetry spans — zero config
- ✓ One Spring Boot dependency — that's it
return saga
.step("reserve-inventory")
.invoke(ctx -> inventory.reserve(ctx.itemId()))
.compensate(ctx -> inventory.release(ctx.itemId()))
.step("charge-payment")
.invoke(ctx -> payment.charge(ctx.amount()))
.compensate(ctx -> payment.refund(ctx.chargeId()))
.retryPolicy(exponential(3, Duration.ofSeconds(5)))
.step("create-shipment")
.invoke(ctx -> shipping.schedule(ctx.orderId()))
.compensate(ctx -> shipping.cancel(ctx.orderId()))
.build();Automatic compensation
If any step fails, Sagaweaw executes compensations in reverse order — automatically. No data is left behind.
- ✓ Exponential, fixed, or infinite retry per step
- ✓ Durable state — survives crashes and restarts
- ✓ Pivot point — configurable point of no return
- ✓ Dead letters for surgical manual intervention
See every saga, in real time
The embedded dashboard is your debug lens — live feed, step timeline, retry queue, dead letters, business ID search, and stuck saga detection. All on the port you choose.

Everything you need for distributed transactions
Built on solid architectural decisions and battle-tested patterns. Free, forever.
Automatic Compensation
When a step fails, Sagaweaw runs compensations in reverse order automatically. Your data stays consistent — always.
OpenTelemetry — Zero Config
Add OTel to your classpath and saga spans appear automatically in Jaeger, Grafana Tempo, Datadog, or Honeycomb. No wiring needed.
Real-time Debug Dashboard
Step timeline, context snapshots, stuck saga detection, business ID search, and batch dead letter reprocessing — on port 8484.
Webhook Alerts
One property to get notified on dead letters, stuck sagas, and failure rate spikes. Works with Slack, Discord, Teams, and PagerDuty.
Smart Retry
Configurable retry per step: exponential, fixed, or infinite. Each step keeps its own retry policy and backoff strategy.
Centralized Orchestration
Full control of the flow from a single coordinator. Every saga knows exactly where it is and what comes next.
Configurable Retention
Archive completed sagas after N days. Keep failed sagas longer — your team will want to investigate. Full audit trail preserved.
Your Database, Your Rules
Runs on PostgreSQL, MySQL, or H2. State is durably persisted — no Redis, no new cluster, no external service.
Multi-instance Ready
Scale horizontally — N instances sharing the same database, no extra coordination. Each saga records which instance created it.
Plays well with what you already use
No new tools to learn. Metrics in Prometheus, traces in your OTel backend, logs with MDC — the database you already have. Zero new infrastructure.
Add spring-boot-starter-opentelemetry and saga spans appear automatically in your OTel backend. See docs →
Up and running in 5 minutes
One dependency. No new cluster. No boilerplate.
Add the dependency
sagaweaw-spring-boot-starterWrite your saga
@Saga + SagaDefinition<T>Start it
sagaManager.start(context)Ready to stop writing recovery scripts?
Free forever. No lock-in. No external server. Just add the dependency.