Comunicaciones P2P seguras y privadas para la era moderna.
Paquete Swift modular para comunicaciones P2P seguras, privadas y resistentes a la censura. Proporciona una arquitectura completa de mensajería peer-to-peer con soporte para Bluetooth Low Energy (BLE), Nostr relays globales, geolocalización.
- 🔐 Encriptación End-to-End: Protocolo Noise con forward secrecy perfecta
- 📡 Múltiples Transportes: BLE mesh offline, Nostr relays globales, Tor
- 🌍 Geolocalización: Mensajería basada en ubicación y canales geo
- 🎵 Multimedia Completo: Voz, imágenes, video, streaming y transferencias de archivos
- 👥 Grupos y Moderación: Chat grupal con moderación distribuida y analytics
- 🛡️ Anonimato Avanzado: Tor, zero-knowledge proofs, verificación de identidad
- 📊 Analytics de Comunidad: Métricas detalladas, insights y dashboards
- 🔄 Arquitectura Reactiva: Combine publishers para actualizaciones en tiempo real
- 🌐 Coordinación Inteligente: Enrutamiento automático y failover entre transportes
- 💾 Persistencia Segura: Keychain con migración y backup
- 📱 Multiplataforma: iOS 17+ y macOS 14+
Añade a tu Package.swift:
dependencies: [
.package(url: "https://github.com/antares500/bitKit.git", from: "1.2.0")
]Elige los targets según tus necesidades o usa presets recomendados:
// Básico (mensajería simple)
.target(name: "MiApp", dependencies: [
"BitCore", // Núcleo requerido
"BitCommunications" // Coordinación básica
])
// Completo (todo incluido)
.target(name: "MiApp", dependencies: [
"BitKit" // Incluye todos los módulos
])
// Personalizado (elige módulos)
.target(name: "MiApp", dependencies: [
"BitCore", // Núcleo con comunicaciones básicas
"BitTransport", // BLE + Nostr
"BitGeo", // Geolocalización
"BitState", // Persistencia
"BitMedia", // Multimedia
"BitTor", // Anonimato
"BitChatGroup", // Chat y grupos
"BitReliability", // Confiabilidad, sync, verificación
"BitAnalytics" // Métricas
])bitKit
├── BitCore # Núcleo: protocolos, encriptación, utilidades
├── BitTransport # Transportes: BLE mesh + Nostr relays
├── BitGeo # Geolocalización y canales geo
├── BitState # Persistencia segura (Keychain)
├── BitMedia # Manejo de multimedia
├── BitTor # Anonimato con Tor
├── BitCommunications # Coordinación de transportes
├── BitChatGroup # Chat individual y grupal
├── BitReliability # Confiabilidad, sync, verificación
├── BitAnalytics # Analytics y métricas de comunidad
└── BitKit # Todo incluido (preset completo)
bitKit permite crear tu propia red o incluirte en la red bitchat existente. Ambas opciones son compatibles con la última versión de bitchat si el usuario lo necesita.
- Configura aislamiento usando relays Nostr específicos o firmas de app personalizadas.
- Los mensajes se firman con claves únicas, asegurando que solo apps autorizadas los procesen.
- Aviso: Debes cumplir con los estándares de la red original marcados por Jack Dorsey y adaptarte a sus actualizaciones. bitchat no leerá mensajes de redes propias sin configuración explícita.
- Usa las mismas APIs y dependencias que bitchat para interoperabilidad completa.
- bitKit se alinea con la última versión de bitchat, permitiendo inclusión en su red mediante configuración compartida (ej. relays públicos o claves compatibles).
Ejemplo de configuración para compatibilidad:
// Para red propia: configura relays y firmas personalizadas
let communications = BitCommunications(
customRelays: ["tu-relay.nostr"],
appSignature: "tu-firma-unica"
)
// Para incluirte en bitchat: usa configuración por defecto compatible
let communications = BitCommunications() // Usa relays y firmas de bitchatimport BitCore
import BitCommunications
// Inicializar servicios básicos
let logger = BitLogger()
let core = BitCore(logger: logger)
let communications = BitCommunications(core: core)
// Configurar delegados para eventos
communications.delegate = selfimport BitCommunications
// Enviar mensaje privado
let messageID = communications.sendMessage(
content: "Hola, mundo!",
to: recipientPeerID,
options: .init(encrypt: true, sign: true)
)
// Enviar a grupo
communications.sendGroupMessage(
content: "Mensaje grupal",
to: groupID
)import BitMedia
// Grabar voz
let recorder = VoiceRecorder()
try await recorder.requestPermission()
let audioURL = try recorder.startRecording()
// Enviar archivo
communications.sendFile(
url: audioURL,
to: peerID,
metadata: .init(type: .audio)
)import BitGeo
// Crear canal geo
let geoChannel = GeoChannel(
center: CLLocationCoordinate2D(latitude: 40.7128, longitude: -74.0060),
radius: 1000
)
// Mensaje local
communications.sendGeoMessage(
content: "Evento cercano",
in: geoChannel
)Para más ejemplos detallados, consulta la carpeta Documentation/Examples/:
- 01 - Configuración Básica
- 02 - Configuración BLE Mesh
- 03 - Integración Nostr
- 04 - Geolocalización y Mensajería Local
- 05 - Características Avanzadas y Personalización
- 06 - Manejo de Multimedia
- 07 - Persistencia de Estado y Backup
- 08 - Chat Grupal y Moderación
- 09 - Seguridad Avanzada con Tor
- 10 - Coordinación de Transportes
- 11 - Transferencias de Archivos y Streaming
- 12 - Verificación de Identidad y Confianza
- 13 - Analytics y Métricas de Comunidad
- 14 - Logging y Monitoreo
- 15 - Enrutamiento Inteligente y Failover
Clase principal para coordinar comunicaciones P2P.
public class BitCommunications {
public init(core: BitCore, transports: [Transport])
public func start() async throws
public func stop() async
public func sendMessage(_ content: String, to peerID: PeerID, options: MessageOptions) -> MessageID
public func sendGroupMessage(_ content: String, to groupID: GroupID) -> MessageID
public func sendFile(url: URL, to peerID: PeerID, metadata: FileMetadata) async throws -> TransferID
}Núcleo con utilidades básicas.
public class BitCore {
public init(logger: BitLogger)
public var encryption: EncryptionProtocol { get }
public var keyManager: KeyManager { get }
}Manejo de multimedia.
public class VoiceRecorder {
public static let shared = VoiceRecorder()
public func requestPermission() async -> Bool
public func startRecording() throws -> URL
public func stopRecording() -> URL?
}Para documentación completa de API, genera docs con DocC o consulta el código fuente.
bitKit permite crear tu propia red o incluirte en la red bitchat existente. Ambas opciones son compatibles con la última versión de bitchat si el usuario lo necesita.
- Configura aislamiento usando relays Nostr específicos o firmas de app personalizadas.
- Los mensajes se firman con claves únicas, asegurando que solo apps autorizadas los procesen.
- Aviso: Debes cumplir con los estándares de la red original marcados por Jack Dorsey y adaptarte a sus actualizaciones. bitchat no leerá mensajes de redes propias sin configuración explícita.
- Usa las mismas APIs y dependencias que bitchat para interoperabilidad completa.
- bitKit se alinea con la última versión de bitchat, permitiendo inclusión en su red mediante configuración compartida (ej. relays públicos o claves compatibles).
Ejemplo de configuración para compatibilidad:
// Para red propia: configura relays y firmas personalizadas
let communications = BitCommunications(
customRelays: ["tu-relay.nostr"],
appSignature: "tu-firma-unica"
)
## Requisitos
- **iOS**: 17.0+
- **macOS**: 14.0+
- **Xcode**: 15.0+
- **Swift**: 5.9+
## Permisos
### iOS
Añade a tu `Info.plist`:
```xml
<key>NSBluetoothAlwaysUsageDescription</key>
<string>Se necesita acceso a Bluetooth para comunicaciones P2P</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Se necesita ubicación para canales geográficos</string>
<key>NSMicrophoneUsageDescription</key>
<string>Se necesita micrófono para mensajes de voz</string>- Fork el repositorio
- Crea una rama para tu feature
- Añade tests
- Envía un Pull Request
Para ejecutar los tests del proyecto:
swift testEsto ejecutará todos los tests definidos en la carpeta Tests/, incluyendo pruebas para las clases principales como KeychainManager, NoiseEncryptionService, MessageRouter, etc.
Este proyecto está bajo la licencia Unlicense. Ver UNLICENSE para más detalles.
- Issues: GitHub Issues
- Discusiones: GitHub Discussions
bitKit - Comunicaciones P2P seguras y privadas para la era moderna.