Pairing protocol

June 5, 2026 · View on GitHub

The pairing exchange is a sequence of short text payloads transmitted as GGWave audio. Each payload is an opcode prefix followed by its argument.

Opcodes

OpcodeDirectionPayloadMeaning
HMPSWD:Hub → Satellitepairing password"Pair with me using this password."
HMKEY:Satellite → Hubaccess key"Here is the key I generated; register me."
HMHOST:Hub → Satellitehub IP / address"I registered you; connect here."

Handshake

Hub (GGWaveMaster)               Satellite (GGWaveSlave)
        │                                  │
        │  HMPSWD:<password>               │   hub shows / broadcasts the code
        │─────────────────────────────────▶│
        │                                  │   satellite decodes password,
        │                                  │   generates an access key
        │                   HMKEY:<key>    │
        │◀─────────────────────────────────│
        │   hub registers client           │
        │   (key + password)               │
        │  HMHOST:<ip>                     │
        │─────────────────────────────────▶│
        │                                  │   satellite saves NodeIdentity
        │                                  │   (password, key, host) and connects

Notes

  • The password is a short random token shown by the hub; treat it as a one-time pairing secret.
  • The access key is generated by the satellite and becomes its HiveMind client identity once the hub registers it.
  • After HMHOST: is received and the identity is saved, GGWave stops; the satellite connects over the standard encrypted HiveMind WebSocket link.
  • All payloads are plain ASCII so they can also be entered/emitted by the browser tool by hand.