No description
Find a file
2026-07-21 17:39:50 +02:00
.cargo Initial commit: split VNOX monorepo into VNOX-Server 2026-07-09 11:52:56 +02:00
.github/.github Initial commit: split VNOX monorepo into VNOX-Server 2026-07-09 11:52:56 +02:00
dev fix dev/ directory nesting 2026-07-09 12:33:17 +02:00
docs add docs, protocol, plugins, README, CHANGELOG 2026-07-09 12:30:55 +02:00
gateway docs: rewrite README with architecture, feature list, badges; fix encryption status; add voice-node relay tests; fix clippy warnings 2026-07-21 17:39:50 +02:00
plugins/examples/modbot add docs, protocol, plugins, README, CHANGELOG 2026-07-09 12:30:55 +02:00
protocol docs: rewrite README with architecture, feature list, badges; fix encryption status; add voice-node relay tests; fix clippy warnings 2026-07-21 17:39:50 +02:00
serverd Phase 2: PostgreSQL, E2EE, channel CRUD, voice signaling, Slint migration 2026-07-14 13:25:14 +02:00
voice-node docs: rewrite README with architecture, feature list, badges; fix encryption status; add voice-node relay tests; fix clippy warnings 2026-07-21 17:39:50 +02:00
.gitignore Initial commit: split VNOX monorepo into VNOX-Server 2026-07-09 11:52:56 +02:00
Cargo.lock Phase 2: PostgreSQL, E2EE, channel CRUD, voice signaling, Slint migration 2026-07-14 13:25:14 +02:00
Cargo.toml Initial commit: split VNOX monorepo into VNOX-Server 2026-07-09 11:52:56 +02:00
CHANGELOG.md add docs, protocol, plugins, README, CHANGELOG 2026-07-09 12:30:55 +02:00
docker-compose.yml Initial commit: split VNOX monorepo into VNOX-Server 2026-07-09 11:52:56 +02:00
Dockerfile Initial commit: split VNOX monorepo into VNOX-Server 2026-07-09 11:52:56 +02:00
Dockerfile.voice-node Initial commit: split VNOX monorepo into VNOX-Server 2026-07-09 11:52:56 +02:00
LICENSE add GPL-3.0 license 2026-07-09 12:05:04 +02:00
README.md docs: rewrite README with architecture, feature list, badges; fix encryption status; add voice-node relay tests; fix clippy warnings 2026-07-21 17:39:50 +02:00

VNOX — Server

Self-hosted voice and chat server. No cloud. No tracking. Your hardware, your rules.

Not Discord. Not TeamSpeak. Not someone else's cloud.

License: GPL-3.0 Rust Status: Phase 1


What is VNOX?

VNOX is a self-hosted, real-time voice and text communication platform built entirely in Rust. It runs on your own server, uses a custom low-latency protocol (LNEx), and has no dependency on any third-party infrastructure.

The architecture is deliberately split into two components:

  • Gateway — TCP server: authentication, channels, text chat, guilds, roles, permissions, DMs, invites, audit log
  • Voice Node — UDP relay: Opus audio, jitter buffer, per-channel packet routing

Both are written in Rust on top of Tokio. The client is a separate native application at VNOX-Client/.


Why Rust?

  • Tokio async runtime handles thousands of concurrent connections with minimal overhead
  • No GC pauses during active voice sessions
  • Memory safety without a garbage collector
  • Single cross-platform binary — Windows, macOS, Linux

Architecture

┌──────────────────────────────────────────────────────┐
│                    VNOX Client                       │
│              (Rust + Slint UI)                       │
└──────────────────────┬───────────────────────────────┘
                       │ LNEx v1
            ┌──────────┴──────────┐
            │ TCP                 │ UDP
            ▼                     ▼
┌─────────────────────┐   ┌──────────────────────┐
│      Gateway        │   │     Voice Node        │
│   (Rust / Tokio)    │   │      (Rust)           │
│                     │   │                        │
│  auth (Ed25519)     │   │  Opus relay           │
│  channels           │   │  jitter buffer        │
│  sessions           │   │  packet routing       │
│  guilds, roles      │   │  member tracking      │
│  permissions        │   └──────────────────────┘
│  DMs, invites       │
│  audit log          │
│  rate limiting      │
│  Prometheus metrics │
└──────────┬──────────┘
           │ SQLite
           ▼
      ┌──────────┐
      │ Storage  │
      └──────────┘

