- Bitchat es una app de mensajería P2P descentralizada para iOS y macOS que combina una red mesh Bluetooth con Nostr basado en internet, y funciona sin cuentas, números de teléfono ni servidores centrales
- Sin conexión, admite retransmisión de hasta 7 saltos mediante Bluetooth LE; con conexión a internet, se conecta a canales globales y basados en ubicación a través de más de 290 relays de Nostr
- Los mensajes privados priorizan el Noise Protocol por Bluetooth; si no es posible conectarse, cambian a NIP-17 de Nostr, y si ninguna de las dos opciones está disponible, quedan en cola hasta que puedan enviarse
- Ofrece canales por bloque, barrio, ciudad, estado/provincia y país según la precisión del geohash, además de comandos estilo IRC como
/slap, /msg y /who, y Emergency Wipe para borrar datos con tres toques
- El proyecto fue publicado como dominio público y puede ejecutarse con Xcode o
just, aunque las compilaciones en dispositivos reales requieren configurar el Developer Team ID y los entitlements
Estructura de transmisión que combina Bluetooth y Nostr
- Bitchat es una app nativa para iOS y macOS que combina mesh Bluetooth y Nostr, y también está disponible en la App Store
- La red mesh Bluetooth descubre y conecta automáticamente dispositivos cercanos sin internet
- Se comunica directamente P2P mediante Bluetooth LE y retransmite mensajes hasta 7 saltos a través de dispositivos vecinos
- Admite cifrado de extremo a extremo basado en Noise Protocol y secreto hacia adelante
- Usa un formato de paquetes binarios comprimidos adaptado a las limitaciones de Bluetooth LE y ciclos de actividad optimizados para batería
- El canal
mesh #bluetooth está orientado a comunicaciones offline en protestas, desastres, zonas remotas y escenarios similares
- La capa de transporte Nostr ofrece mensajería por internet a través de más de 290 relays globales
- Crea salas de chat basadas en ubicación con coordenadas geohash y usa una nueva identidad cifrada temporal para cada región
- Los mensajes privados se protegen con gift wrapping de NIP-17
- Los canales de ubicación requieren conexión a internet y se usan para comunidades locales, eventos cercanos y debates regionales
block 7 caracteres: manzana urbana
neighborhood 6 caracteres: zona o barrio
city 5 caracteres: ciudad
province 4 caracteres: estado o provincia
region 2 caracteres: país o región grande
- El enrutamiento de mensajes privados elige automáticamente el medio de transmisión disponible
- Si se puede usar una sesión Noise existente, prioriza una conexión Bluetooth rápida y más privada
- Si Bluetooth no está disponible, envía por la red de relays usando la clave pública de Nostr del destinatario y NIP-17
- Si ninguno de los dos métodos está disponible, guarda el mensaje en cola y lo entrega automáticamente cuando se establece la conexión
- También ofrece compresión de mensajes LZ4, modo de batería adaptativo, optimización de red, comandos estilo IRC y Emergency Wipe para eliminar de inmediato todos los datos con tres toques
- El protocolo detallado puede consultarse en el Technical Whitepaper
Compilación, localización y licencia
- Para ejecutarlo en Xcode, usa los siguientes comandos en el repositorio
cd bitchat
open bitchat.xcodeproj
- Para ejecutarlo en un dispositivo real, hay que preparar la configuración local y la firma de código
- Clona el archivo de configuración con
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
- Al agregar el Developer Team ID al nuevo archivo, el Bundle ID predeterminado queda configurado como
chat.bitchat.<team_id>
- Debes cambiar manualmente
group.chat.bitchat en los entitlements por group.<your_bundle_id>
- En macOS, después de
brew install just, es posible configurar y ejecutar el código fuente con just run
- Luego, al ejecutar
just clean, se restaura el estado original para compilar y desarrollar la app móvil
- Los recursos de localización están divididos entre la app y la extensión para compartir
- Las cadenas de la app principal y las reglas de pluralización se agregan en
Localizable.strings y Localizable.stringsdict dentro de bitchat/Localization/Base.lproj/
- Las cadenas de la extensión para compartir se gestionan en
bitchatShareExtension/Localization/Base.lproj/Localizable.strings
- Las claves deben escribirse de forma que expresen la intención, como
app_info.features.offline.title, y se deben reutilizar las claves existentes siempre que sea posible
- Los cambios de localización se verifican compilando con
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
- El proyecto se distribuye como dominio público; los términos detallados pueden consultarse en LICENSE
1 comentarios
Opiniones en Hacker News
Ayer instalé el cliente de escritorio de Radicle e ingresé un nuevo nombre de usuario y contraseña, pero no pasó nada. Incluso al reiniciar la app, no pude pasar de la pantalla de creación de cuenta/inicio de sesión, así que mi uso de Radicle terminó ahí.
Si les importa la disponibilidad, deberían reconsiderar la dependencia de
libs.gms.locationy distribuir también en F-Droid (https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)En Fusion Festival activé Bitchat y caminé por ahí; encontré unas 20 máquinas y algunos mensajes, pero nadie respondió a los mensajes que envié. De 80 mil personas, 20 dispositivos no significa que no hubiera usuarios en absoluto, pero tampoco eran muchos, y como llegó como máximo a 2 saltos, no había densidad suficiente para cubrir todo el predio del evento.
Es útil cuando te separan de tus acompañantes en un avión porque no quisiste pagar 50 dólares extra para sentarte junto a ellos.
Si te interesa BitChat, vale la pena instalarlo por si se vuelve popular o te encuentras con alguien con quien usarlo. Al probarlo yo mismo, se sintió irreal poder intercambiar mensajes de texto sin Wi-Fi ni red móvil.
Los geohashes superpuestos podrían estar bien, pero me preocupa la confusión de que, como con un walkie-talkie, si solo un lado está dentro del rango se vea solo la mitad de la conversación. Actualmente el geohash se reduce hasta alrededor de 1 acre, lo que es demasiado preciso, aunque podría ser útil cuando todo un dormitorio universitario de 12 pisos usa una misma sala de chat.
El sitio de Radicle muestra un diseño interesante como plataforma de repositorios Git. Me gustan los márgenes de ancho completo, la navegación bien organizada y el renderizado de código agradable.
Bitchat es un proyecto de AOS. Me sorprende que no lo hayan vuelto a alojar en ngit, otro proyecto de AOS.
Cuando caes en el purismo de Nostr, a menudo terminas con que apenas 5 personas ven tus publicaciones. Me gusta el protocolo, pero si quieres aumentar la cantidad de usuarios, tienes que poner la app donde la gente ya está.
Me pregunto si tiene alguna función especial frente a otros productos de mensajería descentralizada como Nostr o XMTP.
Discusión relacionada del día anterior: “Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey”
https://news.ycombinator.com/item?id=49036433