Skip to main content

Packet Composition

Generated from spec/protocol.yaml. Do not edit by hand.

Transport and framing

  • Transport: websocket
  • Length prefix: length as uint32 (big-endian)
  • Encryption mode: default=disabled, algorithm=rc4, activation=after diffie handshake completion
  • Length includes header: yes
  • Length includes payload: yes

Frame segment order

SegmentWire typeDescription
lengthuint32 (big-endian)Message size in bytes, excluding this 4-byte length field
messageIduint16 (big-endian)Packet header identifier
payloadbytesField data serialized in declaration order

Notes

  • The framing behaviour has been confirmed across four independent implementations (Nitro client, GLADIATOR, GALAXY, and SODIUM).
  • All implementations use big-endian primitives.
  • String values are encoded as uint16 length prefix followed by UTF-8 bytes.
  • Multiple packets can be concatenated inside a single WebSocket frame.
  • Diffie-Hellman handshake packets are always sent unencrypted; RC4 encryption may be activated after the handshake completes.

Primitive types

NameWire representationDescription
booleanuint80=false, 1=true
int32int32 (big-endian)Signed 32-bit integer
uint16uint16 (big-endian)Unsigned 16-bit integer
uint32uint32 (big-endian)Unsigned 32-bit integer
bytesbytesRaw byte sequence

Composite types

NameDescription
stringUTF-8 text with uint16 length prefix
list<T>Ordered sequence with explicit count prefix