- Bitchat est une application de messagerie P2P décentralisée pour iOS et macOS, qui combine un réseau maillé Bluetooth et Nostr via Internet, et fonctionne sans compte, numéro de téléphone ni serveur central
- Hors ligne, elle prend en charge le relais jusqu’à 7 sauts via Bluetooth LE ; avec une connexion Internet, elle se connecte à des canaux mondiaux et géolocalisés via plus de 290 relais Nostr
- Les messages privés utilisent en priorité le Noise Protocol de Bluetooth ; si la connexion est impossible, ils basculent vers NIP-17 de Nostr, et si les deux options sont indisponibles, ils restent en file d’attente jusqu’à ce qu’un envoi soit possible
- Selon la précision du geohash, elle propose des canaux à l’échelle du pâté de maisons, du quartier, de la ville, de la province ou du pays, avec des commandes de type IRC comme
/slap, /msg, /who, ainsi qu’un Emergency Wipe qui efface les données après trois appuis
- Le projet est publié dans le domaine public et peut être lancé avec Xcode ou
just, mais une compilation pour appareil réel nécessite un Developer Team ID et la configuration des entitlements
Architecture de transmission combinant Bluetooth et Nostr
- Bitchat est une application native iOS et macOS combinant un maillage Bluetooth et Nostr, également disponible sur l’App Store
- Le réseau maillé Bluetooth détecte et connecte automatiquement les appareils à proximité sans Internet
- Communication P2P directe via Bluetooth LE, avec relais des messages jusqu’à 7 sauts en passant par les appareils voisins
- Chiffrement de bout en bout basé sur Noise Protocol et prise en charge de la confidentialité persistante
- Format de paquets binaires compressés adapté aux contraintes du Bluetooth LE et cycle d’activité optimisé pour la batterie
- Le canal
mesh #bluetooth vise les communications hors ligne lors de manifestations, de catastrophes ou dans des zones isolées
- La couche de transport Nostr fournit une messagerie Internet via plus de 290 relais dans le monde
- Création de salons de discussion géolocalisés à partir de coordonnées geohash, avec une nouvelle identité chiffrée temporaire pour chaque zone
- Les messages privés sont protégés par le gift wrapping NIP-17
- Les canaux de localisation nécessitent une connexion Internet et servent aux communautés locales, événements de proximité et discussions régionales
block 7 caractères : pâté de maisons
neighborhood 6 caractères : secteur·quartier
city 5 caractères : ville
province 4 caractères : province·département
region 2 caractères : pays·grande région
- Le routage des messages privés choisit automatiquement le moyen de transport disponible
- Si une session Noise existante est disponible, il privilégie la connexion Bluetooth, rapide et plus privée
- Si Bluetooth n’est pas disponible, il envoie via le réseau de relais en utilisant la clé publique Nostr du destinataire et NIP-17
- Si aucune des deux méthodes n’est disponible, le message est conservé en file d’attente puis transmis automatiquement dès qu’une connexion est établie
- Bitchat propose aussi la compression des messages avec LZ4, un mode batterie adaptatif, des optimisations réseau, des commandes de type IRC et un Emergency Wipe qui supprime immédiatement toutes les données après trois appuis
- Le protocole détaillé est disponible dans le Technical Whitepaper
Build, localisation et licence
- Pour l’exécuter dans Xcode, utilisez les commandes suivantes depuis le dépôt
cd bitchat
open bitchat.xcodeproj
- Pour l’exécuter sur un appareil réel, il faut préparer la configuration locale et la signature du code
- Dupliquez le fichier de configuration avec
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
- En ajoutant le Developer Team ID au nouveau fichier, le Bundle ID par défaut devient
chat.bitchat.<team_id>
- Il faut modifier manuellement l’entitlement
group.chat.bitchat en group.<your_bundle_id>
- Sur macOS, après
brew install just, just run permet de configurer et de lancer les sources
- Ensuite,
just clean restaure l’état initial pour le build et le développement de l’app mobile
- Les ressources de localisation sont réparties entre l’app et l’extension de partage
- Les chaînes de l’app principale et les règles de pluriel s’ajoutent dans
Localizable.strings et Localizable.stringsdict sous bitchat/Localization/Base.lproj/
- Les chaînes de l’extension de partage sont gérées dans
bitchatShareExtension/Localization/Base.lproj/Localizable.strings
- Les clés doivent exprimer l’intention, comme
app_info.features.offline.title, et réutiliser autant que possible les clés existantes
- Les changements de localisation se vérifient à la compilation avec
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
- Le projet est distribué dans le domaine public ; les conditions détaillées sont disponibles dans LICENSE
1 commentaires
Avis sur Hacker News
Hier, j’ai installé le client desktop Radicle et saisi un nouveau nom d’utilisateur et un mot de passe, mais rien ne s’est passé. Même après avoir redémarré l’application, impossible de dépasser l’écran de création de compte/connexion ; mon utilisation de Radicle s’est arrêtée là.
Si la disponibilité est importante, il faudrait réexaminer la dépendance
libs.gms.locationet distribuer aussi l’application sur F-Droid (https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)Au Fusion Festival, je me suis promené avec Bitchat activé et j’ai trouvé environ 20 appareils et quelques messages, mais personne n’a répondu aux messages que j’ai envoyés. Sur 80 000 personnes, 20 appareils, ce n’est pas zéro utilisateur, mais ce n’est pas énorme non plus, et le réseau n’allait pas au-delà de 2 sauts, donc la densité n’était pas suffisante pour traverser le site du festival.
C’est utile dans l’avion quand on est séparé de ses compagnons de voyage parce qu’on n’a pas voulu payer 50 dollars de plus pour être assis ensemble.
Si BitChat vous intéresse, ça vaut le coup de l’installer dès maintenant au cas où il deviendrait populaire, ou pour le jour où vous croiserez quelqu’un avec qui l’utiliser. En l’essayant moi-même, échanger des SMS sans Wi-Fi ni réseau mobile donnait une impression irréelle.
Des géohash imbriqués pourraient aussi convenir, mais je crains la confusion façon talkie-walkie, où l’on ne voit que la moitié de la conversation si une seule personne est dans la zone. Le géohash actuel peut descendre à environ 1 acre, ce qui est trop précis, mais cela peut être utile si tout un dortoir universitaire de 12 étages utilise le même salon.
Le site de Radicle présente un design intéressant pour une plateforme de dépôts Git. J’aime bien les marges pleine largeur, la navigation bien structurée et le rendu agréable du code.
Bitchat est un projet d’AOS. Je suis surpris qu’il n’ait pas été réhébergé sur ngit, un autre projet d’AOS.
Quand on tombe dans le purisme Nostr, on se retrouve souvent avec seulement 5 personnes qui voient les publications. J’aime le protocole, mais pour attirer des utilisateurs, il faut placer les apps là où les gens se trouvent déjà.
Je me demande s’il a des fonctions particulières par rapport à d’autres produits de messagerie décentralisée comme Nostr ou XMTP.
Discussion connexe de la veille : « Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey »
https://news.ycombinator.com/item?id=49036433