Skip to content

Using anycable-go as a library

You can use AnyCable-Go as a library to build custom real-time applications.

Read "AnyCable off Rails: connecting Twilio streams with Hanami" to learn how we've integrated Twilio Streams with a Hanami application via AnyCable-Go.

Why building a WebSocket application with AnyCable-Go (and not other Go libraries)?

  • Connect your application to Ruby/Rails apps with ease by using AnyCable RPC protocol.
  • Many features out-of-the-box including different pub/sub adapters (including embedded NATS), built-in instrumentation.
  • Bulletproof code, which has been used production for years.

To get started with an application development with AnyCable-Go, you can use our template repository: anycable-go-scaffold.

Embedding

You can also embed AnyCable into your existing web application in case you want to serve AnyCable WebSocket/SSE connections via the same HTTP server as other requests (e.g., if you build a smart reverse-proxy).

Here is a minimal example Go code (you can find the full and up-to-date version here):

go
package main

import (
	"net/http"

	"github.com/anycable/anycable-go/cli"
)

func main() {
	opts := []cli.Option{
		cli.WithName("AnyCable"),
		cli.WithDefaultRPCController(),
		cli.WithDefaultBroker(),
		cli.WithDefaultSubscriber(),
		cli.WithDefaultBroadcaster(),
	}

	c := cli.NewConfig()
	runner, _ := cli.NewRunner(c, opts)
	anycable, _ := runner.Embed()

	wsHandler, _ := anycable.WebSocketHandler()
	http.Handle("/cable", wsHandler)

	http.ListenAndServe(":8080", nil)
}