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, Server-Sent Events (SSE/EventSource), GRPC, WebTransport). Centrifugo has the concept of a channel – 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.
For details, go to the Centrifugo documentation site.
What's changed
Improvements
- Experimental support for WebSocket over HTTP/2 (RFC 8441), #1061. This makes it possible to open WebSocket "connections" inside a single HTTP/2 connection – using separate HTTP/2 streams for each WS connection. See WebSocket over HTTP/2 (RFC 8441) documentation page for details.
- Support for
tagsandidempotency_keyin admin Web UIpublishandbroadcastAPI request forms. - Introduce StringKeyValues configuration type #1063. A new configuration type allows flexible key-value handling via strings without some drawbacks of maps with Viper. See PR for details. This type is for now used only in Centrifugo PRO, but may be later used for some OSS configuration options as well.
- The
MapStringStringconfiguration type now may be set over the format similar toStringKeyValuestype to provide a workaround for Viper map handling limitations. See the documentation for this type for details: MapStringString. - Documentation was improved and is now more clear about non-primitive configuration types and how to set them in different sources.
- Refactor JWT verifier #1062. The JWT verification logic has been refactored for better maintainability and to avoid repetitive code.
- Adding
/connection/initendpoint which is running on external port when enabled. See docs for details. Generally may be used as a health endpoint for AWS ELB. Also, it may be useful to force browser to have an HTTP/2 connection established before opening WebSocket over HTTP/2 connections (Chrome prefers opening WebSocket over HTTP 1.1 if there is no HTTP/2 connection yet). - New HTMX + Centrifugo example. Run it with
docker compose upand then see in action at http://localhost:3000/chat.
Miscellaneous
- This release is built with Go 1.25.4.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.