TypeScript
npm i @clutchcall/sdkPython
pip install clutchcallGo
go get github.com/clutchcall/clutchcall-sdk/goRust
clutchcall = "0.1"Java
com.clutchcall:clutchcall-sdk.NET / C#
dotnet add package ClutchCall.SDKThe five modalities
Each SDK exposes the same five modalities as separate sub-imports:| Modality | TypeScript | Python | Go | Rust | Java | .NET |
|---|---|---|---|---|---|---|
| Voice | @clutchcall/sdk/voice | clutchcall.voice | github.com/clutchcall/clutchcall-sdk/go/pkg/voice | clutchcall::voice | com.clutchcall.sdk.voice | ClutchCall.SDK.Voice |
| Streams | @clutchcall/sdk/streams | clutchcall.streams | github.com/clutchcall/clutchcall-sdk/go/pkg/streams | clutchcall::streams | com.clutchcall.sdk.streams | ClutchCall.SDK.Streams |
| Robotics | @clutchcall/sdk/robotics | clutchcall.robotics | github.com/clutchcall/clutchcall-sdk/go/pkg/robotics | clutchcall::robotics | com.clutchcall.sdk.robotics | ClutchCall.SDK.Robotics |
| Games | @clutchcall/sdk/games | clutchcall.games | github.com/clutchcall/clutchcall-sdk/go/pkg/games | clutchcall::games | com.clutchcall.sdk.games | ClutchCall.SDK.Games |
| Data | @clutchcall/sdk/data | clutchcall.data | github.com/clutchcall/clutchcall-sdk/go/pkg/data | clutchcall::data | com.clutchcall.sdk.data | ClutchCall.SDK.Data |
| MoQT (raw) | @clutchcall/sdk/moqt | clutchcall.moqt | github.com/clutchcall/clutchcall-sdk/go/pkg/moqt | clutchcall::moqt | com.clutchcall.sdk.Moqt | ClutchCall.SDK.Moqt |
Common shape
Every modality client follows the same shape:| Concept | Pattern |
|---|---|
| Construct | new <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 |
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 theMoqtClient 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 client | TypeScript |
| Writing an LLM voice agent, robot fleet publisher, IoT pub/sub | Python |
| Running a high-throughput batch service alongside K8s infra | Go |
| Embedding into an edge service or hot path | Rust |
| Plugging into a JVM monolith / Spring stack | Java |
| Integrating with Windows tooling or Unity .NET runtime | .NET / C# |
| Shipping a Unity game (Netcode for GameObjects / Entities) | Unity UPM (com.clutchcall.transport) |