Full architecture details: docs/01-architecture.md


Features

Implemented

  • Auth: Ed25519 challenge-response, session tokens, reconnect with backoff
  • Encryption: ChaCha20-Poly1305 AEAD + X25519 ECDH key exchange + HKDF key derivation
  • Channels: Create, delete, list; text and voice channel types
  • Text chat: Persistent history via SQLite, reactions, replies, edit, delete, typing indicators, read receipts
  • Direct Messages: 1:1 DMs with persistent history, unread badges, search
  • Guilds: Create, list, delete, settings
  • Roles: u64 permission bits, channel overrides, owner bypass
  • Invites: Permanent and temporary, accept/decline
  • Friends: Requests, accept/decline, Online/All/Pending/Blocked tabs
  • Presence: Online/Idle/DND/Invisible, custom status text, activity display
  • Rate limiting: Per-session token bucket on chat + DMs
  • Metrics: Prometheus (messages, DMs, voice packets, connections, auth failures, guilds, sessions)
  • Admin HTTP: GET /health, GET /version, GET /metrics
  • Audit log: All guild mutations logged
  • Identity vault: Optional Argon2id + ChaCha20-Poly1305 keyfile encryption at rest
  • Keyfile export/import: Encrypted or plain JSON keyfile with passphrase

Planned

  • TLS 1.3 on TCP (Phase 2)
  • Protobuf wire format (Phase 2)
  • PostgreSQL backend (Phase 2)
  • Federation protocol (Phase 3)
  • Plugin runtime (Phase 3)

Status

Phase 1 is implemented. Not production ready.

Component Status
Gateway TCP listener, LNEx handshake, channels, chat, SQLite
Voice node UDP relay, voice packet routing, jitter buffer
Desktop client Slint UI, net layer, audio pipeline (partial)
LNEx protocol Specified and implemented (JSON in Phase 1)
Encryption ChaCha20-Poly1305 AEAD + X25519 ECDH — DONE
Federation Planned (Phase 3)
Mobile client Planned (Phase 3)

See docs/00-status.md for a full breakdown.


Quick start

Requirements: Rust 1.85+, a running VNOX Client

# Terminal 1 — gateway
cargo run -p vnox-gateway -- --config dev/config.toml

# Terminal 2 — voice node
cargo run -p vnox-voice-node -- --config dev/config.toml

The client connects to 127.0.0.1:7600 by default. Config reference: dev/README.md.

Docker

docker-compose up

Opus on Windows

audiopus_sys builds libopus from source via CMake. CMake 4.x policy flag is already set in .cargo/config.toml — no manual steps needed.


Protocol: LNEx

LNEx is a custom application-layer protocol for low-latency federated communication. Sits above TCP and UDP, defines packet framing, encryption, and routing.

Phase 1 uses JSON framing; Phase 2 will migrate to Protobuf.

The specification is CC0 (public domain) — anyone can implement a compatible client or server.

Details: docs/02-protocol/README.md


Project structure

gateway/          # TCP gateway (auth, channels, chat, guilds)
  ├── src/
  │   ├── proto/      # LNEx protocol: packets, crypto, framing
  │   ├── net/        # I/O, handshake, session state
  │   ├── handler/    # Packet handlers (chat, channel, guild, etc.)
  │   ├── domain/     # Business logic: auth, storage, rate limiting
  │   ├── admin/      # HTTP admin server (health, metrics)
  │   └── bootstrap/  # Startup, config, server identity
  └── Cargo.toml

voice-node/       # UDP voice relay
  ├── src/
  │   ├── jitter/    # Jitter buffer (adaptive + fixed modes)
  │   ├── relay.rs   # Per-channel relay, member tracking
  │   └── runner.rs  # UDP listener loop
  └── Cargo.toml

serverd/          # Unified server daemon (bundles gateway + voice)
docs/             # Documentation
dev/              # Local development config


License

Server code: GPL-3.0 — see LICENSE
LNEx protocol specification: CC0 (public domain)