Centrifugo – language-agnostic real-time messaging server in Go
GitHub - centrifugal/centrifugo: Scalable real-time messaging server in a language-agnostic way. Self-hosted alternative to Pubnub, Pusher, Ably. Set up once and forever.
Centrifugo is an open-source scalable real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, GRPC, WebTransport). Centrifugo has the concept of channel subscriptions – so it's a user-facing PUB/SUB server.
Centrifugo is language-agnostic and can be used to build chat apps, live comments, multiplayer games, real-time data visualizations, collaborative tools, etc. in combination with any backend. It is well suited for modern architectures and allows decoupling the business logic from the real-time transport layer.
Several official client SDKs for browser and mobile development wrap the bidirectional protocol. In addition, Centrifugo supports a unidirectional approach for simple use cases with no SDK dependency.
Documentation

Centrifugo official documentation site
Installation instructions
Getting started tutorial
Design overview and idiomatic usage
Build a WebSocket chat/messenger app with Centrifugo tutorial
Centrifugal blog
FAQ

Join community

Telegram
Discord
Twitter

Why Centrifugo
The core idea of Centrifugo is simple – it's a PUB/SUB server on top of modern real-time transports:

The hard part is to make this concept production-ready, efficient, flexible and available from different application environments. Centrifugo is a mature solution that already helped many projects with adding real-time features and scale towards many concurrent connections. Centrifugo provides a set of features not available in other open-source solutions in the area:

Efficient real-time transports: WebSocket, HTTP-streaming, Server-Sent Events (SSE), GRPC, WebTransport
Built-in scalability with Redis (or Redis Cluster, or Redis-compatible storage – ex. AWS Elasticache, KeyDB, DragonflyDB, etc), or Nats.
Simple HTTP and GRPC server API to communicate with Centrifugo from the app backend
Flexible connection authentication mechanisms: JWT and proxy-like
Channel subscription multiplexing over a single connection
Different types of subscriptions: client-side and server-side
Various channel permission strategies, channel namespace concept
Hot message history in channels, with automatic message recovery upon reconnect, cache recovery mode (deliver latest publication immediately upon subscription)
Delta compression in channels based on Fossil algorithm
Online channel presence information, with join/leave notifications
A way to send RPC calls to the backend over the real-time connection
Strict and effective client protocol wrapped by several official SDKs
JSON and binary Protobuf message transfer, with optimized serialization
Beautiful embedded admin web UI
And much more, visit Centrifugo documentation site

Backing
This repository is hosted by packagecloud.io.

Also thanks to JetBrains for supporting OSS (most of the code here written in Goland):

