Releases: centrifugal/centrifugo
v6.2.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
- Option to use try lock for postgresql consumer, #988. New option for PG consumer
use_try_lock
(boolean, defaultfalse
) to usepg_try_advisory_xact_lock
instead ofpg_advisory_xact_lock
for locking outbox table. This may help to reduce the number of long-running transactions on PG side.
Fixes
- Fix log entries about engine on start #992.
Miscellaneous
- This release is built with Go 1.24.4.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
v6.2.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
- Minor tweaks in web UI: method select with quick search in Actions tab.
Miscellaneous
- This release is built with Go 1.24.3.
- Updated dependencies.
- See also the corresponding Centrifugo PRO release.
v6.2.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
- Added five new built-in async consumers in #968. We believe having them in Centrifugo can drastically simplify introducing real-time messages in existing systems, built on modern cloud infrastructures. In addition to Kafka and PostgreSQL outbox table, Centrifugo now has consumers from the following popular messaging systems:
- Redis Stream, see integration docs
- Nats Jetstream, see integration docs
- Google Cloud PUB/SUB, see integration docs
- AWS SQS, see integration docs
- Azure Service Bus, see integration docs
- Currently, docs may lack some details but hopefully will be improved with time and feedback received. Please reach out in the community channels if you have any questions or suggestions. See also below a new blog post which demonstrates Redis Stream consumer usage.
- Skip unordered publications at the Broker level based on
version
andversion_epoch
fields #971. See updated publish and broadcast API docs. Note, this is mostly useful for a scenario, when each channel publication has the entire state instead of incremental updates – so skipping intermediate publications is safe and beneficial (especially given Centrifugo now has more built-in asynchronous consumers, and some of them can not provide ordered processing). - Added support for specifying the API command method in messages consumed by asynchronous consumers via a header, property, or attribute. When this is provided, the message payload must be a serialized API request object (as used in the server HTTP API). The exact mechanism is consumer-specific. For example, the Kafka consumer supports a
centrifugo-method
header, which can be set to values likepublish
,broadcast
, orsend_push_notification
(and so on), allowing the message payload to be a JSON API request. This approach improves decoding efficiency and may open a road for using binary encoded command requests in the future. - New configdoc CLI helper to display the full Centrifugo configuration as HTML or Markdown #959 — run
centrifugo configdoc
to see it in action. - Added support for tags in publications from the Nats broker #964.
- Handle optional
alg
field in JWKS #962, resolves #961. - Log whether FIPS mode is enabled during Centrifugo startup #975. See FIPS 140-3 Compliance document (part of Go 1.24 release).
- Performance: Removed allocation during WebSocket subprotocol selection upon Upgrade centrifugal/centrifuge#476.
- Performance: Slightly improving client queue processing by fetching messages in batch instead of one-by-one.
Fixes
- Fixed concurrent map iteration and write panic occurring during Redis issues centrifugal/centrifuge#473.
- Fixed unmarshalling of
duration
type from environment variable JSON #973. - Fixed an issue where
channel_replacements
were not applied when publishing to a channel via the Centrifugo API in NATS Raw Mode. See #977.
New tutorial in blog
To support the changes in this release, we published a new blog post: Building a real-time WebSocket leaderboard with Centrifugo and Redis.
In the tutorial, we create a real-time WebSocket leaderboard using Centrifugo, Redis, React and some Python. Showing the usage of Centrifugo built-in asynchronous consumer from Redis Stream and using version
/version_epoch
fields for dropping non-actual data on Centrifugo side. The post additionally showcases Centrifugo Fossil delta compression support and cache recovery mode.
Miscellaneous
- New animation on https://centrifugal.dev/ – with burstable bubbles upon click, your kids will love it 🙃
- Cleanup in
api.proto
— removed messages related to the legacy HTTP API. - This release is built with Go 1.24.2.
- See also the corresponding Centrifugo PRO release.
v6.1.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
- Centrifugo now automatically detects Redis Cluster and no longer requires explicit Cluster configuration. See #951 for more background on this decision. TLDR: Modern cloud providers usually provide
redis://host:port
orrediss://host:port
URLs to users, which may correspond to either standalone Redis or Redis Cluster under the hood. Things should now work out of the box for Centrifugo users when using this string as the Redisaddress
, making Centrifugo more cloud-friendly. - Added support for the
rediss
scheme (enabling TLS). Previously, this was possible via settings likeengine.redis.tls.enabled=true
ortls_enabled=true
in the Redis URL. However,rediss://
is part of Redis specification and very common. See #951. - Centrifugo now uses Go 1.24.x (specifically 1.24.1 for this release), inheriting performance optimizations introduced in the latest Go version. If you follow our community channels, you may have seen that we tried Centrifugo's PUB/SUB throughput benchmark with Go 1.24 and observed nice improvements. The previous maximum throughput on an Apple M1 Pro (2021) was 1.62 million msgs/sec, which increased to 1.74 million msgs/sec with Go 1.24—without any code changes on our side.
- Centrifugo now adds the
Access-Control-Max-Age: 300
header for HTTP-based transport preflight responses and emulation endpoint preflight responses. This prevents browsers from sending preflight OPTIONS request before every POST request in cross-origin setups. As a result, bidirectional emulation in cross-origin environments is now more efficient, reducing latency for client-to-server emulation requests (since it requires 1 RTT instead of 2 RTTs) and reducing the number of HTTP requests. Note that you need to use the latestcentrifuge-js
(>=5.3.4) to benefit from this change. - Added a DEB package for Ubuntu 24.04 Noble Numbat. Removed support for Ubuntu Bionic Beaver due to its EOL. Addresses #946.
Fixes
- Downgraded the
rueidis
dependency to v1.0.53 to avoid AUTH errors when RESP2 is forced. See redis/rueidis#788.
Miscellaneous
- Centrifugo v6 has been recently released. See details in the Centrifugo v6 release blog post.
- This release is built with Go 1.24.1.
- See also the corresponding Centrifugo PRO release.
v6.0.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, 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 Valkey - https://valkey.io/ - to the Redis engine integration tests suite. This is becoming important as AWS moves Elasticache to Valkey under the hood.
- Optimizations for unidirectional transports #941
uni_sse
– now supports writing many messages to the underlying HTTP connection buffer beforeFlush
, thereby inheriting Centrifugo client protocol message batching capabilities. This may result into fewer syscalls => better CPU usage.uni_http_stream
– implements the same improvements asuni_sse
.uni_websocket
– new boolean option uni_websocket.join_push_messages. Once enabled, it allows Centrifugo to join unidirectional Push messages into a single websocket frame. It is a separate option foruni_websocket
because, in this case, the client side must be prepared to decode the frame into separate messages. The messages follow the Centrifugal client protocol format (for JSON – new-line delimited). Essentially, this mirrors the format used by Centrifugo for the bidirectional websocket.- Reduced allocations during the unidirectional connect stage by eliminating the intermediary
ConnectRequest
object.
- Optimizations for bidirectional emulation:
- The
http_stream
andsse
transports used in bidirectional emulation now benefit from the same improvements regarding connection buffer writes as described for unidirectional transports. - The
/emulation
endpoint now uses faster JSON decoder for incoming requests.
- The
- Improved documentation:
- Enhanced readability in the configuration docs – available options are now clearly visible.
- More detailed unidirectional protocol description.
- More structured descriptions for real-time transports with better options visibility.
Miscellaneous
- Centrifugo v6 has been recently released. See the details in the Centrifugo v6 release blog post.
- This release is built with Go 1.23.6.
- See also the corresponding Centrifugo PRO release.
v6.0.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, 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 development build warning in logs #934. On start, if Centrifugo is built from source without proper version attached (which is done in CI upon release workflow), the warning is now shown in logs.
Fixes
- Fix not using redis prefix for Redis stream support check centrifugal/centrifuge#456. Addresses issue with Redis ACL, see #935.
- Only non-empty tokens will be redacted in info logs now, which allows to distinguish the case when token was not sent at all, centrifugal/centrifuge#455
- Redact header values upon writing info logs with connect command since they can contain sensitive values, centrifugal/centrifuge#458
Miscellaneous
- Centrifugo v6 has been recently released 💻✨🔮✨💻. See the details in the Centrifugo v6 release blog post.
- This release is built with Go 1.23.5.
- See also the corresponding Centrifugo PRO release.
v6.0.1
Centrifugo v6 was recently released 💻✨🔮✨💻. See the details in the Centrifugo v6 release blog post.
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 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 is a patch version bump to use latest Go version for builds to inherit security fixes. There are also internal fixes for better go tooling integration.
Miscellaneous
- This release is built with Go 1.23.5.
- See also the corresponding Centrifugo PRO release.
v6.0.0 released 💻✨🔮✨💻
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 a channel – so it's a user-facing PUB/SUB server.
What changed in Centrifugo v6
A new major release of Centrifugo – v6 – is now live! This release includes fundamental improvements in the configuration to simplify working with Centrifugo from both user and core development perspectives. It also adds several useful features and enhances observability for both Centrifugo OSS and Centrifugo PRO.
See the details in the Centrifugo v6 release blog post
Main highlight:
- Removing SockJS
- Removing Tarantool
- Configuration refactoring
- TLS config unification
- Proxy config improvements
- defaultconfig cli helper
- defaultenv cli helper
- Headers emulation
- Publication data mode for Kafka consumers
- Separate broker and presence manager
- Observability enhancements
- Actualized Grafana dashboard
- Many other smaller improvements
See also Centrifugo v6 migration guide
Miscellaneous
- This release is built with Go 1.23.4.
- See also the corresponding Centrifugo PRO release.
v5.4.9
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 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
- 🎄 Recap what happened with Centrifugo in 2024 in Notable Centrifugo v5 milestones in 2024 blog post
- Change Dockerfile to run
centrifugo
under non-root user #922 by @dmeremyanin - Update
alpine
base image from 3.18 to 3.21 in Centrifugo Dockerfile
Fixes
- Fix a deadlock during pub/sub and recovery sync when using Redis engine and server-side subscriptions, fixes #925
- Fix pause/resume race in Kafka async consumer #927 – the race could lead to a partition non being processed, while in normal condition the chance of the race is minimal, this was observed in a real system under CPU throttling conditions.
- Fix flaky
TestHandleRefreshWithoutProxyServerStart
test #920 by @makhov
Miscellaneous
- This release is built with Go 1.23.4.
- Check out the Centrifugo v6 roadmap. It outlines important changes planned for the next major release. We have already started working on v6 and are sharing updates in the issue and our community channels.
- See also the corresponding Centrifugo PRO release.
v5.4.8
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 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
- Kafka async consumer: fix potential loss of records under load #917
- Centrifugo now does not log tokens when writing INFO level log entry about client error caused by command processing.
Miscellaneous
- This release is built with Go 1.23.4.
- Check out the Centrifugo v6 roadmap. It outlines important changes planned for the next major release. We have already started working on v6 and are sharing updates in the issue and our community channels.
- See also the corresponding Centrifugo PRO release.