obs-websocket 5.7.6 · OBS Studio 28 and up · .NET 8 and 10
A complete .NET client for OBS Studio
Switch scenes, mute inputs, start the stream, react to whatever happens in OBS Studio: from any .NET application, on Windows, Linux or macOS. Every request, event and enum of the obs-websocket protocol is a typed, async C# member, checked against the protocol on every build.
dotnet add package OBSClient --prerelease
using OBSStudioClient;
using var client = new ObsClient();
if (await client.ConnectAsync(password: "secret"))
{
client.CurrentProgramSceneChanged += (_, e) =>
Console.WriteLine($"On air: {e.SceneName}");
await client.SetCurrentProgramScene("Gaming Scene");
await client.StartRecord();
}
Why OBSClient
The whole protocol
Every request, event, batch builder and enum of obs-websocket 5.7.6, including the multi-canvas support of 5.7.0.
Typed and async
Typed requests and responses, async and await throughout, nullable annotations, and XML documentation on every member.
Names or UUIDs
Pass a scene or an input by name, by UUID, or as the object OBS Studio gave you. One method per request, no overload pairs.
Request batches
Send several requests in one round trip, serially or in parallel, in real time or per frame, and stop at the first failure.
A connection you can rely on
Auto-reconnect, retries while OBS Studio is not ready, requests that fail fast, and a connection that tells you when it is lost.
Tested against the real thing
Conformance tests compare every request with the protocol definition, and captures of a real OBS Studio check the nested objects.
A quick tour
using OBSStudioClient;
using var client = new ObsClient();
if (!await client.ConnectAsync(password: "secret")) return;
await client.SetCurrentProgramScene("Gaming Scene"); // by name
await client.SetCurrentProgramScene(sceneUuid); // by UUID: survives a rename
bool muted = await client.ToggleInputMute("Microphone"); // returns the new state
await client.StartStream();
Compatibility
| Area | Support |
|---|---|
| OBS Studio | 28 and up. obs-websocket 5 is built into OBS Studio since version 28. The UUIDs of scenes and inputs need OBS Studio 30.1 (obs-websocket 5.4): an older one sends none, so name the scene or the input. CI runs the live tests against OBS Studio 30.0.2 and against the newest release. |
| Protocol | obs-websocket 5.7.6, including the multi-canvas requests and events of 5.7.0. |
| Target frameworks | net8.0 and net10.0, the LTS releases of .NET. An application on .NET 9 or 11 uses them too. .NET 8 reaches the end of its support from Microsoft on 10 November 2026, and its target stays in every 4.x package: dropping a target framework breaks the applications that use it, which is what a major version is for. |
| Platforms | Windows, Linux and macOS: the client only uses System.Net.WebSockets, and its tests run on all three in CI. |
| Dependencies | Microsoft.Extensions.Logging.Abstractions (8.0.0 and up), which has the ILogger that the client logs to. |
| License | MIT |
Where next
Getting started
Enable the WebSocket server, install the package and send your first request.
Calling requests
Names and UUIDs, canvases, settings, errors and timeouts.
The test app
A Windows app to try every request and event by hand against your own OBS Studio.
API reference
Every type and member of the library, generated from the source.