Возможности fedtail

45 минут чтения

Состояние на версию 0.17.0 (в работе). Это полный перечень возможностей fedtail: что делает каждая, чем включается и выключается, с какой версии есть, на каком API или протоколе стоит и как то же самое сделано у других клиентов. Здесь же — планы и то, от чего отказались, с причинами.

Полный справочник настроек — config.md, таблицами по главам. Всё то же одной матрицей «fedtail и другие клиенты» — comparison.md. Устройство кода — ARCHITECTURE.md, ТЗ и очередь — DESIGN.md.

Как читать

Каждая глава — таблица: возможность, статус, с какой версии, ключ конфига, API или протокол, как у других. Под таблицей, в «Подробнее», — что каждая делает словами.

  • Статусы: есть · частично · нет · в планах; в конце — не будем и не решено.
  • С версии — в какой версии fedtail это появилось. У самых первых возможностей это 0.1.0–0.3.0 приблизительно: тогда ещё не всё записывали.
  • Конфиг — ключ в виде секция.ключ. «—» значит, что отдельного ключа нет: возможность просто есть в меню или в окне и ничего не делает, пока её не позовёшь. У возможностей в планах имя ключа предварительное и может поменяться при реализации.
  • У других — те же вещи в других клиентах: Mastodon web, Tusky, Ivory, Phanpy, Elk, Tokodon, Ice Cubes, Fedilab, Sengi, Megalodon, tut, Tuba, Whalebird. Сведения — из их README и заметок к релизам (на осень 2026 года) и из общих знаний о них, без проверки каждого вживую. Только в fedtail — значит, ни у одного из перечисленных так нет.
  • Что поддерживает конкретный сервер (особенно GoToSocial), проверяй на своём. fedtail сам прячет то, чего сервер не умеет: пустую ленту объясняет, лишние кнопки не рисует.

Главные принципы, из которых растёт всё остальное:

  1. Ничего не дёргается. Открыл ленту — стоишь на первом непрочитанном. Пришло новое — позиция не меняется, просто растёт счётчик. Читаешь по хронологии, как RSS.
  2. Каждый ответ знает, на что он отвечает. Над ответом — полоска с началом исходного поста, клик открывает весь тред деревом.
  3. Ленты разделены. Люди отдельно, боты отдельно, ответы мне отдельно от прочих упоминаний.
  4. Приватно по умолчанию. Новый пост — только подписчикам. Ответ никогда не открытее исходного.
  5. Любое поведение — ключ в конфиге. Окна настроек нет и не будет. По умолчанию — как удобно автору, «как у всех» включается флагом. Новые возможности приходят выключаемыми.
  6. К чужим серверам — без твоего токена. Всё, что fedtail берёт с сервера автора напрямую по ActivityPub, идёт анонимно: там видят только твой IP.
  7. Ядро не знает про GUI. Интерфейсы — плагины: окно на Qt, терминал, браузер; дальше — GTK.
  8. Один профиль — один аккаунт. Второй аккаунт — второй профиль (--profile); по желанию все аккаунты собираются в одном окне (ui.merge).
  9. Взрослые разбираются сами. Режим arts (в честь @arts, основателя Point.im): всё как автор выложил, без опеки. Послать можно любого, хоть админа, — и админ может послать в ответ.

Это список того, что есть сейчас, а не история: что поменялось в каждой версии — в CHANGELOG.

Содержание: Ленты · Треды · Прочитанное и позиция · Карточка поста · Картинки и видео · Профили · Писать · Люди и порядок · Уведомления и активность · Несколько аккаунтов · Приложение · Интерфейсы · Сборки и установка · ActivityPub напрямую · Планы · Не будем · Нет и пока не решено


Ленты

Слева — список лент по группам: «Стандартные» (от самой широкой к своей), «Личные», «Списки». Какие ленты показывать и в каком порядке — lanes.enabled. Группировка с заголовками выключается ui.sidebar_groups = false. Ширина колонки — ui.sidebar_width; её край тянется мышью, и эта ширина помнится, пока число в конфиге не поменяешь.

ЧтоСтатусС версииКонфигAPI / протоколУ других
Федерация, Лента, Локальнаяесть0.2.0lanes.enabled ("federated", "home", "local")timelines/home, timelines/publicу всех
Имена лент в конфиге — как их названияесть0.15.0home, replies, federated, my_posts, my_likes; старые people, comments, global, mine, favourites тоже понимаются; слово ленты — в подсказке к ней слева——
Боты отдельной лентойесть0.1.0lanes.enabled ("bots"), lanes.extra_botsполе account.botтолько в fedtail
Личные лентыесть0.1.0lanes.enabled, lanes.mentions_all, lanes.direct_apartnotifications, visibility=directу всех, но разложено иначе
Списки как лентыесть0.2.0[lists]: enabled, refresh_minuteslists, timelines/list/:idMastodon web, Tusky, Ivory, Phanpy, Elk, Tokodon, Ice Cubes, Megalodon
Кто в списке — уходит из общих лентесть0.3.0lists.hide_members, lists.hide_inсвоётолько в fedtail
Кто в списке; свой порядок списковесть0.13.0—lists/:id/accountsMastodon web, Ivory (кто в списке); порядок — только в fedtail
В список — автора или бустнувшего; только тех, на кого подписанесть0.13.0—lists/:id/accountsтолько в fedtail
Добавить в список сразу после подпискиесть0.11.0lists.refresh_minuteslists/:id/accountsтолько в fedtail
Лента хэштега, подписка на тегиесть0.2.0—timelines/tag/:name, tags/:name/follow, followed_tagsу всех
Мои лайкиесть0.8.0"my_likes" в lanes.enabled/api/v1/favouritesMastodon web, Tusky, Ivory, Megalodon, tut
Закладкиесть0.3.0"bookmarks" в lanes.enabled, ui.bookmark_button/api/v1/bookmarksу всех
Трендыесть0.11.0—/api/v1/trends (tags, links, statuses)Mastodon web, Tusky, Ivory, Phanpy, Elk, Ice Cubes
Пустая живая лента объясняет, почему пустаесть0.11.0—timelines/publicтолько в fedtail
Фильтр ленты по медиа и бустаместь0.11.0— (держится до перезапуска)своётолько в fedtail
Повторные бусты не поднимают старый постесть0.15.0feed.repeat_boostsсвоётолько в fedtail (сервер Mastodon гасит повтор лишь среди свежих)
Всё / Только посты / Новое; Лентой / Беседамиесть0.3.0lanes.posts_only, feed.remember_choicesсвоёPhanpy — похоже на «Беседы»
Поиск по лентеесть0.2.0—своё, по локальной базетолько в fedtail
Отправка на медленный сервер без дублейесть0.16.0post.send_timeoutIdempotency-Key, accounts/:id/statusesтолько в fedtail
Поиск во всех лентах сразуесть0.16.0галочка в строке Ctrl+Fсвоё, по локальной базетолько в fedtail
Поиск людей, тегов и постовесть0.2.0—/api/v2/searchу всех
Лента из нескольких теговесть0.14.0[[lanes.tag_groups]]; из поиска — «+ в ленты»timelines/tag/:name по каждому тегу, склейка у себяPhanpy, Ice Cubes («группы тегов»), tut (:tag a b)
Колонки рядоместь0.14.0ui.layout, ui.columns, ui.column_width; кнопка ❯ вверху слевасвоёSengi, Phanpy, tut, Whalebird, Mastodon web (продвинутый режим)
Коллекции (Mastodon 4.6)в планах——/api/v1/collectionsMastodon 4.6, Fedilab
Подробнее

Федерация, Лента, Локальная. «Лента» (home) — те, кого ты читаешь, без ботов; открывается по умолчанию. «Локальная» — вся твоя нода. «Федерация» — всё, что нода знает со всех серверов. Федерация и Локальная подгружаются, только пока открыты, и идут без счётчиков непрочитанного: их листают, а не дочитывают. Между свежей страницей и тем, что было раньше, в них допустим разрыв — в отличие от «Ленты», которая догоняется без дыр (см. Догонять без дыр).

Боты отдельной лентой. Посты аккаунтов с галкой «бот» уходят из «Ленты» в свою ленту «Боты». Кто бот, но галку не поставил, — допиши в lanes.extra_bots: свой сервер — "ник", чужой — "ник@сервер".

Личные ленты.

  • «Мои записи» (my_posts) — мои посты и комменты.
  • «Личные» (direct) — сообщения с видимостью «только упомянутым». При lanes.direct_apart = true (по умолчанию) они живут только здесь и не дублируются в «Ответах мне» и «Упоминаниях».
  • «Ответы мне» (replies) — ответы на мои посты и комменты, даже если в них есть @я.
  • «Упоминания» (mentions) — где меня тегнули в чужом разговоре. lanes.mentions_all = true — показывать здесь вообще всё, где меня упомянули, ответы тоже (они окажутся в обеих лентах).
  • «Подписки» (subs) — новое в тредах, на которые я подписан (см. Подписки на треды).
  • «Закладки» (bookmarks), «Мои лайки» (my_likes, по умолчанию выключена), «Активность» (activity), «Заявки» (requests) — ниже, каждая в своём разделе. Разделение «ответы мне» и «упоминания» — то, чего нет у других: обычно всё валится в одну ленту уведомлений.

