项目详情
Anki
把「记忆」当成工程问题,解了二十年的间隔重复标杆
ankitects/anki
AGPL-3.0
Rust + Python + TS
31.2k stars
2006 年立项 · 月度发布
分类:学习工具 · 长寿开源项目 · ← 返回汇总
项目速览
一句话定位
不是笔记软件,是一台对抗遗忘的调度引擎
智能间隔重复记忆卡程序的桌面版源码:Rust 核心 + Python/Qt 桌面壳 + Svelte 前端,内建 FSRS 现代调度算法,通过 AnkiWeb 免费云同步串起 iOS/Android/网页全端。适合任何需要长期牢固记忆的人——语言学习、医学生、法考党全球主力工具。
本仓库 = 桌面版 + 核心 rslib
AnkiDroid / AnkiMobile 为独立端
AnkiWeb 同步免费
项目速览
核心数据
GitHub API 采集于 2026-09-19 · 主语言 Rust · 仓库 53MB · 最近 push 2026-09-19(当天仍在活跃开发)
🔥 核心页
它解决什么:遗忘是指数级的,复习必须卡在刀刃上
复习节点(FSRS 决定何时触发)
实线 = 间隔重复下的保留率
虚线橙 = 不复习的遗忘曲线
Anki 的全部价值就在这张图:算出每张卡「快忘但没忘」的时间点,把复习总成本压到最低。
🔥 核心页
架构:一场持续八年的 Rust 渐进重写
Rust 核心(一切业务逻辑的家)
传统桥与前端
protobuf 跨语言桥
策略:不动用户数据格式的前提下,把调度/IO 逐块从 Python 搬进 Rust——8 年没停过,AnkiDroid 与未来新端也直接复用 rslib。
核心机制
FSRS:从社区研究到官方心脏
- 出身:open-spaced-repetition 社区用数千万条真实复习记录训练的记忆模型,2023 年 23.10 版起内建进 Anki(此前要靠自定义调度脚本)
- 对老 SM-2:不再「固定难度系数拍脑袋」,而是按每张卡的记忆状态(难度/稳定性/可提取性)动态排期
- 个性化优化器:拿你自己的复习历史重训参数,目标保留率直接可调
- 持续迭代:26.09 已跟进 FSRS 6.6.2;主贡献者 L-M-Sherlock 从社区研究者成为官方维护者
- 配套工具:FSRS 模拟器(换参数前预览未来负担)、遗忘曲线图、card info 直读记忆状态
一句话理解区别
SM-2:所有卡一视同仁,间隔 = 上次间隔 × 固定系数。
FSRS:这张卡你忘得快,那就早点见;那张你记得牢,就别浪费今天的时间。
调度之外,rslib 还负责:SQLite 集合存储、全文搜索、.apkg 导入导出、与 AnkiWeb 的同步协议。
生态
数据格式与全端生态
| 端 / 组件 | 形态 | 说明 |
| 桌面版(本仓库) | Win / macOS / Linux | 全功能旗舰,唯一支持插件的端 |
| AnkiDroid | 独立开源仓库 | Android 端,社区维护,免费 |
| AnkiMobile | iOS 付费 App | 买断制收费——整个项目的主要收入来源 |
| AnkiWeb | 免费云服务 | 同步 + 网页复习 + 共享牌组平台 |
.apkg | 开放交换格式 | 牌组/笔记/媒体打包,全端通用,无数第三方工具围绕它长出来 |
.anki2 | SQLite 集合库 | 本地数据即一个 SQL 库,可被外部工具直接分析 |
桌面端插件生态是护城河:数以千计的 add-on 覆盖词源、发音、统计、批改——但代价见「风险」页。
工程细节
发布工程:CalVer 月更 + 安全响应
- 日历版本:26.05 → 26.08 → 26.09,每月正式版,配 b1-b3 beta 通道(betas.ankiweb.net)
- 当天修当天发:26.09 发布后 48 小时内连出 26.09.1 / 26.09.2 两个补丁
- CI/CD:GitHub Actions 全平台构建,SonarCloud 覆盖率徽章挂 README
- 文档独立仓:dev-docs.ankiweb.net 服务插件与贡献者开发者文档
26.09 安全修复(真实案例)
两个漏洞:牌组可在编辑器里读取本地文件;「打开图片」右键动作不校验扩展名,可执行危险文件。官方标注「请尽快升级」——分享牌组 = 运行半受信内容,是这类软件的经典攻击面。
同版还移除了 anki.importing/exporting 传统模块,为 AnkiConnect 类插件加了临时兼容层——旧 Python 接口的退场持续进行。
社区
一个人的项目,如何长成 391 人的引擎
- 创始人 Damien Elmes(dae):2006 年写下第一行,至今仍是架构中枢——超长跑开源项目罕见样本
- 391+ 贡献者:每一版 release notes 里绝大多数条目都挂着社区 PR 的名字(26.09 的修复来自至少 9 位不同贡献者)
- 研究者入编:FSRS 作者 L-M-Sherlock、维护者 abdnh、iamllama 等从用户/研究者变成 committer
- 翻译基建化:ftl/ 目录用 Mozilla Fluent 管理数十种语言,翻译即代码
- 内容生态在外圈:共享牌组(医学生 AnKing 牌组是事实标准)、插件库、教程社区共同构成产品
可持续性
商业模式:一个付费 App 养活整个免费生态
收入端
iOS AnkiMobile 买断付费;桌面 / Android / 网页 / 同步全部免费无广告。
成本端
全职维护者 + AnkiWeb 服务器。团队极小,决策链极短,二十年没融资没商业化变脸。
License
AGPL-3.0+(部分贡献 BSD-3、vendored 组件各有注明)。网络服务条款也传染,商用fork需整链开源。
这可能是个人主导开源项目最健康的活法之一:用户付钱买的是 iOS 端的便利,资助的是全人类免费的记忆基础设施。
在线体验
亲手感受间隔重复的数学
Anki 最适合「玩」的机制是调度本身:拖动每日新卡数和评分习惯,看一张 SM-2 时间表如何把每日复习负担推向稳态——峰值在哪天、稳态有多高、差评一次会付出多少代价,全部实时成像。
▶ 打开间隔重复负担模拟器
SM-2 经典算法 1:1 实现(Anki 传统调度),与 Python 参考实现对拍通过。
快速上手
用户三步 · 开发者两条路
用户
- apps.ankiweb.net 下载对应平台安装包(或手机商店)
- 建账号开同步,或导入别人分享的 .apkg 牌组
- 新集合直接用 FSRS;老用户在牌组选项里一键开启并跑优化器
开发者(本仓库)
# 完整构建(含 Rust 工具链 + Python venv + npm)
./run <target>
# 常用:./run tests / ./run pyqt / ./run rust-check
# 想尝鲜开发版而不自己编译:
https://betas.ankiweb.net
贡献流程:CONTRIBUTING → 一般从带 good first issue 标签的 issue 入手。
适用场景
适合谁用
- 语言学习者:最大用户群,词库生态最厚,听力/例句/词源插件齐全
- 医学生 / 法考 / 各类执照:海量既成共享牌组(如 AnKing),「背下来」就是职业竞争力
- 需要长期沉淀个人知识库的人:碎知识、代码片段、概念辨析,用间隔重复对抗自然遗忘
- 研究者 / 算法工程师:FSRS 与真实数据闭环是行为科学 + 机器学习结合的样板;rslib 是阅读级 Rust 工程教材
- 开源项目运营者:20 年可持续、渐进重写、社区治理的活案例
风险提示
需要警惕什么
- 四技栈复杂度:Rust + Python + TypeScript/Svelte + Qt,改一处跨四层,上手门槛真实存在
- 插件易碎:桌面 add-on 依赖 Python 内部 API,大版本常碎一片(26.09 直接移除 legacy 导入导出模块)
- AGPL 传染:想拿它做商业化 SaaS fork,整条服务链都得开源
- 桌面仓库 ≠ 全部:移动端各自独立仓库,跨端一致性靠 AnkiWeb 协议约束
- 安全面:牌组/插件是半受信内容,26.09 两个 CVE 式修复说明攻击面长期存在——别装来路不明的牌组
潜力评估
未来空间
「AI 会消灭记忆需求」的论调喊了十年,医学生和语言学习者用脚投票了二十年。FSRS 把记忆科学变成了可训练参数的算法资产,rslib 让这套引擎可以长到任何新端上——它已经不太像一款软件,更像记忆领域的水电煤。评分 9:长寿、活跃、有护城河、有研究前沿,几乎无可挑剔。