Skip to content

iRootPro/rdr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

133 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rdr

GitHub Release GitHub Downloads GitHub Stars Go Version License

English | Русский

Терминальная читалка RSS/Atom лент. Написана на Go с использованием Bubble Tea и Lip Gloss.

Vim-навигация, полнотекстовое чтение статей, умные папки, поиск с языком запросов, 4 цветовые темы, поддержка русской раскладки.

rdr demo

📺 Полное видео-демо (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)

Установка

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

Конфигурационный файл не обязателен. Всё можно настроить из интерфейса:

  1. Нажмите s для открытия настроек
  2. Нажмите a для добавления ленты (имя + URL)
  3. Нажмите esc для выхода из настроек
  4. Нажмите 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.

Как пользоваться

  1. Скопируйте URL в буфер обмена (или просто запомните).
  2. Нажмите B в любой панели (ленты, статьи, читалка).
  3. Откроется модальное окно с предзаполненным полем — если в буфере был URL, он подставится автоматически.
  4. Enter — сохранить, esc — отменить.
  5. Запись появляется сразу в Library с placeholder-заголовком (host из URL). В фоне запускается извлечение полного содержимого через readability — через 1-3 секунды заголовок и тело статьи обновятся.
  6. Откройте 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 Выход

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-провайдеров можно оставить пустым или указать модель в формате провайдера

Использование

В читалке:

  • 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.

Темы

Переключаются через Настройки (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

About

Terminal RSS/Atom feed reader built with Go

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages