bitchat
Un'app di messaggistica decentralizzata peer-to-peer con architettura a doppio trasporto: reti mesh Bluetooth locali per comunicazioni offline e protocollo Nostr su Internet per portata globale. Niente account, niente numeri di telefono, niente server centrali. È il side-groupchat.
bitchat.free
📲 App Store
Licenza
Questo progetto è rilasciato nel pubblico dominio. Vedi il file LICENSE per i dettagli.
Caratteristiche
- Architettura a doppio trasporto: mesh Bluetooth per offline + protocollo Nostr per messaggistica via Internet
- Canali basati sulla posizione: chat room geografiche usando coordinate geohash su relay Nostr globali
- Routing intelligente dei messaggi: sceglie automaticamente il trasporto migliore (Bluetooth → fallback Nostr)
- Rete mesh decentralizzata: scoperta automatica dei peer e inoltro multi-hop dei messaggi via Bluetooth LE
- Priorità alla privacy: nessun account, nessun numero di telefono, nessun identificatore persistente
- Crittografia end-to-end dei messaggi privati: Protocollo Noise per la mesh, NIP-17 per Nostr
- Comandi in stile IRC: interfaccia familiare con
/slap, /msg, /who
- App universale: supporto nativo per iOS e macOS
- Cancellazione di emergenza: triplo tocco per cancellare istantaneamente tutti i dati
- Ottimizzazioni delle prestazioni: compressione messaggi LZ4, modalità batteria adattive e networking ottimizzato
BitChat utilizza un'architettura di messaggistica ibrida con due livelli di trasporto complementari:
Rete Mesh Bluetooth (Offline)
- Comunicazione locale: peer-to-peer diretto entro il raggio Bluetooth
- Inoltro multi-hop: i messaggi transitano attraverso dispositivi vicini (massimo 7 hop)
- Nessuna connessione Internet necessaria: funziona completamente offline in scenari di disastro
- Crittografia Protocollo Noise: crittografia end-to-end con segretezza in avanti
- Protocollo binario: formato compatto dei pacchetti ottimizzato per i vincoli Bluetooth LE
- Scoperta automatica: rilevamento dei peer e gestione delle connessioni
- Alimentazione adattiva: duty cycling ottimizzato per la batteria
Protocollo Nostr (Internet)
- Portata globale: connettiti con utenti di tutto il mondo tramite relay Internet
- Canali di posizione: chat room geografiche utilizzando coordinate geohash
- Rete di 290+ relay: distribuita globalmente per affidabilità
- Crittografia NIP-17: messaggi privati impacchettati per la privacy su Internet
- Chiavi effimere: identità crittografica fresca per ogni area geohash
Tipi di canale
mesh #bluetooth
- Trasporto: rete mesh Bluetooth Low Energy
- Ambito: dispositivi locali entro portata multi-hop
- Internet: non richiesto
- Caso d'uso: comunicazione offline, proteste, disastri, aree remote
Canali di posizione (block #dr5rsj, neighborhood #dr5rs, country #dr)
- Trasporto: protocollo Nostr su Internet
- Ambito: aree geografiche definite dalla precisione geohash
block (7 caratteri): livello dell'isolato cittadino
neighborhood (6 caratteri): distretto/quartiere
city (5 caratteri): livello città
province (4 caratteri): stato/provincia
region (2 caratteri): paese/grande regione
- Internet: richiesto (si connette ai relay Nostr)
- Caso d'uso: chat di comunità basata sulla posizione, eventi locali, discussioni regionali
Routing dei messaggi diretti
I messaggi privati utilizzano la selezione intelligente del trasporto:
-
Bluetooth prima (preferito quando disponibile)
- Connessione diretta con sessione Noise stabilita
- Opzione più veloce e più privata
-
Fallback Nostr (quando Bluetooth non disponibile)
- Utilizza la chiave pubblica Nostr del destinatario
- Impacchettamento NIP-17 per la privacy
- Instradamento attraverso la rete globale di relay
-
Coda intelligente (quando nessuno dei due è disponibile)
- Messaggi in coda fino a quando il trasporto diventa disponibile
- Consegna automatica quando la connessione viene stabilita
Per la documentazione dettagliata del protocollo, consulta il Technical Whitepaper.
Configurazione
Opzione 1: Usando Xcode
cd bitchat
open bitchat.xcodeproj
Per eseguire su un dispositivo ci sono alcuni passaggi per preparare il codice:
- Clona le configurazioni locali:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
- Aggiungi il tuo Team ID sviluppatore nel file
Configs/Local.xcconfig appena creato
- Il Bundle ID sarà impostato a
chat.bitchat.<team_id> (a meno che tu non lo imposti diversamente)
- È necessario aggiornare manualmente gli entitlements (TODO: Automatizzare):
- Cerca e sostituisci
group.chat.bitchat con group.<il_tuo_bundle_id> (es. group.chat.bitchat.ABC123)
Opzione 2: Usando just
Vuoi provarlo su macOS: just run lo configurerà e lo eseguirà dal sorgente.
Esegui just clean in seguito per ripristinare tutto allo stato originale per la costruzione e lo sviluppo dell'app mobile.
Localizzazione
- Le risorse base dell'app si trovano in
bitchat/Localization/Base.lproj/. Aggiungi nuovi testi a Localizable.strings e regole plurali a Localizable.stringsdict.
- Le stringhe dell'estensione di condivisione sono separate in
bitchatShareExtension/Localization/Base.lproj/Localizable.strings.
- Preferisci chiavi che descrivono l'intento (es.
app_info.features.offline.title) e riutilizza quelle esistenti quando possibile.
- Esegui
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build per verificare con la compilazione eventuali aggiornamenti di localizzazione.