bitchat
Um aplicativo de mensagens descentralizado ponto a ponto com arquitetura de transporte duplo: redes mesh Bluetooth locais para comunicação offline e protocolo Nostr baseado na internet para alcance global. Sem contas, sem números de telefone, sem servidores centrais. É o grupo de bate-papo lateral.
bitchat.free
📲 App Store
Licença
Este projeto é disponibilizado em domínio público. Veja o arquivo LICENSE para detalhes.
Recursos
- Arquitetura de Transporte Duplo: Mesh Bluetooth para offline + Protocolo Nostr para mensagens via internet
- Canais Baseados em Localização: Salas de bate-papo geográficas usando coordenadas geohash em relays globais Nostr
- Roteamento Inteligente de Mensagens: Escolhe automaticamente o melhor transporte (Bluetooth → fallback para Nostr)
- Rede Mesh Descentralizada: Descoberta automática de pares e retransmissão de mensagens multi-salto via Bluetooth LE
- Privacidade em Primeiro Lugar: Sem contas, sem números de telefone, sem identificadores persistentes
- Criptografia de Ponta a Ponta para Mensagens Privadas: Protocolo Noise para mesh, NIP-17 para Nostr
- Comandos no Estilo IRC: Interface familiar com
/slap, /msg, /who
- Aplicativo Universal: Suporte nativo para iOS e macOS
- Limpeza de Emergência: Toque triplo para limpar instantaneamente todos os dados
- Otimizações de Desempenho: Compressão de mensagens LZ4, modos de bateria adaptativos e rede otimizada
O BitChat usa uma arquitetura de mensagens híbrida com duas camadas de transporte complementares:
Rede Mesh Bluetooth (Offline)
- Comunicação Local: Ponto a ponto direto dentro do alcance Bluetooth
- Revezamento Multi-salto: Mensagens roteadas através de dispositivos próximos (máx. 7 saltos)
- Sem Necessidade de Internet: Funciona completamente offline em cenários de desastre
- Criptografia do Protocolo Noise: Criptografia de ponta a ponta com sigilo de encaminhamento
- Protocolo Binário: Formato de pacote compacto otimizado para restrições do Bluetooth LE
- Descoberta Automática: Descoberta de pares e gerenciamento de conexão
- Energia Adaptativa: Ciclagem otimizada para bateria
Protocolo Nostr (Internet)
- Alcance Global: Conecte-se com usuários mundialmente através de relays da internet
- Canais de Localização: Salas de bate-papo geográficas usando coordenadas geohash
- Rede de 290+ Relays: Distribuída globalmente para confiabilidade
- Criptografia NIP-17: Mensagens privadas embrulhadas para privacidade na internet
- Chaves Efêmeras: Identidade criptográfica nova por área geohash
Tipos de Canal
mesh #bluetooth
- Transporte: Rede mesh Bluetooth Low Energy
- Escopo: Dispositivos locais dentro do alcance multi-salto
- Internet: Não necessária
- Caso de Uso: Comunicação offline, protestos, desastres, áreas remotas
Canais de Localização (block #dr5rsj7, neighborhood #dr5rs, country #dr)
- Transporte: Protocolo Nostr pela internet
- Escopo: Áreas geográficas definidas pela precisão geohash
block (7 caracteres): Nível de quadra da cidade
neighborhood (6 caracteres): Distrito/bairro
city (5 caracteres): Nível de cidade
province (4 caracteres): Estado/província
region (2 caracteres): País/região grande
- Internet: Necessária (conecta-se a relays Nostr)
- Caso de Uso: Bate-papo comunitário baseado em localização, eventos locais, discussões regionais
Roteamento de Mensagens Diretas
Mensagens privadas usam seleção inteligente de transporte:
-
Bluetooth Primeiro (preferido quando disponível)
- Conexão direta com sessão Noise estabelecida
- Opção mais rápida e privada
-
Nostr como Fallback (quando Bluetooth indisponível)
- Usa a chave pública Nostr do destinatário
- Embrulho de presente NIP-17 para privacidade
- Roteia através da rede global de relays
-
Enfileiramento Inteligente (quando nenhum disponível)
- Mensagens enfileiradas até que o transporte fique disponível
- Entrega automática quando a conexão é estabelecida
Para documentação detalhada do protocolo, veja o Whitepaper Técnico.
Configuração
Opção 1: Usando Xcode
cd bitchat
open bitchat.xcodeproj
Para executar em um dispositivo, há algumas etapas para preparar o código:
- Clone as configurações locais:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
- Adicione seu ID de Equipe do Desenvolvedor no arquivo recém-criado
Configs/Local.xcconfig
- O Bundle ID será definido como
chat.bitchat.<team_id> (a menos que você defina para outra coisa)
- As permissões precisam ser atualizadas manualmente (TODO: Automatizar):
- Pesquise e substitua
group.chat.bitchat por group.<seu_bundle_id> (ex.: group.chat.bitchat.ABC123)
Opção 2: Usando just
Quer tentar isso no macOS: just run irá configurar e executar a partir do código-fonte. Execute just clean depois para restaurar as coisas ao estado original para construção e desenvolvimento do aplicativo móvel.
Localização
- Os recursos base do aplicativo estão em
bitchat/Localization/Base.lproj/. Adicione novas traduções a Localizable.strings e regras de plural a Localizable.stringsdict.
- As strings da extensão de compartilhamento estão separadas em
bitchatShareExtension/Localization/Base.lproj/Localizable.strings.
- Prefira chaves que descrevam o propósito (
app_info.features.offline.title) e reutilize as existentes quando possível.
- Execute
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build para verificar a compilação de quaisquer atualizações de localização.