# ThreeDotsLabs/watermill

Building event-driven applications the easy way in Go.

Repository: https://github.com/ThreeDotsLabs/watermill
Canonical: https://ross.abutalabs.com/products/watermill
Homepage: https://watermill.io
Language: Go
License: MIT
License Family: permissive
Topics: watermill, event-driven, event-sourcing, sagas, events, stream-processing, reactive, go, golang, rabbitmq, kafka, cqrs, nats
Last push: 2026-08-25T13:50:46+00:00

## Health v2 (maintenance only)
Score: 95/100 (v2, computed 2026-09-03T02:20:16.233290+00:00)
- activity 99, release rhythm 87, longevity 100
- inputs: {"age_days": 2855, "days_push": 8, "days_rel": 8, "gap_med": 53, "n_releases_24m": 12}
- flags: none
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 9864, forks 504 (observed 2026-08-28T04:10:37.542299+00:00)

## What it is
Watermill is a Go library for building event-driven and message-driven applications over a unified Pub/Sub API. It supports Kafka, RabbitMQ, NATS, PostgreSQL, Redis, and more, with routing, middleware, CQRS, sagas, and event sourcing built in.

## Use cases
- build event-driven applications in go
- publish and consume messages with kafka or rabbitmq
- implement cqrs and event sourcing in go
- process message streams asynchronously
- implement sagas and outbox pattern
- switch message brokers without changing app code

## When to choose
- you want a unified pub/sub abstraction over multiple brokers in Go
- you need event sourcing, CQRS, or sagas without a heavy framework
- you want middleware-based message routing similar to an HTTP router

## When to avoid
- you need a full message broker itself rather than a client library
- your project is not in Go
- you need exactly-once delivery guarantees out of the box

## Facets
- artifact type: library
- maturity: active
- function: message-queue, streaming, middleware, serialization, rpc, workflow-automation
- domain: backend, microservices, developer-tools, apis
- platform: go, cross-platform, cloud
- tags: event-driven, event-sourcing, cqrs, sagas, pub-sub, kafka, rabbitmq, nats, stream-processing, reactive, messaging, docker, kubernetes

## Member repositories
- ThreeDotsLabs/watermill (main) score 95

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:10:37.542299+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-29T17:20:52.526089+00:00, confidence not recorded.
  - readme: https://github.com/ThreeDotsLabs/watermill (fetched 2026-08-28T04:10:37.542299+00:00, sha 0b628112fa96)
  - homepage: https://watermill.io (fetched 2026-08-29T08:20:14.552158+00:00, sha 70799fbb65f0)
  - site_page: https://watermill.io/learn/getting-started (fetched 2026-08-29T08:20:14.574185+00:00, sha 9e66cf1be0a4)
- Data as of 2026-08-30T08:39:29.467469+00:00.
