VNOX-Server/docs/02-protocol/README.md

2.9 KiB

LNEx Protocol

Phase 1: JSON over plain TCP, raw Opus over UDP. Wire encryption is Phase 2. See 00-status.md.

LNEx (Loki Network Exchange) is the networking protocol used by VNOX.

It is a custom application-layer protocol that runs over TCP and UDP. It defines how VNOX clients and servers communicate — packet format, encryption, routing, identity, and federation.


Design goals

  • low latency for voice packets (UDP path)
  • reliable delivery for control messages (TCP path)
  • encrypted by default in production (Phase 2 target; plaintext in v0.1.x dev builds)
  • identity without central authority: keypair-based, no email, no server account registry
  • federation between independent nodes (Phase 3)

Non-goals

  • backward compatibility with Discord, TeamSpeak, or Matrix
  • browser / WebSocket native support (use a gateway adapter if needed)
  • guaranteed ordering on the UDP voice path

Version

Current version: LNEx v1

Version is negotiated during handshake. Clients and servers advertise their supported versions. If no common version exists, the connection is rejected with ERR_VERSION_MISMATCH.

LNEx versioning is independent from VNOX client and server versioning. A new VNOX release may or may not bump the LNEx version.


Transport mapping

Path Transport Used for
Control TCP auth, chat, channels, events, federation
Voice UDP audio frames, realtime state

Both paths use LNEx packet framing. The packet format is the same; the transport-specific behavior (ordering, retransmit) is left to TCP/UDP.


Connection lifecycle

Client                          Gateway
  │                                │
  │──── TCP connect ───────────────▶│
  │◀─── HELLO (server pubkey) ──────│
  │──── AUTH (client pubkey + sig) ─▶│
  │◀─── SESSION (session_id, token) ─│
  │                                │
  │   [control channel established] │
  │                                │
  │──── JOIN_CHANNEL ──────────────▶│
  │◀─── CHANNEL_STATE ──────────────│
  │                                │
  │   [UDP voice path]             │
  │──── UDP VOICE_PACKET ──────────▶│ Voice Node
  │◀─── UDP VOICE_PACKET ───────────│

Full state machine: see individual spec files.


Sections