Open Source Saga Orchestration
Build Reliable Distributed
Workflows in TypeScript
MassTransit-style saga orchestration for Node.js. Type-safe DSL, multiple message brokers, built-in observability.
10+Transports
8+Stores
100%TypeScript
π·
Type-Safe DSL
Fluent builder API with full TypeScript inference. Catch errors at compile time, not runtime.
π
10+ Transports
RabbitMQ, Kafka, SQS, Azure Service Bus, GCP Pub/Sub, Redis, NATS, and in-memory for testing.
πΎ
8+ Stores
PostgreSQL, MySQL, MongoDB, DynamoDB, Redis, SQLite, SQL Server, and in-memory.
π
Observability
Built-in OpenTelemetry tracing, Prometheus metrics, and structured logging middleware.
π
Compensation
Handle failures gracefully with built-in compensation patterns and retry policiβ¦
Open Source Saga Orchestration
Build Reliable Distributed
Workflows in TypeScript
MassTransit-style saga orchestration for Node.js. Type-safe DSL, multiple message brokers, built-in observability.
10+Transports
8+Stores
100%TypeScript
π·
Type-Safe DSL
Fluent builder API with full TypeScript inference. Catch errors at compile time, not runtime.
π
10+ Transports
RabbitMQ, Kafka, SQS, Azure Service Bus, GCP Pub/Sub, Redis, NATS, and in-memory for testing.
πΎ
8+ Stores
PostgreSQL, MySQL, MongoDB, DynamoDB, Redis, SQLite, SQL Server, and in-memory.
π
Observability
Built-in OpenTelemetry tracing, Prometheus metrics, and structured logging middleware.
π
Compensation
Handle failures gracefully with built-in compensation patterns and retry policies.
β‘
Framework Agnostic
Works with Express, Fastify, NestJS, Next.js, Hono, or standalone Node.js.
Simple Setup
Up and Running
in Minutes
Install the packages, define your saga, wire up your transport and store. Thatβs it.
1Install packages
2Define saga with DSL
3Start the bus
import { createBus } from '@saga-bus/core';
import { RabbitMQTransport } from '@saga-bus/transport-rabbitmq';
import { PostgresSagaStore } from '@saga-bus/store-postgres';
import { orderSaga } from './sagas/order';
const bus = createBus({
transport: new RabbitMQTransport({
url: process.env.RABBITMQ_URL,
}),
store: new PostgresSagaStore({
connectionString: process.env.DATABASE_URL,
}),
sagas: [{ definition: orderSaga }],
});
await bus.start();
console.log('π Saga worker running');
Ready to Build Reliable Workflows?
Join developers building production-grade distributed systems with Saga Bus.