English | Русский
Терминальная читалка RSS/Atom лент. Написана на Go с использованием Bubble Tea и Lip Gloss.
Vim-навигация, полнотекстовое чтение статей, умные папки, поиск с языком запросов, 4 цветовые темы, поддержка русской раскладки.
📺 Полное видео-демо (50 сек): demo/using.mp4
- Двухпанельный интерфейс: ленты слева, статьи справа
- Полнотекстовое чтение статей прямо в терминале (readability + glamour)
- Инлайн-картинки в ридере через Kitty Graphics Protocol
- Категории лент с возможностью сворачивания
- Умные папки (сохранённые поисковые запросы)
- Поиск с языком запросов (
title:rust unread newer:1w) - «Почитать позже» — отдельная очередь на чтение (
b), отличная от избранного - Library — сохранение произвольных URL вне RSS (
B, с подстановкой из буфера обмена) - Пакетные операции: отметить прочитанным, звезда, bookmark, копирование по запросу
- Импорт и экспорт OPML
- 4 темы: Dark (Tokyo Night), Light (Catppuccin Latte), Catppuccin Mocha, Rose Pine
- Nerd Font иконки для источников (GitHub, HN, Habr, Lobsters и др.)
- Powerline-статусбар
- Локализация: English / Русский
- Русская раскладка работает без переключения на английскую
- Автообновление лент по таймеру
- Копирование URL через OSC 52 (работает через SSH и tmux)
brew tap iRootPro/tap
brew install rdrgo install github.com/iRootPro/rdr@latestgit 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 превращает rdr из строго RSS-читалки в личную библиотеку для чтения. Если вы наткнулись на интересную статью в браузере или в чате — её можно сохранить и прочитать в той же среде, что и RSS-ленты, со всеми возможностями (полнотекстовое чтение, звезда, bookmark, поиск, AI-перевод и суммаризация).
Раздел Library появляется в левой панели первым, над умными папками и категориями.
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, 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-режим (одна панель) |
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 |
t |
Перевести статью (AI) |
Ctrl+s |
Суммаризировать статью (AI) |
x |
Переключить прочитано |
U |
Отменить последнее переключение x |
m |
Переключить звезду |
esc |
Назад к списку |
Вкладки: Ленты · Общие · Папки · Умные папки · Автокоманды · AI
| Клавиша | Действие |
|---|---|
tab |
Переключить вкладку |
a |
Добавить ленту / папку / автокоманду |
d |
Удалить |
e |
Переименовать / редактировать |
c |
Назначить папку ленте |
i |
Импорт OPML |
E |
Экспорт OPML |
enter / space |
Переключить значение (вкладка Общие) |
esc |
Закрыть настройки |
Вкладка Общие: язык, изображения, сортировка, превью, тема, автообновление (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 |
Выход |
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-провайдеров можно оставить пустым или указать модель в формате провайдера |
В читалке:
t— перевести статью на язык интерфейсаCtrl+s— суммаризировать на языке статьи (3-5 ключевых пунктов)
Apple Intelligence (macOS, бесплатно, локально):
brew install apfel
brew services start apfelEndpoint: http://localhost:11434/v1, Model: apple-foundationmodel
Ollama (macOS/Linux, бесплатно, локально):
brew install ollama && ollama serve
ollama pull llama3Endpoint: 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.
Переключаются через Настройки (s) > Общие > Тема:
- dark — Tokyo Night (по умолчанию)
- light — Catppuccin Latte
- catppuccin — Catppuccin Mocha
- rose-pine — Rose Pine
Светлая тема корректно работает на тёмном терминале и наоборот.
- База данных:
~/.config/rdr/rdr.db(SQLite) - Конфигурация:
~/.config/rdr/config.yaml - История команд:
~/.config/rdr/history - Состояние папок:
~/.config/rdr/collapsed_categories
Переменная RDR_HOME переопределяет директорию.
MIT
