GitHub·· 6 天前AI 评分38
readflow:本地优先的 AI RSS 阅读器,基于 Tauri 2 + Vue 3 + Rust
greatshieh/readflow
AI 导读
readflow 是一款本地优先的 AI RSS 阅读器,基于 Tauri 2 + Vue 3 + Rust 构建,无账户、无云端,网络请求、RSS 解析、AI 调用与 SQLite 读写全部在 Rust 侧完成。
正文
本地优先的 AI RSS 阅读器 —— 无账户、无云端,数据与密钥全部留在你自己的机器上。
基于 Tauri 2 + Vue 3 + Rust 的桌面 RSS 阅读器。订阅、正文、高亮、AI 摘要与翻译、研究事件抽取, 全部在本机完成:网络请求、RSS 解析、AI 调用与 SQLite 读写都在 Rust 侧,前端只负责渲染与交互。
功能
订阅与分组
- 添加 / 编辑 / 删除订阅源,自动抓取站点图标并在图标失效时回退为首字母头像
- OPML 导入与导出
- 自动分组:按 RSSHub 路由前缀 → 配置的实例 → 主机名归组,绝不粗暴按域名切分
- 新增订阅时按候选实例列表顺序探测 RSSHub 连通性,失败静默回退首选实例,不打断操作
阅读
- 三栏布局(订阅 / 文章列表 / 正文),无边框自定义标题栏
- 按日期分组、已读与未读、收藏、全文搜索、分页加载
- 正文高亮:选中即变色标记,支持多色与逐条删除
AI 增强
- 单篇摘要、全文翻译,模型与 Base URL 完全自定义(DeepSeek / GLM / Qwen / Ollama 等任何 OpenAI 兼容接口)
- 每日阅读简报、智能摘要分组
研究流水线
- 实体管理 → 单篇或批量事件抽取 → 时间线 → 报告阅读
- 报告支持日报 / 周报,可输出到应用内、Obsidian 或两者;实体共现关系图支持 弹窗与主屏全宽两种视图
- 自动化任务(cron)驱动批量抽取与定时报告,全流程无人值守
- 详细用法见 研究工作台使用指南
自动化与外观
- 定时刷新与自定义自动化任务
- 明暗主题、强调色、界面字体 / 阅读字体 / 字号 / 缩放,全部可调
- 系统托盘(左键显示隐藏,右键菜单)、全局快捷键
数据
- 收录统计、数据库备份 / 恢复 / 清理
- 单向导出到 Obsidian
技术栈
| 层 | 选型 |
|---|---|
| 桌面框架 | Tauri 2(无边框窗口 + 系统托盘) |
| 前端 | Vue 3 <script setup> + TypeScript + Vite + Pinia |
| 后端 | Rust(tokio + sqlx + reqwest + chrono) |
| 数据库 | SQLite(本地单文件,无服务端) |
快速开始
环境要求
-
Node.js ≥ 18,Rust ≥ 1.77
-
Linux 还需安装 Tauri 的系统依赖:
sudo apt update sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \ libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev -
macOS:
xcode-select --install -
Windows:MSVC 工具链 + WebView2 Runtime
开发与运行
npm install npm run tauri:dev # 开发模式(自动在 1420 端口起 Vite) npm run tauri:build # 打包安装包(.deb / .AppImage / .dmg / .msi 等)
校验
npm run typecheck # .vue + .ts 类型检查(vue-tsc) npm run build:frontend # 前端打包 cd src-tauri && cargo test --lib && cargo check --lib
npm run build= 上面「类型检查 + 打包」两步串联,供人工 / CI 使用; Tauri 的beforeBuildCommand只指向build:frontend,类型检查不阻塞出包。
项目结构
src/ 前端
components/ UI 组件(BaseModal / AppSwitch 等基础设施见 styles.css 与各自文件头)
stores/ Pinia:feeds / articles / tags / settings / research / ui …
utils/ appearance(外观应用)、dialogStack(弹窗计数)…
styles.css 设计令牌单一来源:色彩 / 阴影 / 间距 / 字号
src-tauri/src/
lib.rs IPC 边界:77 个命令的唯一注册与入口
db.rs 数据访问层与 Schema
rss.rs RSS 抓取与正文清洗
ai.rs AI 调用(摘要 / 翻译 / 日报简报 / 文章追问)
scheduler.rs 定时刷新与自动化任务
research/ 实体 / 事件 / 报告(mod / extract / normalize / report)
grouping.rs 订阅源自动分组
rsshub.rs RSSHub 实例探测与分组键推导
opml.rs OPML 导入导出
obsidian.rs Obsidian 导出
fonts.rs 系统字体枚举(零依赖解析 SFNT)
notify.rs 系统通知(三重门:句柄 / 开关 / 窗口离开)
net.rs 共享 HTTP 客户端
tray.rs 系统托盘
icons/ 应用图标(regen-icons.sh 可重出全套)
产品定位、阶段划分与模块拆解见 DEVELOPMENT_PLAN.md。
数据与隐私
- 无账户体系,不连接任何自建服务端。
- 数据库位置:
- Linux:
~/.local/share/cn.readflow.app/readflow.db - macOS:
~/Library/Application Support/cn.readflow.app/readflow.db - Windows:
%APPDATA%\cn.readflow.app\readflow.db
- Linux:
- AI API Key 只写入本地 SQLite,设置页出于安全考虑不回填明文,仅以「已配置 / 未配置」提示状态。
- 正文一律使用 RSS 自带的
content/summary,不做网页全文抓取;入库 HTML 经ammonia清洗。
开发约定
- 前后端边界:所有网络、RSS 解析、AI 与 SQLite 操作都在 Rust 侧;前端只做渲染、格式化与
已加载数据的排序过滤,通过
invoke('cmd', { camelCase })调用。 - Schema 一次成型:表结构直接写在
db.rs::create_tables中,不使用ALTER TABLE补丁式迁移。 - 注释:文件头写职责,函数头写「做什么 + 为什么 + 参数 + 返回 + 错误」;注释中文,标识符英文。
- 样式:颜色、阴影、间距、字号一律引用
styles.css的设计令牌,组件内禁止字面量色值。
许可证
本项目采用 MIT 许可证。
来源:GitHub · github.com