NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #1306 by repository stars
Last release today
05 Oct 2026
Ships on a steady schedule
a new release about every 9 days
Some releases are documented
notes for 35 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
1153 releases · first in 2018
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
Fix deadlock during PUB/SUB sync in channels with recovery. See original report and pr with a fix.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix panic on concurrent subscribe to the same channel with recovery on (#207).
Nothing published for this version
Update sockjs-go dependency (contains fix for sockjs-go#100).
sockjs-go dependency (contains fix for sockjs-go#100).Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix bufio: buffer full error when unmarshalling large messages.
bufio: buffer full error when unmarshalling large messages.Fix unexpected end of JSON input errors in Javascript client with Centrifuge >= v0.18.0 when publishing formatted JSON (with new lines). See centrifug
unexpected end of JSON input errors in Javascript client with Centrifuge >= v0.18.0 when publishing formatted JSON (with new lines). See centrifugal/protocol#10. Pull request also removes one extra allocation (data copy) during JSON and Protobuf protocol Push message encoding. As the result JSON without new lines will be encoded even faster, Protobuf messages will be encoded faster regardless new lines in payloads. JSON encoding of payload with new lines will require additional allocation since we are stripping new lines now. The penalty is not critical though - see benchmarks in mentioned pull request.Nothing published for this version
Nothing published for this version
Redis: reload data pipeline immediately upon reconnect, this should help to avoid one additional error after reconnecting to Redis
Nothing published for this version
Nothing published for this version
Add history reverse field to client protocol and handle it.
reverse field to client protocol and handle it.This release has several backward incompatible changes. Changes should affect the small number of Centrifuge library users, and it should be possible…
This release has several backward incompatible changes. Changes should affect the small number of Centrifuge library users, and it should be possible to adapt only by slightly modifying server-side code. Follow release notes carefully.
RedisBrokerConfig.UseLists option to turn on previous behavior. Redis streams is a recommended way though, support for LIST data structure may be eventually removed.Transport.Encoding removed. It turns out that this option is not really useful for the Centrifuge library and can only cause confusion.Node.History behavior – Unrecoverable Position error now returned based on the wrong epoch only.Client.Connect now does not return an error – this allows Centrifuge to automatically send a proper Disconnect push towards the connection.WithClientWhitelist renamed to WithDisconnectClientWhitelist.centrifugal/protocol package. See centrifugal/protocol#8.Write and WriteMany methods.Config.UseSingleFlight option added. The option can help to reduce the load on Broker and Presence manager during massive reconnect and history synchronization scenarios.?format=protobuf in WebSocket connection URL.OnTransportWrite callback added to inject custom logic before actual write to a client connection.OnNodeInfoSend callback added to attach custom data to Node control frame.Client.Info method which returns a copy of the connection info (set by Credentials).Node.History now supports iteration in reversed order (#201).Client.Refresh and Node.Refresh methods added to prolong/expire connections (useful for unidirectional transports).Regarding client history API change. So previously when a client called history it received all publications in a stream by default. In Centrifuge v0.18.0 it will only receive current stream top position (offset and epoch) without any publications.
To mimic previous behavior you can use code like this:
node.OnConnect(func(client *centrifuge.Client) {
client.OnHistory(func(e centrifuge.HistoryEvent, cb centrifuge.HistoryCallback) {
if e.Filter.Limit == 0 {
result, err := node.History(e.Channel,
centrifuge.WithSince(e.Filter.Since),
centrifuge.WithLimit(centrifuge.NoLimit),
)
if err != nil {
cb(centrifuge.HistoryReply{}, err)
return
}
cb(centrifuge.HistoryReply{Result: &result}, nil)
return
}
cb(centrifuge.HistoryReply{}, nil)
})
})
I.e. explicitly handle zero limit and return all publications in response (using centrifuge.NoLimit). Then upgrade clients to use recent Centrifuge clients (will be released soon after Centrifuge v0.18.0) which allow setting limit explicitly and remove this custom logic eventually from the server code.
gorelease -base v0.17.1 -version v0.18.0
github.com/centrifugal/centrifuge
---------------------------------
Incompatible changes:
- (*Client).Connect: changed from func(ConnectRequest) error to func(ConnectRequest)
- CompatibilityFlags: removed
- EncodingType: removed
- EncodingTypeBinary: removed
- EncodingTypeJSON: removed
- NodeInfo: old is comparable, new is not
- RedisBrokerConfig.UseStreams: removed
- Transport.Write: changed from func(...[]byte) error to func([]byte) error
- Transport.WriteMany: added
- TransportInfo.Encoding, method set of Transport: removed
- TransportInfo.Encoding: removed
- UseSeqGen: removed
- WithClientWhitelist: removed
Compatible changes:
- (*Client).Info: added
- (*Client).Refresh: added
- (*Hub).NumSubscriptions: added
- (*Hub).UserConnections: added
- (*Node).OnNodeInfoSend: added
- (*Node).OnTransportWrite: added
- (*Node).Refresh: added
- Config.UseSingleFlight: added
- ConnectEvent.Channels: added
- DisconnectChannelLimit: added
- HistoryFilter.Reverse: added
- HistoryOptions.Reverse: added
- NodeInfo.Data: added
- NodeInfo.NumSubs: added
- NodeInfoSendHandler: added
- NodeInfoSendReply: added
- RedisBrokerConfig.UseLists: added
- RefreshOption: added
- RefreshOptions: added
- SubscribeOptions.RecoverSince: added
- TransportWriteEvent: added
- TransportWriteHandler: added
- WithDisconnectClient: added
- WithDisconnectClientWhitelist: added
- WithRecoverSince: added
- WithRefreshClient: added
- WithRefreshExpireAt: added
- WithRefreshExpired: added
- WithRefreshInfo: added
- WithReverse: added
v0.18.0 is a valid semantic version for this release.
Nothing published for this version
Possibility to bypass broker when publishing - see #198
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Remove unidirectional WebSocket support from builtin WebSocket transport. This was done to not force transport implementation details and to reduce co
WebsocketHandler, see example.node.Notify method. Notify allows sending an asynchronous notification to all other node (or to a single specific node). Unlike Survey it does not wait for any responseSince option of history call renamed to WithSince for consistency with other option namesgorelease -base v0.16.0 -version v0.17.0
github.com/centrifugal/centrifuge
---------------------------------
Incompatible changes:
- Since: removed
- WebsocketConfig.Unidirectional: removed
Compatible changes:
- (*Node).Notify: added
- (*Node).OnNotification: added
- NotificationEvent: added
- NotificationHandler: added
- WithSince: added
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
…check introduced in v0.16.0 (can lead to CSRF vulnerability in some situations):
This release is huge. The list of changes may look scary - but most changes should be pretty straightforward to adopt.
Highlights:
Transport interface a bit. The important thing is that it's now a responsibility of Transport.Write to properly encode data to JSON-streaming or Protobuf length-delimited formatSubscribe method of Node - to subscribe user to server-side channels cluster-wide - see example that demonstrates new APIBroker and PresenceManager entities. This changes how you should set up Redis to scale Nodes - see updated Redis example - it's now required to provide Redis Broker and Redis Presence Manager separatelyWithResubscribe option of unsubscribe removed - it never worked properly in client libraries and had no clearly defined semanticsBroker.PublishControl method signature changed - it now accepts shardKey string argument, this is not used at the moment but can be used later if we will need an order of control messagesPresenceManager.AddPresence signature changed - now presence expiration time is an option of PresenceManager itselfversion of ConnectResult is now omitted from JSON if emptyServerSide boolean flag set to true)That's what you have to do if you want to accept all connections without same-origin check introduced in v0.16.0 (can lead to CSRF vulnerability in some situations):
wsHandler := centrifuge.NewWebsocketHandler(node, centrifuge.WebsocketConfig{
CheckOrigin: func(r *http.Request) bool {
return true
},
})
sockjsHandler := centrifuge.NewSockjsHandler(node, centrifuge.SockjsConfig{
CheckOrigin: func(r *http.Request) bool {
return true
},
WebsocketCheckOrigin: func(r *http.Request) bool {
return true
},
})
All changes:
$ gorelease -base v0.15.0 -version v0.16.0
github.com/centrifugal/centrifuge
---------------------------------
Incompatible changes:
- (*Client).Subscribe: changed from func(string) error to func(string, ...SubscribeOption) error
- (*Client).Unsubscribe: changed from func(string, ...UnsubscribeOption) error to func(string) error
- (*Node).SetEngine: removed
- Broker.PublishControl: changed from func([]byte, string) error to func([]byte, string, string) error
- Config.ClientPresenceExpireInterval: removed
- Engine: removed
- LogLevelDebug: value changed from 1 to 2
- LogLevelError: value changed from 3 to 4
- LogLevelInfo: value changed from 2 to 3
- MemoryEngine: removed
- MemoryEngineConfig: removed
- NewMemoryEngine: removed
- NewRedisEngine: removed
- PresenceManager.AddPresence: changed from func(string, string, *ClientInfo, time.Duration) error to func(string, string, *ClientInfo) error
- RedisEngine: removed
- RedisEngineConfig: removed
- RedisShardConfig.ClusterAddrs: removed
- RedisShardConfig.Host: removed
- RedisShardConfig.Port: removed
- RedisShardConfig.Prefix: removed
- RedisShardConfig.PubSubNumWorkers: removed
- RedisShardConfig.SentinelAddrs: removed
- Transport.Write: changed from func([]byte) error to func(...[]byte) error
- TransportInfo.DisabledPushFlags: added
- TransportInfo.Unidirectional: added
- UnsubscribeOptions.Resubscribe: removed
- WithResubscribe: removed
Compatible changes:
- (*Client).Connect: added
- (*Node).Subscribe: added
- ConnectRequest: added
- DefaultRedisBrokerPrefix: added
- DefaultRedisConnectTimeout: added
- DefaultRedisPresenceManagerPrefix: added
- DefaultRedisPresenceTTL: added
- DefaultRedisReadTimeout: added
- DefaultRedisWriteTimeout: added
- LogLevelTrace: added
- MemoryBroker: added
- MemoryBrokerConfig: added
- MemoryPresenceManager: added
- MemoryPresenceManagerConfig: added
- NewMemoryBroker: added
- NewMemoryPresenceManager: added
- NewRedisBroker: added
- NewRedisPresenceManager: added
- NewRedisShard: added
- PushFlagConnect: added
- PushFlagDisconnect: added
- PushFlagJoin: added
- PushFlagLeave: added
- PushFlagMessage: added
- PushFlagPublication: added
- PushFlagSubscribe: added
- PushFlagUnsubscribe: added
- RedisBroker: added
- RedisBrokerConfig: added
- RedisPresenceManager: added
- RedisPresenceManagerConfig: added
- RedisShard: added
- RedisShardConfig.Address: added
- RedisShardConfig.ClusterAddresses: added
- RedisShardConfig.SentinelAddresses: added
- SubscribeOption: added
- SubscribeOptions.Data: added
- SubscribeRequest: added
- UnsubscribeEvent.ServerSide: added
- WebsocketConfig.Unidirectional: added
- WithChannelInfo: added
- WithExpireAt: added
- WithJoinLeave: added
- WithPosition: added
- WithPresence: added
- WithRecover: added
- WithSubscribeClient: added
- WithSubscribeData: added
- WithUnsubscribeClient: added
v0.16.0 is a valid semantic version for this release.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →