Official SDKs

Five languages,
one protocol

Official SDKs for Go, TypeScript, Python, Rust, and C++, each implementing the wire protocol independently and proven interoperable by a required cross-language CI matrix.

Go SDK

Available on pkg.go.dev.

go get github.com/NIKX-Tech/relayly/sdk/go

Connect to a relay

key, err := relayly.LoadOrGenerateKey("~/.relayly/device.key")
if err != nil {
    log.Fatal(err)
}

// deviceToken comes from `relayly pair` (or POST /api/v1/devices)
client, err := relayly.Connect(ctx, "wss://your-server/ws", relayly.Options{
    DeviceID:    "my-laptop",
    DeviceToken: deviceToken,
    PrivateKey:  key,
})
if err != nil {
    log.Fatal(err)
}
defer client.Close()

Pair devices

// Device A - request a code
code, err := client.RequestPairCode(ctx)
fmt.Println("Share this code:", code.Short)
peer, err := code.Wait(ctx) // blocks until the other device accepts

// Device B - accept a code
peer, err := client.AcceptPair(ctx, "483921")

Send & receive

err = client.Send(ctx, peer.ID, []byte("hello!"))

for msg := range client.Messages() {
    fmt.Printf("[%s] %s\n", msg.From, msg.Payload)
}

Auto-reconnect: Exponential backoff built in. Configure with ReconnectDelay, MaxReconnectDelay, OnDisconnect, and OnReconnect.

Want to contribute an SDK for another language?

Open a PR on GitHub