- Bitchat é um app de mensagens P2P descentralizado para iOS e macOS que combina rede mesh via Bluetooth com o Nostr baseado na internet, funcionando sem conta, número de telefone ou servidor central
- Offline, oferece suporte a retransmissão de até 7 saltos via Bluetooth LE e, com conexão à internet, conecta-se a canais globais e baseados em localização por meio de mais de 290 relays Nostr
- Mensagens privadas usam primeiro o Noise Protocol do Bluetooth e, se isso não for possível, mudam para o NIP-17 do Nostr; se nenhum dos dois estiver disponível, ficam na fila até poderem ser enviadas
- Oferece canais por quarteirão, bairro, cidade, estado e país conforme a precisão do geohash, além de comandos no estilo IRC como
/slap, /msg e /who, e o Emergency Wipe, que apaga os dados com três toques
- O projeto foi publicado em domínio público e pode ser executado com Xcode ou
just, mas builds para dispositivos reais exigem Developer Team ID e configuração de entitlement
Estrutura de transporte que combina Bluetooth e Nostr
- Bitchat é um app nativo para iOS e macOS que combina mensagens via Bluetooth e Nostr, e também está disponível na App Store
- A rede mesh Bluetooth descobre e conecta automaticamente dispositivos próximos sem internet
- Faz comunicação P2P direta por Bluetooth LE e retransmite mensagens por até 7 saltos via dispositivos vizinhos
- Oferece criptografia de ponta a ponta baseada no Noise Protocol e sigilo de encaminhamento
- Usa formato de pacote binário compactado ajustado às limitações do Bluetooth LE e duty cycle otimizado para bateria
- O canal
mesh #bluetooth é voltado para comunicação offline em protestos, desastres, áreas remotas etc.
- A camada de transporte Nostr fornece mensagens pela internet por meio de mais de 290 relays globais
- Cria salas de chat baseadas em localização com coordenadas geohash e usa uma nova identidade criptográfica temporária para cada região
- Mensagens privadas são protegidas com NIP-17 gift wrapping
- Canais de localização exigem conexão com a internet e podem ser usados para comunidades locais, eventos locais e discussões regionais
block 7 caracteres: quarteirão urbano
neighborhood 6 caracteres: distrito ou bairro
city 5 caracteres: cidade
province 4 caracteres: estado ou província
region 2 caracteres: país ou região ampla
- O roteamento de mensagens privadas escolhe automaticamente o meio de transporte disponível
- Se uma sessão Noise existente puder ser usada, prioriza a conexão Bluetooth por ser mais rápida e mais privada
- Se o Bluetooth não puder ser usado, envia pela rede de relays usando a chave pública Nostr do destinatário e o NIP-17
- Se nenhum dos dois métodos estiver disponível, mantém a mensagem na fila e a entrega automaticamente quando a conexão for estabelecida
- Também oferece compressão de mensagens LZ4, modo de bateria adaptativo, otimização de rede, comandos no estilo IRC e o Emergency Wipe, que apaga imediatamente todos os dados com três toques
- O protocolo detalhado pode ser consultado no Technical Whitepaper
Build, localização e licença
- Para executar no Xcode, use os seguintes comandos no repositório
cd bitchat
open bitchat.xcodeproj
- Para executar em um dispositivo real, é preciso preparar a configuração local e a assinatura de código
- Duplique o arquivo de configuração com
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
- Ao adicionar o Developer Team ID no novo arquivo, o Bundle ID padrão será definido como
chat.bitchat.<team_id>
- É necessário alterar manualmente o entitlement
group.chat.bitchat para group.<your_bundle_id>
- No macOS, é possível configurar e executar o código-fonte com
brew install just e depois just run
- Em seguida, execute
just clean para restaurar o estado original voltado ao build e desenvolvimento do app móvel
- Os recursos de localização são divididos entre o app e a extensão compartilhada
- Adicione strings básicas do app e regras de plural em
bitchat/Localization/Base.lproj/ nos arquivos Localizable.strings e Localizable.stringsdict
- As strings da extensão compartilhada são gerenciadas em
bitchatShareExtension/Localization/Base.lproj/Localizable.strings
- As chaves devem explicitar a intenção, como
app_info.features.offline.title, e, sempre que possível, reutilizar chaves existentes
- Verifique a compilação das alterações de localização com
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
- O projeto é distribuído em domínio público; os detalhes podem ser consultados em LICENSE
1 comentários
Comentários do Hacker News
Ontem instalei o cliente de desktop do Radicle e inseri um novo nome de usuário e senha, mas nada aconteceu. Mesmo reiniciando o app, não consegui passar da tela de criação de conta/login, então meu uso do Radicle terminou ali
Se a disponibilidade é importante, vale reconsiderar a dependência de
libs.gms.locatione também distribuir no F-Droid (https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)Liguei o Bitchat no Fusion Festival e andei por lá, encontrando cerca de 20 dispositivos e algumas mensagens, mas ninguém respondeu às mensagens que enviei. Entre 80 mil pessoas, 20 dispositivos significa que não não havia usuários, mas também não eram muitos, e o limite de 2 hops não deu densidade suficiente para atravessar o local do evento
É útil quando você acaba separado do seu grupo no avião porque não quis pagar 50 dólares extras para sentar junto
Se você tem interesse no BitChat, talvez valha a pena instalar desde já para quando ele ficar popular ou você encontrar alguém para usar junto. Quando testei pessoalmente, a sensação de trocar mensagens sem Wi‑Fi nem rede móvel pareceu surreal
Geos sobrepostos também poderiam funcionar, mas me preocupa a confusão de, como num rádio, só um lado estar dentro do alcance e você acabar vendo só metade da conversa. O geo atual vai até cerca de 1 acre, o que é preciso demais, mas pode ser útil quando um dormitório universitário inteiro de 12 andares usa a mesma sala de chat
O site do Radicle mostra um design interessante como plataforma de repositórios Git. Gosto das margens em largura total, da navegação bem estruturada e da renderização de código agradável de ver
Bitchat é um projeto da AOS. Surpreende que não tenha sido hospedado novamente no ngit, que é outro projeto da AOS
Quando se cai no purismo do Nostr, muitas vezes o resultado é que só 5 pessoas veem a postagem. Gosto do protocolo, mas para aumentar a base de usuários é preciso colocar o app onde as pessoas já estão
Fico curioso se há algum recurso especial em comparação com outros produtos de mensagens descentralizadas como Nostr ou XMTP
Discussão relacionada do dia anterior: “Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey”
https://news.ycombinator.com/item?id=49036433