
bitchat v1.7.1
чат Bluetooth-сетки, в стиле IRC
bitchat
Децентрализованное пиринговое приложение для обмена сообщениями с двухтранспортной архитектурой: локальные Bluetooth-меш-сети для офлайн-связи и интернет-протокол Nostr для глобального охвата. Никаких аккаунтов, никаких номеров телефонов, никаких центральных серверов. Это боковой групповой чат.
Лицензия
Этот проект находится в общественном достоянии. Подробнее см. в файле LICENSE.
Возможности
- Двухтранспортная архитектура: Bluetooth-меш для офлайна + протокол Nostr для интернет-сообщений
- Гео-каналы: Географические чаты с использованием geohash-координат через глобальные релеи Nostr
- Интеллектуальная маршрутизация сообщений: Автоматический выбор лучшего транспорта (Bluetooth → запасной вариант Nostr)
- Децентрализованная меш-сеть: Автоматическое обнаружение пиров и многошаговая ретрансляция сообщений через Bluetooth LE
- Приватность превыше всего: Никаких аккаунтов, номеров телефонов, постоянных идентификаторов
- Сквозное шифрование личных сообщений: Noise Protocol для меша, NIP-17 для Nostr
- Команды в стиле IRC: Знакомый интерфейс
/slap,/msg,/who - Универсальное приложение: Нативная поддержка iOS и macOS
- Аварийная очистка: Тройное нажатие для мгновенного удаления всех данных
- Оптимизация производительности: Сжатие сообщений LZ4, адаптивные режимы питания, оптимизированная работа с сетью
Техническая архитектура
BitChat использует гибридную архитектуру обмена сообщениями с двумя взаимодополняющими транспортными уровнями:
Bluetooth Mesh Network (Offline)
- Локальная связь: Прямое пиринговое взаимодействие в пределах радиуса Bluetooth
- Многошаговая ретрансляция: Сообщения проходят через соседние устройства (макс. 7 шагов)
- Интернет не требуется: Полностью работоспособно в офлайн-режиме, при катастрофах
- Шифрование Noise Protocol: Сквозное шифрование с прямой секретностью
- Бинарный протокол: Компактный формат пакетов, оптимизированный под ограничения Bluetooth LE
- Автоматическое обнаружение: Поиск пиров и управление соединениями
- Адаптивное энергопотребление: Циклический режим с оптимизацией заряда батареи
Nostr Protocol (Internet)
- Глобальный охват: Общение с пользователями по всему миру через интернет-релеи
- Гео-каналы: Географические чаты с использованием geohash-координат
- Сеть из 290+ релеев: Распределённые по всему миру для надёжности
- Шифрование NIP-17: Завёрнутые в подарок личные сообщения для приватности в интернете
- Эфемерные ключи: Новый криптографический идентификатор для каждой geohash-области
Типы каналов
mesh #bluetooth
| Транспорт | Область | Интернет | Сценарий использования |
|---|---|---|---|
| Bluetooth Low Energy, меш-сеть | Локальные устройства в пределах многошаговой досягаемости | Не требуется | Офлайн-связь, протесты, катастрофы, удалённые районы |
Локальные каналы (block #dr5rsj, neighborhood #dr5rs, country #dr)
| Транспорт | Область | Интернет | Сценарий использования |
|---|---|---|---|
| Протокол Nostr через интернет | Географические области, заданные точностью geohash: block (7 символов) – уровень квартала; neighborhood (6 символов) – район/соседство; city (5 символов) – уровень города; province (4 символа) – штат/провинция; region (2 символа) – страна/крупный регион | Требуется (подключается к релеям Nostr) | Общение в сообществах по местоположению, местные события, региональные обсуждения |
Маршрутизация личных сообщений
Личные сообщения используют интеллектуальный выбор транспорта:
-
Bluetooth в первую очередь (предпочтительно, если доступен)
- Прямое соединение с установленной сессией Noise
- Самый быстрый и приватный вариант
-
Запасной вариант – Nostr (если Bluetooth недоступен)
- Используется открытый ключ Nostr получателя
- Упаковка в подарок NIP-17 для приватности
- Маршрутизация через глобальную сеть релеев
-
Умная очередь (когда недоступен ни один транспорт)
- Сообщения ставятся в очередь до появления доступного транспорта
- Автоматическая доставка при установлении соединения
Подробную документацию по протоколу см. в Техническом документе.
Настройка
Вариант 1: Использование Xcode
cd bitchat
open bitchat.xcodeproj
Для запуска на устройстве нужно выполнить несколько шагов для подготовки кода:
- Склонируйте локальные конфиги:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig - Добавьте свой Developer Team ID в только что созданный
Configs/Local.xcconfig- Bundle ID будет установлен как
chat.bitchat.<team_id>(если не задано иное)
- Bundle ID будет установлен как
- Настройки Entitlements необходимо обновить вручную (TODO: Автоматизировать):
- Найдите и замените
group.chat.bitchatнаgroup.<your_bundle_id>(например,group.chat.bitchat.ABC123)
- Найдите и замените
Вариант 2: Использование just
brew install just
Хотите попробовать на macOS: just run настроит и запустит из исходников. После этого выполните just clean, чтобы вернуть всё в исходное состояние для сборки и разработки мобильного приложения.
Локализация
- Основные ресурсы приложения находятся в
bitchat/Localization/Base.lproj/. Добавляйте новые строки вLocalizable.stringsи правила множественного числа вLocalizable.stringsdict. - Строки расширения Share находятся отдельно в
bitchatShareExtension/Localization/Base.lproj/Localizable.strings. - Отдавайте предпочтение ключам, описывающим намерение (
app_info.features.offline.title) и по возможности используйте существующие. - Запустите
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -Configuration Debug CODE_SIGNING_ALLOWED=NO buildдля компиляционной проверки любых изменений локализации.