Go implementation of a WAMP (Web Application Messaging Protocol) client and router

go, wamp-protocol, wamp-router, websockets
go get


Turnpike Build Status Coverage Status GoDoc

Go implementation of WAMP - The Web Application Messaging Protocol

WAMP ("The Web Application Messaging Protocol") is a communication protocol that enables distributed application architectures, with application functionality spread across nodes and all application communication decoupled by messages routed via dedicated WAMP routers.

At its core, WAMP provides applications with two asynchronous messaging patterns within one unified protocol:

  • Publish & Subscribe
  • Remote Procedure Calls

This package provides router and client library implementations as well as a basic stand-alone router. The router library can be used to embed a WAMP router in another application, or to build a custom router implementation. The client library can be used to communicate with any WAMP router.

This version of Turnpike supports WAMP v2. For WAMP v1 support see the v1 branch.


Turnpike v2 is still under development, but is getting close to a stable release. If you have any feedback or suggestions, please open an issue.



go get -u

Stand-alone router:

go get -u

Client library usage


Server library usage


package main

import (


func main() {
    s := turnpike.NewBasicWebsocketServer("example.realm")
    server := &http.Server{
        Handler: s,
        Addr:    ":8000",
    log.Println("turnpike server starting on port 8000")

This creates a simple WAMP router listening for websocket connections on port 8000 with a single realm configured.

You can build it like this:

go build -o router main.go

Which will create an executable in your working directory that can be run like this:


Stand-alone router usage

Run the router with default settings:


Router options:

Usage of turnpike:
  -port int
        port to run on (default 8000)
  -realm string
        realm name (default "realm1")