All six SDKs are thin wrappers over the same C++ core. Every language exposes the five modalities as sub-imports (or sub-namespaces / sub-packages): voice, streams, robotics, games, and data. Method names align across languages in the idiomatic case of each language. When you know one SDK, the other SDKs are familiar.

TypeScript

npm i @clutchcall/sdk

Python

pip install clutchcall

Go

go get github.com/clutchcall/clutchcall-sdk/go

Rust

clutchcall = "0.1"

Java

com.clutchcall:clutchcall-sdk

.NET / C#

dotnet add package ClutchCall.SDK
A Unity UPM transport is also available for Netcode for GameObjects / Entities. See Netcode (Unity).

The five modalities

Each SDK exposes the same five modalities as separate sub-imports: You can mix the modalities in one app. They share the same QUIC connection, auth, and relay. The substrate (raw MoQT) is always available. See Realtime Tracks.

Common shape

Every modality client follows the same shape: The publication and subscription handles wrap the underlying MoQT track. The handles reconnect automatically and replay subscribes on reconnect. The handles show backpressure if the relay falls behind.

Realtime tracks (the substrate)

Sometimes the five modalities do not fit your use case. Examples: a custom protocol, a research experiment, or a transport that another codebase already uses. In these cases, import the MoqtClient directly. See Realtime Tracks. You get the same auto-reconnect, capability routing, and relay fan-out, without the modality-specific conventions.

Choosing a language

You can mix languages. By design, a Python publisher and a browser subscriber can share the same MoQT track.