bitchat
Eine dezentrale Peer-to-Peer-Messaging-App mit dualer Transportarchitektur: lokale Bluetooth-Mesh-Netzwerke für Offline-Kommunikation und das internetbasierte Nostr-Protokoll für globale Reichweite. Keine Konten, keine Telefonnummern, keine zentralen Server. Es ist der Side-Groupchat.
bitchat.free
📲 App Store
Lizenz
Dieses Projekt ist der Public Domain übergeben. Siehe die LICENSE Datei für Details.
Funktionen
- Duale Transportarchitektur: Bluetooth-Mesh für Offline + Nostr-Protokoll für internetbasierte Nachrichten
- Ortsbasierte Kanäle: Geografische Chaträume mittels Geohash-Koordinaten über globale Nostr-Relays
- Intelligente Nachrichtenweiterleitung: Wählt automatisch den besten Transport (Bluetooth → Nostr-Fallback)
- Dezentrales Mesh-Netzwerk: Automatische Peer-Erkennung und Multi-Hop-Nachrichtenweiterleitung über Bluetooth LE
- Datenschutz an erster Stelle: Keine Konten, keine Telefonnummern, keine persistenten Identifikatoren
- Ende-zu-Ende-Verschlüsselung für private Nachrichten: Noise Protocol für Mesh, NIP-17 für Nostr
- IRC-ähnliche Befehle: Vertraute
/slap, /msg, /who-Schnittstelle
- Universelle App: Native Unterstützung für iOS und macOS
- Notfall-Löschung: Dreifach-Tippen, um sofort alle Daten zu löschen
- Leistungsoptimierungen: LZ4-Nachrichtenkomprimierung, adaptive Akkumodi und optimierte Netzwerknutzung
BitChat verwendet eine hybride Messaging-Architektur mit zwei komplementären Transportschichten:
Bluetooth-Mesh-Netzwerk (Offline)
- Lokale Kommunikation: Direkter Peer-to-Peer innerhalb der Bluetooth-Reichweite
- Multi-Hop-Weiterleitung: Nachrichten werden über nahegelegene Geräte weitergeleitet (max. 7 Hops)
- Kein Internet erforderlich: Funktioniert komplett offline in Katastrophenszenarien
- Noise-Protokoll-Verschlüsselung: Ende-zu-Ende-Verschlüsselung mit Vorwärtsgeheimnis
- Binärprotokoll: Kompaktes Paketformat, optimiert für Bluetooth-LE-Einschränkungen
- Automatische Erkennung: Peer-Erkennung und Verbindungsmanagement
- Adaptive Stromversorgung: Akkuoptimiertes Duty Cycling
Nostr-Protokoll (Internet)
- Globale Reichweite: Verbinde dich mit Nutzern weltweit über Internet-Relays
- Ortskanäle: Geografische Chaträume mittels Geohash-Koordinaten
- 290+ Relay-Netzwerk: Zur Zuverlässigkeit weltweit verteilt
- NIP-17-Verschlüsselung: Geschenkverpackte private Nachrichten für Internet-Datenschutz
- Ephemere Schlüssel: Neue kryptografische Identität pro Geohash-Bereich
Kanaltypen
mesh #bluetooth
- Transport: Bluetooth-Low-Energy-Mesh-Netzwerk
- Reichweite: Lokale Geräte im Multi-Hop-Bereich
- Internet: Nicht erforderlich
- Anwendungsfall: Offline-Kommunikation, Proteste, Katastrophen, abgelegene Gebiete
Ortskanäle (block #dr5rsj, neighborhood #dr5rs, country #dr)
- Transport: Nostr-Protokoll über Internet
- Reichweite: Geografische Gebiete, definiert durch Geohash-Genauigkeit
block (7 Zeichen): Stadtblockebene
neighborhood (6 Zeichen): Bezirk/Nachbarschaft
city (5 Zeichen): Stadtebene
province (4 Zeichen): Bundesland/Provinz
region (2 Zeichen): Land/große Region
- Internet: Erforderlich (verbindet mit Nostr-Relays)
- Anwendungsfall: Ortsbasierter Community-Chat, lokale Veranstaltungen,regionale Diskussionen
Direktnachrichten-Weiterleitung
Private Nachrichten verwenden intelligente Transportauswahl:
-
Bluetooth zuerst (bevorzugt, wenn verfügbar)
- Direkte Verbindung mit etablierter Noise-Sitzung
- Schnellste und privateste Option
-
Nostr-Fallback (wenn Bluetooth nicht verfügbar)
- Verwendet den öffentlichen Nostr-Schlüssel des Empfängers
- NIP-17-Geschenkverpackung für Privatsphäre
- Weiterleitung über globales Relay-Netzwerk
-
Intelligentes Queuing (wenn keines verfügbar)
- Nachrichten werden in die Warteschlange gestellt, bis ein Transport verfügbar wird
- Automatische Zustellung bei Verbindungsaufbau
Ausführliche Protokolldokumentation findest du im Technischen Whitepaper.
Einrichtung
Option 1: Mit Xcode
cd bitchat
open bitchat.xcodeproj
Um auf einem Gerät zu laufen, sind einige Schritte zur Vorbereitung des Codes nötig:
- Klone die lokalen Konfigurationen:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
- Füge deine Entwickler-Team-ID in die neu erstellte
Configs/Local.xcconfig ein
- Die Bundle-ID wird auf
chat.bitchat.<team_id> gesetzt (sofern du nichts anderes angibst)
- Berechtigungen müssen manuell aktualisiert werden (TODO: Automatisieren):
- Suche und ersetze
group.chat.bitchat durch group.<deine_bundle_id> (z. B. group.chat.bitchat.ABC123)
Option 2: Mit just
Möchtest du das unter macOS ausprobieren: just run richtet es ein und startet es aus dem Quellcode. Führe anschließend just clean aus, um den ursprünglichen Zustand für die mobile App-Erstellung und -Entwicklung wiederherzustellen.
Lokalisierung
- Die Basis-App-Ressourcen befinden sich unter
bitchat/Localization/Base.lproj/. Füge neue Texte in Localizable.strings und Pluralregeln in Localizable.stringsdict hinzu.
- Die Share-Extension-Strings sind separat in
bitchatShareExtension/Localization/Base.lproj/Localizable.strings.
- Bevorzuge Schlüssel, die die Absicht beschreiben (z. B.
app_info.features.offline.title) und verwende nach Möglichkeit bestehende.
- Führe
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build aus, um Lokalisierungsupdates auf Kompilierungsfehler zu prüfen.