About this project

Watermill is a Go library designed for building event-driven applications efficiently. It abstracts message stream communication behind a simple handler interface, making it as easy to use as HTTP routers. The library supports event sourcing, RPC over messages, sagas, CQRS, and other event-driven patterns. Key features include: - A simple handler interface: func(*Message) ([]*Message, error) - Universal support for event-driven architecture, messaging, stream processing, and CQRS - Flexible middleware and plugin system - Resilient design with proven technologies and stress testing Supported Pub/Sub implementations include: - AMQP (RabbitMQ) - AWS SNS/SQS - Bolt - Firestore - Google Cloud Pub/Sub - HTTP - io.Reader/io.Writer - Kafka - NATS Jetstream - Redis Streams - SQL (MySQL/PostgreSQL) - SQLite (Beta) Watermill v1.0.0 is production-ready with a stable public API. All Pub/Sub implementations must pass a comprehensive test suite, including stress tests (20x parallel runs) and race condition detection. The library includes benchmarks comparing message throughput across different Pub/Sub implementations. The project provides extensive examples covering basic usage, pub/sub integration, real-world scenarios (exactly-once delivery, webhooks, database synchronization, persistent event logs, transactional events, server-sent events), and complete projects. An online hands-on training course covers industry-standard concepts like at-least-once delivery, asynchronous read models, events & commands, observability, message ordering, and sagas.