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 в репозитории: сейчас это реально полезно.
