rdr

command module
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 6, 2026 License: MIT Imports: 12 Imported by: 0

README

rdr

GitHub Release GitHub Downloads GitHub Stars Go Version License

English | Русский

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

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

rdr demo

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

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

  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, 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

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
imgspike command
imgspike is a diagnostic harness for inline image rendering inside a bubbletea TUI.
imgspike is a diagnostic harness for inline image rendering inside a bubbletea TUI.
kittytest command
kittytest emits a single image via the Kitty Graphics Protocol using the internal/kitty package and prints a placeholder block.
kittytest emits a single image via the Kitty Graphics Protocol using the internal/kitty package and prints a placeholder block.
internal
ai
Package ai provides AI backends for article translation and summarization.
Package ai provides AI backends for article translation and summarization.
db
i18n
Package i18n holds the UI string tables for rdr.
Package i18n holds the UI string tables for rdr.
rlog
Package rlog provides a simple file logger for rdr.
Package rlog provides a simple file logger for rdr.
ui

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL