Need help with sockjs-go?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

487 Stars 98 Forks BSD 3-Clause "New" or "Revised" License 274 Commits 8 Opened issues


WebSocket emulation - Go server library

Services available


Need anything else?

Contributors list

Build Status GoDoc Coverage Status

What is SockJS?

SockJS is a JavaScript library (for browsers) that provides a WebSocket-like object. SockJS gives you a coherent, cross-browser, Javascript API which creates a low latency, full duplex, cross-domain communication channel between the browser and the web server, with WebSockets or without. This necessitates the use of a server, which this is one version of, for GO.

SockJS-Go server library

SockJS-Go is a SockJS server library written in Go.

For latest v3 version of


For v2 version of


Using version v1 is not recommended (DEPRECATED)

Note: using
is not recommended. It exists for backwards compatibility reasons and is not maintained.


SockJS-Go project adopted approach for versioning. SockJS-Go library details can be found here

With the introduction of go modules a new version

is developed and maintained in the
and has new import part


A simple echo sockjs server:

package main

import ( "log" "net/http"



func main() { handler := sockjs.NewHandler("/echo", sockjs.DefaultOptions, echoHandler) log.Fatal(http.ListenAndServe(":8081", handler)) }

func echoHandler(session sockjs.Session) { for { if msg, err := session.Recv(); err == nil { session.Send(msg) continue } break } }

SockJS Protocol Tests Status

SockJS defines a set of protocol tests to quarantee a server compatibility with sockjs client library and various browsers. SockJS-Go server library aims to provide full compatibility, however there are couple of tests that don't and probably will never pass due to reasons explained in table below:

| Failing Test | Explanation | | -------------| ------------| | XhrPolling.test_transport | does not pass due to a feature in net/http that does not send content-type header in case of StatusNoContent response code (even if explicitly set in the code), details | | WebSocket. | Sockjs Go version supports RFC 6455, draft protocols hixie-76, hybi-10 are not supported | | JSONEncoding | As menioned in browser quirks section: "it's advisable to use only valid characters. Using invalid characters is a bit slower, and may not work with SockJS servers that have a proper Unicode support." Go lang has a proper Unicode support | | RawWebsocket. | The sockjs protocol tests use old WebSocket client library (hybi-10) that does not support RFC 6455 properly |


As mentioned above sockjs-go library is compatible with RFC 6455. That means the browsers not supporting RFC 6455 are not supported properly. There are no plans to support draft versions of WebSocket protocol. The WebSocket support is based on Gorilla web toolkit implementation of WebSocket.

For detailed information about browser versions supporting RFC 6455 see this wiki page.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.