Списки как ленты. Списки с сервера — отдельные ленты в группе «Списки». Завести, переименовать, удалить, сделать исключающим — из меню; добавить человека — правым кликом по его посту. Сами списки и кто в них fedtail перечитывает раз в lists.refresh_minutes минут.

Кто в списке — уходит из общих лент. Добавил человека или бота в список — его посты, его бусты и чужие бусты его постов читаются в ленте списка и пропадают из общих лент, чтобы не мусорили. hide_members: "all" — так с любым списком; "exclusive" — только с исключающими (сервер и сам убирает таких из домашней ленты, fedtail доводит это до остальных лент); "off" — не убирать. Из каких лент убирать — lists.hide_in (по умолчанию Лента, Боты, Федерация, Локальная).

Кто в списке; свой порядок списков. Правый клик по списку слева: «Кто в списке…» — вкладка с его людьми (и с теми, кто ждёт подтверждения подписки), у каждого «Убрать из списка»; «Выше» и «Ниже» — свой порядок списков. У серверов порядка списков нет, его помнит fedtail; новые встают в конец.

В список — автора или бустнувшего; только тех, на кого подписан. У буста в меню ⋯ два пункта: «Автора в список (@…)» и «Бустнувшего в список (@…)» — бот- ретранслятор тоже человек для списка. Сервер берёт в списки только тех, на кого ты подписан: для остальных списки в подменю мёртвые (не нажимаются вовсе), с подписью «сперва подпишись» и пунктом «Подписаться». Правый клик по строке «♻ boosted by …» — профиль бустнувшего или «В список»; имя в этой строке — ссылка на профиль.

Добавить в список сразу после подписки. Сервер не берёт в список того, на кого ты ещё не подписан (заявка висит у закрытого аккаунта). fedtail запоминает, куда ты хотел его добавить, и добавляет сам, как только подписку подтвердят.

Лента хэштега, подписка на теги. Клик по #тегу открывает его ленту внутри (при ui.links_in_app). Подписаться на тег — кнопкой в заголовке его ленты; подписанные теги сервер подмешивает в «Ленту», а fedtail предлагает их первыми при наборе #.

Мои лайки. Посты, которые ты лайкнул. По умолчанию лента выключена.

Закладки. «В закладки» — кнопкой под постом (ui.bookmark_button = false убирает её в меню ⋯), клавишей m или командой ~ #a3f. Закладки хранит сервер, так что они общие с другими клиентами.

Тренды. Популярные теги, ссылки и посты, как их считает твой сервер. GoToSocial тренды не считает.

Пустая живая лента объясняет, почему пуста. Если сервер выключил публичные ленты (или отдаёт их только своим), Федерация и Локальная не висят пустыми молча: fedtail пишет, что их выключил сервер.

Фильтр ленты по медиа и бустам. Над лентой можно оставить только текст, только картинки, гифки, видео или только бусты. Это быстрый взгляд, а не настройка: после перезапуска всё как было.

Повторные бусты не поднимают старый пост. Пост приходит в ленту один раз — сам или первым бустом. Буст поста, который в этой ленте уже был или уже прочитан (в треде, в другой ленте), не показывается и не считается в непрочитанном; пост стоит там, где пришёл впервые. repeat_boosts = true — каждый буст снова, как у всех. Сервер (Mastodon) сам гасит повтор, только если оригинал был среди последних ~40 постов ленты, — поэтому старые посты и всплывали раз за разом.

Всё / Только посты / Новое; Лентой / Беседами. Над лентой два переключателя. «Всё / Только посты / Новое»: со всеми комментами, только корневые посты или только непрочитанное. «Лентой / Беседами»: «Беседами» собирает тред в одну карточку, как разговоры на Point. В каких лентах «только посты» включено с запуска — lanes.posts_only. Помнить выбор между запусками — feed.remember_choices = true; по умолчанию каждый запуск с чистого листа.

Поиск по ленте. Ctrl+F ищет в открытой ленте по тексту, нику, номеру #id и подписям к картинкам. Ищет по своей базе, сервер не спрашивает, так что работает и без сети. Enter, ↓, F3 или Ctrl+F ещё раз — к следующему совпадению, Shift+Enter — к предыдущему.

Поиск во всех лентах сразу. Галочка «Во всех лентах» в строке Ctrl+F: вспомнил фразу, а где видел — не помнишь. Ищет во всём сохранённом по всем лентам сразу (в порядке боковой панели, в каждой от новых к старым, один пост — один раз), счётчик пишет, в какой ленте совпадение; следующее совпадение само открывает свою ленту и подгружает её вниз до него. Галочка запоминается.

Поиск людей, тегов и постов. Поиск по серверу: люди, теги, посты (насколько сервер их индексирует), а также ссылка на пост или профиль — сервер найдёт и подтянет его.

Лента из нескольких тегов. Набери в поиске #грузия #georgia -#политика: откроется одна лента по всем этим тегам — любой из них, +#тег обязательно есть, -#тег — кроме. Кнопка «+ в ленты» держит её слева, в группе «Теги»; подгружается, пока открыта, как Федерация. Те же ленты можно описать в конфиге, [[lanes.tag_groups]] (name, any, all, none). Серверу нужен запрос на каждый тег (GoToSocial понимает только один тег за раз), fedtail склеивает их сам, без повторов.

Колонки рядом. Несколько лент на экране одновременно, колонками. По умолчанию — одна лента за раз; кнопка ❯ вверху слева (рядом с ≡ и ↔) включает колонки на время, а при запуске окно такое, как ui.layout. Клик по ленте слева добавляет колонку (или прокручивает к ней), ✕ убирает, ‹ › двигают; набор запоминается. Это те же ленты, что и в одиночном виде: позиция, фильтры и прочитанное у каждой свои, лента «Федерация» и прочие обзорные обновляются, пока стоят колонкой.

Коллекции (Mastodon 4.6). Подборки аккаунтов, которыми делятся. Делаем, когда появятся в GoToSocial.


Треды

ЧтоСтатусС версииКонфигAPI / протоколУ других
Тред деревом, комменты с номерамиесть0.1.0—statuses/:id/contextPhanpy — отступами; номера только в fedtail
Над ответом — на что он отвечаетесть0.1.0feed.show_reply_contextin_reply_to_idSengi и Megalodon — похоже
Тред целиком: ответы с сервера автораесть0.3.0feed.complete_threadsколлекция replies по ActivityPub, search?resolve=trueтолько в fedtail (Mastodon 4.5+ умеет это на сервере)
Тред дорастает, когда Mastodon дособрал ответыесть0.8.0feed.complete_threadsзаголовок Mastodon-Async-RefreshMastodon web
Подписки на треды, как на Pointесть0.2.0[subs]: auto, interval_minutes, active_days, max_threads, replies_to_me, leave_mutesсвоётолько в fedtail
Заглушить тредесть0.11.0—statuses/:id/mute и своёMastodon web, Tusky, Ivory
Длинные тексты и событияесть0.14.0feed.long_form⋯ → «📄 Читать целиком»: Article, Page, Event с сервера автора—
Подробнее

Тред деревом, комменты с номерами. Тред открывается деревом: каждый ответ под тем, на что он отвечает, у каждого коммента номер /1, /2, /2/1, как на Point и Juick. По номеру к комменту можно обратиться из командной строки.

Над ответом — на что он отвечает. Над ответом в ленте полоска «↪ в ответ на…» с началом исходного поста; клик открывает весь тред. Ни один ответ в ленте не висит обрывком.

Тред целиком: ответы с сервера автора. Твой сервер знает только те ответы, что до него дошли, поэтому чужие треды бывают с дырами. Открыл тред — fedtail читает список ответов прямо с сервера автора и просит твой сервер подтянуть недостающие; тред дорастает сам через пару секунд. Запросы к чужим серверам — без твоего токена. false — довольствоваться тем, что знает свой сервер.

Тред дорастает, когда Mastodon дособрал ответы. Mastodon 4.5+ сам дособирает ответы и сообщает, когда готово; fedtail ждёт этого сигнала и перечитывает тред.

Подписки на треды, как на Point. Сервер сообщает только об ответах, где тебя упомянули: если двое отвечают друг другу под твоим постом, ты не узнаешь. fedtail сам перечитывает треды, на которые ты подписан, раз в subs.interval_minutes минут и складывает новое в ленту «Подписки». Подписаться — в меню ⋯ у поста, кнопкой в заголовке треда или командой S #a3f (U #a3f — отписаться). subs.auto — на что подписываться самому: "posts" — свои посты, "comments" — треды, где комментишь. Тред без движения subs.active_days дней больше не проверяется; за один заход — не больше subs.max_threads тредов. Ответы тебе и так приходят в «Ответы мне»; subs.replies_to_me = true — показывать их и в «Подписках». Отписка глушит и упоминания из треда (ответы там сами тегают всех участников); subs.leave_mutes = false — отписываться только от «Подписок».

