
源码系统概览
文章正文
Stringer 是一款自托管 RSS 阅读器,基于 Ruby on Rails 构建,以 MIT 协议开源,可以部署到自己的服务器上使用。
每天打开手机刷新闻,刷到的多是算法推给你的内容,评论区吵吵闹闹,想安静读几篇文章越来越难。
这次分享的是 Stringer 的完整 Ruby 源码,部署之后就能拥有一个安静、干净的新闻阅读系统。
源码简介
Stringer 由开发者 Matt Swanson 创建,原仓库 swanson/stringer 在 GitHub 上收获约 4100 个 Star。
它的设计主线是「反社交」,砍掉点赞、评论、关注与算法推荐,只保留订阅、抓取、阅读、收藏这几件事。
项目基于 Ruby on Rails 构建,仓库共 423 个文件,其中 Ruby 代码 252 个,另有 TypeScript、CSS 与 ERB 视图等。
后端路由覆盖文章列表、订阅源管理、OPML 导入导出、Fever 协议与后台任务等完整能力。
前端由 Hotwire 的 Turbo 与 Stimulus 搭配 Backbone.js 组成,配合 Mousetrap 支持全键盘操作。
项目内置 17 种语言包,包含简体中文与繁体中文,装上即可切换界面。
适用场景
适合厌倦信息过载、追求纯粹阅读体验的个人用户。
自媒体与资讯爱好者如果不愿把订阅数据交给第三方平台,也可以把它部署到自己的服务器上。
运维开发者可以在 VPS、Docker 或 Heroku 上快速搭建一套私有的新闻订阅服务。
把它当作 Ruby on Rails 学习项目也不错,可以研究 Hotwire、GoodJob 后台任务与 RSS 解析的工程实践。
功能亮点
纯粹阅读:无社交功能、无算法推荐,界面专注文章内容本身。
全键盘操作:按键即可查看快捷键列表。
轻量架构:数据库仅需 PostgreSQL,外部依赖极少。
Fever 协议兼容:可对接各类支持 Fever 的移动客户端,多端同步阅读。
订阅管理完善:支持手动添加订阅源,也支持 OPML 批量导入与导出。
收藏与阅读状态:文章可标星收藏、标记已读,也可一次性全部标记已读。
界面多语言:内置 17 种语言,覆盖简体中文、繁体中文、日文等。
旧文自动清理:内置清理任务,可移除 30 天前的已读旧文章。
技术架构与部署指南
技术栈与运行环境
前端:Hotwire(Turbo 与 Stimulus)、Backbone.js、Underscore、Bootstrap 5、Font Awesome 与 Mousetrap。
后端:Ruby on Rails 8.1,GoodJob 处理后台任务,Feedjira 与 Feedbag 负责订阅源解析与发现。
数据库:PostgreSQL,通过 ActiveRecord 访问,使用 strong_migrations 保障数据库迁移安全。
运行环境:Ruby 3.x、PostgreSQL 10 及以上、Node.js 与 pnpm,支持 VPS、Docker、Heroku 与 OpenShift 部署。
其他依赖:Nokogiri 与 Loofah 处理 HTML 清洗,bcrypt 加密密码,will_paginate 分页,Puma 作为应用服务器。
安装与部署提示
官方提供 Heroku 一键部署按钮,同时准备了 VPS、Docker、OpenShift 三份详细部署文档。
本地开发需先安装 Ruby、Node、PostgreSQL 与 pnpm,随后执行 bin/setup 即可完成依赖安装与数据库初始化。
之后运行 bin/dev 启动服务,默认监听 3000 端口。
首次访问会引导设置密码与基础教程,按提示完成即可开始使用。
通过环境变量 LOCALE 可切换界面语言,例如设置为 zh 即可使用简体中文。
生产环境注意配置 DATABASE_URL、SECRET_KEY_BASE 等必要环境变量,并建议启用 HTTPS。
截图与演示说明
仓库自带 screenshots 目录,包含 stories、feed、instructions、keyboard_shortcuts 等六张界面截图。
文章列表页是阅读的核心界面,未读文章按订阅源分组展示,并实时统计各订阅源的未读数量。
列表支持星标收藏与保持未读等操作,对应的 UnreadCount 控制器会即时刷新未读计数。
单篇阅读页展示标题、来源与发布时间,支持一键重新抓取文章内容。
键盘快捷键界面按 ? 键唤起,将常用操作集中到键盘上。
订阅源管理页提供增删改查,支持导出 OPML,也支持从 OPML 文件批量导入。
设置页可调整文章排序与分组显示方式。
常见问题
问:Stringer 是什么?
答:Stringer 是一款开源的「反社交」自托管 RSS 阅读器,主打纯粹阅读,无社交干扰与算法推荐。
问:怎么安装使用?
答:可参照官方文档部署到 VPS、Docker、Heroku 或 OpenShift,本地开发也可用 bin/setup 一键初始化环境。
问:它和 Miniflux、FreshRSS、Tiny Tiny RSS 有什么区别?
答:Miniflux 主打极简与低资源占用,FreshRSS 偏多用户与插件扩展,Tiny Tiny RSS 功能完整但操作偏传统,Stringer 则以反社交理念、全键盘操作与 Fever 协议支持见长,界面更克制。
| 项目 | 语言与框架 | 数据库 | 特色 | 协议 |
|---|---|---|---|---|
| Stringer | Ruby on Rails | PostgreSQL | 全键盘操作、Fever 协议 | MIT |
| Miniflux | Go | PostgreSQL | 极简、低资源占用 | Apache 2.0 |
| FreshRSS | PHP | MySQL/SQLite | 多用户、扩展丰富 | AGPL |
问:项目是否免费?
答:完全免费,采用 MIT 开源协议,可自由使用、修改与再分发。
安全风险提示
特别提示:本源码未检测安全风险文件,下载后请务必进行安全审计,删除恶意代码后再部署使用!
作为参考,原版项目自身带有较强的安全设计。
SafeFetch 借助 private_address_check 拦截内网地址,可有效防止 SSRF 攻击。
文章内容在渲染前经 Loofah 清洗,订阅源地址仅允许 http 与 https 协议。
授权层会校验每条记录的归属用户,开发流程中还内置了 brakeman 安全扫描。
下载说明
本文所述源码来自 GitHub 开源社区,仅供学习与研究使用。
请在下载后自行完成代码审计与安全检查,确认环境安全后再部署上线。
因使用本源码产生的任何问题与损失,本站不承担相关责任。
GitHub项目开源地址:https://github.com/swanson/stringer
最后更新:2026-08-18