VNOX-Server/docs/06-roadmap.md

7.1 KiB
Raw Blame History

Roadmap


Phase 1 — MVP

Goal: a working voice + chat system you can actually use.

Server

  • LNEx v1 protocol spec
  • Gateway: auth, sessions, channels, text chat
  • Voice node: UDP relay (jitter buffer code exists, not wired into relay yet)
  • SQLite storage: message history, user records
  • Docker + systemd deployment (Dockerfile, docker-compose.yml)
  • config.toml reference (configuration.md, dev/README.md)

Client

  • Identity: keypair generation, Ed25519 auth
  • Node switcher — bookmarks with save/remove
  • Channel list: text + voice
  • Text chat
  • Voice chat: push-to-talk, VAD, always-on modes
  • Noise suppression (RNNoise, feature-gated)
  • Settings: voice, audio, network, identity, keybinds
  • Latency indicator

Protocol

  • Packet format finalized (JSON framing in Phase 1)
  • Error codes documented

Phase 1.1 — Hardening & Core Features

Goal: production-safe for small private communities.

Encryption (Priority 1) ✅ DONE

  • Replace plaintext with ChaCha20-Poly1305 on all packets
  • X25519 ECDH key exchange during HELLO handshake
  • HKDF-SHA256 key derivation (client→server / server→client keys)
  • Encrypted TCP (control) + UDP (voice) paths
  • Forward secrecy via ephemeral session keys
  • Session nonce management for replay protection

All traffic is now encrypted. See features/encryption.md.

Direct Messages ✅ DONE

  • New packet type: DM_MESSAGE (separate from CHAT_MESSAGE)
  • Gateway routing: create private DM channel on first message
  • DB schema: direct_messages + dm_messages tables
  • UI: DM list in sidebar (like Discord)
  • Unread count tracking
  • Message sync to both participants
  • DM history search bar

See features/direct-messages.md. Backend and UI complete.

Private Mode ✅ DONE

  • Config flag: [federation] enabled = false / [server] mode = "private"
  • Server cannot see or reach other servers when private
  • No federation packets sent
  • Makes VNOX safe for single-server deployment (OwnCord-style)

UI Refresh

  • Evaluate Slint vs improving egui design system — staying on egui
  • Custom dark theme with accent color support (#E67E22 orange)
  • Redesigned channel list and user bar
  • Consistency pass across all settings panels
  • Slint migration plan exists at docs/superpowers/plans/2026-05-31-slint-migration.md (deferred to Phase 2+)

Client Polish

  • Audio device labels in settings (live cpal enumeration)
  • Opus bitrate slider (8–128 kbps)
  • Jitter buffer size and adaptive mode
  • Per-user volume control (client-side mix)
  • Keybind recording UI (capture keystroke, not type string)

Phase 1.2 — Community Foundation

Goal: guilds, roles, permissions, presence layer.

Community Model (Priority 1) ✅ DONE

  • Guild system: create, list, delete, settings
  • Role system with permission bits (u64)
  • Permission resolution (owner → admin → roles → channel overrides)
  • Invite system: permanent and temporary
  • Guild member management: join, leave, kick
  • Audit log for admin actions
  • Invite accept popup dialog
  • Guild header with member count and Leave button

Direct Messages UI ✅ DONE

  • DM list in sidebar (per-user, not per-guild)
  • DM conversation panel (similar to channel chat)
  • Unread badges and notification dots
  • Search DM history
  • Per-conversation volume controls

Presence System ✅ DONE

  • Status types: ONLINE, IDLE, DO_NOT_DISTURB, OFFLINE, INVISIBLE
  • Activity status: playing, listening, watching, streaming — deferred
  • Custom status text — deferred
  • Broadcast on login/logout
  • Clickable status cycler in user bar

Friends System ✅ DONE

  • Friend requests
  • Friends list with Online / All / Pending / Blocked tabs
  • Pending count badge on Friends tab
  • Block list (placeholder UI)
  • Friend notifications (incoming request badge)
  • Add Friend popup with user-id input
  • Per-friend DM shortcut and remove button

UI Refresh ✅ DONE

  • Sidebar restructure for guilds + DMs
  • Guild switcher (vertical icons on left)
  • Role color display in user mentions
  • Category collapsing
  • Right-hand member list panel (online/offline per channel)

Phase 1.3 — Advanced Features

Goal: typing indicators, read receipts, typing states.

Typing & Read Status ✅ DONE

  • Typing indicators in text channels
  • Read receipts per message
  • Last read pointer storage
  • Multi-user typing indicator ("Alice and Bob are typing...")

Voice Improvements ✅ DONE

  • Speaking indicators with volume levels
  • Voice activity detection (local visualization — green dot/border on speaking)
  • Adaptive bitrate negotiation
  • Voice activity banner ("you are talking" / "someone is talking")

Client Polish ✅ DONE

  • Message reactions (emoji)
  • Message editing (with "(edited)" marker)
  • Message deletion with confirmation
  • Per-user volume control (client-side mix)

Phase 2

Goal: scalability, federation preparation, advanced security.

Server

  • TLS 1.3 on TCP control plane
  • Permission system enforcement in gateway
  • Rate limiting refinement
  • PostgreSQL backend (sqlx support ready, config not exposed yet)
  • Prometheus metrics on gateway and voice-node
  • Gateway admin API (HTTP endpoint)
  • Identity keypair encryption at rest (Argon2id passphrase)

Protocol

  • Protobuf schemas (replacing JSON)
  • E2EE for direct messages (optional)
  • E2EE for private channels (opt-in)
  • Voice regions: Warsaw, Frankfurt, Amsterdam, London, New York, Singapore

Client

  • Seed phrase backup UI
  • Keyfile export / import
  • Per-user volume control (client-side mix)
  • Overlay: Windows, Linux X11, speaking indicators, mute/deafen state

Federation Foundation

  • LNEx federation protocol spec
  • Node-to-node handshake and mutual auth
  • Federation discovery (DNS SRV)

Plugins Foundation

  • Plugin runtime (Deno or QuickJS — decision required)
  • WebSocket RPC API v1
  • Plugin manifest and permissions
  • Example plugins: moderation bot, music bot

Phase 3

Goal: federation ecosystem and mobile clients.

Federation

  • Text chat bridging between nodes
  • Voice relay across nodes
  • Channel bridging
  • Federation admin controls (trust levels, denylist)
  • Shared user directory

Plugins Ecosystem

  • Plugin installer in client
  • Community plugin registry (basic)
  • Advanced plugins: relay-switcher, analytics, moderation suite

Mobile

  • Stack decision (Flutter / React Native / Native)
  • MVP: connect, text, voice, push-to-talk
  • Identity import from desktop (QR / keyfile)

Future ideas (unscheduled)

Spatial audio for games, adaptive bitrate relay, distributed mesh, VNOX SDK (Rust → TypeScript → Python), offline message queue.