finds.dev← search

// the find

dunglas/mercure

★ 5,260 · Go · AGPL-3.0 · updated Jun 2026

🪽 An open, easy, fast, reliable and battery-efficient solution for real-time communications

Mercure is a server-sent events hub built on Caddy, implementing an open protocol for pushing real-time updates from servers to browsers and other HTTP clients. It sits between your backend and your clients, handling reconnection, authorization, and fan-out so you don't have to. Best fit for API-driven apps that need live updates without the complexity of WebSockets.

SSE over HTTP/2 means you get multiplexing for free and it works through proxies and firewalls where WebSockets often don't. The authorization model uses JWTs with topic selectors, so you can publish private updates scoped to specific users without a separate auth layer. Built as a Caddy module, so you get TLS termination, HTTP/2, and production-grade server infrastructure instead of rolling your own. The protocol is an IETF Internet-Draft, not just a vendor API — client libraries exist across languages and aren't tied to this specific implementation.

AGPL license is a dealbreaker for many commercial products unless you pay for the managed offering, which is the obvious monetization play here. Bolt as the default transport is single-node only; clustering requires Redis or a custom transport, and the docs on this are thin compared to the happy-path setup. No built-in message persistence beyond what Bolt stores — if your hub restarts, clients reconnecting will only get updates from the last-stored event ID, and that window is configurable but limited. The Caddy dependency means your mental model needs to include Caddy's config format and module system, which adds friction if you're already running nginx or a non-Caddy stack.

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 →