Skip to content

Releases: centrifugal/centrifugo

v5.3.2

06 May 07:09
ee608cb
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

  • Fix unsubscribe during inflight subscribe in goroutine, see centrifugal/centrifuge#372. This is only relevant for those who use client_concurrency option.

Misc

  • All dependencies were updated to latest versions

v5.3.1

08 Apr 06:13
4e973be
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 WebSocket compression (io: read/write on closed pipe error) in JSON protocol case, see commit in centrifugal/protocol
  • Fix unmarshaling slice of objects in yaml config #786

Misc

  • Release is built with Go 1.22.2
  • All dependencies were updated to latest versions
  • If you use centrifuge-js and have dynamic subscribe/unsubscribe calls – take a look at centrifuge-js v5.1.0 – it contains changes for a proper processing of unsubscribe frames.

v5.3.0

16 Mar 07:58
57906c1
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

This release adds validation of proper history_ttl and history_meta_ttl configuration. Adding validation means possible errors on Centrifugo start if you have improperly configured history meta TTL expiration. See more details below.

Improvements

  • Better error message for invalid connection token with channel claim, see #776
  • Improvements in Grand Chat Tutorial source code: we now run Django migrations automatically, also long initial connection to PostgreSQL was fixed. So the example is now simpler and smoother to experiment with. If you still have not read our tutorial - just do it 🤓

Fixes

  • ❗Add validation on Centrifugo start for history_meta_ttl option to be greater than or equal to history_ttl option. Without this validation your history streams may eventually return error The ID specified in XADD is equal or smaller than the target stream top item during publish operation. See #768 for the details. This change won't affect you if you don't have history_ttl more than 30 days. Also, documentation about history_meta_ttl option was fixed since it contained different default values in different parts of the doc (the default changed in v5 together with history meta ttl refactoring, but the doc was not properly updated).
  • When using in-memory broker (default) history meta TTL was not properly inherited from channel namespace configuration – the global one was used instead. Fixed in centrifugal/centrifuge#366
  • Web UI: redirect to the login screen in case of unauthorized errors from server, this fixes a regression introduced by Centrifugo v5.2.1
  • Fix setting custom TTL in gensubtoken cli, see #769

Misc

  • Release is built with Go 1.22.1
  • All dependencies were updated to latest versions
  • Built-in integration with Heroku was removed #779
  • ❗If you use SockJS – pay attention to #765 – in Centrifugo v6 SockJS support will be removed

v5.2.2

22 Jan 22:14
139e308
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, SockJS, 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 contains quick fix for the issue introduced in v5.2.1

Fixes

v5.2.1

15 Jan 11:22
dbc0da4
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, SockJS, 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 OKP JWKs based on Ed25519, #756
  • New boolean option global_redis_presence_user_mapping to drastically improve presence stats performance for channels with large number of active subscribers when using Redis engine. See #750 for the motivation and implementation details. Also, see in docs
  • Admin web UI now uses /admin/api/settings endpoint on start to load admin UI configuration options. Admin web UI status page now does not call info API periodically when browser window is not visible (using visibility browser API). Also, some minor CSS style improvements were made.

Fixes

  • Fix nil pointer dereference upon channel regex check inside namespace, #760

Misc

  • Release is built using Go v1.21.6
  • Use grouped dependabot version updates by @j178, #762

v5.2.0

