Logo
Protocol Spec
Overview

Protocol Spec

ION frame format, event model, and state machine.

1 min read
Spec Frames Events

Transport Requirements

ION requires a stream that is:

  • Reliable
  • Ordered
  • Full duplex

Transport message boundaries are ignored.

Frame Format

Every message is a frame:

+---------+------+-------------------+
| u8 ver | u8 t | u32 len (LE) |
+---------+------+-------------------+
| payload (len bytes) |
+-----------------------------------+
  • ver: protocol version (0x01)
  • t: frame type
  • len: payload size in bytes (little-endian)

Unknown protocol versions must be rejected.

Frame Types

  • 0x01: JSON control event (UTF-8, object with type)
  • 0x02: raw PCM audio payload

Core Events

describe (client -> server):

{ "type": "describe" }

ready (server -> client):

{
"type": "ready",
"protocol": "ion",
"sample_rate": 16000,
"channels": 1,
"format": "s16le"
}

start:

{ "type": "start" }

stop:

{ "type": "stop" }

error:

{ "type": "error", "message": "reason" }

Audio Rules

  • Audio frames are valid only after start
  • Audio stops after stop
  • Chunk size is implementation-defined
  • No timestamps or sequence IDs in core protocol

State Model

CONNECT
-> describe
<- ready
-> start
<- audio*
-> stop

Extensibility

  • Unknown events should be ignored
  • New events and frame types may be added