finds.dev← search

// the find

ThreeDotsLabs/watermill

★ 9,750 · Go · MIT · updated May 2026

Building event-driven applications the easy way in Go.

Watermill is a Go message-passing library that wraps Kafka, RabbitMQ, NATS, Redis Streams, SQL, and others behind a single Publisher/Subscriber interface. It's aimed at Go teams who want to build event-driven services without writing their own broker adapters or retry/middleware scaffolding. The CQRS and saga components are genuinely useful additions on top of the core pub/sub abstraction.

The core abstraction is honest about what it is — a thin, consistent interface over very different brokers, not a magic unification layer. The middleware chain (retry, poison queue, throttle, metrics) composes cleanly and doesn't require touching handler code. The SQL pub/sub backend is underrated: teams already running Postgres can get reliable messaging without standing up a separate broker, and the transactional events example shows exactly when this matters. Stress tests run 20x in parallel with -race enabled — that's a real signal, not just CI theater.

Each Pub/Sub lives in a separate module with its own go.mod, which means version drift between adapters is your problem to manage — there's no lockstep release guarantee. The CQRS component forces a specific marshaling approach (protobuf or JSON) and the command/event processor configuration is verbose enough that you'll copy-paste from examples rather than understand it from the API. The SQL subscriber uses polling, not LISTEN/NOTIFY, so sub-second latency on Postgres requires tuning the poll interval and accepting unnecessary load. Documentation lives on watermill.io but the repo itself has no runnable integration tests you can spin up locally without Docker Compose, which slows onboarding on constrained environments.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →