NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #324 by repository stars
Last release 2 years ago
no release in 18 months
Ships unpredictably
gaps range from 8 days to 3.4 years
Most releases are documented
notes for 40 of 55 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
137 releases · first in 2015
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
No backwards incompatible changes here.
No backwards incompatible changes here.
version to stats output. Also add rusage stime and utime values to metrics. See #222 for details. Thanks to @Sannis for contributionsNothing published for this version
Nothing published for this version
No backwards incompatible changes here.
No backwards incompatible changes here.
info in connection refresh request - see #214.ssl_autocert_http boolean option. Centrifugo will serve http_01 ACME challenge on port 80. See #210 for more details.No backwards incompatible changes here.
No backwards incompatible changes here.
No backwards incompatible changes here.
No backwards incompatible changes here.
uid via API request - see #205unsubscribe messages to client on shutdown - it will unsubscribe automatically on disconnect on client sideNothing published for this version
No backwards incompatible changes here.
No backwards incompatible changes here.
CENTRIFUGO_ prefix did not work since 1.7.4Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
No backwards incompatible changes here.
No backwards incompatible changes here.
The only change is using new version of Go for builds (Go 1.9.2). This will allow to analyze performance profiles more easily without having to use binaries. See this new wiki page about investigating performance issues.
Nothing published for this version
No backwards incompatible changes here.
No backwards incompatible changes here.
This release is centered around internal refactoring to detach node from server - see more details in #186.
--pid_file command line option.Nothing published for this version
No backwards incompatible changes here.
No backwards incompatible changes here.
This release built using new version of Go - 1.8.1, previously Centrifugo used Go 1.7.5, so here we benefit from Go evolution improvements - the most notable is improvements in GC pauses which should in turn improve Centrifugo latency. It also reduces memory usage by about 15-20% when websocket compression enabled.
No backwards incompatible changes here.
No backwards incompatible changes here.
No backwards incompatible changes here.
No backwards incompatible changes here.
hijack method. We adapted Centrifugo default websocket buffer options to utilize this feature (websocket_read_buffer_size and websocket_write_buffer_size now 0 by default).This release changes two important aspects of Centrifugo. We expect that it will be fully backwards compatible with previous one in most scenarios unt
This release changes two important aspects of Centrifugo. We expect that it will be fully backwards compatible with previous one in most scenarios until you were using timestamp message field somehow.
timestamp field removed from message. See #147 for motivation.node_memory_heap_sys, node_memory_heap_alloc, node_memory_stack_inuseNo backwards incompatible changes here.
No backwards incompatible changes here.
history_drop_inactive option edge case (described in #50)ssl_autocert_force_rsa and ssl_autocert_server_name. See docs for descriptionNothing published for this version
No backwards incompatible changes here.
No backwards incompatible changes here.
We consider removing timestamp field from message as it's seems useless and never used by Centrifugo users. Applications that need timestamp for some reason can include it into message JSON payload. If you have any objections please look at issue #147 and write your thoughts against removing this field.
node_uptime_seconds - see updated docs for statsx/net/http2 dependency as standard lib will contain fix for #145Nothing published for this version
This release fixes wrong decision made in 1.6.x related to pings. We don't rely on client to server pings to disconnect clients anymore, we also moved
This release fixes wrong decision made in 1.6.x related to pings. We don't rely on client to server
pings to disconnect clients anymore, we also moved back SockJS heartbeat frames - i.e. sending them
from server to client every 25 seconds as before (in Centrifugo < 1.6.0). Recent changes in centrifuge-js (version 1.4.2) allowed us to not introduce addition reconnects for SockJS polling
transports when sending client to server automatic ping. We also updated documentation chapter about
pings a bit.
Our js client already handles that reason, so no breaking changes there. Some work required in other clients though to support reconnect: false in adv…
disconnect message before closing client connections anymore - we rely on websocket/SockJS close reason now (which is JSON encoded DisconnectAdvice). Our js client already handles that reason, so no breaking changes there. Some work required in other clients though to support reconnect: false in advice.This release fixes some configuration problems introduced by v1.6.0 and adds Let's Encrypt support.
This release fixes some configuration problems introduced by v1.6.0 and adds Let's Encrypt support.
The code layout changed dramatically. Look at libcentrifugo folder before and after! Unfortunately there are backwards incompatibilities with previous…
This Centrifugo release is a massive 4-months refactoring of internals with the goal to separate code of different components such as engine, server, metrics, clients to own packages with well-defined API to communicate between them. The code layout changed dramatically. Look at libcentrifugo folder before and after! Unfortunately there are backwards incompatibilities with previous release - see notes below. The most significant one is changed metrics format in stats and node API command responses.
With new code layout it's much more simple to create custom engines or servers – each with own metrics and configuration options. We can not guarantee though that we will keep libcentrifugo packages API stable – our primary goal is still building Centrifugo standalone server. So if we find something that must be fixed or improved internally - we will fix/improve it even if this could result in packages API changes.
As Centrifugo written in Go the only performant way to write plugins is to import them in main.go file and build Centrifugo with them. So if you want to create custom build with custom server or custom engine you will need to change main.go file and build Centrifugo yourself. But at least it's easier than supporting full Centrifugo fork.
centrifuge-js now automatically sends periodic ping commands to server. Centrifugo checks client's last activity time and closes stale connections. Builtin SockJS server won't send heartbeat frames to SockJS clients by default. You can restore the old behaviour though: setting ping: false on client side and sockjs_heartbeat_delay: 25 option in Centrifugo configuration. This all means that you better update centrifuge-js client to latest version (1.4.0). Read more about pings in docs.jsonp transport was used by SockJS client - this was fixed recently in sockjs-go library.stats and node command response body format changed – metrics now represented as map containing string keys and integer values. So you may need to update your monitoring scripts.info - debug level is too chatty for production logs as there are tons of API requests per second, tons of client connect/disconnect events. If you still want to see logs about all connections and API requests - set log_level option to debug.channel_prefix option renamed to redis_prefix.web_password and web_secret option aliases not supported anymore. Use admin_password and admin_secret.insecure_web option removed – web interface now available without any password if insecure_admin option enabled. Of course in this case you should remember about protecting your admin endpoints with firewall rules. Btw we recommend to do this even if you are using admin password.info response format changed a bit - but this most possibly will not affect anyone as it was mostly used by embedded web interface only.statik (https://github.com/rakyll/statik) to embed web interface now.* Fixes #94.
Some upgrade steps needed to migrate to this release, see below.
Some upgrade steps needed to migrate to this release, see below.
This release is a major refactoring of Centrifugo internal engine. Centrifugo now uses protobuf format while transferring data between nodes and serializing history/presence data in Redis. We expect that all those changes should not affect your working application code though as new serialization format used you may need to run FLUSHDB command if using Redis engine to remove presence/history data encoded as JSON (if you don't use presence and history then no need to do this). If you have any problems with new serialization format used by Centrifugo internally – we can consider making old JSON encoding optional in future releases. Depending on how you use Centrifugo with Redis Engine those internal changes can result in nearly the same performance (if real-time content mostly generated by users online, so messages coming to Centrifugo have to be delivered to at least one client) or up to 2x API request speed up (if your real-time mostly generated by application backend itself so some messages published in channel with no active subscribers and there is no need to do JSON encoding work).
sockjs_url option (which is now by default //cdn.jsdelivr.net/sockjs/1.1/sockjs.min.js). So if you don't want to upgrade SockJS on client side or just want to fix version used or use your own hosted SockJS library (which is good if you think about old browser support and don't want to be affected by minor SockJS library releases) - use that option.centrifugo version now shows Go language version used to build binary.Nothing published for this version
No backwards incompatible changes here. This release uses go1.6.2
No backwards incompatible changes here. This release uses go1.6.2
https. Also HTTP/2 does not affect websockets because of missing protocol upgrade possibilities in HTTP/2 protocol - so websockets will work in the same way as before. Also if you have any proxy before Centrifugo then depending on your setup some reconfiguration may be required to make HTTP/2 work.Just to remember how to test Centrifugo with SSL: follow instructions from Heroku article to generate self-signed certificate files. Then start Centrifugo like this:
./centrifugo --config=config.json --web --ssl --ssl_key=server.key --ssl_cert=server.crt
Go to https://localhost:8000/ and confirm that you trust certificate of this site (this is because of self-signed certificate, in case of valid certificate you don't need this step). Then you can test secure endpoint connections.
One more fix for v1.4.2 release here
One more fix for v1.4.2 release here
admin_password and admin_secret configuration options. See #88Fix of security vulnerability introduced in v1.4.2, see below.
Fix of security vulnerability introduced in v1.4.2, see below.
--admin or --web options) and your admin endpoint not protected by firewall somehow then you must update to this version. Otherwise it's possible to connect to admin websocket endpoint and run any command without authentication. It's recommended to update your secret key after upgrade. So sorry for this.Redis Sentinel support for Redis high availability setup. Docs
admin to enable admin websocket. New option insecure_admin to make this endpoint insecure (useful when admin websocket endpoint/port protected by firewall rules). web_password option renamed to admin_password, web_secret option renamed to admin_secret, insecure_web renamed to insecure_admin. But all old option names still supported to not break things in existing setups. Also note, that when you run Centrifugo with web interface enabled - you also make admin websocket available, because web interface uses it. A little more info in pull request.uids (22 bytes instead of 36). This was made in order to get some performance improvements.Nothing published for this version
fix server crash on 32-bit architectures (due to this), see more details in #74.
No backwards incompatible changes here for most usage scenarios, but look carefully on notes below.
No backwards incompatible changes here for most usage scenarios, but look carefully on notes below.
time_api_mean, time_client_mean, time_api_max, time_client_max now return 0. This was made because timer's implementation used Timer from go-metrics library that does not suit very well for Centrifugo needs - so values were mostly useless in practice. So we decided to get rid of them for now to not confuse our users.node API method to get information from single node. That information will contain counters without aggregation over minute interval (what stats method does by default). So it can be useful if your metric aggregation system can deal with non-aggregated counters over time period itself. Also note that to use this method you should send API request to each Centrifugo node separately - as this method returns current raw statistics about one node. See issue for motivation description.shutdown when this signal received. During shutdown Centrifugo returns 503 status code on requests to handlers and closes client connections so clients will reconnect. If shutdown finished without errors in 10 seconds interval then Centrifugo exits with status code 0 (instead of 130 before, this fixes behaviour behind systemd after SIGTERM received).client_request_max_size config option. By default 65536 bytes (64kb).No backwards incompatible changes here
No backwards incompatible changes here
100. Can be changed using client_channel_limit configuration option.This release built using go 1.5.3 and includes security fix in Go lang
This release built using go 1.5.3 and includes security fix in Go lang
Also note that Javascript client will be fully refreshed soon. See this pull request
fix port configuration introduced in v1.3.0: --port should override default values for admin_port and api_port
--port should override default values for admin_port and api_portPossible backwards incompatibility here (in client side code) - see first point.
Possible backwards incompatibility here (in client side code) - see first point.
client on top level, info on top level, default_info in info object, channel_info in info object. This also affects top level data in join/leave messages and presence data – i.e. default_info and channel_info keys not included in JSON when empty. This can require adapting your client side code a bit if you rely on these keys but for most cases this should not affect your application. But we strongly suggest to test before updating. This change allows to reduce message size. See migration notes below for more details.--admin_port to bind admin websocket and web interface to separate port. #44--api_port to bind API endpoint to separate port. #44--insecure_web to use web interface without setting web_password and web_secret (for use in development or when you protected web interface by firewall rules). #44history_drop_inactive to drastically reduce resource usage (engine memory, messages travelling around) when you use message history. See #50--redis_api_num_shards. This option sets a number of Redis shard queues Centrifugo will use in addition to standard centrifugo.api queue. This allows to increase amount of messages you can publish into Centrifugo and preserve message order in channels. See #52 and documentation for more details.last_event_id related stuff to prevent memory leaks on large amount of channels. #48Also it's recommended to update javascript client to latest version as it has some useful changes (see its changelog).
Message before:
{
"uid":"442586d4-688c-4a0d-52ad-d0a13d201dfc",
"timestamp":"1450817253",
"info": null,
"channel":"$public:chat",
"data":{"input":"1"},
"client":""
}
Message now:
{
"uid":"442586d4-688c-4a0d-52ad-d0a13d201dfc",
"timestamp":"1450817253",
"channel":"$public:chat",
"data":{"input":"1"}
}
I.e. not using empty client and info keys. If those keys are non empty then they present in message.
Join message before:
{
"user":"2694",
"client":"93615872-4e45-4da2-4733-55c955133436",
"default_info": null,
"channel_info":null
}
Join message now:
{
"user":"2694",
"client":"93615872-4e45-4da2-4733-55c955133436"
}
If "default_info" or "channel_info" exist then they would be included:
{
"user":"2694",
"client":"93615872-4e45-4da2-4733-55c955133436",
"default_info": {"username": "FZambia"},
"channel_info": {"extra": "some data here"}
}
No backwards incompatible changes here.
No backwards incompatible changes here.
recover option to automatically recover missed messages based on last message ID. See pull request and chapter in docs for more information. Note that you need centrifuge-js >= v1.1.0 to use new recover optionbroadcast API method to send the same data into many channels. See issue and updated API description in docsNo backwards incompatible changes here.
No backwards incompatible changes here.
max_client_queue_size configuration file option)Another backwards incompatible change related to private channel subscriptions. Actually this is not related to Centrifugo but to Javascript client bu…
A bad and a good news here. Let's start with a good one. Centrifugo is still real-time messaging server and just got v1.0 release. The bad – it is not fully backwards compatible with previous versions. Actually there are three changes that ruin compatibility. If you don't use web interface and private channels then there is only one change. But it affects all stack - Centrifugo itself, client library and API library.
Starting from this release Centrifugo won't support multiple registered projects. It will work with only one application. You don't need to use project key anymore. Changes resulted in simplified
configuration file format. The only required option is secret now. See updated documentation
to see how to set secret. Also changes opened a way for exporting Centrifugo node statistics via HTTP API stats command.
As this is v1 release we'll try to be more careful about backwards compatibility in future. But as we are trying to make a good software required changes will be done if needed.
Highlights of this release are:
project key. secret the only required configuration option.--web flag to centrifugo when starting process.secret set via environment variable CENTRIFUGO_SECRET then configuration file is not required anymore. But note, that when Centrifugo configured via environment variables it's not possible to reload configuration sending HUP signal to process.stats command added to export various node stats and metrics via HTTP API call. Look its response example in docs chapter.insecure_api option to turn on insecure HTTP API mode. Read more in docs chapter.Documentation was updated to fit all these release notes. Also all API and client libraries were updated – Javascript browser client (centrifuge-js), Python API client (cent), Django helper module (adjacent). API clients for Ruby (centrifuge-ruby) and PHP (phpcent) too. Admin web interface was also updated to support changes introduced here.
There are 2 new API libraries: gocent and jscent. First for Go language. And second for NodeJS.
Also if you are interested take a look at centrifuge-go – experimental Centrifugo client for Go language. It allows to connect to Centrifugo from non-browser environment. Also it can be used as a reference to make a client in another language (still hoping that clients in Java/Objective-C/Swift to use from Android/IOS applications appear one day – but we need community help here).
application/json) request instead of application/x-www-form-urlencoded when client wants to subscribe on private channel. See in docs how to deal with JSON in this case.--web is now a boolean flag. Previously it was used to set path to admin web interface. Now it indicates whether or not Centrifugo must serve web interface. To provide path to custom web application directory use --web_path string option.I.e. before v1 you started Centrifugo like this to use web interface:
centrifugo --config=config.json --web=/path/to/web/app
Now all you need to do is run:
centrifugo --config=config.json --web
And no need to download web interface repository at all! Just run command above and check http://localhost:8000.
If you don't want to use embedded web interface you can still specify path to your own web interface directory:
centrifugo --config=config.json --web --web_path=/path/to/web/app
new channels API command – allows to get list of active channels in project at moment (with one or more subscribers).
channels API command – allows to get list of active channels in project at moment (with one or more subscribers).message_send_timeout option default value is now 0 (last default value was 60 seconds) i.e. send timeout is not used by default. This means that Centrifugo won't start lots of goroutines and timers for every message sent to client. This helps to drastically reduce memory allocations. But in this case it's recommended to keep Centrifugo behind properly configured reverse proxy like Nginx to deal with connection edge cases - slow reads, slow writes etc.ping_interval configuration option. Note that this option also sets SockJS heartbeat messages interval. This opens a road to set reasonable value for Nginx proxy_read_timeout for /connection location to mimic behaviour of message_send_timeout which is now not used by defaultHTTP API endpoint now can handle json requests. Used in client written in Go at moment. Old behaviour have not changed, so this is absolutely optional
Critical bug fix for Redis Engine!
Critical bug fix for Redis Engine!
Add TLS support. New flags are:
--ssl - accept SSL connections. This requires an X509 certificate and a key file.--ssl_cert="file.cert" - path to X509 certificate file.--ssl_key="file.key" - path to X509 certificate key.set expire on presence hash and set keys in Redis Engine. This prevents staling presence keys in Redis.
add optional client field to publish API requests. client will be added on top level of published message. This means that there is now a way to inclu
client field to publish API requests. client will be added on top level of
published message. This means that there is now a way to include client connection ID to
publish API request to Centrifugo (to get client connection ID call centrifuge.getClientId() in
javascript). This client will be included in a message as I said above and you can compare
current client ID in javascript with client ID in message and if both values equal then in
some situations you will wish to drop this message as it was published by this client and
probably already processed (via optimistic optimization or after successful AJAX call to web
application backend initiated this message).&. If you have
channels with & in its name - then you must adapt your channel names to not use & or run Centrifugo with another client channel boundary using client_channel_boundary configuration
file option.Nothing published for this version
Lots of internal refactoring, no API changes. Thanks to Mr Klaus Post (@klauspost) and Mr Dmitry Chestnykh (@dchest)
Lots of internal refactoring, no API changes. Thanks to Mr Klaus Post (@klauspost) and Mr Dmitry Chestnykh (@dchest)
First release. New documentation.
First release. New documentation.
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 →