Состояние на версию 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 сам прячет то, чего сервер не умеет: пустую ленту объясняет, лишние кнопки не рисует.
Главные принципы, из которых растёт всё остальное:
- Ничего не дёргается. Открыл ленту — стоишь на первом непрочитанном. Пришло новое — позиция не меняется, просто растёт счётчик. Читаешь по хронологии, как RSS.
- Каждый ответ знает, на что он отвечает. Над ответом — полоска с началом исходного поста, клик открывает весь тред деревом.
- Ленты разделены. Люди отдельно, боты отдельно, ответы мне отдельно от прочих упоминаний.
- Приватно по умолчанию. Новый пост — только подписчикам. Ответ никогда не открытее исходного.
- Любое поведение — ключ в конфиге. Окна настроек нет и не будет. По умолчанию — как удобно автору, «как у всех» включается флагом. Новые возможности приходят выключаемыми.
- К чужим серверам — без твоего токена. Всё, что fedtail берёт с сервера автора напрямую по ActivityPub, идёт анонимно: там видят только твой IP.
- Ядро не знает про GUI. Интерфейсы — плагины: окно на Qt, терминал, браузер; дальше — GTK.
- Один профиль — один аккаунт. Второй аккаунт — второй профиль (
--profile); по желанию все аккаунты собираются в одном окне (ui.merge). - Взрослые разбираются сами. Режим arts (в честь @arts, основателя Point.im): всё как автор выложил, без опеки. Послать можно любого, хоть админа, — и админ может послать в ответ.
Это список того, что есть сейчас, а не история: что поменялось в каждой версии — в CHANGELOG.
Содержание: Ленты · Треды · Прочитанное и позиция · Карточка поста · Картинки и видео · Профили · Писать · Люди и порядок · Уведомления и активность · Несколько аккаунтов · Приложение · Интерфейсы · Сборки и установка · ActivityPub напрямую · Планы · Не будем · Нет и пока не решено
Ленты
Слева — список лент по группам: «Стандартные» (от самой широкой к своей), «Личные»,
«Списки». Какие ленты показывать и в каком порядке — lanes.enabled. Группировка с
заголовками выключается ui.sidebar_groups = false. Ширина колонки — ui.sidebar_width;
её край тянется мышью, и эта ширина помнится, пока число в конфиге не поменяешь.
| Что | Статус | С версии | Конфиг | API / протокол | У других |
|---|---|---|---|---|---|
| Федерация, Лента, Локальная | есть | 0.2.0 | lanes.enabled ("federated", "home", "local") | timelines/home, timelines/public | у всех |
| Имена лент в конфиге — как их названия | есть | 0.15.0 | home, replies, federated, my_posts, my_likes; старые people, comments, global, mine, favourites тоже понимаются; слово ленты — в подсказке к ней слева | — | — |
| Боты отдельной лентой | есть | 0.1.0 | lanes.enabled ("bots"), lanes.extra_bots | поле account.bot | только в fedtail |
| Личные ленты | есть | 0.1.0 | lanes.enabled, lanes.mentions_all, lanes.direct_apart | notifications, visibility=direct | у всех, но разложено иначе |
| Списки как ленты | есть | 0.2.0 | [lists]: enabled, refresh_minutes | lists, timelines/list/:id | Mastodon web, Tusky, Ivory, Phanpy, Elk, Tokodon, Ice Cubes, Megalodon |
| Кто в списке — уходит из общих лент | есть | 0.3.0 | lists.hide_members, lists.hide_in | своё | только в fedtail |
| Кто в списке; свой порядок списков | есть | 0.13.0 | — | lists/:id/accounts | Mastodon web, Ivory (кто в списке); порядок — только в fedtail |
| В список — автора или бустнувшего; только тех, на кого подписан | есть | 0.13.0 | — | lists/:id/accounts | только в fedtail |
| Добавить в список сразу после подписки | есть | 0.11.0 | lists.refresh_minutes | lists/:id/accounts | только в fedtail |
| Лента хэштега, подписка на теги | есть | 0.2.0 | — | timelines/tag/:name, tags/:name/follow, followed_tags | у всех |
| Мои лайки | есть | 0.8.0 | "my_likes" в lanes.enabled | /api/v1/favourites | Mastodon 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.0 | feed.repeat_boosts | своё | только в fedtail (сервер Mastodon гасит повтор лишь среди свежих) |
| Всё / Только посты / Новое; Лентой / Беседами | есть | 0.3.0 | lanes.posts_only, feed.remember_choices | своё | Phanpy — похоже на «Беседы» |
| Поиск по ленте | есть | 0.2.0 | — | своё, по локальной базе | только в fedtail |
| Отправка на медленный сервер без дублей | есть | 0.16.0 | post.send_timeout | Idempotency-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.0 | ui.layout, ui.columns, ui.column_width; кнопка ❯ вверху слева | своё | Sengi, Phanpy, tut, Whalebird, Mastodon web (продвинутый режим) |
| Коллекции (Mastodon 4.6) | в планах | — | — | /api/v1/collections | Mastodon 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/context | Phanpy — отступами; номера только в fedtail |
| Над ответом — на что он отвечает | есть | 0.1.0 | feed.show_reply_context | in_reply_to_id | Sengi и Megalodon — похоже |
| Тред целиком: ответы с сервера автора | есть | 0.3.0 | feed.complete_threads | коллекция replies по ActivityPub, search?resolve=true | только в fedtail (Mastodon 4.5+ умеет это на сервере) |
| Тред дорастает, когда Mastodon дособрал ответы | есть | 0.8.0 | feed.complete_threads | заголовок Mastodon-Async-Refresh | Mastodon 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.0 | feed.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.0 | feed.order, feed.start_at, feed.on_new | своё | только в fedtail |
| Догонять ленту без дыр | есть | 0.1.0 | feed.page_size, feed.catch_up_limit | min_id | только в fedtail |
| Когда пост считается прочитанным | есть | 0.1.0 | read.mark_read, read.read_button | своё | только в fedtail (ручной режим) |
| Свои посты всегда прочитаны | есть | 0.13.0 | — | своё | — |
| Первый запуск не начинается с завала | есть | 0.1.0 | feed.first_run_mark_read | своё | — |
| Позиция чтения общая с другими клиентами | есть | 0.8.0 | read.sync_markers | /api/v1/markers | Mastodon web, Tusky, Ivory, Phanpy, Ice Cubes |
| Карточки строятся вокруг места чтения | есть | 0.11.0 | feed.build_at_once, feed.render_limit | своё | только в fedtail |
| Esc — шторка, а не закрытие окна | есть | 0.3.0 | ui.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.0 | ui.arts_mode (по умолчанию включён, рекомендуется) | — | одним переключателем ни у кого |
| Предупреждения (CW) | есть | 0.1.0 | ui.expand_cw | spoiler_text | настраивается у всех |
| Снять CW во всём треде разом | нет | — | — | своё | Sengi, Megalodon (одинаковые CW в треде) |
| Чувствительные картинки | есть | 0.8.0 | feed.sensitive_media | status.sensitive | у всех |
| Карточки ссылок | есть | 0.8.0 | feed.link_cards | status.card | у всех |
| Эмодзи серверов картинками | есть | 0.8.0 | feed.custom_emoji | emojis у поста и аккаунта | у всех |
| Без эмодзи вовсе | есть | 0.15.0 | feed.emoji = false — ни картинок серверов, ни юникодных, ни реакций; имя из одних эмодзи — логином | — | Tusky (только анимацию), Fedilab (только свои эмодзи серверов) |
| Цитаты: показ | есть | 0.8.0 | feed.quotes | status.quote | Mastodon 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/history | Mastodon web, Ivory, Phanpy, Elk, tut |
| Перевод поста сервером | есть | 0.8.0 | feed.translate | statuses/:id/translate | Mastodon web, Ivory, Phanpy, Elk, Ice Cubes, Fedilab |
| Эмодзи-реакции | частично — показ | 0.11.0 | — | pleroma.emoji_reactions | Phanpy, Elk, Fedilab |
| Кто лайкнул и бустнул | есть | 0.11.0 | — | favourited_by, reblogged_by (и с сервера автора) | Mastodon web, Tusky, Ivory, Phanpy, Elk, tut |
| Честные счётчики | есть | 0.2.0 | feed.honest_counters (выключен), feed.counters_via_accounts | API сервера автора без токена | только в fedtail |
| Кто процитировал мой пост | есть | 0.11.0 | — | statuses/:id/quotes, …/quotes/:id/revoke | Mastodon 4.5+ |
| Сворачивать набивку хэштегами | есть | 0.14.0 | feed.collapse_tags | своё | Phanpy |
~~текст~~ зачёркнутым, когда сервер Markdown не знает | есть | 0.14.0 | feed.text_markup | своё | — |
| Метки на карточке | есть | 0.14.0 | feed.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.0 | ui.image_viewer, ui.image_upscale, ui.image_height | — | у всех |
| Сетка картинок | есть | 0.9.0 | ui.media_grid | meta.focus | Mastodon web, Tusky, Phanpy, Elk |
| Подписи к картинкам (alt) | есть | 0.9.0 | ui.alt_text | description | у всех |
| Видео, аудио, гифки внутри окна | есть | 0.11.0 | ui.video_player, ui.gifv | media_attachments | у всех |
| Видео без аппаратного декодера (по умолчанию) | есть | 0.16.0 | ui.video_decode | — | только в fedtail |
| Сохранить картинку, видео, гифку | есть | 0.2.0 | ui.save_dir | — | Tusky, Ivory |
| Картинки и видео заранее, кэш на диске | есть | 0.13.0 | feed.prefetch, ui.image_disk_mb, ui.video_disk_mb | своё | только в fedtail |
| Память под картинки | есть | 0.2.0 | ui.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.0 | feed.profile_pinned | statuses?pinned=true | у всех |
| Избранные теги и рекомендованные люди | есть | 0.9.0 | feed.profile_featured | featured_tags, endorsements | Mastodon web |
| Профиль малознакомого человека — с его сервера | есть | 0.8.0 | feed.remote_profiles, feed.remote_posts | ActivityPub outbox | Megalodon — частично (списки) |
| Посты старше тех, что знает мой сервер | есть | 0.11.0 | feed.remote_profiles | ActivityPub outbox | только в fedtail |
| Подписчики и подписки с сервера человека | есть | 0.8.0 | feed.remote_people | ActivityPub followers, following | Megalodon |
| «Подписан с …» | есть | 0.11.0 | feed.follow_date_note | accounts/:id/note | только в fedtail |
| Человек переехал | есть | 0.14.0 | feed.show_moved | account.moved, ActivityPub Move | Mastodon web |
| Софт сервера автора | есть | 0.14.0 | feed.server_info | nodeinfo, в профиле «🖥 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.0 | ui.compose, ui.compose_size, post.drafts_autosave | statuses | у всех |
| Видимость: приватно по умолчанию, ответ не шире исходного | есть | 0.1.0 | post.default_visibility, post.reply_never_wider | visibility, /api/v1/preferences | только в fedtail (ответ не шире) |
| Markdown | есть | 0.1.0 | account.markdown, post.plain_posts | content_type | клиенты GoToSocial и Akkoma |
| Предпросмотр перед отправкой | есть | 0.14.0 | post.preview | своё | Fedilab |
| Предупреждение (CW) | есть | 0.2.0 | post.cw_field | spoiler_text | у всех |
| Картинки: перетащить, вставить, подпись, фокус | есть | 0.2.0 | post.alt_reminder, post.focus_point | /api/v2/media, focus | у всех (фокус — Mastodon web, Ivory) |
| Ужимать картинки под лимит сервера | есть | 0.14.0 | post.resize_images | instance.configuration.media_attachments | Fedilab |
| Дополнение #тегов, @ников, :эмодзи: | есть | 0.7.0 | post.complete_tags, post.complete_mentions, post.complete_emoji | accounts/search, custom_emojis | у всех |
| Подсказка CamelCase для хэштегов | есть | 0.2.0 | post.camelcase_hint | своё | только в fedtail |
| Язык поста | есть | 0.3.0 | post.language, post.languages | language | у всех |
| Опрос в посте | есть | 0.8.0 | — | poll[options] | у всех |
| Позвать в тред | есть | 0.16.0 | post.invite | ответ с упоминанием | только в fedtail (в других — руками) |
| Ответ с цитатой, по кусочкам | есть | 0.17.0 | post.quote_prefix | своё (текст ответа) | Thunderbird и почтовики — для писем; в клиентах федиверса нет |
| Скопировать ник @user@server | есть | 0.16.0 | — | своё | Mastodon web (Copy handle) |
| Цитировать пост; кто может цитировать мои | есть | 0.8.0 | post.quote_action, post.quote_policy | quoted_status_id, quote_approval_policy | Mastodon 4.5+, Ivory, Phanpy |
| Кто может отвечать, бустить, лайкать (GoToSocial) | есть | 0.8.0 | post.who_can_reply, post.who_can_boost, post.who_can_like | interaction_policy | клиенты GoToSocial |
| Отложенный пост | есть | 0.8.0 | post.schedule | scheduled_at, scheduled_statuses | Mastodon web, Ivory, Phanpy, Megalodon |
| Редактировать, удалить, закрепить свой пост | есть | 0.3.0 | — | PUT statuses/:id, statuses/:id/source, statuses/:id/pin | у всех |
| Удалить и переписать | есть | 0.14.0 | post.redraft | statuses/:id/source + DELETE statuses/:id | Mastodon web, Megalodon |
| Тред цепочкой | есть | 0.14.0 | post.chain | in_reply_to_id | Ice Cubes (до пяти постов) |
| Командная строка как на Point | есть | 0.3.0 | ui.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.enabled | follow, follow_requests | у всех |
| Скрыть бусты человека; языки подписки | есть | 0.14.0 | feed.per_person_follow | follow с reblogs=false, languages[] | Mastodon web, Tusky, tut |
| Скрыть, заблокировать, фильтры слов | есть | 0.3.0 | — | mutes, blocks, /api/v2/filters | у всех |
| Заблокировать целый сервер | есть | 0.8.0 | — | /api/v1/domain_blocks | Mastodon web, Ivory, Phanpy |
| Пожаловаться модераторам | есть | 0.8.0 | post.report_forward | /api/v1/reports | у всех |
| Личная заметка о человеке | есть | 0.8.0 | — | accounts/:id/note | Mastodon web, Ivory, Ice Cubes |
| Колокольчик на посты человека | есть | 0.8.0 | "status" в activity.types | follow notify=true | Mastodon web, Tusky, Ivory, Megalodon |
| Убрать из подписчиков без блока | есть | 0.11.0 | — | remove_from_followers | Mastodon web, Ivory |
| Рекомендовать людей и теги на своём профиле | есть | 0.11.0 | — | endorse, featured_tags | Mastodon web |
| Рекомендации сервера, каталог профилей | есть | 0.11.0 | — | /api/v2/suggestions, /api/v1/directory | Mastodon web, Tusky, Ivory |
| О сервере | есть | 0.11.0 | — | instance, instance/rules, extended_description | Mastodon web, Ivory, Phanpy |
| Свой профиль | есть | 0.2.0 | — | update_credentials | Mastodon web, Ivory, Phanpy, Elk, Tokodon, Ice Cubes |
| Видимость поста как в настройках сервера | есть | 0.11.0 | post.default_visibility = "server" | /api/v1/preferences | Mastodon web, Ivory |
Подробнее
Подписки и заявки. Подписаться, отписаться, принять или отклонить заявку в подписчики (лента «Заявки»).
Скрыть бусты человека; языки подписки. В профиле того, на кого подписан: «♻ без его бустов» и «🌐 языки» — только его посты на этих языках. Хранит сервер, так что действует во всех клиентах.
Скрыть, заблокировать, фильтры слов. Фильтры слов — серверные, v2: где действуют, на сколько, прятать или сворачивать. Всё это — в меню ≡ → «Для нежных и ранимых»: фильтры по словам, заглушённые, заблокированные, заблокированные серверы и отфильтрованные уведомления; при ui.arts_mode сверху строка о том, что фильтры сервера там не действуют.
Заблокировать целый сервер. Никого оттуда ни в одной ленте, подписки через границу рвутся.
Пожаловаться модераторам. На человека с другого сервера — галка «переслать и на его сервер» (кто пожаловался, там не узнают). В режиме arts пункта нет.
О сервере. Описание, правила, политика конфиденциальности.
Свой профиль. Имя, о себе, поля, аватар, шапка.
Уведомления и активность
| Что | Статус | С версии | Конфиг | API / протокол | У других |
|---|---|---|---|---|---|
| Уведомления рабочего стола с уровнями приватности | есть | 0.2.0 | [notify]: enabled, lanes, except, privacy, when_focused, backend | своё | только в fedtail (Tokodon — без приватности) |
| Активность: лайки, бусты, подписки | есть | 0.2.0 | activity.types | /api/v1/notifications | у всех |
| Группировка уведомлений | частично | 0.2.0 | activity.types | fedtail группирует сам, /api/v2/notifications не использует | Mastodon web, Ivory, Phanpy, Ice Cubes |
| Одобрить ответ, лайк, буст (GoToSocial) | есть | 0.13.0 | activity.approvals | /api/v1/interaction_requests | только в fedtail |
| Уведомления от незнакомцев отдельно | есть | 0.9.0 | notify.filtered | /api/v2/notifications/policy, notifications/requests | Mastodon 4.3+ |
| Порванные связи и предупреждения модераторов | есть | 0.14.0 | activity.server_notices | уведомления severed_relationships, moderation_warning | Mastodon web |
| Убрать уведомление, очистить все | есть | 0.11.0 | — | notifications/:id/dismiss, notifications/clear | у всех |
| Объявления сервера | есть | 0.9.0 | ui.announcements | /api/v1/announcements | Mastodon web, Phanpy, Elk, Megalodon |
| Число непрочитанного на иконке | есть | 0.3.0 | ui.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.0 | ui.switch_closes, ключ запуска --profile | — | у всех многоаккаунтных |
| Главный профиль ★ | есть | 0.14.0 | ≡ → «Аккаунт и сервер» → «Сделать главным»; метка ~/.config/fedtail/main-profile | своё | — |
| Войти заново, выйти из аккаунта | есть | 0.14.0 | ≡ → «Аккаунт и сервер», с вопросом | OAuth | у всех |
| Все аккаунты в одном окне | есть | 0.3.0 | ui.merge | своё | Ivory, Phanpy, Elk, Tokodon, Sengi, Whalebird |
| Цвет аккаунта в общем окне | есть | 0.14.0 | ui.account_colors | своё | Fedilab |
| Действие от другого аккаунта | есть | 0.14.0 | ui.act_as | общее окно, ⋯ → «От другого аккаунта»: пост ищется на его сервере | Sengi, Tokodon |
Подробнее
Профили и переключатель. Один профиль — один аккаунт со своим конфигом, темой, базой и окном. Правый клик по аватарке (или ≡ → «Аккаунт и сервер») — список, «Мой профиль», «О сервере…» (на нём — кнопка «Редактировать профиль»), «Добавить аккаунт…»; switch_closes — закрывать ли текущее окно при переключении. Какой профиль и аккаунт сейчас — слева в строке состояния: «default: @ник@сервер ★».
Главный профиль ★. Тот, что запускается без --profile и из пункта меню «fedtail». Это не папка с особым именем, а метка — файл main-profile рядом с папками профилей; без метки главный — default. «Сделать главным» в меню аккаунтов переносит её; в списке (и в --profiles) главный отмечен ★.
Войти заново, выйти из аккаунта. Оба — в меню аккаунтов, оба сначала спрашивают. «Войти заново…» — для отозванного токена или новых разрешений: старый токен живёт, пока не войдёшь, отмена ничего не меняет, а войти так можно только в этот же аккаунт (другой — «Добавить аккаунт…»). «Выйти из аккаунта…» удаляет токен (прочитанное, черновики и конфиг остаются); если это был главный профиль, ★ уходит к другому, где ты вошёл, и окно переключается на него; если других нет — окно входа. В общем окне всех аккаунтов оба пункта недоступны.
Все аккаунты в одном окне. Ленты с одинаковыми именами сливаются, у постов других аккаунтов пометка «→ @ник» — ответ, лайк и буст уйдут от того аккаунта, который пост получил. Списки — отдельными лентами. ["all"], имена профилей или [] — как выбрано в меню.
Цвет аккаунта в общем окне. Цветная полоска или метка у постов, пришедших каждому аккаунту, — чтобы в слитом окне видеть, чьё это, не читая «→ @ник».
Действие от другого аккаунта. Лайкнуть, бустнуть или ответить не тем аккаунтом, который получил пост: В общем окне в меню ⋯ поста — «От другого аккаунта»: fedtail находит пост через сервер того аккаунта и делает действие оттуда; ответ открывается в редакторе от него.
Приложение
| Что | Статус | С версии | Конфиг | API / протокол | У других |
|---|---|---|---|---|---|
| Темы файлами | есть | 0.1.0 | ui.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.py | tut (man-страница и сайт), MediaWiki (статья на каждую настройку) |
| Окно, трей, клавиши | есть | 0.8.0 | ui.close_to_tray, ui.post_keys | — | клавиши — Mastodon web, Phanpy, Elk, Ivory, tut |
| Ссылки на посты и профили — внутри | есть | 0.2.0 | ui.links_in_app | search?resolve=true | Ivory, Phanpy, Elk, Megalodon, Fedilab |
| Открыть ссылку в запущенном fedtail | есть | 0.14.0 | fedtail open URL; --install-desktop ставит обработчик web+ap:// | своё | Megalodon (поделиться ссылкой в приложение) |
| Всё хранится локально, читается без сети | есть | 0.1.0 | — | SQLite в папке данных профиля | Tusky — частично, Ice Cubes — кэш Home |
| Открыт сутками без раздувания | есть | 0.11.0 | ui.unload_hidden_minutes, ui.image_cache_mb, debug.trim_memory | своё | — |
| Опрос сервера и живой поток | есть | 0.9.0 | [poll]: interval_seconds, stream, stream_gap_seconds | streaming (WebSocket) | Mastodon web, Phanpy, Elk, Tokodon, Whalebird, Ice Cubes |
| Ошибки по-человечески и без спама | есть | 0.13.0 | — | своё | — |
| Подробный журнал для отчётов об ошибках | есть | 0.2.0 | [debug], ключи запуска --debug, --bug-report | своё | — |
| Состояние федерации: как живёт моя нода и что не получается | есть | 0.16.0 | ≡ → «Отладка» → «Состояние федерации» | своё (из того, что видел запуск) | — |
| Поиск утечек: тренды, перепись объектов, снимки памяти | есть | 0.14.0 | debug.leak_samples, debug.object_census, debug.tracemalloc; ≡ → «Отладка» | своё (gc, tracemalloc) | — |
| База не растёт без конца: чистка и бюджет места | есть | 0.17.0 | [storage]: max_mb, keep_per_lane, keep_activity, gc_hours, grace_hours | SQLite, incremental vacuum | — |
| Экранные дикторы | частично | 0.9.0 | ui.alt_text | — | Mastodon web, Tusky, Ivory |
| Язык интерфейса | есть | 0.1.0 | ui.language | — | у всех |
| Справка внутри, на двух языках | есть | 0.17.0 | ≡ → «Справка» | своё: fedtail/data/help/<язык>/ | — |
| «Что это?»: подробная подсказка о любой кнопке | есть | 0.17.0 | ≡ → «Что это?» на время; ui.whats_this — с запуска | своё: hints.toml | KDE-приложения (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.0 | ui.frontend = "qt" | основной |
| Команды в терминале | есть | 0.9.0 | [cli]: enabled, color, max_lines, tail_lanes | tut (TUI), toot (CLI) |
| Терминальный интерфейс (Textual) | есть | 0.10.0 | ui.frontend = "tui", [tui]: theme, lanes_width, show_context, pictures, picture_rows | tut |
| Веб на localhost | есть | 0.10.0 | ui.frontend = "web", [web]: host, port, open_browser | Phanpy, 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.0 | PySide6 и requests |
| Linux: один файл | есть | 0.5.0 | fedtail-X.Y.Z-linux-x86_64, собран на Debian 12 |
| deb-пакет | есть | 0.10.0 | собирается в CI в Debian 13 |
| Windows: один .exe | есть | 0.5.0 | fedtail-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, Fedilab | Akkoma, Pleroma, Misskey; GoToSocial не умеет. |
| Проверка орфографии в панели поста | Tuba | Не в приоритете. В Qt своей нет: нужна внешняя библиотека (hunspell или enchant) опциональной зависимостью. |
| Сгруппированные уведомления сервера (v2) | Mastodon web, Ivory, Phanpy | Своя группировка уже есть. |
Токен через внешнюю команду (pass, gopass) | tut | Непонятно, что это даст поверх файла с правами только для владельца. |