fedtail спроектирован для тех, кто помнит Juick и Point.im и устал от хаотичной ленты с обрывками чужих разговоров в современных микроблогах.
Ключевые архитектурные принципы
- Ничего не дёргается. Открыл ленту — стоишь на первом непрочитанном. Пришло новое — позиция не меняется, просто растёт счётчик. Читаешь строго по хронологии, как RSS.
- Каждый ответ знает, на что он отвечает. Над ответом — полоска с началом исходного поста, клик открывает весь тред деревом.
- Ленты строго разделены. Люди отдельно, боты отдельно, ответы мне отдельно от прочих упоминаний.
- Приватно по умолчанию. Новый пост — только подписчикам. Ответ никогда не может быть публичнее исходного.
- Любое поведение — ключ в конфиге. Окна настроек нет и не будет. По умолчанию поведение настроено продуманно; привычный режим «как у всех» включается простым флагом.
- К чужим серверам — без вашего токена. Всё, что fedtail подтягивает с сервера автора напрямую по ActivityPub, запрашивается анонимно: удаленный сервер видит только IP-адрес.
- Ядро не зависит от GUI. Интерфейсы — подключаемые плагины: классическое окно на Qt, терминальный TUI, браузерный веб-интерфейс.
- Один профиль — один аккаунт. Второй аккаунт — второй профиль (
--profile); при необходимости несколько профилей объединяются в одном окне (ui.merge). - Взрослые разбираются сами (режим arts). Режим в честь @arts, создателя Point.im: контент отображается без навязчивой внешней опеки.
Устройство ядра и компонентов
- Ядро (
fedtail/core): полностью изолировано от графического интерфейса. Общается с фронтендами асинхронно через события (events) и futures. - Хранилище данных: локальная реляционная база данных SQLite (
~/.local/share/fedtail/<профиль>/). В ней хранятся закэшированные посты, связи тредов, состояние прочитанности и подписки на треды. - Цикл опроса (Polling): периодический сбор обновлений с инстанса по Mastodon API с защитой от дубликатов и сохранением курсоров.
- Сборка тредов (Thread Reassembly): если в треде отсутствуют промежуточные комментарии (потому что ваш домашний сервер их не зафедерировал), fedtail анонимно запрашивает недостающие ActivityPub-объекты непосредственно у сервера автора.
- Фронтенды (
fedtail/frontends):qt— основной десктопный интерфейс на PySide6 (Qt).tui— легковесный текстовый консольный интерфейс.web— локальный HTTP-сервер со встроенным веб-интерфейсом.cli— утилиты командной строки (fedtail lanes,fedtail show,fedtail tail,fedtail post).