Заглушить тред. Уведомления из треда перестают приходить, подписка на него снимается. Сервер, который это умеет, помнит для всех клиентов; где не умеет (GoToSocial), fedtail глушит тред сам: упоминания из него отбрасываются по мере прихода — даже ответы на посты треда, которых он не видел. Пункт в меню ⋯ поста есть всегда.

Длинные тексты и события. Статьи из WriteFreely, Ghost, Plume, посты Lemmy, события Mobilizon. Mastodon API сплющивает их в обычный пост с обрезанным текстом. В меню ⋯ такого поста есть «📄 Читать целиком»: fedtail берёт полный текст напрямую по ActivityPub с сервера автора, у события — ещё время и место.


Прочитанное и позиция

ЧтоСтатусС версииКонфигAPI / протоколУ других
Порядок «старое сверху», ничего не прыгаетесть0.1.0feed.order, feed.start_at, feed.on_newсвоётолько в fedtail
Догонять ленту без дыресть0.1.0feed.page_size, feed.catch_up_limitmin_idтолько в fedtail
Когда пост считается прочитанныместь0.1.0read.mark_read, read.read_buttonсвоётолько в fedtail (ручной режим)
Свои посты всегда прочитаныесть0.13.0—своё—
Первый запуск не начинается с завалаесть0.1.0feed.first_run_mark_readсвоё—
Позиция чтения общая с другими клиентамиесть0.8.0read.sync_markers/api/v1/markersMastodon web, Tusky, Ivory, Phanpy, Ice Cubes
Карточки строятся вокруг места чтенияесть0.11.0feed.build_at_once, feed.render_limitсвоётолько в fedtail
Esc — шторка, а не закрытие окнаесть0.3.0ui.esc, ui.start_laneсвоётолько в fedtail
Подробнее

Порядок «старое сверху», ничего не прыгает. feed.order = "oldest_first" — старое сверху, читаешь вниз, как RSS или Point ("newest_first" — как у всех). feed.start_at = "first_unread" — открыл ленту и стоишь на первом непрочитанном ("newest" — на самом свежем). feed.on_new = "keep_position" — пришло новое, а позиция не меняется, растёт только счётчик ("jump_to_newest" — прыгнуть к новому).

Догонять ленту без дыр. Ленты, которые дочитывают, догоняются вперёд от последнего известного поста, страница за страницей (page_size постов за запрос, до catch_up_limit за опрос — остальное на следующем). Поэтому в локальной копии нет дыр и читать можно строго по хронологии. Кнопки «загрузить пропущенное», которую чинят другие клиенты (Fedilab в 2026-м — полдюжины исправлений про дыры и прыжки, часть на GoToSocial), здесь не нужно.

Когда пост считается прочитанным. "on_scroll" — когда прокрутил пост целиком; "on_open" — вся лента, как только открыл; "manual" — только руками: «Всё прочитано» над лентой, «Прочитано» и «Прочитано до сюда» (этот и всё старше) в меню ⋯. С ручным режимом лента всегда ждёт ровно там, где ты остановился, хоть читай по одному посту. read.read_button = true — кнопка ✓ под каждым непрочитанным. Пункты меню работают при любом режиме.

Свои посты всегда прочитаны. Пост, который ты написал, — прочитан, откуда бы он ни пришёл: из Tusky ночью, через тред, догрузкой после перезапуска.

Первый запуск не начинается с завала. При самом первом запуске всё загруженное считается прочитанным.

Позиция чтения общая с другими клиентами. Дочитал «Ленту» или упоминания на телефоне — здесь это тоже прочитано, и наоборот. Работает с Mastodon, GoToSocial, Akkoma — если тот клиент сообщает место серверу: веб Mastodon, Ivory, Phanpy сообщают, Tusky держит место в «Ленте» у себя и делится только уведомлениями. false — прочитанное живёт только в fedtail.

Карточки строятся вокруг места чтения. При открытии ленты строится build_at_once карточек вокруг места, где ты читаешь; остальные — когда подкручиваешь к краю, а далеко позади отпускаются (больше трёх build_at_once — обратно до одного позади и двух впереди). То, что ты читаешь, не сдвигается; фильтр и «только непрочитанное» тоже строят только вокруг места чтения. На экране держится не больше render_limit последних постов, старые — по кнопке «раньше». 0 в build_at_once — строить всё сразу (на сотнях постов это секунды).

Esc — шторка, а не закрытие окна. Esc закрывает то, что сверху (картинку, поиск), а последний Esc при ui.esc = "curtain" задёргивает все ленты шторкой: окно на месте, слева счётчики, справа пусто, и ничего не отмечается прочитанным — утром откроешь, а новое накопилось. "tray" — убрать в трей, "off" — ничего. С чего начинать при запуске — ui.start_lane: "none" (шторка, Enter откроет прошлую), "last" или имя ленты.


Карточка поста

ЧтоСтатусС версииКонфигAPI / протоколУ других
Режим artsесть0.11.0ui.arts_mode (по умолчанию включён, рекомендуется)—одним переключателем ни у кого
Предупреждения (CW)есть0.1.0ui.expand_cwspoiler_textнастраивается у всех
Снять CW во всём треде разомнет——своёSengi, Megalodon (одинаковые CW в треде)
Чувствительные картинкиесть0.8.0feed.sensitive_mediastatus.sensitiveу всех
Карточки ссылокесть0.8.0feed.link_cardsstatus.cardу всех
Эмодзи серверов картинкамиесть0.8.0feed.custom_emojiemojis у поста и аккаунтау всех
Без эмодзи вовсеесть0.15.0feed.emoji = false — ни картинок серверов, ни юникодных, ни реакций; имя из одних эмодзи — логином—Tusky (только анимацию), Fedilab (только свои эмодзи серверов)
Цитаты: показесть0.8.0feed.quotesstatus.quoteMastodon 4.5+, Ivory, Phanpy, Elk, Ice Cubes, Fedilab
Опросы: смотреть и голосоватьесть0.3.0—polls/:id, polls/:id/votesу всех
Результаты опроса без голосованияесть0.3.0— (кнопка «Результаты» у опроса)—Fedilab
История правокесть0.3.0—statuses/:id/historyMastodon web, Ivory, Phanpy, Elk, tut
Перевод поста сервероместь0.8.0feed.translatestatuses/:id/translateMastodon web, Ivory, Phanpy, Elk, Ice Cubes, Fedilab
Эмодзи-реакциичастично — показ0.11.0—pleroma.emoji_reactionsPhanpy, Elk, Fedilab
Кто лайкнул и бустнулесть0.11.0—favourited_by, reblogged_by (и с сервера автора)Mastodon web, Tusky, Ivory, Phanpy, Elk, tut
Честные счётчикиесть0.2.0feed.honest_counters (выключен), feed.counters_via_accountsAPI сервера автора без токенатолько в fedtail
Кто процитировал мой постесть0.11.0—statuses/:id/quotes, …/quotes/:id/revokeMastodon 4.5+
Сворачивать набивку хэштегамиесть0.14.0feed.collapse_tagsсвоёPhanpy
~~текст~~ зачёркнутым, когда сервер Markdown не знаетесть0.14.0feed.text_markupсвоё—
Метки на карточкеесть0.14.0feed.old_days; «бот» — всегдасвоёSengi
Подробнее

Режим arts. Всё как автор выложил, без опеки. Включает разом: предупреждения (CW) развёрнуты, «чувствительные» картинки без плашки, фильтры сервера не прячут и не сворачивают посты, пункта «Пожаловаться» нет. Свои мьюты и блоки работают как обычно; то, что режет сам сервер (блоки доменов), до клиента не доходит вовсе — это не обойти. false — всё как у всех, и тогда каждая из этих вещей настраивается отдельно (ui.expand_cw, feed.sensitive_media). Назван в честь @arts — основателя Point.im и автора его правил. Принцип оттуда же: на взрослой площадке взрослые разбираются сами. Послать можно любого, хоть админа, — и админ может послать в ответ.

Предупреждения (CW). true — текст и картинки под CW сразу развёрнуты; false — свёрнуты, разворачиваются кнопкой «показать».

Снять CW во всём треде разом. С включённым режимом arts не нужно. Если будут просить те, кто его выключил, — кнопкой в заголовке треда.

Чувствительные картинки. Картинки, помеченные автором как чувствительные (без CW): "hide" — под плашкой, клик — показать; "show" — сразу видны. Под CW они и так спрятаны вместе с текстом.

Карточки ссылок. Заголовок, описание и картинка страницы, на которую ссылается пост (их собирает сервер): "full" — с картинкой, "text" — одной-двумя строчками, "off" — не показывать. У поста со своими картинками карточки нет.

