Nook, c'est une messagerie pour ta famille — hébergée chez toi, sur ta machine.
Pas de compte Google. Pas d'abonnement. Pas de données envoyées ailleurs. Juste un serveur qui tourne dans ton réseau, accessible depuis n'importe quel appareil.
💬 Discuter en famille Messages en temps réel, réactions emoji, partage de photos et fichiers (jusqu'à 50 Mo). Un groupe global pour tout le monde, et la possibilité de créer des conversations privées.
🔐 Sans compromis sur la vie privée Les messages sont chiffrés de bout en bout (X25519). Les fichiers sont chiffrés sur le disque (XChaCha20). Les mots de passe ne sont jamais stockés en clair (Argon2id). Même toi, en tant qu'admin, tu ne peux pas les lire.
🔔 Notifications push Reçois une notification sur ton téléphone ou ordinateur quand quelqu'un t'écrit — même quand l'onglet est fermé. Activable depuis les Paramètres.
📅 Calendrier partagé Tous les événements de la famille au même endroit, sans passer par Google ou Apple.
♟️ Échecs en ligne Parties entre membres ou contre l'IA (easy / medium / hard). Les coups de l'adversaire arrivent en temps réel via WebSocket.
📊 Sondages Crée un vote en quelques secondes. Chacun répond, peut changer d'avis, et tu clos quand tu veux.
📞 Appels audio & vidéo Connexion directe entre appareils (WebRTC P2P) — le serveur ne voit jamais le flux. Fonctionne bien en LAN.
🎨 Trois thèmes Jardin Secret 🌿 · Space Hub 🚀 · Maison Chaleureuse 🏠 — avec mode sombre en option.
Prérequis : Docker + Docker Compose. C'est tout.
Fonctionne sur linux/amd64 et linux/arm64 (Raspberry Pi 4+, Zimaboard, NAS ARM).
git clone https://github.com/MX10-AC2N/Nook.git && cd Nook
cp .env.example .env # édite PUBLIC_SITE_URL avec l'IP de ton serveur
docker compose up -dOuvre http://ton-serveur:6300 dans un navigateur. C'est prêt. 🎉
Premier lancement — un compte
adminest créé automatiquement avec le mot de passechangeme2026. Tu seras forcé à le changer à la première connexion.
Mise à jour :
docker compose pull && docker compose up -dTout se passe dans le fichier .env — le .env.example contient toutes les variables documentées.
Les essentielles :
| Variable | Ce qu'elle fait |
|---|---|
PUBLIC_SITE_URL |
L'URL depuis laquelle tu accèdes à Nook (http://192.168.1.x:6300 ou ton domaine) |
ALLOWED_ORIGINS |
Si tu accèdes depuis plusieurs URLs (LAN + domaine externe), liste-les ici séparées par des virgules |
DATA_DIR |
Où stocker la base de données et les fichiers uploadés (utilise un chemin absolu sur un vrai serveur) |
VAPID_PRIVATE_KEY |
Pour les notifications push — générer avec npx web-push generate-vapid-keys |
VAPID_PUBLIC_KEY |
Idem — les deux vont ensemble |
Le fichier
.envreste sur ton serveur. Ne le committe jamais dans git.
Tu veux accéder à Nook depuis l'extérieur de ton réseau ? Place-le derrière un reverse proxy.
Compatible avec Nginx Proxy Manager, Caddy, Traefik.
https://nook.ta-famille.fr → http://localhost:6300
Deux choses importantes :
- Ajoute ton domaine dans
PUBLIC_SITE_URL(etALLOWED_ORIGINSsi différent) - Active le support WebSocket dans ton proxy (
/wsest utilisé pour le chess et les appels)
- Connecte-toi avec le compte
admin - Va dans
/admin→ onglet Invitations - Génère un lien — il expire dans 48h et ne fonctionne qu'une fois
- Envoie ce lien à la personne par SMS, email, ou en main propre
- Elle crée son compte → tu l'approuves dans l'onglet Membres en attente
Nook/
├── backend/ Rust + Axum 0.8 — API REST, WebSocket, auth, crypto
│ ├── src/ auth, chat, chess, polls, upload, push, e2ee...
│ └── migrations/ 6 migrations SQLite (users, conversations, chess, push...)
│
├── frontend/ SvelteKit 5 Runes + TypeScript
│ ├── src/routes/ login, chat, admin, calendar, chess, polls, settings...
│ ├── src/lib/ stores Svelte (auth, chat, chess, crypto, push...)
│ └── tests/ 115 tests Playwright E2E — tous verts ✅
│
├── Dockerfile Build depuis les sources (utilisé par les tests CI)
├── Dockerfile.release Binaires pré-compilés → image distroless (production)
└── docker-compose.yml Stack de production
Ce qui tourne réellement :
- Un binaire Rust dans une image distroless — pas de shell, pas d'outils inutiles, surface d'attaque minimale
- Une base SQLite dans le dossier
DATA_DIR - Un dossier d'uploads chiffrés, nettoyés automatiquement toutes les 24h
Mes données sont où ?
Dans le dossier DATA_DIR sur ta machine. Rien ne sort de chez toi.
Ça tourne sur Raspberry Pi ?
Oui. L'image est compilée nativement pour arm64 — Raspberry Pi 4+, Zimaboard, NAS Synology/QNAP/TrueNAS.
Le chiffrement est vraiment activé ? Oui depuis la v0.4.0-beta.2 : les clés X25519 sont générées à la première connexion de chaque membre et stockées chiffrées sur leur appareil. Les fichiers partagés sont chiffrés sur le disque depuis le début.
Les appels passent par ton serveur ? Non. WebRTC connecte les appareils directement entre eux. Le serveur fait uniquement le handshake initial.
Un membre a oublié son mot de passe ?
Depuis /admin → Membres → tu peux réinitialiser son mot de passe. Il devra le changer à la prochaine connexion.
Pas de pub. Pas de tracking. Pas de numéro de carte bancaire. Juste ta famille, chez toi.
🤜🤛