All notable changes to the WSC protocol specification are documented here.
Format follows Keep a Changelog.
Protocol versions follow Semantic Versioning.
Message types — renamed and renumbered
CMD_CUE(0x2000) renamed toCONTROL_CUE(0x2000). Behaviour unchanged; payload simplified —fade_msandintensityfields removed. Implementations requiring fade or level control SHOULD useCONTROL_PARAM.PARAM_SET(0x3000) renamed toCONTROL_PARAMand moved to0x2001. Now shares the Control range withCONTROL_CUE.TUNNEL_RAWmoved from0x4000to0xE000.
Message type ranges revised
| Range | Category |
|---|---|
0x1000 – 0x1FFF |
Streaming (unchanged) |
0x2000 – 0x2FFF |
Control — replaces separate Command and Parameter ranges |
0x3000 – 0xDFFF |
Reserved (was split between Parameters 0x3000– and Tunnel 0x4000–) |
0xE000 – 0xEFFF |
Tunnel |
0xF000 – 0xFFFF |
State (unchanged) |
STATE_NOTIFY(0xF003) — removed from the normative type set. Implementations that previously used it SHOULD migrate toSTATE_ANSWERwithquery_id = 0.STATE_HEARTBEAT(0xF005) — removed. Liveness is maintained viaSTATE_QUERY(KEEPALIVE).
Initial stable protocol specification.
Wire format
- 19-byte fixed header:
WSC!magic (4 B), version (3 B), type (2 B), flags (2 B), id (4 B), payload_len (2 B), transport_len (2 B) - Flags field:
TR(bit 15),GW(bit 14),ACK(bit 13),MC(bit 12),TS(bit 11); bits 10–0 reserved
Message types
STREAM_CHANNELS(0x1000)STREAM_TIMECODE(0x1003)CMD_CUE(0x2000) with action codes:LOAD,START,STOP,PAUSE,RESUME,RELEASEPARAM_SET(0x3000) with value types:U8,U16,U32,U64,I8,I16,I32,I64,F32,F64,STRING,BOOLTUNNEL_RAW(0x4000)STATE_QUERY(0xF000) with sub-type:KEEPALIVE(0x0000)STATE_ANSWER(0xF001) with status codes:SUCCESS,PARTIAL,ERROR,NOT_FOUND,NOT_SUPPORTED,BUSYSTATE_NOTIFY(0xF003)STATE_ERROR(0xF004) with error codes:PROTOCOL_VERSIONthroughCONFIG_ERRORSTATE_HEARTBEAT(0xF005)
Address system
- Hierarchical token encoding with self-terminating wire format
- 6 domain tokens:
LIGHTING,AUDIO,VIDEO,MOTION,ENV,NETWORK - 16 structural entity tokens:
LAYER,TRACK,BUS,SEND,GROUP,UNIVERSE,CHANNEL,FIXTURE,CLIP,CUE,SCENE,DEVICE,EFFECT,AXIS,ZONE,PARAM - 60+ domain-specific leaf tokens across lighting, video, audio, motion, environment, and generic ranges
INDEXsentinel (0x80),CUSTOMescape hatch (0xFE),RAWmarker (0xFF)
Transport Descriptor
- 23 downstream protocol codes across lighting, audio/MIDI, video, machine control, and generic categories
- 6 interface type codes:
UDP,TCP,SERIAL,USB,WEBSOCKET,HTTP - 7 address encoding variants:
NONE,IPV4,IPV6,SERIAL,USB,HOSTNAME,URL - 5 optional parameter keys:
PRIORITY,TTL,BAUD_RATE,SEQUENCE,IFACE_IDX - Protocol–interface compatibility matrix
- Message-type–protocol compatibility matrix
Session
- Connection state machine:
IDLE → CONNECTING → CONNECTED → IDLE / ERROR - Reference transport: WebRTC DataChannel over WebSocket signaling
- Signaling message schema: offer / answer / ice
- Packet ID sequencing: u32, range [1, 0xFFFFFFFF], wrapping
- Keepalive:
STATE_QUERY(KEEPALIVE)round-trip
Error handling
- 4 error classes:
SIGNALING,TRANSPORT,PACKET,GATEWAY - 11 protocol error codes
- Receiver obligation table
For future entries, note the protocol version separately from any binding version when they differ.