27 Dec 13:05
21aefa4
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, SockJS, 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

  • Launching the official tutorial showing the process of building complex real-time application with Centrifugo in detail. It's called Grand Tutorial, and we have a special section on the site for it. In the tutorial we build a WebSocket chat (messenger) app with Django, React and Centrifugo. We cover various aspects of building a production-grade app with Centrifugo and going beyond basics usually shown in instant messaging app tutorials. The idea to keep it in a separate section on the site instead of a blog is to maintain the tutorial actual and extend as time goes.
  • Introducing built-in asynchronous consumers. From PostgreSQL outbox table (to natively support transactional outbox) and from Kafka topics. Notably, the "Grand Tutorial" mentioned earlier demonstrates the practical use of both built-in consumers, including the Change Data Capture (CDC) approach for streaming data to Centrifugo using the Debezium connector for PostgreSQL with Kafka Connect.
  • Centrifugo now offers the capability to specify an idempotency_key when invoking publish or broadcast server API methods. This is a key Centrifugo will use to prevent duplicate sending of the same publication to a channel. This allows making effective retries when publishing to Centrifugo. Centrifugo maintains a cache of results associated with the used idempotency keys during publishing for a duration of 5 minutes. This cache is utilized to prevent the redundant publication of a message and its addition to the message history if it already exists in the cache. See updated docs for publish and broadcast server APIs.
  • Refactor MakeTLSConfig and support mTLS on server by @tie, see #739. This means mTLS is supported for all TLS configurations in Centrifugo – by using TLS options tls_client_ca or tls_client_ca_pem.
  • Added possibility to set parallel boolean flag in batch API – to make batch commands processing parallel on Centrifugo side, potentially reducing latency, especially when using the Redis engine, as there is no need to wait for N * RTT (Round Trip Time) for sequential command processing.

Misc

  • Release is built using Go v1.21.5
  • Improvements to the code base by introducing the use of the Service interface with a Run(ctx context.Context) error method. This approach is now recommended for the proper initiation and termination of various extension services within Centrifugo.

v5.1.2

25 Nov 12:34
5ed9015
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, SockJS, 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

  • Avoid keeping zero offsets in history meta hash keys in Redis – slightly reduces memory consumption of Redis, see centrifugal/centrifuge#332

Fixes

  • Centrifugo v5.1.1 fixed Lua redis lib command arguments must be strings or integers script error for new Centrifugo setups and new keys in Redis, but have not provided solution to existing keys. In centrifugal/centrifuge/#331 we fixed it.
  • Updating github.com/redis/rueidis to v1.0.22 fixes unaligned atomics to run Centrifugo with Redis engine on 32-bit systems, some details

Misc

v5.1.1

31 Oct 18:59
2cc5753
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, SockJS, 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 extract client connection user ID from HTTP header #730. See documentation for it.
  • Speed up channel config operations by using atomic.Value and reduce allocations upon channel namespace extraction by using channel options cache, #727
  • New metrics for the size of messages sent and received by Centrifugo real-time transport. Transport messages metrics also include frame_type resolution. Finally all the metrics exposed by Centrifugo are described in docs - see Server observability -> Exposed metrics

Fixes

  • Fix Lua redis lib command arguments must be strings or integers script error when calling Redis reversed history and the stream metadata key does not exist, #732
  • Fix Centrifugo logo image link in our Grafana dashboard - new revision uploaded

Misc

  • Dependencies updated (rueidis, quic-go, etc)
  • Improved logging for bidirectional emulation transports and unidirectional transports - avoid unnecessary error logs
  • If you represent a business and using Centrifugo - see also the release of Centrifugo PRO v5.1.1

v5.1.0

11 Oct 18:23
f0d3f79
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, SockJS, 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 EC keys in JWK sets and EC JWTs when using JWKS #720 by @shaunco, JWKS docs updated
  • Experimental GRPC proxy subscription streams #722 - this is like Websocketd but on network steroids 🔥. Streaming request semantics - both unidirectional and bidirectional – is now super-simple to achieve with Centrifugo and GRPC. See additional details about motivation, design, scalability concerns and basic examples in docs, and we provided standalone example for Go backend to experiment with
  • Transport error mode for server HTTP and GRPC APIs #690 - read more in docs
  • Support GRPC gzip compression #723. GRPC servers Centrifugo has now recognize gzip compression, proxy requests can optionally use compression for calls (see updated proxy docs).

Misc

  • Release is built with Go 1.21.3
  • Dependencies updated (crypto, otel, msgpack, etc)

New Contributors

Full Changelog: v5.0.4...v5.1.0

v5.0.4

28 Sep 04:33
ae2ed65
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, SockJS, 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 expire_at field of SubscribeResult from Subscribe Proxy #707. See description of subscribe result in docs
  • Option to skip client token signature verification #708, see in docs

Fixes

Misc

  • Release is built with Go 1.21.1
  • Dependencies updated (centrifuge, quic-go, grpc, and others)