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.
bitchat.free
📲 App Store
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
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 ciudad
neighborhood (6 caracteres): Distrito/vecindario
city (5 caracteres): Nivel de ciudad
province (4 caracteres): Estado/provincia
region (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.xcconfig recién creado
- El ID del paquete se establecerá en
chat.bitchat.<team_id> (a menos que lo configures en otro valor)
- Los entitlements deben actualizarse manualmente (TODO: Automatizar):
- Busca y reemplaza
group.chat.bitchat con group.<tu_bundle_id> (ej. group.chat.bitchat.ABC123)
Opción 2: Usando 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 a Localizable.strings y reglas de plural a Localizable.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 build para verificar mediante compilación cualquier actualización de localización.