Free Spaced Repetition Scheduler — Obsidian 的现代间隔重复算法。 将笔记转化为基于 FSRS 的记忆卡片。
[toc]
- 📊 FSRS-6 算法 — 比 SM-2 更高效
- 🎯 记忆控制 — 70-97% 的保留率
- ⚡ 高性能 — Rust/WASM 实现快速计算
- 🔄 动态界面 — 列表自动刷新
- 📱 移动端支持 — iOS(?), Android(✓)
- 🎨 灵活配置 — 筛选、排序、自定义
- 📈 统计 — 追踪进度
从社区目录安装(设置 → 社区插件 → 浏览 → FSRS)。
- Obsidian v1.12.7 或更高版本
- 支持 WebAssembly(默认启用)
| 平台 | 状态 |
|---|---|
| Linux (x86_64) | ✅ |
| macOS | ❔ (未测试) |
| Windows (x86_64) | ✅ |
| Android | ✅ |
| iOS | ❔ (未测试) |
- 创建卡片 — 打开笔记 → 执行命令
添加 FSRS 字段到 frontmatter(Ctrl/Cmd+P)。 - 添加复习按钮 — 使用命令
FSRS:插入复习按钮块(Ctrl/Cmd+P),或手动创建```fsrs-review-button```块,或在设置中启用自动添加。 - 插入表格 — 使用命令
插入默认 fsrs-table(Ctrl/Cmd+P),或手动创建```fsrs-table ...```块。 - 开始复习 — 打开表格,将鼠标悬停在文件名上,点击评分。
详细图文指南:使用说明
fsrs-table 块使用类 SQL 语法来配置卡片显示。
基本语法:
```fsrs-table
SELECT 字段1, 字段2 as "标题", 字段3
ORDER BY 字段4 DESC
LIMIT 30
```可用字段(列):
| 字段 | 描述 | 备注 |
|---|---|---|
file |
卡片文件名 | 可点击链接 |
reps |
已完成复习次数 | |
stability |
稳定性 (S) | FSRS 参数 |
difficulty |
难度 (D) | 值从 0 到 10 |
retrievability |
可提取性 (R) | 正确回答的概率 |
due |
下次复习日期和时间 | |
state |
卡片状态 | New、Learning、Review、Relearning |
elapsed |
距上次复习天数 | |
scheduled |
距下次复习天数 |
块参数:
SELECT— 选择要显示的字段(必填)ORDER BY— 按指定字段排序(ASC - 升序,DESC - 降序)LIMIT— 限制行数(0 = 使用插件默认值)
限制:
- 不支持子查询、JOIN、聚合(
COUNT、SUM、AVG)、GROUP BY、UNION WHERE仅支持简单条件:=、!=、<、>、<=、>=、~(正则)、!~、AND、OR- 唯一可用函数 —
date_format(字段, '格式') SELECT、WHERE、ORDER BY中的未知字段 — 错误并指明字段名SELECT中的列顺序保留在显示的表格中
更多: SQL 解析器工作原理
示例:
- 逾期卡片(按优先级):
```fsrs-table
SELECT file as " ", d as "D",
s as "S", r as "R",
due as "下次复习"
LIMIT 20
```- 所有卡片按日期排序:
```fsrs-table
SELECT *
ORDER BY due ASC
LIMIT 100
```插件使用 FSRS-6 算法实现。
用户可配置(设置 → FSRS → 算法参数):
| 参数 | 默认值 | 描述 |
|---|---|---|
request_retention |
0.9 (90%) | 目标记忆保持率 |
maximum_interval |
36500 天 | 复习之间的最大间隔 |
暂不可配置:
w权重(21 个参数) — FSRS 的核心,决定遗忘曲线。插件使用 FSRS 作者在 Anki 语料库(数百万次复习)上优化的默认值。- 基于用户统计的参数优化 — 不支持。用户无法用自己的回答数据重新训练权重。计划在未来版本中实现。
```fsrs-review-button
```FSRS 卡片存储在笔记的 frontmatter 中。reviews 字段:
---
reviews:
- date: "2026-01-15T10:30:00Z"
rating: 2
- date: "2026-01-20T14:15:00Z"
rating: 3
---每次会话的字段:
date— ISO 8601 格式的日期/时间rating—0(重来)、1(困难)、2(良好)、3(简单)
说明:
- 新卡片的
reviews可以为[] - 每次复习都会向数组中添加一个会话
- FSRS 根据历史记录计算下一个日期
- FSRS:添加 FSRS 字段到 frontmatter
- FSRS:复习当前卡片
- FSRS:删除最后一次复习
- FSRS:显示复习历史
- FSRS:插入复习按钮块
- FSRS:插入默认 fsrs-table
- FSRS:显示 fsrs-table 语法帮助
| 设置 | 描述 | 默认值 |
|---|---|---|
| 目标保留率 | 目标记忆保留率 | 0.9 (90%) |
| 最大间隔 | 最大间隔(天) | 36500(约100年) |
| 启用间隔模糊 | 间隔随机变化(±5%) | 启用 |
| 设置 | 描述 | 默认值 |
|---|---|---|
| 初始稳定性 | 初始稳定性 | 0.0 |
| 初始难度 | 新卡片初始难度 | 0.0 |
| 设置 | 描述 | 默认值 |
|---|---|---|
| 自动添加复习按钮 | 自动复习按钮 | 关闭 |
| 设置 | 描述 | 示例 |
|---|---|---|
| 忽略模式 | 忽略模式 | .obsidian/、templates/ |
FSRS — Jarrett Ye 开发的现代间隔重复算法。基于 FSRS-6 实现(v6.0.0, rev af8448e)。 与 SM-2 的区别:
- 通过机器学习学习记忆模式
- 适应用户的记忆速度
- 相同记忆水平下,所需复习次数减少 20-30%
- 更好地处理间隔(数周/数月)
FSRS 参数遵循 DSR 模型(难度 → 稳定性 → 可提取性), 反映记忆过程的逻辑:从材料的基本特征,到掌握牢固程度,再到回忆概率。
- Difficulty(D / 难度) — 静态特征,反映材料本身的记忆难度。不随时间变化。 范围:0–10。
- Stability(S / 稳定性) — 记忆牢固程度,以天为单位。 表示多少天后回忆概率降至 90%。
- Retrievability(R / 可提取性) — 动态概率(0.0–1.0) 表示当前时刻能回忆起来的概率。根据 S 和距上次复习的时间计算。
该算法使用 21 个参数,基于数百万次复习进行了优化。
更多信息: ABC of FSRS
开发在 GitLab 进行: gitlab.com/Evgene-Kopylov/FSRS-plugin。 GitHub 仓库为镜像。
- 前端: TypeScript、Obsidian API
- 算法: Rust(编译为 WebAssembly)
- 构建: esbuild、wasm-pack
- 测试: Rust (cargo test) + TypeScript (vitest)
原则: Rust — 计算核心,TypeScript — Obsidian API 的薄封装。
项目使用 GitLab CI/CD 进行自动化构建、测试和发布:
- Node.js 18+
- npm
- Rust(需要
wasm32-unknown-unknown目标) - wasm-pack
- binaryen(wasm-opt,通过
npm install安装)
git clone https://gitlab.com/Evgene-Kopylov/FSRS-plugin.git
cd FSRS-plugin
npm install
npm run build
# 安装插件到仓库
ln -s "$PWD" /path/to/vault/.obsidian/plugins/fsrs
# 开发(可选)
npm run dev插件使用 Rust/WASM 进行 FSRS 计算:
- WASM 二进制文件通过 base64 嵌入插件
- 无网络请求 — 全部本地运行
- 高性能 — 原生计算
更多信息: WASM Integration
插件采用 LGPLv3。
LGPL 允许:
- 在专有软件中使用
- 要求开源修改后的库代码
- ✅ 使用(免费,包括商业用途)
- ✅ 研究(源代码可用)
- ✅ 分发
- ✅ 改进
- 库的修改 — 以 LGPLv3 发布
- 允许动态链接,无需公开应用程序代码
- 保留版权声明
- 分发修改时 — 提供源代码
- 个人/商业用途自由使用
- 衍生插件 — 以 LGPLv3 发布
- Rust WASM 组件的修改 — 以 LGPLv3 发布
全文:LICENSE
- Jarrett Ye (叶峻峣) — FSRS 算法作者
- Obsidian 社区 — 灵感与支持
- Rust 社区 — WASM 工具
- DeepSeek — 强大且便捷的开发工具(代码、重构、本地化)
- 所有贡献者 — 改进和 Bug 报告