Releases: centrifugal/centrifugo
v6.6.0 🎄
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
This release has a potential breaking change in the Redis Cluster case where users try forming a Centrifugo cluster consisting of nodes with different Centrifugo versions (older than 6.6.0 and 6.6.0+). See details in the Fixes section below. We believe this scenario is very rare, and the risk of causing issues for anyone is minimal. The benefit is supporting ElastiCache Serverless Redis out of the box without extra options.
Improvements
- We are actively working on a new Centrifugo Helm chart v13 major release. See centrifugal/helm-charts#136. The new chart will support new Kubernetes functionality, will have better docs, and more examples and tutorials for Google and AWS managed Kubernetes services. The plan is to release one more version of the v12 chart with Centrifugo v6.6.0 as the base
appVersionand then move on to the v13 chart. Note that users of the v12 Helm chart will be able to use newer Centrifugo versions without any issues, as chart versioning is independent of Centrifugo versioning (done through theappVersion). However, new updates, fixes for chart functionality, and documentation will be released only for the v13 chart. - Performance optimizations for allocation efficiency:
- under a batched message writing scenario - buffer pools
- when publishing the message into channel - pool objects in broadcast method
- when sending data to WebSocket connection - avoid extra data copy
Fixes
- Fix slot issues when publishing with history to ElastiCache Serverless Redis. See the report in #1087 and the fix in centrifugal/centrifuge#541. Centrifugo was not previously tested with ElastiCache Serverless Redis. The finding that Serverless ElastiCache requires using hashtags in channels to follow the same slots as normal data structure keys goes beyond the Redis Cluster specification (where channels are not related to hash slots until using sharded PUB/SUB). The initial thought was to introduce a separate option to support this behavior, but after further consideration, Centrifugo will always use hashtags for channels in the Redis Cluster case. This means we have incompatible changes in the internal Redis protocol: nodes of different Centrifugo versions (<6.6.0 and 6.6.0+) will not work together in one cluster. This scenario is not common at all, and we have never encouraged such a setup. Moreover, when combined with the Redis Cluster condition (under 1% of setups), the chance of causing issues for someone is minimal. During rollout, message loss can happen, but only on the PUB/SUB layer, which is at-most-once anyway. History streams and recovery logic will work as usual and will prevent client state corruption.
Miscellaneous
- This release is built with Go 1.25.5.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
Happy New Year
We would like to thank the Centrifugo community for staying with us throughout 2025. Your feedback, bug reports, discussions, and contributions help drive the project forward and make Centrifugo better with every release.
In 2025, we released Centrifugo v6 and, throughout the year, built important functionality on top of that foundation. Major highlights are: new async consumers from popular queue systems, server-side publication filtering, support for RFC 8441 (WebSocket over HTTP/2). A new real-time SDK for C# was introduced. Centrifugo reached 7k+ real installations, usage of our SDKs grew significantly according to CDN stats (example), and we saw more and more projects choosing Centrifugo as their real-time messaging solution. For the first time, we saw a local Go meetup where 2 out of 4 talks were about projects using Centrifugo. This is a great sign of growing adoption. We continue to receive consistently positive feedback from developers, highlighting Centrifugo as a reliable, efficient, and easy-to-use real-time messaging server.
We are looking forward to getting even more things done in 2026 and continuing to improve Centrifugo and the real-time messaging ecosystem.
Happy New Year to everyone, and best wishes for a successful year ahead! 🎄 May the Centrifugal force be with you! 🖲
— Centrifugal Labs team
v6.5.2
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
- Add
use_existing_consumeroption for NATS async consumer by @b43 #1074. This allows using existing pre-created consumer and not rely on Centrifugo options to create one. - New
publication_data_formatchannel global and namespace option #1085. - Support for grpc
static_metadata(seegrpcobject), tweak httpstatic_headersbehaviour to match the doc #1076 - Better performance. Eliminate allocations under active batching scenario coming from Prometheus metrics. See centrifugal/centrifuge#530
- Better performance. Redis key build optimizations centrifugal/centrifuge#534
- New example. Centrifugo Delta Compression Example - demonstrates usage of Delta compression in channels. Just
docker compose upand open http://localhost:8080
Fixes
- This release addresses #1083 by introducing
publication_data_formatmentioned above.
Miscellaneous
- This release is built with Go 1.25.5.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
v6.5.1
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
- Unidirectional WebSocket transport now makes closing handshake to better comply with WebSocket RFC by default. Added
uni_websocket.disable_closing_handshakeoption to restore the behavior prior to Centrifugo v6.5.1 if needed. #1071 - Unidirectional WebSocket transport sends disconnect push messages by default. Added
uni_websocket.disable_disconnect_pushoption to disable this behavior if needed (for example, if you want to extract code/reason from WebSocket close frame and want to avoid ambiguity). #1071 - Extend client
insecuremode for server side subs and takeallow_user_limited_channelsoption into account when processing server subs. #1070
Miscellaneous
- This release is built with Go 1.25.4.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
v6.5.0
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.
v6.4.0
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
- 🔥 Support for server-side publication filtering by tags. This is a major addition to the Centrifugal ecosystem, enabling more powerful data organization and filtering capabilities to reduce bandwidth usage and processing overhead. Client SDKs (at this point only
centrifuge-js>= v5.5.0) can supply a filter when subscribing to a channel, and server will deliver only publications with tags matching the filter. See:- Channel publication filtering documentation chapter. Pay attention to the implementation notes – while powerful the feature should be used in proper situations, and it can not replace a proper channel design.
- Read the new post Publication filtering by tags - reducing bandwidth with server-side stream filtering in Centrifugal blog which uncovers design decisions behind this feature and demonstrates it in action.
- New supportive metric to see the count of publications dropped by tags filter
- Check out the new visuals on https://centrifugal.dev 🖲 🐱
Fixes
Miscellaneous
- This release is built with Go 1.25.3.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
v6.3.1
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
Fixes
- Fix v6.3.0 regression in bidirectional WebSocket frame ping/pong, see #1041
Miscellaneous
- This release is built with Go 1.24.7.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
v6.3.0
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
See the Fixes section for a breaking change in this release (flags vs env priority).
Improvements
- WebSocket frame ping-pong now inherits values from
client.ping_intervalandclient.pong_timeout#1033. This applies to both bidirectional and unidirectional WebSocket transports. - Support for
cf_connectin unidirectional WebSocket, similar to what Centrifugo provides for unidirectional SSE #1033. This allows connecting to the unidirectional WebSocket endpoint without requiring the client to send the first connect message to the server. See the updated docs. - Slightly faster unidirectional WebSocket connection establishment due to reduced allocations #1033.
- Extrapolate custom environment variables in
MapStringStringconfig fields #1034. This helps define secret map values in config via separate environment variables. See the updated docs for environment variables. - Centrifugo Helm chart is now published to GitHub Container Registry. See Centrifugo Packages. Contributed by @1995parham.
- Small improvement in the web UI to show milliseconds in request times sent from the Actions page.
Fixes
- Fix flags priority: flags must override environment variables #1029. This regression in Centrifugo v6 changes behavior, but it restores the documented behavior, matches previous versions, and is more natural for software. In general, this should not affect production setups, which rarely use command-line flags.
- Fix
nonelog level by using the properzerologlevel #1027. Also warns if the configured log level is incorrect. - Fix missing WebTransport in usage stats #1028.
Miscellaneous
- This release is built with Go 1.24.6.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
v6.2.5
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
- Improved admin web UI:
- Refreshed login screen with bubbles instead of lines 🫧
- Sleek cards with totals on Status screen
- Total subscriptions counter added in addition to Total nodes running and Total clients
- Better response visualizations on Actions page to improve UX when the same response is returned
- Monaco JSON editor instead of Ace — lighter size and slightly more visually appealing
- Updated to React v19 and Material UI v7
- Introduce source code typo check in CI #1004
Fixes
- Fix existing typos in source code by @yinheli #1004
- Fixes in WebTransport: make it work with debug middleware, suppress errors in normal closure case #1021
- Fix flaky Kafka test #1026
Miscellaneous
- This release is built with Go 1.24.6.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
v6.2.4
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
- Added
has_recovered_publicationslabel (yes|no) tocentrifugo_client_recovercounter metric to distinguish between recoveries that included recovered publications and those which did not (but still succeeded). - Boolean option
prometheus.recovered_publications_histogramto enable recovered publications histogram #1017. The flag enables a histogram to track the distribution of recovered publications number in successful recoveries. This allows to visualize and evaluate the number of publications successfully recovered. The insight can help to fine-tune history settings. See in docs
Fixes
- Fix memory leak in Kafka backpressure mechanism #1018. Fixes regression introduced in Centrifugo v6.2.3. Due to the fact Centrifugo looked at number of items in the queue instead of the number of records, memory usage could grow significantly since consuming from partitions was not paused when required.
- Fix and improve redis mode logging #1010 - previously Centrifugo was setting up Redis mode correctly, but logged it wrong. Now it was fixed, and Centrifugo includes more details about Redis mode logging to see the configured setup properties.
- Fix duration overflow due to large
expin JWT tokens, max ttl 1 year for connection and subscription token refreshed centrifugal/centrifuge#495. The bug in settingexpin JWT could result into Centrifugo timer logic failure (because Centrifuge hadDurationtype overflow, which is approximately 290 years). As a consequence - pings were never sent by Centrifugo. Added a reasonable protection from such cases.
Miscellaneous
- This release is built with Go 1.24.5.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
v6.2.3
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
- Use our internal fork of the Gorilla WebSocket library for unidirectional WebSocket transport, which provides slightly better Upgrade performance #1005. The fork was previously used only for bidirectional WebSocket transport.
- Kafka consumer: introduce a per-partition size-limited queue for backpressure and a configurable
fetch_max_wait#997. Centrifugo now polls Kafka with500msby default and avoids using theSetOffsetsAPI of thefranz-golibrary. Instead of a buffered channel, we now use a queue (limited by size, configured overpartition_queue_max_size). Thepartition_buffer_size(was not documented) option was removed since the internal consumer implementation changed, but we do not expect this to be a problem for users based on the added benchmark and improved throughput in the new implementation. However, it may result in a warning in logs about using the non-existingpartition_buffer_sizeoption, which may be an inconvenience. See updated docs. - Kafka consumer: switch to ReadCommitted mode for consuming by default, adding a boolean
fetch_read_uncommittedoption to consume with ReadUncommitted mode #1001. See updated docs.
Fixes
- Fix Kubernetes environment variable regex by @yinheli #1003 – in some cases, this allows avoiding extra warnings in logs about variables with the
CENTRIFUGO_prefix automatically injected by the K8S runtime. - Fix panic when using the server
subscribeAPI during Redis unavailability #centrifugal/centrifuge#491
Miscellaneous
- This release is built with Go 1.24.5.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.