Skip to content

Releases: centrifugal/centrifugo

v6.2.2

29 Jun 07:35
e263ceb
Compare
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

  • Option to use try lock for postgresql consumer, #988. New option for PG consumer use_try_lock (boolean, default false) to use pg_try_advisory_xact_lock instead of pg_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

22 May 16:58
0beaeb7
Compare
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

  • Minor tweaks in web UI: method select with quick search in Actions tab.

Miscellaneous

v6.2.0

28 Apr 05:45
00dd6c1
Compare
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 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:
  • Skip unordered publications at the Broker level based on version and version_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 like publish, broadcast, or send_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

06 Mar 18:26
29faff1
Compare
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

  • 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 or rediss://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 Redis address, making Centrifugo more cloud-friendly.
  • Added support for the rediss scheme (enabling TLS). Previously, this was possible via settings like engine.redis.tls.enabled=true or tls_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 latest centrifuge-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

v6.0.3

19 Feb 17:09
8547567
Compare
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, 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 before Flush, thereby inheriting Centrifugo client protocol message batching capabilities. This may result into fewer syscalls => better CPU usage.
    • uni_http_stream – implements the same improvements as uni_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 for uni_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 and sse 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.
  • Improved documentation:

Miscellaneous

v6.0.2

03 Feb 05:40
49bfcb9
Compare
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, 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

v6.0.1

21 Jan 08:55
9abee5b
Compare
Choose a tag to compare

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

v6.0.0 released 💻✨🔮✨💻

16 Jan 08:28
cf07a3e
Compare
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, 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:

See also Centrifugo v6 migration guide

Miscellaneous

v5.4.9

23 Dec 09:38
0bc378a
Compare
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, 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

  • 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

08 Dec 09:27
6e046e5
Compare
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, 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.