@twinlight/client
v0.0.6
Published
The TwinLight browser SDK: session orchestration, control builders, viewport, assets, capability gating, wire protocol (zod), transports (WebRTC / WebSocket+WebCodecs / native bridge), and player UI — one bundled package.
Readme
@twinlight/client
High-level TwinLight SDK for browser, Electron, Tauri, and custom UI hosts. It composes control-message builders, client-side batching, viewport ownership, asset registration, and capability gating around a native TwinLight renderer.
60-second browser attach
import { createTwinLightClient } from "@twinlight/client";
const client = await createTwinLightClient({
endpoints: {
control: "ws://127.0.0.1:61721",
video: "ws://127.0.0.1:61720",
signaling: "ws://127.0.0.1:61722",
},
connect: false,
});
client.render.setQuality("max_quality");
client.render.setResolution({ width: 1920, height: 1080 });
client.render.patchFeatures({
shadow: "rt",
ambientOcclusion: "rtao",
reflection: "rt",
gi: "rtgi",
resolve: "dlss_sr",
dlssQuality: "quality",
});
client.scene.load("raster_showcase");Professional integration notes
patchFeatures()always sends a completerender.set_featureswire message. The backend does not accept a partial feature-delta object.client.batch()flushes individual control frames in one synchronous burst. It does not sendscene.batchbecause the current native backend does not parse atomic batch envelopes.- Capability fields reflect the current renderer capability schema. Unprobed effects such as volumes, clouds, tessellation, Gaussian splats, and point clouds are reported as
source: "unknown"unless a future backend schema exposes them. - Texture URI registration is JSON-only. Binary texture upload requires a binary-capable control socket and uses the native chunked upload protocol.
Not supported
- No CPU or JavaScript renderer fallback.
- No silent software encoder fallback.
- No fake WebGLRenderer compatibility.
- No capability claims for fields the native backend does not currently emit.
