threedotslabs/watermill

Building event-driven applications the easy way in Go.

View on GitHub ↗Jump to charts ↓

Summary Information

Updated 34 minutes ago
Added to GitGenius on September 6th, 2026
Created on November 8th, 2018
Open Issues & Pull Requests: 80 (+0)
GitHub issues: Enabled
Number of forks: 505
Total Stargazers: 9,881 (+0)
Total Subscribers: 92 (+0)

Repository Insights (GitGenius)

Median issue/PR response: 50.7 days
Mean response time: 237.3 days
90th percentile: 715.3 days
Tracked items: 107

How this project is maintained

Around half of the issues opened in the past year never receive a reply. 85% of open issues come from outside the core team, so the backlog reflects real-world use rather than internal planning. Only 5% of issues opened in the past year have been closed. Three people close 86% of everything that gets resolved.

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 46
New in 7 days: 0
Closed in 7 days: 0
Avg open age: 1,049 days
Stale 30+ days: 45
Stale 90+ days: 39

Recent activity

Opened in 7 days: 0
Closed in 7 days: 0
Comments in 7 days: 0
Events in 7 days: 0

Top labels

  • enhancement (37)
  • help wanted (21)
  • bug (20)
  • New Pub/Sub (12)
  • good first issue (9)
  • M (7)
  • L (4)
  • S (4)

Most active issues this week

No issue events were indexed in the last 7 days.

Detailed Description

Watermill is a Go library for building event-driven applications using message streams.

The library addresses the complexity of distributed systems by providing a unified abstraction over message brokers and transports. Rather than requiring developers to master the intricacies of each messaging system, Watermill offers a consistent API that works with conventional pub/sub implementations like Kafka and RabbitMQ, but also supports HTTP and PostgreSQL as transport layers. This flexibility lets teams choose the right tool for their use case without rewriting application logic. The library handles concerns like at-least-once delivery guarantees, message ordering, and asynchronous processing patterns through its router and middleware system.

Watermill suits teams building event-sourced systems, CQRS architectures, sagas, or stream-processing applications in Go. It is particularly valuable when you need to support multiple messaging transports or want to avoid tight coupling to a specific broker. The library emphasizes ease of understanding and provides extensive examples covering basic usage, real-world patterns like webhook handling and database synchronization, and complete reference projects. Developers should expect to learn event-driven concepts alongside the library itself, as the project includes training materials on industry-standard patterns.

The project maintains active development with regular updates to its core functionality and examples. The codebase includes comprehensive stress tests and benchmarks demonstrating performance characteristics. Documentation is extensive, spanning quickstart guides, detailed API references, and real-world example implementations. The project demonstrates responsiveness to practical use cases through its growing collection of example applications and patterns.