
bitchat v1.7.1
chat de malla Bluetooth, con estilo IRC
bitchat
Una aplicación de mensajería descentralizada peer-to-peer con arquitectura de transporte dual: redes de malla Bluetooth locales para comunicación sin conexión y el protocolo Nostr basado en internet para alcance global. Sin cuentas, sin números de teléfono, sin servidores centrales. Es el grupo de chat secundario.
Licencia
Este proyecto se libera al dominio público. Consulte el archivo LICENSE para más detalles.
Características
- Arquitectura de transporte dual: Malla Bluetooth para sin conexión + protocolo Nostr para mensajería por internet
- Canales basados en ubicación: Salas de chat geográficas usando coordenadas geohash a través de relays globales de Nostr
- Enrutamiento inteligente de mensajes: Elige automáticamente el mejor transporte (Bluetooth → respaldo Nostr)
- Red de malla descentralizada: Descubrimiento automático de pares y retransmisión de mensajes multi-salto sobre Bluetooth LE
- Privacidad primero: Sin cuentas, sin números de teléfono, sin identificadores persistentes
- Cifrado de extremo a extremo en mensajes privados: Protocolo Noise para malla, NIP-17 para Nostr
- Comandos al estilo IRC: Interfaz familiar
/slap,/msg,/who - Aplicación universal: Soporte nativo para iOS y macOS
- Borrado de emergencia: Triple toque para eliminar todos los datos al instante
- Optimizaciones de rendimiento: Compresión de mensajes LZ4, modos de batería adaptativos y redes optimizadas
Arquitectura técnica
BitChat utiliza una arquitectura de mensajería híbrida con dos capas de transporte complementarias:
Red de malla Bluetooth (Sin conexión)
- Comunicación local: Peer-to-peer directo dentro del alcance Bluetooth
- Retransmisión multi-salto: Los mensajes se enrutan a través de dispositivos cercanos (máx. 7 saltos)
- Sin necesidad de internet: Funciona completamente sin conexión en escenarios de desastre
- Cifrado con Protocolo Noise: Cifrado de extremo a extremo con secreto hacia adelante
- Protocolo binario: Formato de paquete compacto optimizado para las limitaciones de Bluetooth LE
- Descubrimiento automático: Detección de pares y gestión de conexiones
- Alimentación adaptativa: Ciclo de trabajo optimizado para la batería
Protocolo Nostr (Internet)
- Alcance global: Conéctate con usuarios de todo el mundo a través de relays de internet
- Canales de ubicación: Salas de chat geográficas usando coordenadas geohash
- Red de más de 290 relays: Distribuida globalmente para fiabilidad
- Cifrado NIP-17: Mensajes privados envueltos como regalo para privacidad en internet
- Claves efímeras: Identidad criptográfica nueva por área geohash
Tipos de canal
mesh #bluetooth
- Transporte: Red de malla Bluetooth Low Energy
- Alcance: Dispositivos locales dentro del rango multi-salto
- Internet: No requerido
- Caso de uso: Comunicación sin conexión, protestas, desastres, áreas remotas
Canales de ubicación (block #dr5rsj, neighborhood #dr5rs, country #dr)
- Transporte: Protocolo Nostr a través de internet
- Alcance: Áreas geográficas definidas por precisión de geohash
block(7 caracteres): Nivel de manzana de ciudadneighborhood(6 caracteres): Distrito/vecindariocity(5 caracteres): Nivel de ciudadprovince(4 caracteres): Estado/provinciaregion(2 caracteres): País/región grande
- Internet: Requerido (se conecta a relays de Nostr)
- Caso de uso: Chat comunitario basado en ubicación, eventos locales, discusiones regionales
Enrutamiento de mensajes directos
Los mensajes privados utilizan selección inteligente de transporte:
-
Bluetooth primero (preferido cuando esté disponible)
- Conexión directa con sesión Noise establecida
- Opción más rápida y privada
-
Respaldo Nostr (cuando Bluetooth no esté disponible)
- Utiliza la clave pública Nostr del destinatario
- Envoltura de regalo NIP-17 para privacidad
- Se enruta a través de la red global de relays
-
Cola inteligente (cuando ninguno esté disponible)
- Los mensajes se encolan hasta que un transporte esté disponible
- Entrega automática cuando se establece conexión
Para documentación detallada del protocolo, consulte el Whitepaper técnico.
Configuración
Opción 1: Usando Xcode
cd bitchat
open bitchat.xcodeproj
Para ejecutar en un dispositivo hay algunos pasos para preparar el código:
- Clona las configuraciones locales:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig - Agrega tu ID de equipo de desarrollador en el archivo
Configs/Local.xcconfigrecién creado- El ID del paquete se establecerá en
chat.bitchat.<team_id>(a menos que lo configures en otro valor)
- El ID del paquete se establecerá en
- Los entitlements deben actualizarse manualmente (TODO: Automatizar):
- Busca y reemplaza
group.chat.bitchatcongroup.<tu_bundle_id>(ej.group.chat.bitchat.ABC123)
- Busca y reemplaza
Opción 2: Usando just
brew install just
¿Quieres probar esto en macOS? just run lo configurará y lo ejecutará desde el código fuente.
Ejecuta just clean después para restaurar el estado original para la compilación y desarrollo de la aplicación móvil.
Localización
- Los recursos base de la aplicación se encuentran en
bitchat/Localization/Base.lproj/. Agrega nuevo texto aLocalizable.stringsy reglas de plural aLocalizable.stringsdict. - Las cadenas de la extensión de compartir están separadas en
bitchatShareExtension/Localization/Base.lproj/Localizable.strings. - Prefiere claves que describan la intención (
app_info.features.offline.title) y reutiliza las existentes cuando sea posible. - Ejecuta
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO buildpara verificar mediante compilación cualquier actualización de localización.