Skip to content

Releases: centrifugal/centrifugo

v6.2.4

25 Jul 12:29
70d8349
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 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
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

  • 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.

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