finds.dev← search

// the find

centrifugal/centrifugo

★ 10,378 · Go · Apache-2.0 · updated Jun 2026

Scalable real-time messaging server in a language-agnostic way. Self-hosted alternative to Pubnub, Pusher, Ably, socket.io, Phoenix.PubSub, SignalR. Set up once and forever.

Centrifugo is a standalone real-time messaging server that handles WebSocket, SSE, HTTP-streaming, gRPC, and WebTransport connections. Your backend publishes to it over HTTP/gRPC; clients subscribe via official SDKs. It's for teams who want a Pusher/Ably replacement they can self-host without rewriting their backend in Go.

1. Genuinely wide transport support — WebSocket, SSE, HTTP-streaming, gRPC, and experimental WebTransport in one binary, with a unidirectional mode that needs no SDK at all. 2. Message recovery on reconnect is built in, not bolted on — channels can store a history ring and clients can resume from a sequence offset, which matters for anything beyond fire-and-forget. 3. Scaling story is solid: Redis (including Cluster, Valkey, DragonflyDB), Nats, and native PostgreSQL brokers are all first-class, plus a transactional outbox consumer so you can publish reliably from a Postgres write without a separate queue. 4. Delta compression via the Fossil algorithm is a small but real win for channels that push frequent incremental updates to large payloads.

1. The .NET SDK is explicitly marked WIP — if you're building a C# client, expect incomplete functionality and breaking changes. 2. Configuration surface is enormous: namespaces, channel permission strategies, proxy hooks, subscription streams, shared polls — onboarding is genuinely hard and the config schema is large enough that the project ships a CLI command just to generate docs for it. 3. No built-in persistence beyond the in-memory history ring; if you need durable event logs, you're stitching together the Kafka/PostgreSQL consumer yourself. 4. WebTransport is flagged experimental, which is fine, but the entire transport story depends on the browser ecosystem catching up — you're still shipping a WebSocket fallback path in practice.

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 →