Repository navigation
v0.9.0 — NexusCanvas : Table Collaborative P2P
Nexus v0.9.0 — La Stack Rust Complète
Trois mois de travail. Une stack P2P Rust entièrement maison. Et un tableau blanc collaboratif par-dessus.
🦀 nexus-relay — Rust P2P Relay (Phase 3.0-A)
Un serveur relay Rust qui permet à n'importe qui d'héberger Nexus depuis chez soi, sans ouvrir un seul port.
Avant : impossible d'héberger Nexus derrière une box FAI (CGNAT, NAT strict, pas de port-forwarding).
Après : un binaire Rust de 9MB, un tunnel TCP persistant, et votre instance tourne depuis un Raspberry Pi sous le bureau.
nexus-relay server → écoute TCP:7443 + HTTP:7001
nexus-relay client → tunnel TCP vers le serveur, expose le port 80 local
- Tokio async runtime, gestion concurrente des requêtes par task
- Reconnexion automatique avec backoff exponentiel (1s → 30s max)
- Authentification par token JWT d'instance
- Routing par slug :
monio.nexusnode.app→ proxy vers le Pi derrière la box - Binary amd64 + arm64, service systemd inclus
- Validé en conditions réelles : Raspberry Pi 4, aucun port ouvert, aucun domaine ✅
🔁 WebRTC DataChannels P2P (Phase 3.0-B)
Messages directs peer-to-peer, sans passer par le serveur, même sur les messages ordinaires.
- Indicateurs de frappe instantanés (< 5ms latence locale vs 80-200ms via serveur)
- Réactions emoji optimistes (affichage immédiat, confirmation serveur en arrière-plan)
- Transfert d'assets P2P (images, fichiers partagés directement entre pairs)
- Fallback gracieux sur Socket.IO si DataChannel indisponible (NAT strict, etc.)
- Architecture mesh : chaque pair maintient un DataChannel ouvert avec tous les autres
🔐 nexus-turn — STUN/TURN Rust Natif (Phase 3.0-C)
Remplacement complet de coturn par une implémentation Rust maison.
coturn est un serveur C mature avec 15 ans d'histoire, des milliers de lignes de configuration, une surface d'attaque non triviale.
nexus-turn est un binaire Rust de 2.9MB qui fait exactement ce dont Nexus a besoin — rien de plus.
Protocole STUN/TURN (RFC 5389 + RFC 5766)
Credentials HMAC-SHA1 time-based (username={expires}:{userId})
UDP:3478 — tokio async, zero-copy où possible
- Allocation TURN avec quotas et rate limiting
- Ban map pour les clients abusifs
- Validation stricte des credentials (timestamp d'expiration, HMAC-SHA1)
- Binary amd64 + arm64, service systemd, config via env vars
- Testé : STUN Binding Request → 0x0101 Binding Success ✅
- Zéro dépendance coturn sur le VPS de production
🎨 NexusCanvas — Table Collaborative P2P (Canvas v1.0)
Un tableau blanc collaboratif, embarqué dans les salons vocaux, synchronisé en P2P.
- CRDT Last-Write-Wins par élément (UUID + timestamp) — implémentation maison ~100 lignes TypeScript
- Dessin, post-its, formes, effaceur — synchronisés via DataChannels existants
- Curseurs distants temps réel avec halo vocal (pulse violet quand le pair parle)
- Export PNG natif (browser API, zéro serveur) + résumé dans le salon chat
- Session éphémère par défaut — aucune donnée ne touche le serveur
📊 Ce que représente v0.9.0
| Composant | Technologie | Lignes de code |
|---|---|---|
| nexus-relay | Rust + Tokio | ~2 000 |
| nexus-turn | Rust + Tokio | ~1 500 |
| P2P DataChannels | TypeScript + WebRTC | ~400 |
| NexusCanvas | Svelte 5 + Canvas API | ~978 |
4 composants. ~5 000 lignes. Zéro service tiers.
🏗 Infrastructure v0.9.0
[Browser A] ──DataChannel──── [Browser B]
│ │
└──── nexus-relay (Rust) ─────┘ ← home servers sans port ouvert
│ │
└──── nexus-turn (Rust) ─────┘ ← STUN/TURN pour NAT traversal
│ │
└──── nexus-core (Fastify) ──┘ ← signaling WebRTC + Socket.IO
Pile complète 100% maison. Aucune dépendance à AWS, GCP, Twilio, Agora ou autre.
🔖 Releases P2P associées
v0.1.2-p2p— nexus-relay + nexus-turn (binaires amd64/arm64)
Nexus v0.9.0. La plateforme communautaire décentralisée qui tourne entièrement sur du code qu'on a écrit.