All six SDKs are thin wrappers over the same C++ core. The five modalities — voice, streams, robotics, games, data — are exposed as sub-imports (or sub-namespaces / sub-packages) in every language. Method names align across languages in idiomatic case; once you know one SDK, the others should feel 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
Plus the Unity UPM transport for Netcode for GameObjects / Entities — see Netcode (Unity).

The five modalities

Each SDK exposes the same five modalities as separate sub-imports:
ModalityTypeScriptPythonGoRustJava.NET
Voice@clutchcall/sdk/voiceclutchcall.voicegithub.com/clutchcall/clutchcall-sdk/go/pkg/voiceclutchcall::voicecom.clutchcall.sdk.voiceClutchCall.SDK.Voice
Streams@clutchcall/sdk/streamsclutchcall.streamsgithub.com/clutchcall/clutchcall-sdk/go/pkg/streamsclutchcall::streamscom.clutchcall.sdk.streamsClutchCall.SDK.Streams
Robotics@clutchcall/sdk/roboticsclutchcall.roboticsgithub.com/clutchcall/clutchcall-sdk/go/pkg/roboticsclutchcall::roboticscom.clutchcall.sdk.roboticsClutchCall.SDK.Robotics
Games@clutchcall/sdk/gamesclutchcall.gamesgithub.com/clutchcall/clutchcall-sdk/go/pkg/gamesclutchcall::gamescom.clutchcall.sdk.gamesClutchCall.SDK.Games
Data@clutchcall/sdk/dataclutchcall.datagithub.com/clutchcall/clutchcall-sdk/go/pkg/dataclutchcall::datacom.clutchcall.sdk.dataClutchCall.SDK.Data
MoQT (raw)@clutchcall/sdk/moqtclutchcall.moqtgithub.com/clutchcall/clutchcall-sdk/go/pkg/moqtclutchcall::moqtcom.clutchcall.sdk.MoqtClutchCall.SDK.Moqt
Mix them freely in one app — they share the same QUIC connection, auth, and relay underneath. The substrate (raw MoQT) is always available too; see Realtime Tracks.

Common shape

Every modality client follows the same shape:
ConceptPattern
Constructnew <Modality>({ relayHost / baseUrl, token, ... })
Publish.publish<Kind>({ topic / namespace, ... }) returns a publication handle
Subscribe.subscribe<Kind>({ topicFilter / namespace }, callback)
Control plane (HTTP)tRPC procedure calls (.calls.originate, .liveInputs.create, …)
Close.close() — terminates the underlying connection
The publication / subscription handles wrap the underlying MoQT track — they auto-reconnect, replay subscribes on reconnect, and surface backpressure if the relay falls behind.

Realtime tracks (the substrate)

When the five modalities don’t fit your shape — custom protocol, research experiment, transport another codebase already uses — drop below them and import the MoqtClient directly. See Realtime Tracks. Same auto-reconnect, capability routing, and relay fan-out — without the modality-specific conventions on top.

Choosing a language

If you’re …Pick this
Building a browser dashboard, broadcast viewer, game clientTypeScript
Writing an LLM voice agent, robot fleet publisher, IoT pub/subPython
Running a high-throughput batch service alongside K8s infraGo
Embedding into an edge service or hot pathRust
Plugging into a JVM monolith / Spring stackJava
Integrating with Windows tooling or Unity .NET runtime.NET / C#
Shipping a Unity game (Netcode for GameObjects / Entities)Unity UPM (com.clutchcall.transport)
You can mix and match across languages — a Python publisher and a browser subscriber co-exist on the same MoQT track, by design.