Skip to content


Repository files navigation

Cult Of Martians Gem Version Build


AnyCable-compatible Rack hijack based Ruby Web Socket server designed for development and testing purposes.

Using with Rack

# Initialize server instance first.
ws_server =

app = do
  map "/cable" do
    run ws_server

# NOTE: don't forget to call `start!` method

run app

Usage with Rails

Add gem "anycable-rack-server" to you Gemfile and make sure your Action Cable adapter is set to :any_cable. That's it! We automatically start AnyCable Rack server for you at /cable path.


AnyCable Rack Server uses anyway_config gem for configuration; thus it is possible to set configuration parameters through environment vars (prefixed with ANYCABLE_), config/anycable.yml file or secrets.yml when using Rails.

NOTE: AnyCable Rack Server uses the same config name (i.e., env prefix, YML file name, etc.) as AnyCable itself.

You can pass a config object as the option to

server =**params))

If no config is passed, a default, global, configuration would be used (AnyCable::Rack.config).

When using Rails, config.anycable_rack points to AnyCable::Rack.config.


You can customize the headers being sent with each gRPC request.

Default headers: 'cookie', 'x-api-token'.

Can be specified via configuration:

AnyCable::Rack.config.headers = ["cookie", "x-my-header"]

Or in Rails:

# <environment>.rb
config.any_cable_rack.headers = %w[cookie]

Rails-specific options

# Mount WebSocket server at the specified path
config.any_cable_rack.mount_path = "/cable"
# NOTE: here we specify only the port (we assume that a server is running locally)
config.any_cable_rack.rpc_port = 50051

Broadcast adapters

AnyCable Rack supports Redis (default) and HTTP broadcast adapters (see the documentation).

Broadcast adapter is inherited from AnyCable configuration (so, you don't need to configure it twice).

Using HTTP broadcast adapter

With Rack

AnyCable::Rack.config.broadast_adapter = :http

ws_server = AnyCable::Rack::Server

app = do
  map "/cable" do
    run ws_server

  map "/_anycable_rack_broadcast" do
    run ws_server.broadcast

With Rails

By default, we mount broadcasts endpoint at /_anycable_rack_broadcast.

You can change this setting:

config.any_cable_rack.http_broadcast_path = "/_my_broadcast"

NOTE: Don't forget to configure http_broadcast_url for AnyCable pointing to your web server and the specified broadcast path.


Run units with bundle exec rake.


Bug reports and pull requests are welcome on GitHub at


The gem is available as open source under the terms of the MIT License.