Эмодзи серверов картинками. :blobcat: и прочие — картинками в постах и именах. false — оставить текстом и не качать картинки.

Цитаты: показ. Пост внутри поста (Mastodon 4.5+, Akkoma, Misskey и другие): "card" — рамкой внутри, "link" — строкой со ссылкой, "off" — как прислал сервер (обычно «RE: ссылка»).

Опросы: смотреть и голосовать. Варианты, проценты, срок; голосование одним или несколькими вариантами, как задал автор.

Результаты опроса без голосования. Кнопка «Результаты» рядом с «Голосовать» — посмотреть, не голосуя.

История правок. У отредактированного поста — пометка и все прошлые версии.

Перевод поста сервером. «Перевести» в меню ⋯ у поста на чужом языке — если твой сервер умеет (Mastodon с DeepL или LibreTranslate). Перевод прямо в карточке, с кнопкой «оригинал».

Эмодзи-реакции. Реакции с Akkoma, Pleroma, Misskey и их форков видны под постом. Ставить свои пока нельзя; GoToSocial их не поддерживает.

Кто лайкнул и бустнул. Списки людей у счётчиков. Если твой сервер знает не всех, — дочитывается с сервера автора.

Честные счётчики. Твой сервер знает только те лайки и бусты, что до него дошли, поэтому цифры у чужих постов занижены. С honest_counters = true при открытии треда fedtail спрашивает настоящие числа у сервера автора — без токена, но с твоим IP. Если тот не отдаёт числа без входа, а у тебя есть ещё аккаунты (профили), — counters_via_accounts разрешает спросить от их имени: у сервера автора, если ты там есть, или у сервера, где пост уже лежит. Токен каждого аккаунта уходит только на его собственный сервер.

Кто процитировал мой пост. Список цитат моего поста и «убрать мой пост из этой цитаты».

Сворачивать набивку хэштегами. Абзац из одних хэштегов (больше трёх) в ленте сворачивается в первые три и «… +N» мелким шрифтом, в открытом треде показан целиком, но тоже мелко. Хэштеги внутри текста не трогаются.

Карусель бустов. Бусты подряд — одной полосой, которую листают вбок (как в Phanpy). Не будем: вбок неудобно читать, и с «ничего не прыгает» и прочитанным она стыкуется плохо. Ту же задачу решают галка «Бусты» в фильтре, «без его бустов» в профиле и ретрансляторы в своём списке.

Метки на карточке. Рядом с датой: «старый, N дней» — пост старше feed.old_days (30) дней, такие приходят из чужого outbox или старого треда; «[бот]» — у ботов. Метки «с чужого сервера» пока нет.


Картинки и видео

ЧтоСтатусС версииКонфигAPI / протоколУ других
Просмотрщик картинокесть0.1.0ui.image_viewer, ui.image_upscale, ui.image_height—у всех
Сетка картинокесть0.9.0ui.media_gridmeta.focusMastodon web, Tusky, Phanpy, Elk
Подписи к картинкам (alt)есть0.9.0ui.alt_textdescriptionу всех
Видео, аудио, гифки внутри окнаесть0.11.0ui.video_player, ui.gifvmedia_attachmentsу всех
Видео без аппаратного декодера (по умолчанию)есть0.16.0ui.video_decode—только в fedtail
Сохранить картинку, видео, гифкуесть0.2.0ui.save_dir—Tusky, Ivory
Картинки и видео заранее, кэш на дискеесть0.13.0feed.prefetch, ui.image_disk_mb, ui.video_disk_mbсвоётолько в fedtail
Память под картинкиесть0.2.0ui.image_cache_mb, ui.image_decodeсвоё—
Подробнее

Просмотрщик картинок. Клик по картинке — свой просмотрщик ("internal": ← → листать, Esc закрыть) или браузер ("browser"). Маленькие картинки увеличиваются до размеров окна не больше чем в image_upscale раз. Высота одиночной картинки в ленте — image_height.

Сетка картинок. Несколько картинок в посте: "natural" — каждая целиком, своей формы; "square" — ровной сеткой квадратов, обрезанных вокруг точки фокуса автора. Одна картинка не обрезается никогда.

Подписи к картинкам (alt). "tooltip" — при наведении; "caption" — ещё и подписью под картинками. Подписи ищутся через Ctrl+F.

Видео, аудио, гифки внутри окна. Видео играет поверх окна (пробел — пауза, ← → — перемотка, M — звук, O — в браузер, Esc — закрыть), аудио — плеером в карточке. Нужен QtMultimedia (Debian: python3-pyside6.qtmultimedia python3-pyside6.qtmultimediawidgets); без него — стоп-кадр с ▶ и браузер. Гифки Мастодона (короткие беззвучные видео): "play" — крутятся в карточке, пока она на экране (не больше трёх разом), "click" — стоп-кадр, клик — поверх окна.

Сохранить картинку, видео, гифку. Кнопка ⤓, клавиша S в просмотрщике, правый клик по картинке в ленте. "" — в «Загрузки» рабочего стола.

Картинки и видео заранее, кэш на диске. Как только опрос принёс новые посты, их картинки скачиваются на диск своими фоновыми потоками — открываешь ленту, а всё уже есть. "previews" (по умолчанию) — превью (и у видео), аватарки и картинки ссылок; "all" — ещё оригиналы, сами видео и гифки (видео по одному, до 300 МБ каждое); "off" — только когда пост на экране. Кэш картинок держится в image_disk_mb (1 ГБ), видео — в своей папке, video_disk_mb (10 ГБ); сверх лимита уходит то, что дольше всего не открывали. Видео, открытое раз, в следующий раз играет с диска.

Память под картинки. Разжатые картинки держатся в памяти до image_cache_mb МБ, самые давние выбрасываются первыми (с диска перечитываются мгновенно). image_decode = "box" — разжимать под размер рамки с учётом плотности экрана: в разы меньше памяти; "full" — до 1200 точек по большей стороне, резче при растягивании окна.


Профили

ЧтоСтатусС версииКонфигAPI / протоколУ других
Свой и чужой профильесть0.2.0—accounts/:id, accounts/:id/statusesу всех
Закреплённые постыесть0.8.0feed.profile_pinnedstatuses?pinned=trueу всех
Избранные теги и рекомендованные людиесть0.9.0feed.profile_featuredfeatured_tags, endorsementsMastodon web
Профиль малознакомого человека — с его сервераесть0.8.0feed.remote_profiles, feed.remote_postsActivityPub outboxMegalodon — частично (списки)
Посты старше тех, что знает мой сервересть0.11.0feed.remote_profilesActivityPub outboxтолько в fedtail
Подписчики и подписки с сервера человекаесть0.8.0feed.remote_peopleActivityPub followers, followingMegalodon
«Подписан с …»есть0.11.0feed.follow_date_noteaccounts/:id/noteтолько в fedtail
Человек переехалесть0.14.0feed.show_movedaccount.moved, ActivityPub MoveMastodon web
Софт сервера автораесть0.14.0feed.server_infonodeinfo, в профиле «🖥 GoToSocial 0.17»—
Что умеет мой сервересть0.17.0≡ → аккаунт → «О сервере» → «Что умеет» → «Проверить»по безобидному GET с limit=1 на каждую возможность—
Подробнее

Свой и чужой профиль. Шапка, о себе, поля, счётчики, посты; «из твоих подписок на него подписаны» (familiar_followers); подписки и подписчики.

Закреплённые посты. Сверху профиля с пометкой 📌. false — профиль просто по времени.

Избранные теги и рекомендованные люди. «Часто пишет о: #теги» и кого человек рекомендует (Mastodon 4.4+).

Профиль малознакомого человека — с его сервера. Если твой сервер почти ничего не знает о человеке с другого сервера, fedtail читает его последние публичные посты прямо оттуда (remote_posts штук, не больше 40) и просит твой сервер подтянуть их. Без токена; серверы, требующие подписи запросов, просто ничего не отдадут.

Посты старше тех, что знает мой сервер. Твой сервер знает посты человека только с момента, как кто-то на ноде на него подписался. Более старые fedtail листает постранично прямо с сервера автора.

Подписчики и подписки с сервера человека. Внизу таких списков — кнопка «ещё с его сервера»: fedtail читает их оттуда и находит этих людей через твой сервер.

«Подписан с …». Серверы не хранят, с какого дня ты на кого-то подписан. Подписываясь через fedtail, дата дописывается последней строкой в приватную заметку о человеке ([fedtail followed 2026-10-18]): её видно с любого устройства и в других клиентах. В fedtail строка спрятана и при правке заметки сохраняется. false — помнить только локально.

Человек переехал. В профиле переехавшего — плашка «📦 Переехал на @новый» с кнопками «Открыть» и «Подписаться там».

Софт сервера автора. fedtail спрашивает nodeinfo сервера человека (Mastodon, GoToSocial, Akkoma, Misskey, Lemmy…) и пишет в профиле «🖥 GoToSocial 0.17.3». Ответ помнится неделю на сервер.

