Skip to main content
Open Source · MIT License

Ship reliable microservices
with NATS JetStream

Production-grade NestJS transport for NATS JetStream. Events, broadcast, ordered delivery, and RPC — all in one package.

$ npm i @horizon-republic/nestjs-jetstream

Four patterns, one transport

Every messaging pattern you need for microservices — built on NATS JetStream with NestJS decorators you already know.

RPC

Request / Reply

Core NATS for lowest latency, or JetStream for persisted commands. Both modes, one API.

Events

Workqueue Delivery

At-least-once delivery with automatic retry. Acked on success, redelivered on failure.

Broadcast

Fan-out to All

Every subscribing service receives every message. Isolated durable consumers per service.

Ordered

Sequential Replay

Strict ordering for event sourcing and projections. Six deliver policies for any scenario.

Everything you need, nothing you don't

Production-ready features included. No extra packages, no boilerplate.

Self-Healing Consumers

Exponential backoff reconnection. Your consumers recover from any transient failure automatically.

Dead Letter Queue

Failed messages are captured with full context. Debug with payload, headers, and error details.

Message Scheduling

Delayed delivery powered by NATS 2.12. Schedule messages for future processing without external tools.

Health Checks

Built-in Terminus-free health indicator. Connection + stream + consumer health in one call.

Lifecycle Hooks

React to connect, disconnect, reconnect, and dead-letter events with typed hook handlers.

Zero Config Defaults

Production-ready stream and consumer configs out of the box. Override only what you need.

Five minutes to your first event

Familiar NestJS patterns. If you've used @nestjs/microservices, you already know this.

publisher.service.ts
import { JetstreamRecordBuilder }
  from '@horizon-republic/nestjs-jetstream';

// Publish an event
const record = new JetstreamRecordBuilder({
  orderId: '42',
  status: 'created',
}).build();

await lastValueFrom(
  this.client.emit('order.created', record)
);
handler.controller.ts
import { EventPattern, Payload }
  from '@nestjs/microservices';

@EventPattern('order.created')
handleOrderCreated(
  @Payload() data: OrderCreatedDto
) {
  // At-least-once delivery
  // Auto-ack on success, redelivery on error
  return this.ordersService.process(data);
}

Ready to build?

Get started in minutes. Production-ready defaults, zero boilerplate.