按信源抓取网页 / RSS / 邮件等,解析、补全文、打标签与翻译后入库,再按需生成 RSS / Atom / JSON Feed 与 JSON API。
RSSAny 是一套自托管的订阅管线:列表 URL → 抓取与解析(规则 / LLM)→ 正文提取(自定义 / Readability / LLM)→ upsert 去重 → 固定 pipeline(打标签、翻译等)→ 对外提供 **/rss** 等输出。
- 统一订阅:在
.rssany/sources.json中配置网站列表、标准 RSS、IMAP 邮件等,由调度器按refresh策略拉取。 - 可插拔信源:Site / Source 插件(
.rssany.js/.rssany.ts),见 插件配置说明。 - 正文与解析:在信源
fetchItems(及需要的ctx.extractItem等)内完成;入库后跑 pipeline。 - 固定 pipeline:
app/pipeline/中打标签、翻译等,由.rssany/config.json的pipeline.steps开关(不是用户目录下的 pipeline 插件)。 - LLM 辅助:解析、提取、标签、翻译等可按配置走 OpenAI 兼容接口。
- 站点登录:需登录的站点通过 Puppeteer 管理 Cookie(与产品用户账号无关)。
- 可选远端投递:若
config.json中**deliver.url** 非空,在写库与 pipeline 完成后将条目以**{ sourceRef, items }**JSON POST 到该 URL(由app/deliver/post.ts发送);留空则仅本地消费。 - Web 界面:SvelteKit 构建产物由后端托管;Feeds 等需 邮箱校验;
**/admin** 需**users.role === 'admin'**(可从**/me**进入)。
| 层级 | 说明 |
|---|---|
| 运行时 | Node.js 20–23(见 package.json engines) |
| 后端 | Hono、tsx 开发入口 |
| 数据 | SQLite(Node.js 内置 node:sqlite,Node.js 20+),默认 ~/.rssany/data/rssany.db(Windows:%USERPROFILE%\.rssany\data\rssany.db) |
日常使用只需 Node.js 20.x–23.x(与 package.json 的 engines 一致):
npm install -g rssany # 与 npm i -g rssany 相同
rssany安装包内已包含构建好的后端与 Web 界面;启动后用浏览器打开终端里提示的地址(默认 http://127.0.0.1:18473/,端口可在运行命令时当前目录下的 .env 里设置 PORT)。
- 数据目录:首次运行会在
~/.rssany/(Windows:%USERPROFILE%\.rssany\)自动从包内init/生成sources.json、config.json等(已存在则不会覆盖)。 - 可选配置:在启动
rssany时的当前目录放置.env(可参考仓库里的.env.example),用于 JWT、OAuth、SMTP、LLM(如OPENAI_API_KEY/OPENAI_BASE_URL/OPENAI_MODEL)等。 - 重置全部本地数据(结束占用
PORT的进程并删除用户目录,慎用):执行rssany reset;在含.env的目录下运行可读取PORT/RSSANY_USER_DIR,或事先在环境里导出这些变量。
等价于在项目里执行 node node_modules/rssany/dist/index.js;CLI 名为 rssany。
需要 pnpm:
pnpm install
pnpm run webui:install
cp .env.example .env # 按需修改开发(后端托管 webui 构建目录;改前端可 watch):
pnpm run dev:all或分步:pnpm run webui:build 后 pnpm dev。
仅调试 WebUI 热更新(可选):cd webui && pnpm dev(Vite 代理到本机后端,见 webui/vite.config.ts)。
生产(本仓库):pnpm run webui:build && pnpm start。
重置本地数据(与全局安装的 rssany reset 逻辑相同):pnpm reset。
发布到 npm 时 prepublishOnly 会执行 build:all(后端 vite build + webui:build)。
sources.json / 信源插件
→ 调度器触发 fetchItems
→ upsertItems
→ pipeline(每条一次)
→ [可选] deliver.url POST(出站,非入站 API)
消费侧:RSS/XML、**/api/***、Web UI。
- 按条件从库中生成:支持
search、tags、lng、limit等查询参数;可用subscribed=1限定为sources.json中出现的 ref。 - 按 URL 即时抓取:
GET /rss/https://example.com/...(具体行为以路由实现为准)。
信源插件(Site / Source):目录约定、listUrlPattern / pattern、fetchItems、与 sources.json 的关系等,见 docs/plugins.md。
**app/pipeline/**,通过 **.rssany/config.json** 配置步骤,例如:
{
"pipeline": {
"steps": [
{ "id": "tagger", "enabled": true },
{ "id": "translator", "enabled": false }
]
},
"deliver": {
"url": ""
}
}deliver.url 非空时会对处理完成的条目向该 URL 发起出站 POST;留空则不投递。
{
"sources": [
{ "ref": "https://example.com/feed.xml", "label": "Example", "refresh": "1h" }
]
}合法 refresh 取值包括:10min、30min、1h、6h、12h、1day(默认)、3day、7day。
├── app/ # 后端:路由、feeder、scraper、pipeline、db、auth…
│ └── plugins/builtin/ # 内置信源 *.rssany.js
├── docs/ # 用户文档(如 plugins.md)
└── webui/ # SvelteKit 前端
~/.rssany/ # 运行时用户数据(首次启动创建;或 RSSANY_USER_DIR)
├── sources.json
├── config.json
├── tags.json
├── data/rssany.db # SQLite 主库
├── cache/
└── plugins/ # 用户插件覆盖内置
更细的模块说明见 AGENTS.md(与代码迭代同步,若有出入以代码为准)。
MIT