Что умеет мой сервер. Два десятка запросов «покажи одну штуку» (ничего на сервере не меняется), несколько секунд в фоне — окно не замирает. Ответ на каждую возможность: есть, нет, есть, но закрыто для меня, непонятно; лимиты (символов, вложений, вариантов в опросе) — числом. Что не спросишь, ничего не изменив (убрать одно уведомление, мьют треда), сказано по тому, что это за сервер. Последняя проверка запоминается и показывается сразу; ответы заодно говорят fedtail, какие кнопки показывать.


Писать

ЧтоСтатусС версииКонфигAPI / протоколУ других
Панель поста и черновикиесть0.1.0ui.compose, ui.compose_size, post.drafts_autosavestatusesу всех
Видимость: приватно по умолчанию, ответ не шире исходногоесть0.1.0post.default_visibility, post.reply_never_widervisibility, /api/v1/preferencesтолько в fedtail (ответ не шире)
Markdownесть0.1.0account.markdown, post.plain_postscontent_typeклиенты GoToSocial и Akkoma
Предпросмотр перед отправкойесть0.14.0post.previewсвоёFedilab
Предупреждение (CW)есть0.2.0post.cw_fieldspoiler_textу всех
Картинки: перетащить, вставить, подпись, фокусесть0.2.0post.alt_reminder, post.focus_point/api/v2/media, focusу всех (фокус — Mastodon web, Ivory)
Ужимать картинки под лимит сервераесть0.14.0post.resize_imagesinstance.configuration.media_attachmentsFedilab
Дополнение #тегов, @ников, :эмодзи:есть0.7.0post.complete_tags, post.complete_mentions, post.complete_emojiaccounts/search, custom_emojisу всех
Подсказка CamelCase для хэштеговесть0.2.0post.camelcase_hintсвоётолько в fedtail
Язык постаесть0.3.0post.language, post.languageslanguageу всех
Опрос в постеесть0.8.0—poll[options]у всех
Позвать в тредесть0.16.0post.inviteответ с упоминаниемтолько в fedtail (в других — руками)
Ответ с цитатой, по кусочкаместь0.17.0post.quote_prefixсвоё (текст ответа)Thunderbird и почтовики — для писем; в клиентах федиверса нет
Скопировать ник @user@serverесть0.16.0—своёMastodon web (Copy handle)
Цитировать пост; кто может цитировать моиесть0.8.0post.quote_action, post.quote_policyquoted_status_id, quote_approval_policyMastodon 4.5+, Ivory, Phanpy
Кто может отвечать, бустить, лайкать (GoToSocial)есть0.8.0post.who_can_reply, post.who_can_boost, post.who_can_likeinteraction_policyклиенты GoToSocial
Отложенный постесть0.8.0post.schedulescheduled_at, scheduled_statusesMastodon web, Ivory, Phanpy, Megalodon
Редактировать, удалить, закрепить свой постесть0.3.0—PUT statuses/:id, statuses/:id/source, statuses/:id/pinу всех
Удалить и переписатьесть0.14.0post.redraftstatuses/:id/source + DELETE statuses/:idMastodon web, Megalodon
Тред цепочкойесть0.14.0post.chainin_reply_to_idIce Cubes (до пяти постов)
Командная строка как на Pointесть0.3.0ui.command_line, post.plain_postsсвоётолько в fedtail (tut — команды vim-стиля)
Подробнее

Панель поста и черновики. ui.compose = "inline" — панелью внутри главного окна (раскладка клавиатуры не сбрасывается: KDE помнит её для каждого окна); "window" — отдельным окном. Размер панели — в процентах от окна (compose_size), кнопка ⤡ переключает обычный и большой. Черновики сохраняются на лету и переживают закрытие.

Видимость: приватно по умолчанию, ответ не шире исходного. Новый пост по умолчанию — подписчикам ("private"); "server" — как выставлено на сервере. Ответ никогда не бывает открытее исходного поста.

Markdown. "auto" — спросить у сервера; GoToSocial и Akkoma понимают Markdown, ванильный Mastodon — нет.

Предпросмотр перед отправкой. Кнопка «👁 Предпросмотр» в панели: Markdown уже разметкой (если сервер его понимает), CW, видимость, язык, каждая часть цепочки, сколько картинок; оттуда же «Отправить» или «Править».

Предупреждение (CW). Поле CW открыто сразу или прячется за кнопкой «⚠ Предупреждение». В ответе CW исходного поста подставляется сам.

Картинки: перетащить, вставить, подпись, фокус. Перетащить файл или вставить из буфера. Двойной клик по картинке — подпись и точка фокуса. Картинка без подписи — перед отправкой спросить «Описать» или «Отправить так». Пометить картинки чувствительными — галкой.

Ужимать картинки под лимит сервера. Сервер говорит, какую картинку примет (в пикселях и байтах). Больше — fedtail перед загрузкой уменьшает копию под предел в пикселях и пережимает в JPEG (с прозрачностью — PNG) под предел в байтах, а не получает отказ. Твой файл не трогается, гифки не сплющиваются. post.resize_images = false — как есть.

Дополнение #тегов, @ников, :эмодзи:. #ге — сначала теги, на которые подписан, потом частые в ленте. @ар — сначала люди, что чаще встречаются в ленте, потом найденные сервером. :ко — эмодзи сервера, Tab или Enter вставляет.

