Skip to content

Releases: centrifugal/centrifugo

v6.6.0 🎄

29 Dec 17:35
70fabf4

Choose a tag to compare

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 appVersion and 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 the appVersion). 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

14 Dec 08:01
1620d5e

Choose a tag to compare

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

Fixes

  • This release addresses #1083 by introducing publication_data_format mentioned above.

Miscellaneous

  • This release is built with Go 1.25.5.
  • Updated dependencies.
  • See also the corresponding Centrifugo PRO release.

v6.5.1

13 Nov 09:33
6f5b67d

Choose a tag to compare

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_handshake option 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_push option 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 insecure mode for server side subs and take allow_user_limited_channels option 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

09 Nov 14:25
46ae012

Choose a tag to compare

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 tags and idempotency_key in admin Web UI publish and broadcast API 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 MapStringString configuration type now may be set over the format similar to StringKeyValues type 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/init endpoint 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 up and 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

14 Oct 18:48
48db412

Choose a tag to compare

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:
  • Check out the new visuals on https://centrifugal.dev 🖲 🐱

Fixes

  • Fix deadlock when using single connection feature #1050. See more details in #1044.

Miscellaneous

  • This release is built with Go 1.25.3.
  • Updated dependencies.
  • See also the corresponding Centrifugo PRO release.

v6.3.1

11 Sep 19:23
a7bb70b

Choose a tag to compare

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

05 Sep 05:48
95a6182

Choose a tag to compare

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_interval and client.pong_timeout #1033. This applies to both bidirectional and unidirectional WebSocket transports.
  • Support for cf_connect in 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 MapStringString config 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 none log level by using the proper zerolog level #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

11 Aug 03:54
3f75697

Choose a tag to compare

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

25 Jul 12:29
70d8349

Choose a tag to compare

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_publications label (yes|no) to centrifugo_client_recover counter metric to distinguish between recoveries that included recovered publications and those which did not (but still succeeded).
  • Boolean option prometheus.recovered_publications_histogram to 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 exp in JWT tokens, max ttl 1 year for connection and subscription token refreshed centrifugal/centrifuge#495. The bug in setting exp in JWT could result into Centrifugo timer logic failure (because Centrifuge had Duration type 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

11 Jul 13:27
713c0a7

Choose a tag to compare

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 with 500ms by default and avoids using the SetOffsets API of the franz-go library. Instead of a buffered channel, we now use a queue (limited by size, configured over partition_queue_max_size). The partition_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-existing partition_buffer_size option, which may be an inconvenience. See updated docs.
  • Kafka consumer: switch to ReadCommitted mode for consuming by default, adding a boolean fetch_read_uncommitted option 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 subscribe API 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.