rdr

English | Русский
Терминальная читалка RSS/Atom лент. Написана на Go с использованием Bubble Tea и Lip Gloss.
Vim-навигация, полнотекстовое чтение статей, умные папки, поиск с языком запросов, 6 цветовых тем, поддержка русской раскладки.

📺 Полное видео-демо (50 сек): demo/using.mp4
Возможности
- Двухпанельный интерфейс: ленты слева, статьи справа
- Полнотекстовое чтение статей прямо в терминале (readability + glamour)
- Инлайн-картинки в ридере через Kitty Graphics Protocol
- Папки лент с созданием пустых папок, переименованием, удалением и сворачиванием
- Быстрое добавление YouTube-каналов: вставьте ссылку на канал/handle/видео, rdr сам найдёт RSS
- Умные папки (сохранённые поисковые запросы)
- Поиск с языком запросов (
title:rust unread newer:1w)
- «Почитать позже» — отдельная очередь на чтение (
b), отличная от избранного
- Library — сохранение произвольных URL вне RSS (
B, с подстановкой из буфера обмена)
- Пакетные операции: отметить прочитанным, звезда, bookmark, копирование по запросу
- Импорт и экспорт OPML
- 6 тем: Dark (Tokyo Night), Light (Catppuccin Latte), Sepia, Catppuccin Mocha, Rose Pine, Gruvbox
- Nerd Font иконки для источников (GitHub, HN, Habr, Lobsters и др.)
- Powerline-статусбар
- Локализация: English / Русский
- Русская раскладка работает без переключения на английскую
- Автообновление лент по таймеру
- Копирование URL через OSC 52 (работает через SSH и tmux)
Установка
Homebrew (macOS / Linux)
brew tap iRootPro/tap
brew install rdr
Go
go install github.com/iRootPro/rdr@latest
Из исходников
git clone https://github.com/iRootPro/rdr.git
cd rdr
go build -o rdr .
Бинарники
Готовые бинарники для macOS (arm64, amd64) и Linux (arm64, amd64) доступны на странице Releases.
Требования
- Go 1.22 и выше
- Терминал с поддержкой true color (Kitty, iTerm2, WezTerm, Ghostty и др.)
- Шрифт с патчем Nerd Fonts (для иконок)
Быстрый старт
rdr
Конфигурационный файл не обязателен. Всё можно настроить из интерфейса:
- Нажмите
s для открытия настроек
- Нажмите
a для добавления ленты (имя + URL)
- Нажмите
esc для выхода из настроек
- Нажмите
R для синхронизации
Ленты, умные папки, категории, язык, тему — всё можно менять через настройки (s).
Конфигурация (опционально)
Файл ~/.config/rdr/config.yaml не обязателен — всё можно настроить из интерфейса (s). Конфиг удобен для начальной загрузки лент при первом запуске.
Путь: ~/.config/rdr/config.yaml (или $RDR_HOME/config.yaml):
# Интервал автообновления в минутах (0 = отключено)
refresh_interval_minutes: 15
# Ленты с опциональными категориями
feeds:
- name: Hacker News
url: https://hnrss.org/frontpage
category: IT
- name: Lobsters
url: https://lobste.rs/rss
category: IT
- name: Go Blog
url: https://go.dev/blog/feed.atom
category: Programming
# Умные папки — сохранённые запросы, отображаются в панели лент
smart_folders:
- name: Inbox
query: unread
- name: Today
query: today
- name: This Week
query: newer:1w unread
- name: Starred
query: starred
# Команды, выполняемые автоматически после каждой синхронизации
after_sync_commands:
- read title:sponsor
- read feed:habr title:реклама
Ленты и умные папки из конфига синхронизируются в базу при каждом запуске. Все остальные настройки (язык, тема, сортировка, превью) хранятся в SQLite и меняются через интерфейс (s).
Library — сохранение произвольных URL
Library превращает rdr из строго RSS-читалки в личную библиотеку для чтения. Если вы наткнулись на интересную статью в браузере или в чате — её можно сохранить и прочитать в той же среде, что и RSS-ленты, со всеми возможностями (полнотекстовое чтение, звезда, bookmark, поиск, AI-перевод и суммаризация).
Раздел Library появляется в левой панели первым, над умными папками и категориями.
Чем отличается от «Почитать позже» (b)
b (Read Later) — флажок на существующей статье из подписанной RSS-ленты. Статья остаётся в своей ленте, просто получает метку.
- Library (
B) — отдельная коллекция URL, добавленных вручную. Источник может быть любым, не обязательно RSS.
Как пользоваться
- Скопируйте URL в буфер обмена (или просто запомните).
- Нажмите
B в любой панели (ленты, статьи, читалка).
- Откроется модальное окно с предзаполненным полем — если в буфере был URL, он подставится автоматически.
Enter — сохранить, esc — отменить.
- Запись появляется сразу в Library с placeholder-заголовком (host из URL). В фоне запускается извлечение полного содержимого через readability — через 1-3 секунды заголовок и тело статьи обновятся.
- Откройте Library в левой панели → выберите статью →
enter для чтения.
Хоткеи
| Клавиша |
Действие |
B |
Открыть модалку добавления URL (с подстановкой из буфера) |
D |
Удалить статью из Library (только когда выбран раздел Library) |
f |
Перезапросить полное содержимое (если первичный fetch упал) |
Все остальные операции (x, m, b, y, o, Ctrl+t, Ctrl+s) работают как с обычными RSS-статьями.
Технические детали
- Дедупликация по URL: повторное сохранение того же URL обновит заголовок и тело, но сохранит звёзды/bookmarks/прочитанность.
- Library не участвует в
R (sync all) и не показывается в настройках лент.
- При экспорте OPML раздел Library пропускается.
- Записи Library не подпадают под автоматическую очистку старых статей (
TrimArticles).
Навигация
Общие клавиши
| Клавиша |
Действие |
j / k |
Вниз / вверх |
g / G |
В начало / в конец |
Ctrl+d / Ctrl+u |
Страница вниз / вверх |
tab |
Переключить панель |
enter |
Открыть |
esc |
Назад |
R |
Обновить все ленты |
r |
Обновить текущую ленту |
s |
Настройки |
/ |
Поиск |
: |
Командная строка |
? |
Справка |
z |
Zen-режим (одна панель) |
t |
Переключить тему |
q |
Выход |
Панель статей
| Клавиша |
Действие |
enter |
Открыть статью |
x |
Переключить прочитано/непрочитано |
U |
Отменить последнее переключение x |
X |
Отметить все прочитанными |
m |
Переключить звезду |
b |
Почитать позже (bookmark) |
B |
Сохранить URL в Library (с подстановкой из буфера) |
D |
Удалить из Library (только когда выбрана Library) |
n |
Следующая непрочитанная |
y |
Копировать URL |
Y |
Копировать как markdown-ссылку |
o |
Открыть в браузере |
a |
Показать все |
u |
Только непрочитанные |
S |
Только со звездой |
p |
Переключить превью |
Читалка
| Клавиша |
Действие |
j / k |
Прокрутка по строке |
space |
Страница вниз |
J / K |
Следующая / предыдущая статья |
f |
Загрузить полную статью |
L |
Выбор ссылок |
o |
Открыть URL в браузере |
y / Y |
Копировать URL / markdown |
Ctrl+t |
Перевести статью (AI) |
Ctrl+s |
Суммаризировать статью (AI) |
x |
Переключить прочитано |
U |
Отменить последнее переключение x |
m |
Переключить звезду |
esc |
Назад к списку |
Настройки
Вкладки: Ленты · Общие · Папки · Умные папки · Автокоманды · AI
| Клавиша |
Действие |
tab |
Переключить вкладку |
a |
Добавить ленту / папку / умную папку / автокоманду |
d |
Удалить |
e |
Переименовать / редактировать |
c |
Назначить папку ленте; пункт + New folder… тоже создаёт новую папку |
i |
Импорт OPML |
E |
Экспорт OPML |
enter / space |
Переключить значение (вкладка Общие) |
esc |
Закрыть настройки |
При добавлении ленты можно вставить ссылку на YouTube-канал/handle/видео: rdr покажет экран поиска канала, найдёт channel ID и сохранит RSS youtube.com/feeds/videos.xml. Если есть папка YouTube, она будет выбрана по умолчанию.
Вкладка Общие: язык, изображения, сортировка, превью, тема, автообновление (0/5/15/30/60 мин), хранение прочитанных статей (0/30/90/180/365 дней; 0 = хранить всё).
Вкладка Автокоманды: команды, выполняемые после каждой синхронизации (синтаксис запросов, например read title:sponsor).
Все клавиши работают на русской раскладке без переключения.
Язык запросов
Используется в поиске (/), умных папках и пакетных командах.
слово поиск в заголовке и имени ленты
title:rust заголовок содержит "rust"
feed:habr имя ленты содержит "habr"
description:python описание содержит "python"
unread только непрочитанные
read только прочитанные
starred только со звездой
unstarred без звезды
bookmarked в «почитать позже»
unbookmarked не в «почитать позже»
today опубликовано сегодня
yesterday опубликовано вчера
newer:1w новее 1 недели (1d, 3h, 45m, 1mo, 1y)
older:2w старше 2 недель
~title:ad отрицание (НЕ содержит "ad")
Атомы объединяются через И: unread title:rust newer:1w = непрочитанные статьи с "rust" в заголовке за последнюю неделю.
Команды
Вызываются через : (командная строка). Автодополнение по tab.
| Команда |
Описание |
:sync |
Обновить все ленты |
:sort date / :sort title |
Сортировка |
:sortreverse |
Обратный порядок |
:filter all|unread|starred |
Фильтр |
:read <запрос> |
Пакетно отметить прочитанным |
:unread <запрос> |
Пакетно отметить непрочитанным |
:star <запрос> |
Пакетно добавить звезду |
:unstar <запрос> |
Пакетно убрать звезду |
:bookmark <запрос> |
Пакетно добавить в «почитать позже» |
:unbookmark <запрос> |
Пакетно убрать из «почитать позже» |
:copy url <запрос> |
Копировать URL совпавших статей |
:copy md <запрос> |
Копировать как markdown-ссылки |
:import <путь> |
Импорт лент из OPML |
:export <путь> |
Экспорт лент в OPML |
:images |
Переключить отображение изображений |
:retention <N> / :retention off |
Срок хранения прочитанных статей в днях (off — хранить всё) |
:zen |
Переключить zen-режим |
:collapseall |
Свернуть все категории |
:expandall |
Развернуть все категории |
:q |
Выход |
AI: перевод и суммаризация
rdr поддерживает перевод и суммаризацию статей через OpenAI-совместимые API и локальные CLI-провайдеры: Claude Code, pi и opencode. Подробнее: docs/ai.md.
Настройка
Откройте Настройки (s) > вкладка AI и укажите:
| Параметр |
Описание |
| Provider |
openai, claude, pi или opencode |
| Endpoint |
URL API (только для openai, например http://localhost:11434/v1) |
| API Key |
Ключ API (только для openai, необязателен для локальных моделей) |
| Model |
Название модели; для CLI-провайдеров можно оставить пустым или указать модель в формате провайдера |
Использование
В читалке:
Ctrl+t — перевести статью на язык интерфейса
Ctrl+s — суммаризировать на языке статьи (3-5 ключевых пунктов)
Примеры провайдеров
Apple Intelligence (macOS, бесплатно, локально):
brew install apfel
brew services start apfel
Endpoint: http://localhost:11434/v1, Model: apple-foundationmodel
Ollama (macOS/Linux, бесплатно, локально):
brew install ollama && ollama serve
ollama pull llama3
Endpoint: http://localhost:11434/v1, Model: llama3
Claude Code (по подписке Claude Max/Pro, без оплаты за API токены):
Claude Code — это CLI от Anthropic, который работает по подписке. Перевод и суммаризация используют вашу подписку Claude, а не API-кредиты.
Установка:
npm install -g @anthropic-ai/claude-code
claude # авторизация при первом запуске
Настройка в rdr: Settings (s) > AI > Provider → claude. Endpoint и API Key оставьте пустыми — не требуются. По желанию можно указать модель (например claude-sonnet-4-20250514).
pi CLI (использует вашу внешнюю настройку pi):
Установите pi по инструкции проекта и настройте провайдера/API-ключи снаружи rdr. Например:
export GEMINI_API_KEY=...
pi -p "Say hello"
Настройка в rdr: Settings (s) > AI > Provider → pi. Endpoint и API Key будут очищены и не используются. Model можно оставить пустым или указать, например google/gemini-2.5-pro / anthropic/claude-sonnet-4.
Для перевода и суммаризации rdr запускает pi в безопасном одноразовом режиме: без сессий, инструментов, context files, extensions, skills, prompt templates и themes.
opencode CLI (использует вашу внешнюю настройку opencode):
Установите и авторизуйте opencode по инструкции проекта, затем проверьте CLI:
opencode run "Say hello"
Настройка в rdr: Settings (s) > AI > Provider → opencode. Endpoint и API Key будут очищены и не используются. Если Model пустой, opencode использует свою модель/агента из собственной конфигурации. Если нужно переопределить модель из rdr, укажите её в формате opencode, например anthropic/claude-sonnet-4.
OpenAI (облако, платно):
Provider: openai, Endpoint: https://api.openai.com/v1, API Key: sk-..., Model: gpt-4o-mini
Каталог лент
Встроенный каталог RSS-лент по категориям. Открывается автоматически при первом запуске или через :discover.
Категории: Tech News, Programming, AI/ML, Security, Linux/Open Source, Science, Health & Fitness, RU Tech, Design.
Темы
Переключаются по t или через Настройки (s) > Общие > Тема:
- dark — Tokyo Night (по умолчанию)
- light — Catppuccin Latte
- sepia — тёплая бумажная светлая тема
- catppuccin — Catppuccin Mocha
- rose-pine — Rose Pine
- gruvbox — Gruvbox Dark
Светлая тема корректно работает на тёмном терминале и наоборот.
Данные
- База данных:
~/.config/rdr/rdr.db (SQLite)
- Конфигурация:
~/.config/rdr/config.yaml
- История команд:
~/.config/rdr/history
- Состояние папок:
~/.config/rdr/collapsed_categories
Переменная RDR_HOME переопределяет директорию.
Лицензия
MIT