Некоторое время назад я рассказывал про ONYX, и до недавних пор он был централизован но вот в версии 2.0-beta сервера больше нет.

Отныне есть клиент со встроенным Tor, и не больше. Ниже расскажу, как это устроено, что получилось и чем пришлось заплатить.

Зачем убирать сервер

Центральный сервер, даже при E2E-шифровании, остаётся центральным сервером и единым рубильником. Он понятное дело не видит, но знает кто с кем и когда общается.

Как это работает сейчас

Аккаунт — это ключ

При первом запуске на устройстве генерируется криптографический ключ. Это и есть ваш аккаунт (личность).

  • Для восстановления на новом устройстве есть seed-фраза из 12 слов.

  • У каждой личности есть Account ID и fingerprint, по которому собеседники сверяют, что говорят с тем, с кем нужно.

  • Профиль хранится локально. Между вашими устройствами он синхронизируется через WardLink.

Tor вместо сервера

Вместе с приложением идёт Tor-демон (Windows, Linux, macOS), а на Android используется tor-android. Каждое устройство получает собственный onion-адрес. Сообщения и звонки идут напрямую между устройствами через onion-сервисы.

Два важных момента:

  • Всё, что идёт наружу (внешние группы, каналы, .onion-хосты), идёт через Tor.

  • Если Tor не запущен, запрос не уйдёт. Прямого соединения «на всякий случай» нет. Это сделано намеренно, чтобы IP не утёк из-за сбоя.

В диалоге с человеком есть экран «View Circuit», где видно цепочку, по которой идёт соединение.

Контакты

Добавить контакт можно по QR-коду или по onion-адресу. Запрос контакта может содержать комментарий. Его можно принять, отклонить или отклонить с блокировкой.

Пока вы не приняли запрос, человек не видит ваш статус, и тем более не может вам позвонить.

Доставка сообщений

Без сервера нет «почтового ящика», который хранит сообщения, пока вы оффлайн. Поэтому доставка устроена иначе: недоставленные сообщения сохраняются на отправителе и автоматически отправляются повторно. Интервал повторов настраивается, а под сообщением виден статус доставки.

Звонки

Пожалуй, главный козырь этого обновления - это то что теперь есть ЗВОНКИ, и что не мало важно они работают исключительно через Tor. Чтобы не зависеть от внешних серверов, внутри приложения поднимается встроенный локальный TURN-сервер. Качество звонка на удивление приемлимое, и через это даже можно разговаривать (задержка 1-3 секунды)! Только аудиозвонки, в чате остаётся история звонков.

Компромиссы

Было бы нечестно сказать, что всё стало лучше. Часть вещей мы потеряли осознанно.

Что убрано:

  • HTTP/SOCKS5-прокси. Их заменил Tor. Если хочется свой прокси (зачем?), его больше нет.

  • Превью ссылок. Для превью приходилось бы ходить на чужой сайт, а это либо утечка, либо лишний трафик через Tor.

  • Всё, что требовало сервера: удаление аккаунта на сервере, управление серверным кэшем медиа.

Что стало хуже по природе вещей:

  • Задержки. Tor медленнее прямого соединения, цена анонимности, и деться не куда.

  • Доставка зависит от онлайна. Без сервера-посредника сообщение уходит, когда получатель доступен. Повторы решают проблему, но мгновенной доставки «всегда и везде» нет.

Это осознанный шаг в сторону децентрализации, которая так важна в нынешнюю эпоху, где

Что дальше

Бета нужна, чтобы найти острые углы: нестабильные цепочки, странное поведение при смене сети, пограничные случаи с несколькими устройствами. Если найдёте баг, пишите в issues.

Скачать: https://github.com/wardcore-dev/onyx/releases/tag/v2.0-beta

Комментарии (3)


  1. becefi
    10.10.2026 09:57

    Как стороны находят друг друга?


    1. wardcore Автор
      10.10.2026 09:57

      если оба человека в сети, то один отправляет другому запрос на переписку по .onion адресу собеседника в строке поиска. если получатель не в сети то запрос кешируется на устройстве отправителя и переотправляется с определенным интервалом времени.


      1. becefi
        10.10.2026 09:57

        +