7.1 KiB
7.1 KiB
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 fromCHAT_MESSAGE) - Gateway routing: create private DM channel on first message
- DB schema:
direct_messages+dm_messagestables - 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.