No description
Find a file
2026-07-21 17:39:51 +02:00
.cargo Initial commit: split VNOX monorepo into VNOX-Client 2026-07-09 11:52:57 +02:00
docs add slint migration plan 2026-07-14 12:10:32 +02:00
src docs: rewrite README with feature list, tech stack, status table; fix Slint padding warnings; update encryption status 2026-07-21 17:39:51 +02:00
.gitignore Initial commit: split VNOX monorepo into VNOX-Client 2026-07-09 11:52:57 +02:00
build.rs Phase 2: E2EE for DM + Slint migration + dead code cleanup 2026-07-14 13:25:15 +02:00
Cargo.lock Phase 2: E2EE for DM + Slint migration + dead code cleanup 2026-07-14 13:25:15 +02:00
Cargo.toml Phase 2: E2EE for DM + Slint migration + dead code cleanup 2026-07-14 13:25:15 +02:00
CHANGELOG.md add client docs, README, CHANGELOG 2026-07-09 12:30:56 +02:00
LICENSE add GPL-3.0 license 2026-07-09 12:05:04 +02:00
README.md docs: rewrite README with feature list, tech stack, status table; fix Slint padding warnings; update encryption status 2026-07-21 17:39:51 +02:00

VNOX — Client

Native desktop client for VNOX. Voice, text, no cloud.

License: GPL-3.0 Rust Status: Phase 1


What is this?

The official desktop client for VNOX — a self-hosted voice and text communication platform. Connects to a VNOX server over the LNEx protocol.

  • Connects to gateway via TCP (text, auth, channels, guilds, DMs)
  • Connects to voice node via UDP (encrypted Opus voice packets)
  • Opus audio encoding/decoding with adaptive jitter buffer
  • Native UI built with Slint — no Electron, no web views

Features

Implemented

  • Auth: Ed25519 keypair generation, challenge-response login, reconnect with exponential backoff
  • Encryption: ChaCha20-Poly1305 AEAD + X25519 ECDH key exchange
  • Text chat: Persistent history, reactions, replies, edit, delete, typing indicators, read receipts
  • Channel management: Join, leave, create, delete; text and voice channels
  • Guilds: Create, list, leave, member list with roles, kick, audit log viewer
  • Roles: Role list, assign/unassign with permission checks
  • Direct Messages: 1:1 DMs with persistent history, unread badges, search
  • Friends: Requests, accept/decline, Online/All/Pending/Blocked tabs
  • Presence: Online/Idle/DND/Invisible, custom status text, activity display
  • Voice: PTT / VAD / always-on modes, configurable bitrate, per-user volume
  • Jitter buffer: Adaptive mode, configurable target latency
  • Noise suppression: RNNoise (feature-gated, off by default)
  • Identity vault: Optional Argon2id + ChaCha20-Poly1305 encrypted keyfile
  • Keyfile export/import: Encrypted or plain JSON with passphrase
  • Bookmarks: Save/remove server nodes in connect screen

Planned

  • In-game overlay (Phase 2)
  • Federation support (Phase 3)
  • Mobile client (Phase 3)

Status

Phase 1 is implemented. Not production ready.

Feature Status
Connect to server ✅ Working
Text chat ✅ Working
Channel management ✅ Working
Guilds & roles ✅ Working
Direct Messages ✅ Working
Friends & presence ✅ Working
Voice (send/receive) 🔧 Partial (audio pipeline)
Encryption ✅ ChaCha20-Poly1305 + X25519
In-game overlay 🔲 Phase 2
Mobile client 🔲 Phase 3

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


Quick start

Requirements: Rust 1.85+, a running VNOX Server

# 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

# Terminal 3 — client
cargo run -p vnox-client

The client connects to 127.0.0.1:7600 by default. You can change the address in the UI on the connect screen.

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.


Tech stack

Layer Technology
UI Slint
Networking Tokio (async TCP + UDP)
Audio cpal + rodio + opus + rnnoise
Identity ed25519-dalek + x25519-dalek
Crypto ChaCha20-Poly1305 + Argon2id
Protocol LNEx v1 (JSON, Phase 1)

Project structure

src/
├── main.rs             # Entry point
├── ui/                 # Slint UI (slint files + Rust glue)
├── net/                # LNEx TCP + UDP networking
│   ├── crypto/         # Session encryption
│   ├── framing/        # Packet read/write
│   ├── voice/          # UDP voice send/recv
│   └── session/        # Connection lifecycle, reconnection
├── audio/              # Audio pipeline
│   ├── capture.rs      # Mic → Opus encode
│   ├── playback.rs     # Opus decode → speaker
│   ├── config.rs       # Bitrate, VAD, jitter settings
│   └── processing/     # VAD, noise suppression
├── identity_vault.rs   # Argon2id-encrypted keyfile
├── app.rs              # UI state and event dispatch
└── jitter/             # Jitter buffer

License

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