Подсказка CamelCase для хэштегов. Хэштег одним регистром (#georgianews) — подсказка: экранные дикторы читают #GeorgiaNews по словам.

Язык поста. Язык по умолчанию и список в окне поста (любой код ISO 639; «Другой язык…» добавляет в список навсегда).

Позвать в тред. Меню ⋯ у поста → «Позвать в тред…»: ответ на этот пост, в котором пока только «@» и сразу открыт список людей — выбираешь кого (можно нескольких), пишешь пару слов. Названному приходит уведомление, клик — и тред открыт у него, на его сервере, можно отвечать; без страшных ссылок со служебными id. Остальных участников треда не упоминает, у приглашения свой черновик. Если тред не публичный, приглашённый увидит твой ответ, а остальное — только то, что ему и так видно. То же из командной строки: #a3f @кого глянь.

Ответ с цитатой, по кусочкам. Меню ⋯ у поста → «Ответить с цитатой»: ответ, в котором уже стоит текст поста цитатой (> , без упоминаний в начале), а если в посте что-то выделено — только выделенное. Правый клик по выделенному → «Процитировать в ответ». Ответ на этот пост уже открыт — цитата встаёт туда, где курсор, с пустой строкой после: выделил предложение, процитировал, ответил, выделил следующее — и так по всему посту. Начало строк цитаты — post.quote_prefix; "" — без этих пунктов.

Скопировать ник @user@server. Кнопка «Скопировать ник» в профиле, пункт «Скопировать ник @…» в меню ⋯ у поста (автора и, у буста, бустнувшего) и в меню строки «♻ boosted by». Всегда полный @user@server: люди с твоего сервера приходят как просто user, к ним дописывается имя твоего сервера — по такому нику человека найдёт и упомянет любой клиент.

Цитировать пост; кто может цитировать мои. «Цитировать» в меню ⋯ у поста, который автор разрешил цитировать. Кто может цитировать мои новые посты: "public", "followers", "nobody" или "" — как на сервере.

Кто может отвечать, бустить, лайкать (GoToSocial). "everyone", "followers" (и упомянутые), "following" (и упомянутые), "mentioned", "me" или "" — как в настройках аккаунта. Другим серверам не отправляется.

Отложенный пост. Кнопка «⏰ Позже»: пост ждёт на сервере, даже если fedtail закрыт. Список ждущих — ≡ → «Запланированные».

Удалить и переписать. Пункт в меню ⋯ своего поста: пост удаляется, его текст (как набирал), CW, видимость, язык и то, на что он отвечал, открываются в панели новым черновиком; картинки сервер удаляет вместе с постом, их добавляешь заново — для серверов без редактирования и для случаев, когда правка не годится (сменить видимость).

Тред цепочкой. Строка из одних --- делит текст на посты: уходят разом, каждый ответом на предыдущий, с той же видимостью, CW и языком; картинки и опрос — у первого. Счётчик знаков считает каждую часть отдельно. post.chain = false — --- остаётся текстом.

Командная строка как на Point. Внизу окна (Ctrl+L): #a3f — открыть, #a3f текст — ответить, S/U #a3f — подписка на тред, S/U @ник — на человека, ! — продвинуть, ~ — в закладки, D — удалить свой, @ник — профиль, ? — справка. Простой текст без команды — новый пост (post.plain_posts = false — только команды, без случайных постов).


Люди и порядок

ЧтоСтатусС версииКонфигAPI / протоколУ других
Подписки и заявкиесть0.1.0"requests" в lanes.enabledfollow, follow_requestsу всех
Скрыть бусты человека; языки подпискиесть0.14.0feed.per_person_followfollow с reblogs=false, languages[]Mastodon web, Tusky, tut
Скрыть, заблокировать, фильтры словесть0.3.0—mutes, blocks, /api/v2/filtersу всех
Заблокировать целый сервересть0.8.0—/api/v1/domain_blocksMastodon web, Ivory, Phanpy
Пожаловаться модератораместь0.8.0post.report_forward/api/v1/reportsу всех
Личная заметка о человекеесть0.8.0—accounts/:id/noteMastodon web, Ivory, Ice Cubes
Колокольчик на посты человекаесть0.8.0"status" в activity.typesfollow notify=trueMastodon web, Tusky, Ivory, Megalodon
Убрать из подписчиков без блокаесть0.11.0—remove_from_followersMastodon web, Ivory
Рекомендовать людей и теги на своём профилеесть0.11.0—endorse, featured_tagsMastodon web
Рекомендации сервера, каталог профилейесть0.11.0—/api/v2/suggestions, /api/v1/directoryMastodon web, Tusky, Ivory
О сервереесть0.11.0—instance, instance/rules, extended_descriptionMastodon web, Ivory, Phanpy
Свой профильесть0.2.0—update_credentialsMastodon web, Ivory, Phanpy, Elk, Tokodon, Ice Cubes
Видимость поста как в настройках сервераесть0.11.0post.default_visibility = "server"/api/v1/preferencesMastodon web, Ivory
Подробнее

Подписки и заявки. Подписаться, отписаться, принять или отклонить заявку в подписчики (лента «Заявки»).

Скрыть бусты человека; языки подписки. В профиле того, на кого подписан: «♻ без его бустов» и «🌐 языки» — только его посты на этих языках. Хранит сервер, так что действует во всех клиентах.

Скрыть, заблокировать, фильтры слов. Фильтры слов — серверные, v2: где действуют, на сколько, прятать или сворачивать. Всё это — в меню ≡ → «Для нежных и ранимых»: фильтры по словам, заглушённые, заблокированные, заблокированные серверы и отфильтрованные уведомления; при ui.arts_mode сверху строка о том, что фильтры сервера там не действуют.

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

Пожаловаться модераторам. На человека с другого сервера — галка «переслать и на его сервер» (кто пожаловался, там не узнают). В режиме arts пункта нет.

О сервере. Описание, правила, политика конфиденциальности.

Свой профиль. Имя, о себе, поля, аватар, шапка.


Уведомления и активность

ЧтоСтатусС версииКонфигAPI / протоколУ других
Уведомления рабочего стола с уровнями приватностиесть0.2.0[notify]: enabled, lanes, except, privacy, when_focused, backendсвоётолько в fedtail (Tokodon — без приватности)
Активность: лайки, бусты, подпискиесть0.2.0activity.types/api/v1/notificationsу всех
Группировка уведомленийчастично0.2.0activity.typesfedtail группирует сам, /api/v2/notifications не используетMastodon web, Ivory, Phanpy, Ice Cubes
Одобрить ответ, лайк, буст (GoToSocial)есть0.13.0activity.approvals/api/v1/interaction_requestsтолько в fedtail
Уведомления от незнакомцев отдельноесть0.9.0notify.filtered/api/v2/notifications/policy, notifications/requestsMastodon 4.3+
Порванные связи и предупреждения модераторовесть0.14.0activity.server_noticesуведомления severed_relationships, moderation_warningMastodon web
Убрать уведомление, очистить всеесть0.11.0—notifications/:id/dismiss, notifications/clearу всех
Объявления сервераесть0.9.0ui.announcements/api/v1/announcementsMastodon web, Phanpy, Elk, Megalodon
Число непрочитанного на иконкеесть0.3.0ui.icon_count, ui.icon_count_except, ui.app_icon, ui.themed_iconсвоёTokodon
ЛС, прочитанные здесь, прочитаны и на сервереесть0.11.0"direct" в lanes.enabled/api/v1/conversations/:id/readтолько в fedtail
Подробнее

Уведомления рабочего стола с уровнями приватности. О каких лентах уведомлять — notify.lanes (те же имена, что в [lanes]; "lists" — все списки, "list:Друзья" — один, "all" — обо всём); о каких никогда — notify.except (чёрный список поверх lanes, например при ["all"]). privacy: "full" — кто и что, "sender" — только кто (можно читать при посторонних), "count" — только сколько. О ленте, открытой перед глазами, по умолчанию молчит (when_focused). backend: "auto" (notify-send, иначе трей), "desktop", "tray".

Активность: лайки, бусты, подписки. Лента «Активность»: кто лайкнул, продвинул, подписался, закончился опрос, отредактирован пост, который ты продвигал, новый пост под колокольчиком — с временем каждого события. ["all"] — всё, что есть и что добавится.

Одобрить ответ, лайк, буст (GoToSocial). Запросы на взаимодействие, ждущие одобрения по твоим настройкам кто-может-что, приходят с кнопками «Одобрить» и «Отклонить».

Уведомления от незнакомцев отдельно. Mastodon придерживает упоминания от незнакомых и новых аккаунтов, пока не разрешишь. ≡ → «Для нежных и ранимых» → «Отфильтрованные уведомления…»: кто ждёт, «Пустить» / «Отклонить», что фильтровать. "remind" — ещё и строкой при запуске, "menu" — только в меню, "off" — никак.

Порванные связи и предупреждения модераторов. Когда твой сервер блокирует чужой (или наоборот) и твои подписки рвутся, Mastodon присылает уведомление со списком потерь; модераторы могут прислать предупреждение. fedtail показывает их в «Активности» (activity.server_notices).

Объявления сервера. "banner" — полосой над лентой, пока не нажмёшь «Понятно» (сервер запоминает это и для других клиентов); реакции на объявления. "off" — не показывать.

Число непрочитанного на иконке. В трее и на кнопке в панели задач (KDE: нужна запись от --install-desktop и python3-pyside6.qtdbus). Какие ленты считать — списком, как в уведомлениях: "lists" — все списки, "list:Друзья" — один, "all" — всё, плюс icon_count_except — что не считать. Сама иконка — опоссум, обнявший свой хвост (app_icon = "possum", он же в меню и в «О программе»), или нарисованный пузырь-тред ("bubble"), который themed_icon красит в цвета темы.


Несколько аккаунтов

ЧтоСтатусС версииКонфигAPI / протоколУ других
Профили и переключательесть0.3.0ui.switch_closes, ключ запуска --profile—у всех многоаккаунтных
Главный профиль ★есть0.14.0≡ → «Аккаунт и сервер» → «Сделать главным»; метка ~/.config/fedtail/main-profileсвоё—
Войти заново, выйти из аккаунтаесть0.14.0≡ → «Аккаунт и сервер», с вопросомOAuthу всех
Все аккаунты в одном окнеесть0.3.0ui.mergeсвоёIvory, Phanpy, Elk, Tokodon, Sengi, Whalebird
Цвет аккаунта в общем окнеесть0.14.0ui.account_colorsсвоёFedilab
Действие от другого аккаунтаесть0.14.0ui.act_asобщее окно, ⋯ → «От другого аккаунта»: пост ищется на его сервереSengi, Tokodon
Подробнее

Профили и переключатель. Один профиль — один аккаунт со своим конфигом, темой, базой и окном. Правый клик по аватарке (или ≡ → «Аккаунт и сервер») — список, «Мой профиль», «О сервере…» (на нём — кнопка «Редактировать профиль»), «Добавить аккаунт…»; switch_closes — закрывать ли текущее окно при переключении. Какой профиль и аккаунт сейчас — слева в строке состояния: «default: @ник@сервер ★».

Главный профиль ★. Тот, что запускается без --profile и из пункта меню «fedtail». Это не папка с особым именем, а метка — файл main-profile рядом с папками профилей; без метки главный — default. «Сделать главным» в меню аккаунтов переносит её; в списке (и в --profiles) главный отмечен ★.

Войти заново, выйти из аккаунта. Оба — в меню аккаунтов, оба сначала спрашивают. «Войти заново…» — для отозванного токена или новых разрешений: старый токен живёт, пока не войдёшь, отмена ничего не меняет, а войти так можно только в этот же аккаунт (другой — «Добавить аккаунт…»). «Выйти из аккаунта…» удаляет токен (прочитанное, черновики и конфиг остаются); если это был главный профиль, ★ уходит к другому, где ты вошёл, и окно переключается на него; если других нет — окно входа. В общем окне всех аккаунтов оба пункта недоступны.

Все аккаунты в одном окне. Ленты с одинаковыми именами сливаются, у постов других аккаунтов пометка «→ @ник» — ответ, лайк и буст уйдут от того аккаунта, который пост получил. Списки — отдельными лентами. ["all"], имена профилей или [] — как выбрано в меню.

Цвет аккаунта в общем окне. Цветная полоска или метка у постов, пришедших каждому аккаунту, — чтобы в слитом окне видеть, чьё это, не читая «→ @ник».

Действие от другого аккаунта. Лайкнуть, бустнуть или ответить не тем аккаунтом, который получил пост: В общем окне в меню ⋯ поста — «От другого аккаунта»: fedtail находит пост через сервер того аккаунта и делает действие оттуда; ответ открывается в редакторе от него.


Приложение

ЧтоСтатусС версииКонфигAPI / протоколУ других
Темы файламиесть0.1.0ui.theme, ui.font_size, ui.font, ui.mono_font, ui.max_width, ui.sidebar_width, ui.actionsсвой формат TOMLу других — светлая и тёмная, у Ice Cubes и Megalodon — свои цвета
Попробовать тему без перезапускаесть0.15.0≡ → «Попробовать тему»; насовсем — ui.theme—Phanpy, Elk, Ice Cubes (их немного)
Конфиг файлом по главаместь0.6.1ключи запуска --update-config, --rebuild-config—tut — тоже TOML, но без сборки по главам
Справочник настроекесть0.13.0—tools/config_doc.pytut (man-страница и сайт), MediaWiki (статья на каждую настройку)
Окно, трей, клавишиесть0.8.0ui.close_to_tray, ui.post_keys—клавиши — Mastodon web, Phanpy, Elk, Ivory, tut
Ссылки на посты и профили — внутриесть0.2.0ui.links_in_appsearch?resolve=trueIvory, Phanpy, Elk, Megalodon, Fedilab
Открыть ссылку в запущенном fedtailесть0.14.0fedtail open URL; --install-desktop ставит обработчик web+ap://своёMegalodon (поделиться ссылкой в приложение)
Всё хранится локально, читается без сетиесть0.1.0—SQLite в папке данных профиляTusky — частично, Ice Cubes — кэш Home
Открыт сутками без раздуванияесть0.11.0ui.unload_hidden_minutes, ui.image_cache_mb, debug.trim_memoryсвоё—
Опрос сервера и живой потокесть0.9.0[poll]: interval_seconds, stream, stream_gap_secondsstreaming (WebSocket)Mastodon web, Phanpy, Elk, Tokodon, Whalebird, Ice Cubes
Ошибки по-человечески и без спамаесть0.13.0—своё—
Подробный журнал для отчётов об ошибкахесть0.2.0[debug], ключи запуска --debug, --bug-reportсвоё—
Состояние федерации: как живёт моя нода и что не получаетсяесть0.16.0≡ → «Отладка» → «Состояние федерации»своё (из того, что видел запуск)—
Поиск утечек: тренды, перепись объектов, снимки памятиесть0.14.0debug.leak_samples, debug.object_census, debug.tracemalloc; ≡ → «Отладка»своё (gc, tracemalloc)—
База не растёт без конца: чистка и бюджет местаесть0.17.0[storage]: max_mb, keep_per_lane, keep_activity, gc_hours, grace_hoursSQLite, incremental vacuum—
Экранные дикторычастично0.9.0ui.alt_text—Mastodon web, Tusky, Ivory
Язык интерфейсаесть0.1.0ui.language—у всех
Справка внутри, на двух языкахесть0.17.0≡ → «Справка»своё: fedtail/data/help/<язык>/—
«Что это?»: подробная подсказка о любой кнопкеесть0.17.0≡ → «Что это?» на время; ui.whats_this — с запускасвоё: hints.tomlKDE-приложения (What’s This)
Подробнее

Темы файлами. Встроенные: system (как в KDE), terminal, juick, juick-classic, bnw, point, night, contrast (для слабого зрения), pink, nord, solarized, paper, debug (для отладки: каждое состояние поста — непрочитан, курсор j/k, найден, «увиден не целиком, ещё не прочитан», фокус клавиатуры — своей кричащей рамкой; shape.debug = true включает то же в любой своей теме). Свои — файлом в ~/.config/fedtail/themes/. Тема задаёт и раскладку карточки: форму аватарки (avatar_shape), шапку в строку или имя над датой (card_header = "stacked"), где стоит #id (short_id: у имени или под постом с числом ответов), с какой стороны кнопки (actions_align), линия между постами (rule: сплошная или пунктир), штрихованная полоса под заголовками ленты и окна поста (header_stripes) и тёмная полоска над ней (header_bar), цвет главных кнопок, полоски заголовка ленты и имён. Тема задаёт весь вид приложения, а не только цвета; поэтому отдельные шаблоны карточек не нужны (см. Не будем). Шрифт — ui.font поверх темы (где системный нечитаем); тема может принести свои шрифты ([font] files), а файлы .ttf/.otf в ~/.config/fedtail/fonts/ подхватываются без установки в систему. Ширина колонки постов — max_width (0 — во всю ширину; кнопка ↔ вверху слева переключает на время и помнит выбор до следующего запуска), подписи у кнопок — actions.

Конфиг файлом по главам. Программа конфиг только читает. Новая версия принесла настройки — --update-config допишет их в нужные главы с пояснениями; --rebuild-config пересоберёт файл заново, сохранив твои значения. Значение, вписанное руками, остаётся твоим и при смене умолчания.

Справочник настроек. Справочник конфига, собранный из примеров конфига: каждая настройка с описанием, вариантами и умолчанием, таблицами по главам, по-русски и по-английски. Тест следит, чтобы он не отставал от файлов.

Окно, трей, клавиши. Крестик прячет в трей. j/k — по постам, r — ответить, f — лайк, b — буст, m — закладка, o/Enter — тред. post_keys = false — буквы ничего не делают.

Ссылки на посты и профили — внутри. @упоминания, #теги и ссылки на посты и профили федиверса открываются в fedtail. Не нашлось — браузер. Наружу уходят только веб-адреса (и mailto:, xmpp:, gemini://, magnet:): ссылку на файл или сетевую папку из чужого поста fedtail не откроет.

Открыть ссылку в запущенном fedtail. fedtail open URL из терминала или браузера открывает пост или профиль в уже открытом окне (или запускает его и открывает там). --install-desktop делает fedtail обработчиком ссылок web+ap:// — кнопок «открыть в своём приложении» на страницах серверов.

Открыт сутками без раздувания. Лента, которую не открывали unload_hidden_minutes минут, отпускает карточки из памяти; открытая не выгружается никогда. Освобождённую память fedtail отдаёт системе (trim_memory: иначе glibc держит пик после ночи лент и картинок).

Опрос сервера и живой поток. Опрос раз в interval_seconds (не меньше 30). Живой поток ("auto", если сервер его даёт) будит опрос сразу, но не чаще раза в stream_gap_seconds. Поток только будит, поэтому если он рвётся (сон ноутбука, прокси), ничего не теряется.

Ошибки по-человечески и без спама. Сервер за прокси лежит — вместо HTML-страницы Cloudflare одна строка «Bad Gateway — the server is down or not answering»; одна и та же ошибка каждого опроса показывается и пишется в журнал один раз, снова — только если изменилась или через десять минут.

Подробный журнал для отчётов об ошибках. В режиме отладки (mode = "auto" — включён в версиях для разработки, выключен в релизах): журнал запросов, опросов, действий (без текстов постов), ошибки с трассировкой, статистика памяти и потоков раз в stats_minutes, сторож зависаний (watchdog_seconds, stall_ms), медленные запросы, рост памяти. crash.log — стеки при падении, kill -USR1 — стеки по запросу. Логи прошлой версии новая удаляет сама. --bug-report собирает архив за двое суток без токена и базы. Подробно — DEBUGGING.md.

Состояние федерации: как живёт моя нода и что не получается. ≡ → «Отладка» → «Состояние федерации»: проблемы, которые от клиента не зависят. Моя нода — что на ней работает, сколько ответов и сколько с ошибкой, как быстро отвечает (обычно и медленные), опрос (когда последний удачный, сколько раз не удался и почему), живой поток (открыт с каких пор, сколько рвался). Чего сервер не умеет (спросил и получил «нет»). Кто ждёт, чтобы попасть в список: имя со ссылкой на профиль (открывается вкладкой, там «Подписаться») и почему ждёт — заявка без ответа, подписки нет (отклонили или отозвали), или уже подписан и добавится сам. Что не получается у моей ноды и у других серверов — сгруппировано по запросу (id свёрнуты: /api/v1/lists/:id/accounts), сколько раз, когда последний, и что это скорее всего значит («удалено на том сервере», «не отдаёт чужим без подписи», «в список берут только тех, на кого подписан»…). Другие серверы — кто сколько ответил и с ошибками. Окно обновляется само, пока открыто; «Копировать» — текстом для issue, «Начать счёт заново» — обнулить. Ради окна спрашивается только свой сервер — кто те, кто ждёт в списках; остальное — то, что видел этот запуск. Адреса без параметров, токенов нет.

Поиск утечек: тренды, перепись объектов, снимки памяти. Для запусков на сутки. С каждой строкой статистики — строка trend: память, объекты Python, виджеты, карточки, картинки, потоки, файлы — сколько при запуске, сколько сейчас, сколько в час. Что-то росло на каждой из последних leak_samples проверок (12 — это час) и не на крохи — предупреждение possible leak с цифрами; первые полчаса не считаются. В режиме отладки — перепись: какие объекты Python и виджеты Qt прибавились с прошлой проверки и с запуска (object_census). tracemalloc = true — трассировка памяти с запуска; снимок — ≡ → «Отладка» → «Снимок памяти»: файл с тем, кто держит больше всего и что выросло, по строкам кода. Там же: «Что растёт: статистика и перепись сейчас», «Отдать свободную память системе», трассировка вкл/выкл. Последняя строка сессии — session summary: часы, память, пик, фризы, опросы. Как оставить на ночь — DEBUGGING.md.

База не растёт без конца: чистка и бюджет места. Раз в gc_hours (и в первый опрос после запуска) забываются посты, на которые ничто не ссылается: ни лента, ни подписанный тред, ни «Активность», ни черновик ответа. Остаются мои посты, а у оставшихся — пост внутри буста, цитата и родители вверх по всему треду, так что видимые ответы не качаются заново. Сохранённое недавно (открытый тред, профиль) живёт ещё grace_hours. «Активность» держит последние keep_activity записей. Файл реально худеет (incremental vacuum). Если база всё равно больше max_mb (по умолчанию 1 ГБ), ленты становятся на 30 % короче, пока не влезут (не короче 300), а когда места снова много — отрастают до keep_per_lane. Короткие id (#a3f) не забываются никогда. Что забыто и сколько весит база — строка storage gc в журнале.

Экранные дикторы. Подписи к картинкам и имена кнопок для дикторов есть, но вживую с Orca интерфейс не проверяли.

Язык интерфейса. "auto" (из LANG), "ru", "en".

Справка внутри, на двух языках. Панель в главном окне, как у панели поста: оглавление слева, поиск по всей справке, «Назад» и «Вперёд». Коротко, по разделам, и в конце каждого — «Подробно →» в полный список возможностей и справочник настроек: они лежат тут же и работают без сети. Горячей клавиши нет нарочно — F1 рядом с Esc.

«Что это?»: подробная подсказка о любой кнопке. Включил — и при наведении мыши вместо короткой подсказки всплывает подробная: что кнопка делает, какой ключ конфига её меняет и в каком разделе справки об этом больше. Выключается тем же пунктом меню.


Интерфейсы

Ядро не знает про GUI; интерфейсы — плагины. Какой запускать — ui.frontend или --ui на один раз.

ЧтоСтатусС версииКонфигУ других
Окно на Qtесть0.1.0ui.frontend = "qt"основной
Команды в терминалеесть0.9.0[cli]: enabled, color, max_lines, tail_lanestut (TUI), toot (CLI)
Терминальный интерфейс (Textual)есть0.10.0ui.frontend = "tui", [tui]: theme, lanes_width, show_context, pictures, picture_rowstut
Веб на localhostесть0.10.0ui.frontend = "web", [web]: host, port, open_browserPhanpy, Elk — веб-клиенты
GTK4 + libadwaitaв планах——Tuba
Toga (BeeWare)в планах———
Подробнее

Команды в терминале. fedtail lanes, fedtail show comments -n 20, fedtail tail (новое по мере прихода), fedtail post "текст", fedtail post --reply a3f "текст", fedtail read comments. Тот же профиль, база и прочитанное, что у окна; работает без Qt.

Терминальный интерфейс (Textual). Слева ленты, справа посты, внизу командная строка. Те же клавиши, x — лента прочитана, : — командная строка. Ленты — [ / ], цифры 1…9, h — в список лент (там j / k), l — обратно в посты, Tab — туда-сюда. «Активность» и «Заявки» — свои строки (в заявках a — пустить, d — отказать). Картинки рисуются полублоками: первая — маленькой прямо в ленте (tui.pictures, tui.picture_rows), v — все во весь экран, ← / → между ними, o — оригинал в браузере; нужен Pillow (python3-pil) и терминал с truecolor. Работает по ssh. Нужен python3-textual.

Веб на localhost. fedtail во вкладке браузера: ленты, треды деревом, профили, кнопка «Написать» (предупреждение, кому видно, язык, черновики), картинки сеткой с просмотром, видео и звук, опросы с голосованием, карточки ссылок, цитаты, свои эмодзи, «Ещё» в конце ленты, командная строка Point; на телефоне ленты выезжают сбоку, светлая и тёмная тема — как в системе. При запуске печатается одноразовая ссылка (15 минут); браузер получает ключ из папки профиля в cookie (web.key; удалишь — выйдут все браузеры и старые ссылки с ключом). host = "0.0.0.0" — и с телефона в домашней сети; без шифрования, только для своей сети. Меню ≡ (написать, мой профиль, обновить, всё прочитано, справка, клавиши, о программе) и меню ⋯ у поста (ответить с цитатой, подписаться / отписаться / заглушить тред, скопировать ссылку, удалить свой пост). В ответе виден весь пост: выделил кусок — «❝ Процитировать в ответ» ставит его туда, где курсор. Картинки поста листаются в просмотре стрелками ← / →.

GTK4 + libadwaita. Чтобы выглядело родным в GNOME и прочих GTK-столах.

Toga (BeeWare). Нативные виджеты Windows, macOS, GTK, Android из одного кода. На попробовать.


Сборки и установка

ЧтоСтатусС версииЗаметка
Из исходников: python3 -m fedtailесть0.1.0PySide6 и requests
Linux: один файлесть0.5.0fedtail-X.Y.Z-linux-x86_64, собран на Debian 12
deb-пакетесть0.10.0собирается в CI в Debian 13
Windows: один .exeесть0.5.0fedtail-X.Y.Z-windows.exe
Пункт в меню с иконкойесть0.2.0--install-desktop
Свой apt-репозиторийв планах—из deb-пакетов релизов
Установщик и подпись для Windowsв планах—когда будут пользователи на Windows

ActivityPub напрямую

Всё здесь — запросы к чужим серверам без твоего токена: там видят только твой IP. Серверы, требующие подписи запросов (secure mode), просто ничего не отдадут, и fedtail тихо обходится тем, что знает твой сервер.

ЧтоСтатусКонфиг
Тред целиком: ответы с сервера автораестьfeed.complete_threads
Тред дорастает, когда Mastodon дособрал ответыестьfeed.complete_threads
Длинные тексты и событияестьfeed.long_form
Честные счётчикиестьfeed.honest_counters (выключен), feed.counters_via_accounts
Профиль малознакомого человека — с его сервераестьfeed.remote_profiles, feed.remote_posts
Посты старше тех, что знает мой серверестьfeed.remote_profiles
Подписчики и подписки с сервера человекаестьfeed.remote_people
Человек переехалестьfeed.show_moved
Софт сервера автораестьfeed.server_info

Планы

Каждая возможность приходит выключаемой, по одной, с записью здесь и строкой в CHANGELOG. Порядок примерный: сначала дешёвое, потом крупное.

ЧтоРазделКонфигРазмер
Коллекции (Mastodon 4.6)Ленты—когда будут в GoToSocial
GTK4 + libadwaitaИнтерфейсы—крупный
Toga (BeeWare)Интерфейсы—крупный
Свой apt-репозиторийСборки и установка——
Установщик и подпись для WindowsСборки и установка——

Не будем

ЧтоПочему
Подписка на старые треды пачкойУбрана из очереди.
Карусель бустовВбок неудобно читать, плохо стыкуется с «ничего не прыгает» и прочитанным. Бусты прячутся фильтром, по человеку или списком.
Шаблоны карточек (как toot.tmpl у tut)Тема и так задаёт вид всего приложения; второй слой шаблонов поверх тем ничего не даёт.
ИИ-помощники в панели поста (как в Ice Cubes)Писать — дело автора.
Push-уведомления (Web Push, UnifiedPush)Десктопу хватает живого потока и опроса; push нужен телефонам.
Админка ноды в клиентеСидеть в клиенте под аккаунтом с правами админа — безответственно. Для настройки ноды, если понадобится, будет отдельная утилита.
Годовой отчёт MastodonНе про чтение и не про разговор.
XMPP-шлюзУбран из очереди.

Нет и пока не решено

ЧтоУ другихЗаметка
Публичная лента чужого сервераIce CubesЧитать Локальную другого сервера без входа. Многие серверы закрывают её для анонимов.
Лента по ссылке (Mastodon 4.3+)Mastodon webВсе посты о популярной ссылке. GoToSocial не умеет.
Ставить эмодзи-реакцииPhanpy, Elk, FedilabAkkoma, Pleroma, Misskey; GoToSocial не умеет.
Проверка орфографии в панели постаTubaНе в приоритете. В Qt своей нет: нужна внешняя библиотека (hunspell или enchant) опциональной зависимостью.
Сгруппированные уведомления сервера (v2)Mastodon web, Ivory, PhanpyСвоя группировка уже есть.
Токен через внешнюю команду (pass, gopass)tutНепонятно, что это даст поверх файла с правами только для владельца.