ONYX — мой pet-project: self-hosted, анонимный, E2E-шифрованный мессенджер. Клиент — Flutter, есть под Windows/Linux/macOS/Android, аккаунт без телефона и почты.
Вышла v1.7-beta. Список изменений ниже, но текст в основном про одну фичу: WardLink, ради которой стоило катить этот релиз.
Проблема
Даже на self-hosted сервере синхронизация состояния (например, какие чаты в избранном и в каком порядке) между телефоном и ноутбуком обычно всё равно идёт через сервер. Для самих сообщений это нормально. Не нравилось другое: ради локальной задачи («два устройства в одной квартире») трафик гоняется через сервер, который держишь совсем для другого.
WardLink делает это напрямую между устройствами по LAN, без сервера в петле для этой конкретной задачи.
Как это устроено
-
Пара устройств один раз сопрягается через QR: сканирующая сторона пинит показанное устройство, после чего по LAN уходит nonce-аутентифицированный запрос на сопряжение, и второе устройство тоже начинает доверять первому. Получается взаимное доверие с одного скана.
-
На каждом устройстве постоянный
X25519identity-ключ в секьюрном хранилище, в отличие от эфемерных ключей, которые ротируются при каждом запуске для обычного LAN-мессенджинга. Сессионный ключ — static-static ECDH + HKDF. -
Синхронизация pull-based: каждая сторона независимо запрашивает у пира манифест (какие сообщения и чаты есть у него), сравнивает со своим состоянием и подтягивает недостающее. Центрального координатора нет.
-
Большие медиафайлы передаются стримом, AES-GCM кадрами по 256KB, без base64 и без загрузки файла целиком в память. Это снимает прежнее ограничение в 200MB и поднимает лимит до 512MB–4GB (по умолчанию 2GB).
-
Синхронизируются только избранные чаты, полностью, всегда.
Честно про ограничения: это LAN, не интернет. Работает, пока оба устройства в одной сети. Для синхронизации через интернет всё ещё нужен сервер. WardLink закрывает другой сценарий: «два моих устройства рядом».
Что ещё в релизе
-
галерея медиа в каждом чате
-
поиск по настройкам и поиск чатов по названию или ключевому слову
-
бэкапы вручную или по расписанию
-
настраиваемая кнопка прокрутки вниз
-
markdown во вкладке «что нового», где публикуется тот же список изменений
-
редизайн плеера, диалоговых окон, настроек, плюс реструктуризация последних
-
новый движок хранения данных
-
на ПК папки в избранном остаются разблокированными до конца сессии, а не запираются заново
-
убрал анимацию появления сообщений при открытии чата: больше тормозила, чем радовала
-
из багфиксов: критические баги бэкенда, влиявшие на отправку сообщений, баг с анимацией стрелок в настройках, переключатель биометрии больше не показывается там, где биометрия недоступна или выключена
Если обновляетесь с предыдущей версии: в этом релизе локальное хранилище переезжает на новый движок, и миграция данных проходит автоматически при первом запуске. Если истории в чатах много, дайте ей немного времени. По моим собственным замерам, после миграции всё работает примерно на 70-80% быстрее.
Репозиторий и полный список изменений: https://github.com/wardcore-dev/onyx/releases/tag/v1.7-beta
Это бета и один разработчик, так что баги не возможно, а будут. Если найдёте баг, заведите issue в репозитории: сейчас это реально полезно.
ссылка на оригинал статьи https://habr.com/ru/articles/1049762/