月读 · Moon
把 KOReader 变成真正属于你的阅读系统
本地优先 · 多源同步 · 阅读统计 · AI 阅读助手 · 组合锁屏 · 局域网管理
安装 ·
功能 ·
截图 ·
数据源 ·
开发
月读是面向 [KOReader](https://koreader.rocks/) 的本地优先阅读增强插件。它不是另一个阅读器,而是在 KOReader 之上补齐书库桌面、多数据源、同步、统计、AI 阅读助手、组合锁屏、中文输入和局域网管理。
插件使用纯 Lua/LuaJIT,无独立构建步骤,不要求 Java、Node.js 或额外运行时;运行时复用 KOReader 已提供的 UI、SQLite、网络与文件系统能力。
> **项目状态:** 功能仍在快速迭代。升级前建议保留 `.moon/` 数据目录;涉及翻页动画等补丁功能时,请按界面提示重启 KOReader。
> **升级提示:** 微信读书登录已改为墨水屏客户端扫码协议,旧版本的网页登录会视为未登录,升级后请在「账号 → 微信读书」重新扫码一次。
## 功能一览
| 书库 | 阅读 | 同步与统计 | 系统增强 |
|---|---|---|---|
| 全屏书库桌面,首页组件自由组合 | 阅读页顶栏 / 底栏、左侧栏 | 十四个内置源(越狱 Kindle 上另有 Kindle 书库)+ 第三方书源(Kavita、BookOrbit) | 组合锁屏与锁屏密码 |
| 搜索、筛选、分类、系列、已下载 | AI 解释、问书、章节摘要、读书报告 | 书架、进度、笔记、统计按源双向同步 | 输入法增强(拼音、小鹤双拼、五笔、仓颉、速成、注音,简繁转换) |
| 元数据刮削与封面缓存 | X-Ray、统一查词窗口(词典 / 翻译 / AI / 百科)、整书双语对照、段评、生僻字注音 | 进度冲突处理与离线补推 | 局域网文件、输入、配置与更新管理 |
| Z-Library 与 OPDS 书城、订阅(RSS / 网页 / 公众号) | 重新排版(另存,原书不动)、AZW3 | 热力图、阅读时段、读完预测、年度记录 | 快捷面板与 14 种翻页动画 |
| 后台任务列表、单书缓存清理、漫画缓存清理(已读 / 按系列 / 全部) | 按章书的全书笔记列表、章节缓存范围 | 导入 KOReader 自带统计 | 自动夜间、自动亮度、时区与 NTP 校时 |
| 游戏:小黑屋、阿页的阁楼、游戏合集(可选插件) | 蓝牙翻页器与想法选择器(可选插件 pageturner) | | |
## 目录
- [功能一览](#功能一览)
- [界面预览](#界面预览)
- [增强了什么](#增强了什么)
- [完整功能](#完整功能)
- [数据源](#数据源)
- [安装](#安装)
- [快速开始](#快速开始)
- [数据与安全](#数据与安全)
- [设置索引](#设置索引)
- [开发与测试](#开发与测试)
## 界面预览
| 图书馆 | 书籍详情 |
|:---:|:---:|
|
|
|
| 阅读统计 | 组合锁屏 |
|:---:|:---:|
|
|
|
| 远程管理 | 文件管理 |
|:---:|:---:|
|
|
|
## 增强了什么
### 1. 用完整书库桌面替代文件夹式找书
月读提供由首页、图书馆、书城、统计和设置组成的全屏桌面。底栏的「Z站」「OPDS」在启用对应书城后出现,「订阅」「拓展」在设置里打开后出现,统计按当前数据源能力出现。
- **首页组件:** 当前阅读、最近阅读列表、最近阅读卡片、时钟、天气预报、每小时天气预报、时间天气、阅读统计、阅读小卡(连续阅读、近 7 天、本月挑战、今年读完)、阅读热力图、一言、书摘(居中、竖线、引号三种样式)、历史上的今天和热点新闻。组件可添加、移动、调整高度;第三方书源也能追加自己的组件。
- **图书馆:** 使用本地 SQLite 索引,顶部按书籍、作者、系列、分类分页签浏览;书籍页可在封面网格与列表间切换,工具条带排序(最近添加、最近阅读、书名、作者)与筛选(未读、已读、已下载,混合模式再加数据源)下拉,支持关键词搜索。
- **顶栏:** 时钟、当前数据源、后台任务、剩余内存、剩余存储、Wi-Fi、蓝牙(有可用蓝牙后端时出现,紧挨 Wi-Fi)、亮度、电池;各项可单独开关。
- **后台任务:** 书城下载、全本缓存、书架同步、词典与词库下载、X-Ray 提取等耗时操作进入后台队列;顶栏显示进行中 / 未结束数量,点开可查看、取消任务。断网或休眠时可续跑的任务会自动等待,恢复后继续。
- **书籍详情:** 左侧大封面,右侧书名、作者、出版信息、评分与字数,下接「开始 / 继续阅读」与进度;中间一排阅读指标(累计时长、已读页数、上次阅读、预计读完),点开看完整阅读记录;再往下是简介与书籍信息。编辑、刮削、下载、清理缓存、已读、删除等当前数据源允许的操作收在右上角「⋯」菜单。按章阅读的书可选择缓存范围(全本、从当前进度到结尾、往后 10 / 20 / 50 / 100 章);已完整离线的在线书可单独「清理缓存」,保留元数据、进度和笔记。
- **订阅:** 设置里启用「订阅」后,底栏「图书馆」旁出现「订阅」页,可订阅 RSS / Atom、网站里的文章链接、网页本身(内容变了出新条目)和微信读书公众号,一个订阅是一本书、一篇文章是一章,用月读按章阅读打开(不记进度与统计);可选下载文章图片,也能经远程管理网页批量添加。公众号文章不进书库。
- **底栏拓展:** 把其它 KOReader 插件的主菜单入口集中放进底栏「拓展」格,可逐个选择显示哪些。
- 桌面字号、界面缩放和封面网格列数均可调整,布局面向墨水屏和触控操作;弹出面板和菜单时可用网点「背景遮罩」压暗背景(默认开)。
- **自动夜间模式:** 按固定时间或当地日出日落切换;只在昼夜交替那一刻切换,中途手动切换不会被立刻改回。日出日落离线计算,经纬度在选择该模式时经天气接口定位一次。
- **自动亮度:** 有光线传感器的 Kindle 按环境光档位调节;其他设备按八个时段的亮度表调节,白天再按天气(阴雨雾雪)适当补光。手动调亮度即关闭自动亮度,桌面快捷面板也有开关。
### 2. 把不同来源的书统一为可靠的书籍身份
月读内置本地书籍(含 WebDAV)、月读服务、微信读书、京东读书、拷贝漫画、番茄小说、七猫小说、开源阅读(Legado)、晋江文学城、起点中文网、QQ阅读、iRead、长佩文学和潇湘书院十四个数据源(越狱 Kindle 上满足条件时另有「Kindle 书库」),另可安装 Kavita、BookOrbit 等第三方书源插件(见[数据源](#数据源))。每本书按“数据源 + 稳定 ID”隔离,阅读时继续使用该书所属的数据源,不会因为用户切换当前数据源而把进度、笔记或统计串到另一本书。
- 同一时间只有一个活跃数据源,其他来源可单独启用或隐藏;也可选择“混合模式”,让书库、首页和统计跨已启用的来源展示(阅读仍按书所属的来源)。
- 书架查询统一读取本地数据库,网络同步在后台收敛,打开桌面不必等待远端返回。
- 所有操作先在本地生效;离线时写库并标记待同步,联网、唤醒后自动补推,删除也是先本地标删、远端确认后才真正清理。
- 本地整本文件与在线来源的按章内容走同一套书籍详情、阅读会话和统计界面。
- 章节文件通过物理路径精确登记;`.moon` 内的孤立章节不会被误认为普通本地书籍。
- 微信读书使用墨水屏客户端扫码登录,会话过期自动续期;书架分类优先用你自建的分组名(多个分组取第一个),没分组才回退官方分类;京东读书目录分页拉取,支持 EPUB、会员书和 TXT 网文,无下载权限时明确报错。
- 七猫、晋江、起点、潇湘验证码或风控在墨水屏上做不了,登录态走「远程管理 → 浏览器登录」(配合浏览器扩展 moon-cookie-storage 把网页登录态交给设备),也可粘贴 token / Cookie;京东读书同样支持浏览器登录,已授权的源不再重复授权。QQ阅读用阅文 App 扫码登录;长佩支持扫码、浏览器授权和 Cookie 登录,token 过期时用 refresh_token 自动续期。
- 本地源 WebDAV 模式提供「测试 WebDAV 连接」:写入、读回并删除一个测试文件,确认可读写。
### 3. 阅读进度、笔记和统计形成闭环
- 自动记录阅读页数、时长和会话统计,不依赖 KOReader 自带统计插件;也可在维护页一次性导入 KOReader 自带统计插件的历史记录(按书匹配书库,已有的记录不会重复导入)。
- 支持按数据源同步书架、进度、划线/笔记和阅读统计;微信读书可选择把本地离线阅读时长合并上报。Kavita 的阅读统计以云端 reading-history 为准,云端条目的日期与时段按设备本机时区换算,不依赖服务端时区设置。
- 本地与云端进度相差至少 1% 时显示冲突对话框,由用户选择跳到云端位置或保留本地位置;选择本地进度后会立即上推,使两端重新一致。阅读快捷面板也可手动推送 / 拉取进度。
- 关闭文档、休眠和网络恢复时会结清或重试待同步数据。
- 手动标为已读、但没有章节信息的按章书(如微信读书),进度按最后一章读完上报;实在推不上的记录直接丢弃,不反复重试,单本失败也不影响其它书的进度同步。
- 统计页提供概览、今日总览、连续记录和阅读时段(一天中各时段的阅读分布);首页可放阅读热力图,书籍详情显示预计读完日期。微信读书数据还可按周查看阅读书目。
| 今日总览 | 连续记录 | 阅读时段 |
|:---:|:---:|:---:|
|
|
|
|
### 4. 增强阅读页,而不复制 KOReader
- **阅读快捷面板:** 在 KOReader 原生顶部菜单中增加“月读”Tab,放目录、阅读字体、高亮与笔记、推送 / 拉取进度、优化排版、双语对照、X-Ray、AI 问书 / 回顾前文 / 读书报告、关联微信段评和翻页动画风格等动作;可启停、排序,不适用当前书或设备的动作自动隐藏。
- **阅读页顶栏 / 底栏:** 章节、书名、时钟、电池、剩余运存、Wi-Fi、亮度、页码、进度、章节序号、章内页码、剩余时间和进度条,可自由摆放到顶栏或底栏、靠左或靠右;顶栏、底栏各有「分割线」开关,在栏与正文之间画一条细线。
- **阅读侧栏:** 左缘右滑(或任意位置右滑、或在 KOReader 手势管理里绑定任意手势)打开,含书籍、目录、阅读字体、书摘、X-Ray、阅读票根和统计页(统计页需开启 KOReader 阅读统计),可选显示哪些页面并自定义页面顺序。
- **划词菜单:** 选择、高亮、复制、笔记、百度百科、词典、翻译、X-Ray、AI 解释、查看 HTML、二维码和搜索;可启停、排序,其它插件挂进来的按钮也会被识别、标明来源并可逐个屏蔽。
- 阅读字体可从插件字体或系统字体中快速切换;「中西文字体分开」默认关闭,可在「设置 → 阅读行为」开启,重新打开书籍生效。关闭时,阅读侧栏和下滑阅读菜单都直接显示普通阅读字体选择器;开启后,两处入口都可分别选择中文字体和西文字体,西文默认 Bookerly(设备没有时用 Noto Serif),阅读行为页不另设西文字体入口。西文选择全局保存、当前书自动重载;阅读面板可把当前排版和字体「保存为默认配置」供新书使用;书籍内嵌字体默认关闭(省内存);章节书的字体与排版偏好会自动应用到后续章节文件;微信读书 WOFF 字体会解包为 TTF/OTF,避免多字号实例把内存撑爆。
- 章节模式支持自动上一章/下一章、后续章节预取和按范围缓存;「高亮与笔记」显示全书笔记列表,按章节汇总所有章的划线和笔记,点击跨章跳转。
- 整本打开没有目录的 TXT / EPUB 时自动补目录:先用 h1–h6 生成备用目录,不足再后台扫描章节标题写入自定义目录;每本书只自动处理一次。
- 原生支持 AZW3(KF8)文档。
- 读完后提供返回主页或删除本书的结束操作。
- 可启用翻页动画补丁,提供擦除、翻页阴影、百叶窗、螺旋、时钟、棋盘等 14 种风格;开关需重启,切换风格下一次翻页即生效。
| 阅读快捷面板 | 阅读侧栏 |
|:---:|:---:|
|
|
|
| 划词工具栏 | 查词窗口 · 词典 | 查词窗口 · 翻译 |
|:---:|:---:|:---:|
|
|
|
|
| 查词窗口 · 百科 | 生僻字注音 |
|:---:|:---:|
|
|
|
| 章节目录 | 阅读字体 |
|:---:|:---:|
|
|
|
### 5. 增加真正用于阅读的内容工具
- **AI 解释:** 划词后让 AI 结合所在句子和段落解释,只出纯文本;结果可继续追问,也可直接存为笔记。
- **问书:** 不用划词,直接就已读部分向 AI 提问。
- **章节摘要与前情提要:** 顺着读完一章后在后台生成摘要(默认关,会消耗 API 额度);隔 3 天以上再打开这本书时弹出最近几章的前情提要,也可在快捷面板「回顾前文」随时查看(离线可用)。
- **读书报告:** 汇总章节摘要、划线笔记和阅读统计,让 AI 写一页读后总结,可重新生成。
- **X-Ray:** 使用 AI 从原文提取人物、地点和专有名词,保存实体说明,并可在正文中画线标记和划词查询;全书提取和「按当前位置更新」在后台任务里运行,可取消。
- **统一查词窗口:** 划词后点词典、翻译或 AI 解释(以及长按查词、点生僻字注音),都在同一个居中窗口里打开;底部「词典 / 翻译 / AI / 百科」四个标签随时切换,不用重新选字。词典标签可点词典名手动切换词典,网页格式(HTML)的词条按排版显示;翻译标签可切换源语言和目标语言;结果可复制或存为笔记,AI 结果还能追问。
- **翻译:** 接入 Microsoft Edge 翻译,支持配置常用目标语言。
- **生僻字注音:** 在生僻字上方标拼音(英文生词标音标),全书注音字号统一。注音范围、字号可调,词库在线下载,中文只收《通用规范汉字表》8105 字。
- **整书双语对照:** 用 Edge 或 AI 逐段翻译整本书,在每段原文下方插入译文(按章阅读的书源也支持);生成在后台进行,可中断续跑。双语版与原书是同一本书,进度、笔记和统计共用,可随时切回原文。
- **段评:** 微信读书的书在正文中标出他人段评较多的句子,点按查看。导入的本地书可手动关联微信读书书目;京东读书的书自动借用微信读书同一本书的正版段评(需登录微信读书)。只在本章没有自己的段评时才借用。
- **百科:** 用百度百科替换原生 Wikipedia 入口,更适合中文内容;划词菜单的「百度百科」也在统一查词窗口的百科标签里打开。
- **文字识别(OCR):** 为 KOReader 内置的 Tesseract 下载识别语言(简体/繁体中文、英语、日语及中文竖排),扫描版 PDF / DjVu 上长按文字即可识别,结果直接进入划词菜单(复制、翻译、AI 等);可设默认识别语言,也可开启强制文字识别。
- **词典:** 提供 StarDict 词典下载、启停和管理,并接管阅读器中的词典入口;「加载所有词典」(默认开)让查词面板列出全部已安装词典,无论是否启用、有无结果,都可手动切换。
- **脚注:** 设置 → 阅读行为 →「脚注弹窗」。开=点按弹窗且不在页底;关=注文显示在页面底部(与 KOReader 页内 EPUB 脚注互斥联动)。
- **优化排版:** 取出整本书的文字(TXT 直接读文件;EPUB、MOBI、PDF、DjVu 等能取出文字层的格式逐页提取),预览识别出的章节后重新生成 EPUB。排版版另存在缓存目录,原书不动;两版之间可随时切换,划线按文字互相定位。
- **截图分享:** KOReader 保存截图后,可启动远程管理并显示二维码,让同一局域网内的设备下载图片;可选「截图分享后自动删除」(默认关),图片被完整下载后删除,中途断开不删。
AI 功能使用兼容 `/chat/completions` 的接口,需要配置接口地址、API 密钥和模型;设置页提供最小请求的连接测试。未配置 AI 时相关入口不出现。
| 查词窗口 · AI | X-Ray 实体详情 |
|:---:|:---:|
|
|
|
### 6. 把锁屏变成可组合的信息页
月读可以继续使用 KOReader 原生锁屏,也可以生成“背景 × 主体 × 位置”的组合锁屏图片。
- 背景:无、当前阅读书籍封面、自定义图片、壁纸文件夹(按日期轮换)、必应壁纸、摸鱼日报、海报墙、文字海报和单向历;自定义图片与壁纸文件夹可在设置页直接选择。
- **文字海报:** 从你的划线里挑一句,自动分词找关键词,排成文字海报;版式有横排标题、竖排、巨字铺底、散落关键词、拼贴海报,默认随机;「海报字体」可选自动(优先宋体)或任意字体。
- **单向历:** 本地绘制的日历页:大号日期、英文月份与星期、农历月日、干支生肖和节气 / 节日(读摸鱼日报的当天缓存,没有缓存时不画农历),再配一句你的划线,每天换一句。
- 主体:当前阅读、阅读统计、阅读票根、阅读账单、阅读高亮、一言、自定义留言、胶囊卡片和极简。
- 普通主体支持九宫格位置与宽/窄布局;统计和全屏主体按内容选择合适布局。
- 阅读统计可展示累计时长、进度和近 7 日图表;阅读账单支持今日、近 7 天、近 30 天和本月周期。
- 锁屏图先在后台完整生成,再替换显示文件;生成失败时保留上一张可用图片。
- 海报墙里没下载过封面的网络书,联网时会在后台自动补齐封面并刷新锁屏。
- **锁屏密码:** 设置 4~6 位数字密码后,冷启动和每次唤醒都要先输入密码;连续输错会冷却。这只是隐私遮挡,不是加密,忘记密码时删除 `.moon/settings/passcode.lua` 即可解除。
| 当前阅读 × 必应壁纸 | 阅读统计 × 书籍封面 | 当前阅读 × 海报墙 |
|:---:|:---:|:---:|
|
|
|
|
| 文字海报 | 单向历 |
|:---:|:---:|
|
|
|
### 7. 改善墨水屏上的中文输入
- 在 KOReader `zh_CN` 虚拟键盘首行加入中文候选栏。
- 支持拼音(含九宫格拼音)、小鹤双拼、五笔 86、仓颉五代、速成和台湾注音;小鹤双拼与拼音共用词库,速成与仓颉共用词库(取首尾码),仓颉与注音会同步改写键帽显示。
- 候选词可保持原样、转简体或转繁体。
- 支持连续编码、候选翻页和直接点选,输入码不会交给 KOReader 原生 IME。
- 词库使用本地 SQLite 查询,设备端无需常驻输入法服务。
- 大词库采用分片下载、逐片校验、断点续传和最终拼接校验;在线下载不便时,可从 GitHub Release 下载已使用最终名称的词库文件,直接放入 `.moon/`。
- 非中文布局、数字输入框、词库缺失以及物理键盘输入保持 KOReader 原生行为。
### 8. 从电脑或手机管理阅读器
启用远程管理后,同一局域网中的浏览器可访问以下功能:
- **文件管理:** 资源管理器式浏览、拖拽上传、上传队列(进度、取消、重试)、下载、新建目录、重命名、复制 / 剪切 / 粘贴、属性、递归删除、右键菜单与快捷键;图片和音视频预览,文本文件可直接编辑(搜索替换、编码、换行符)。上传同名文件直接覆盖;复制、移动遇到同名时可选保留两份、替换或跳过。ZIP 可在设备端解压到同名文件夹,并检查危险路径和异常归档。
- **远程输入:** 阅读器输入框激活时,从浏览器一次发送整段文字。
- **共享剪贴板:** 在浏览器与阅读器之间读取、写入和复制文本。
- **远程配置:** 在电脑上填写 AI、月读服务和 Z-Library 等不适合用墨水屏键盘输入的配置。
- **备份与恢复:** 在远程管理首页下载 `moon-backup-日期.zip`,把整个 `.moon` 数据目录(书库、笔记、进度、统计、全部配置、锁屏资源、词库)打包,不含日志和缓存;配置里有各书源登录信息、Cookie、令牌、API Key、WebDAV 密码和锁屏密码,备份文件等同账号凭据,请妥善保管。上传备份后设备先整包解到临时目录、校验通过才整体替换,随后自动重启 KOReader。
- **月读更新:** 上传 `book.koplugin-*.zip` 发布包,设备自动安装并重启 KOReader。
- **下载日志:** 首页一键打包插件日志和 KOReader 崩溃日志(已脱敏),反馈问题时附上。
- **生命周期:** 可配置端口、开机自启和空闲自动关闭;设备休眠时停止服务,唤醒后按配置恢复(设了锁屏密码时等解锁后才启动)。
远程管理是设备内运行的轻量 HTTP 服务,不依赖云端中转;页面截图见[界面预览](#界面预览)。
### 9. 其它系统增强
- **时间与日期:** 设置时区(KOReader 本身没有时区设置)、手动修改系统时间;进入桌面时自动经 NTP 校时(最多每 6 小时一次,偏差 1 秒以上才改)。设备不支持改时间时只显示时区。
- **蓝牙:** 在桌面快捷面板开关蓝牙、扫描配对、连接 / 断开设备,顶栏显示状态(已连一台显示名字,多台显示台数)。后端按下面顺序取第一个可用的,没有可用后端时这些入口都不出现:
- **kindle-hid-passthrough 守护进程**([zampierilucas/kindle-hid-passthrough](https://github.com/zampierilucas/kindle-hid-passthrough)):Kindle,通用 HID 设备(手柄、键盘等);它会接管蓝牙芯片,装了就优先用它。
- **Kindle 原生蓝牙**(btfd,经 lipc):国产蓝牙翻页器(伪装成 Kindle Click)走这条,不用装守护进程。
- **Kobo 系统蓝牙**:i.MX6 机型走 hciattach / bluetoothctl,需已装 [bluetooth.koplugin](https://github.com/onatbas/bluetooth.koplugin) 自带的 uhid.ko;MTK 机型走系统 D-Bus;连上后自动接入输入设备。
- **Android**:蓝牙在系统里,KOReader 没有接口,请在系统设置里连接。
- 系统蓝牙后端尚未在真机充分验证,遇到问题请反馈。
- **翻页器:** 蓝牙只管连上,把翻页器接成翻页键、录手势、用它选想法,由独立插件[翻页器 pageturner](https://github.com/AnkioTomas/ko-pageturner)负责(可选,见[翻页器(可选)](#翻页器可选))。
- **网络超时:** 「网络」页可设普通请求的默认超时(默认 30 秒,5~300 秒),下载等请求按倍率放大;AI 请求单独用「AI 接口」页的「AI 请求超时」(默认 120 秒,10~600 秒)。
- **HTTP 代理:** 与 KOReader 原生「HTTP 代理」是同一份设置,月读的网络请求也会走代理;只支持 `http://` 代理,HTTPS 请求经隧道转发,保存前会经代理实测一次。
- **在线更新:** 检查 GitHub Release,直连与公益镜像竞速下载,只信任 GitHub 给出的 SHA-256;自动检查每天最多一次,只提示不自动安装。词典、词库、OCR 等资源下载也会在多个镜像间自动切换,优先用上次成功的源。
### 10. 游戏
读累了可以玩两把。游戏都是独立的 KOReader 插件,不装月读也能从「工具」菜单玩;装了月读后会多出入口。完整说明见[官网文档:游戏](https://moon.ankio.net/manual/library/games)。
- **小黑屋**([ko-adarkroom](https://github.com/AnkioTomas/ko-adarkroom)):《A Dark Room》的完整 Lua 中文移植,从生火开始,建村、远征、战斗、登上星舰直到结局,可带声望重开。自动存档,远征中途关掉也能续上。
- **阿页的阁楼**([ko-paper-sprite](https://github.com/AnkioTomas/ko-paper-sprite)):书签变成的小纸灵「阿页」按真实时间自己出门旅行,寄回黑白明信片、带回特产;读书翻页攒灵感去小铺换东西,没有失败惩罚。月读里配置了 AI 时,明信片文案可由 AI 现写。
- **游戏合集**([ko-games](https://github.com/AnkioTomas/ko-games)):一个 `games.koplugin` 内含 22 个离线小游戏,界面全部用 SVG 素材绘制,适合墨水屏,支持简体 / 繁体 / English。益智(2048、扫雷、数独、华容道、数织、汉诺塔、记忆翻牌、24 点、猜数字、推箱子)、棋类人机对战(中国象棋、国际象棋、围棋 9×9、跳棋、五子棋、四子棋、黑白棋)、纸牌(Klondike、空当接龙、蜘蛛纸牌)和实时类(俄罗斯方块、贪吃蛇)。每个游戏有玩法说明,难度、大小等在右上角设置里改;长按大厅里的图钉可置顶游戏。
- **在月读里的入口:** 首页组件(小黑屋存档卡片;阿页的状态卡、阁楼、明信片、纪念物柜;游戏合集的置顶游戏卡片和「更多」)和桌面快捷面板开关,点一下全屏打开。
- **存档:** `.moon/game/adarkroom/save.lua`、`.moon/game/paper-sprite/`、`.moon/game/kogames/save.lua`,KOReader 菜单和月读两边共用同一份。安装见[游戏(可选)](#游戏可选)。
## 完整功能
### 书库与书籍管理
- 首页组件添加、移动、调整高度和多种最近阅读布局。
- 本地 SQLite 书籍索引、最近阅读、搜索、分类、系列和分页。
- 本地目录或 WebDAV 后台扫描、失效条目清理和文件改名后的身份迁移;遇到没有权限的目录只记日志并跳过,其中已入库的书保留、不会误删;有目录被跳过时本次 WebDAV 同步自动中止;扫描不跟随软链接。
- WebDAV 同步时会把本地有、远端没有的书上传到同一相对路径(远端目录缺失时自动创建);上传超时或断网后本轮不再继续,失败的书 1 小时内不自动重传。
- 本地书籍分类/系列编辑;目录层级随编辑结果实际移动,移动或身份更新失败时文件回滚到原位。
- 本地书籍刮削:书名一行加候选来源列表(豆瓣、微信读书、七猫、晋江、起点、番茄、长佩、潇湘),搜不到可依次换源重搜;应用前弹出修改预览,可逐行取消。
- 书库页签可多选显示哪些分组,本地书库另有「文件夹」页签,按目录浏览(含未下载的 WebDAV 书)。
- 封面、正文、章节、目录和 HTTP 响应缓存;缓存体积统计、手动清理和后台失效清理。
- 后台任务列表:书籍下载、章节缓存、书架同步和资源下载的进度与取消。
- 图书馆「已下载」筛选;书籍详情单书清理缓存(与「下载」互斥,后台缓存中的书拒绝清理)。
- 删除本地原书,或删除在线来源的云端书架/原书并清理设备上的缓存与登记;离线时先本地标删,联网后再同步到远端。
- 本地扫描格式:PDF、EPUB、DJVU、MOBI、AZW、AZW3、CBZ、CBT、DOCX、RTF、HTML、TXT、XPS、FB2、PDB、CHM 和 Markdown。带 DRM 的 MOBI / AZW / AZW3 会跳过(越狱 Kindle 上由 Kindle 书库列出)。
### 书城
- **Z-Library:** 在「账号」里启用后,底栏出现「Z站」。支持账号登录、多镜像种子、30x 跳转、挑战页检测和镜像故障转移。
- **OPDS:** 启用后底栏出现「OPDS」。填写一个 OPDS 目录地址(用户名、密码可选),支持 OPDS 1.x(Atom)与 2.0(JSON),下载时按格式择优。
- 下载在后台任务中进行,完成后加入本地书库。
### 阅读与同步
- 整本文件与按章阅读两种模式。
- 书架、进度、笔记/划线和统计按来源独立同步;网络失败后的待同步数据持久化并自动重试。
- 微信读书扫码登录、书架同步、目录缓存、章节原样渲染(资源本地化、脚注可点击弹出)、章节预取、全本缓存、笔记同步和阅读时长上报。
- 阅读页顶栏 / 底栏、左侧栏、快捷面板、可排序划词菜单、阅读结束对话框和翻页动画。
- 双语版、排版版与原书是同一本书:进度、统计共用;划线只在原书坐标存一份,读衍生版时按文字定位显示,衍生版里新划的线会收回原书。
### 快捷面板
- **桌面动作:** 夜间模式、Wi-Fi、远程管理、旋转、刷新、截图、前光、自动亮度、休眠、电源菜单(退出月读、退出 KOReader、重启、重启设备,设备不支持的项不显示),以及有可用蓝牙后端时的蓝牙开关与蓝牙设备。
- **阅读动作:** 目录、阅读字体、高亮与笔记、推送进度、拉取进度、优化排版、双语对照、X-Ray、刷新 X-Ray、回顾前文、读书报告、问书、关联微信段评、翻页动画风格(仅开启翻页动画时显示),以及装了 BookOrbit 官方插件时的「同步到 BookOrbit」。
- 桌面与阅读动作分别注入 KOReader 原生顶部菜单;各动作按设备能力和当前书显示,并可启停和调整顺序。
### 国际化
- 简体中文为源语言。
- 提供繁体中文和英文界面资源。
- 语言切换复用 KOReader 原生语言菜单。
## 数据源
下面这张表按源实现核对,不是按「模块里有没有这个函数」。不支持的域是 `—`,不会假装同步成功。
读法:
- **书架。** `双向`:拉取,本地加入和删除都上行。`拉+删`:能拉、能删,不能从月读加架。`只拉`:没有远端删除接口,本地删除只在月读里隐藏,下次同步不会把书捞回来。
- **进度**都是双向。`页`是页码或 xpointer,`章`只到章节,`章+章内`还有章内位置。
- **笔记** `只推`:不拉远端改动,也不根据上传推断删除。
- **统计**列只看和远端同步。每个源都会在本地记阅读时长。
- **书城**是搜索加榜单,出现在书城页。按章源都能预取,并按范围缓存。
- **段评**默认关。
- **协议**是书架和正文实际走的接口,不是登录方式。`官方 App` 是对方客户端接口;`网页` 是官网或手机站;`自建 API` 是你填地址的 HTTP 服务(月读、iRead、开源阅读、Kavita);`kosync` 是 KOReader 同步协议。
| 数据源 | 协议 | 形态 | 书架 | 进度 | 笔记 | 统计 | 书城 | 段评 |
|---|---|---|---|---|---|---|---|---|
| 本地书籍(目录) | 本地文件 | 整本 | 扫盘 | — | — | — | — | — |
| 本地书籍(WebDAV) | WebDAV | 整本 | 文件双向 | 页 | 双向 | 双向 | — | — |
| Kindle 书库 | 系统库 | 整本 | 只拉 | — | — | — | — | — |
| 月读服务 | 自建 API | 整本 | 拉+删 | 页 | 双向 | 双向 | — | — |
| 微信读书 | 官方 App | 按章 | 双向 | 章+章内 | 双向 | 双向 | ✓ | 自有 |
| 京东读书 | 官方 App | 按章 | 双向 | 章 | — | — | ✓ | 借用微信 |
| 拷贝漫画 | 官方 App | 按章(CBZ) | 拉+删 | 章 | — | — | ✓ | — |
| 番茄小说 | App+网页 | 按章 | 双向 | 章 | — | — | ✓ | 自有 |
| 七猫小说 | App+网页 | 按章 | 双向 | 章 | — | — | ✓ | — |
| 晋江文学城 | App+网页 | 按章 | 拉+删 | — | — | — | ✓ | 自有 |
| 起点中文网 | 网页 | 按章 | 双向 | 章 | — | — | ✓ | 自有 |
| 开源阅读(Legado) | 自建 API(阅读 App / reader3 / 轻阅读) | 按章 | 拉+删 | 章 | — | — | — | — |
| QQ阅读 | 网页 | 按章 | 双向 | 章 | — | — | ✓ | — |
| iRead | 自建 API | 按章 | 双向 | 章 | — | — | ✓ | — |
| 长佩文学 | 网页 | 按章 | 双向 | 章 | — | — | ✓ | — |
| 潇湘书院 | 网页 | 按章 | 双向 | 章 | — | — | ✓ | — |
| Kavita(拓展) | 自建 API | 整本 | 只拉 | 页 | 双向 | 只拉 | — | — |
| BookOrbit(拓展) | kosync | 整本 | 只拉 | 页 | 只推 | — | — | — |
例外:
- 本地书籍可编辑、刮削元数据。目录模式删除会删原文件。WebDAV 还会把书目和封面上行;进度、笔记、统计只在 WebDAV 模式有。
- Kindle 书库只在越狱设备(有 `/var/local/cc.db`)且装了 kindle.koplugin 时出现。列出 KFX 和带 DRM 的 MOBI 族,打开交给 kindle.koplugin 转换。删除不碰系统书库。
- 月读服务没有加书接口。
- 微信读书的书架、进度、笔记和统计走 Eink App,书城搜索和榜单走网页。改分类会写成书架分组。书名和作者改完只留在本地,下次书架同步会被远端盖掉。
- 京东进度恢复到章首。段评借用微信读书同一本书,只在本章没有自己的段评时借,需登录微信读书。
- 番茄正文走 App,书架走网页。搜索免登录。章内进度能推,回读常被服务端截成章首,所以表上只算到章。漫画章落成 CBZ。
- 七猫正文走匿名 App,不登录也能下;书架走网页,要登录。
- 晋江免费章走 App,收藏和已购 VIP 章走手机网页。晋江、拷贝漫画、开源阅读不能从月读把书加到远端。晋江没有能写回的进度接口,所以不接进度;已购 VIP 章会解密。
- 起点、QQ阅读、长佩、潇湘:未购 VIP 章打开是临时提示,目录标已购或未购。
- 长佩书架不同步分组里的书。长佩和潇湘不登录也能读免费章。
- iRead 从月读加架要先搜到这本书。
- QQ阅读的书不在书架上时不推进度,也不会为了推进度把书加回去。
- Kavita 没有删书接口。时长靠阅读期进度心跳记在服务端(默认 30 秒,可关),月读只拉统计。划线双向:本地新建和改备注会推上去,远端的改动与删除也会拉回本地。装了 [kamare](https://github.com/backtracker/kamare.koplugin) 且在线时,漫画交它看;增强版还能在「设置 → 数据源 → Kavita → 漫画缓存」里清理已读、按系列清理和全部清理(含未关联服务器的缓存)。
- BookOrbit 没有删书接口。划线只上传,网页上的改动和删除不会回到本地。
订阅不是书源,不进选择器,也不记进度和统计。Z-Library 与 OPDS 是书城,下载后进本地书籍,见[书城](#书城)。
| 数据源 | 配置 |
|---|---|
| 本地书籍 | 书籍根目录,或 WebDAV 地址 / 用户名 / 密码 / 目录 |
| Kindle 书库 | 满足上面的条件时自动出现 |
| 月读服务 | 服务地址与令牌 |
| 微信读书 | 微信扫码 |
| 京东读书 | 京东 App 扫码(跳到安全验证时,按手机提示完成后重新扫码) |
| 拷贝漫画 | 站点地址与账号 |
| 番茄小说 | 扫码或 Cookie |
| 七猫小说 | 远程管理「浏览器登录」,或粘贴 token |
| 晋江文学城 | 远程管理「浏览器登录」,或粘贴 Cookie |
| 起点中文网 | 远程管理「浏览器登录」,或粘贴 Cookie |
| 开源阅读 | 阅读 App 的 Web 服务局域网地址 |
| QQ阅读 | 阅文 App(QQ阅读或起点)扫码,或浏览器登录 / Cookie |
| iRead | 个人 Token |
| 长佩文学 | 扫码 / 浏览器授权 / Cookie;不登录可读免费章 |
| 潇湘书院 | 远程管理「浏览器登录」,或粘贴 Cookie;不登录可读免费章 |
| Kavita | 安装拓展插件,填写服务器地址与 API Key,选择书库(0.9 及以上) |
| BookOrbit | 安装拓展插件,填写服务器地址与 BookOrbit 里创建的 KOReader 同步账号;可导入官方插件的账号 |
月读服务端项目见 [AnkioTomas/book](https://github.com/AnkioTomas/book)。自己写书源可参考示例 [`examples/moonsource-demo.koplugin/`](examples/moonsource-demo.koplugin/),契约写在它的 `moon_source.lua` 头注释里。
功能入口按当前数据源能力显示。未登录或未配置的在线源不能同步远端内容。
## 安装
### 从 Release 安装
1. 从 [GitHub Releases](https://github.com/AnkioTomas/moon/releases) 下载最新插件压缩包。
2. 解压后确认得到完整的 `book.koplugin/` 目录。
3. 将该目录复制到 KOReader 数据目录的 `plugins/`:
```text
/plugins/book.koplugin
```
4. 重启 KOReader。
5. 从主菜单打开 **月读**。
之后的版本可在 **设置 → 维护 → 检查更新** 在线升级,或通过远程管理上传发布包。
> Android 上旧版本首页报 `strncasecmp` 错误、微信读书 / 番茄小说获取二维码失败的问题已在 v0.2.8 修复,请升级。
> 起点 VIP 章节解密改在子进程里运行并关闭 JIT,修复 Kindle 上通过目录跨章跳转时 KOReader 崩溃重启的问题(v0.2.13)。
### Kavita / BookOrbit
Kavita(漫画缓存由 [kamare](https://github.com/backtracker/kamare.koplugin) 增强版提供)与 BookOrbit 已内置在 `book.koplugin/` 里,和其它数据源一样在月读的数据源里选择、可开关,不再需要单独安装。
### 翻页器(可选)
[翻页器 pageturner](https://github.com/AnkioTomas/ko-pageturner)(`pageturner.koplugin`)是月读的联动插件,从它的 [Release](https://github.com/AnkioTomas/ko-pageturner/releases) 下载,把解压出的 `pageturner.koplugin/` 放进 `plugins/`,重启 KOReader。没装月读也能单独用,装了会联动:
- **蓝牙联动:** 月读里开蓝牙就自动接管翻页器并连上,翻页器重连后自动重新接管,连着时不息屏;没装月读时每 10 秒轮询一次。
- **设置页:** 月读 **设置 → 阅读 → 翻页器** 里录「下一个 / 上一个 / 确认」手势(单击、连按 2~3 下、长按)。
- **想法选择器:** 用翻页器选中并打开当前页的想法,段评来自月读,没装月读时只有自己带笔记的划线可选。
- **设备:** Kindle 配合 kindle-hid-passthrough 或 Kindle 原生蓝牙;Kobo 路径尚未在真机验证。Android 和桌面版不适用。
### 游戏(可选)
三个独立的离线游戏插件,从各自仓库的 Release 下载,解压后把 `*.koplugin/` 放进 `plugins/`,重启 KOReader:
| 游戏 | 插件包 |
|---|---|
| 小黑屋(《A Dark Room》中文移植) | [`adarkroom.koplugin.zip`](https://github.com/AnkioTomas/ko-adarkroom/releases) |
| 阿页的阁楼(书签纸灵养成) | [`paper-sprite.koplugin.zip`](https://github.com/AnkioTomas/ko-paper-sprite/releases) |
| 游戏合集(22 个益智 / 棋牌 / 实时小游戏) | [`games.koplugin-*.zip`](https://github.com/AnkioTomas/ko-games/releases) |
用法见[增强了什么](#10-游戏)。
### 从源码安装
直接复制仓库中的 `book.koplugin/`。`tests/`、`assets/`、`koreader/` 等目录不是插件交付物,不需要复制到设备。
> **注意:** 插件目录名必须是 `book.koplugin`,不能改成 `book`,也不能多套一层仓库目录。
## 快速开始
### 本地书籍
1. 打开 **月读 → 设置 → 账号 → 本地**。
2. 选择书籍根目录(Kindle 上建议在 `documents` 里新建一个子文件夹放书;直接选 `documents` 时会弹提示,可点「重新选择」或「仍然使用」)(或填写 WebDAV 地址、用户名、密码和目录,再点「测试 WebDAV 连接」确认可读写)。
3. 在 **设置 → 当前书库** 切换为 **本地书籍**。
4. 返回首页;月读会在后台扫描,并把索引写入本地 SQLite。
本地源不需要账号或服务器。一级目录作为分类,二级目录可作为系列;在详情页修改分类或系列时,月读会移动实际文件并同步更新身份。
### 月读服务
1. 打开 **设置 → 账号 → 月读服务 → 服务器与令牌**。
2. 填写服务地址和令牌。
3. 在 **设置 → 当前书库** 切换到 **月读服务**;打开桌面会在后台同步书架,也可在图书馆点刷新强制同步。
### 微信读书
1. 打开 **设置 → 账号 → 微信读书 → 微信扫码登录**。
2. 使用微信扫码登录,并在 **当前书库** 里切换到微信读书。
3. 打开桌面后台同步书架。
4. 打开书籍后按章阅读;目录和后续章节会按需缓存。
### AI 阅读助手
1. 打开 **设置 → AI 接口**,填写兼容 `/chat/completions` 的接口地址、API 密钥和模型,点连接测试。
2. 阅读时划词选「AI 解释」,或在阅读快捷面板用「问书」「读书报告」「回顾前文」。
3. 需要章节摘要和前情提要时,在 **AI 接口 → 阅读助手** 里打开(会消耗 API 额度)。
### 中文输入
1. 打开 **设置 → 中文输入法增强**。
2. 选择键盘布局,并下载该布局的独立词库。
3. 在 KOReader 虚拟键盘上点 `🌐` 切换到中文布局。
### 远程管理
1. 让阅读器和电脑/手机连接同一可信 Wi-Fi。
2. 打开 **设置 → 远程管理 → 远程管理服务**。
3. 在浏览器访问界面显示的地址,例如 `http://192.168.1.10:9528/`。
## 数据与安全
### 远程管理安全边界
远程管理默认关闭,但当前版本**没有登录、密码或访问令牌认证**,并会监听设备可访问的网络接口。服务只限制可操作的受管目录,不能阻止同一网络中的其他设备发起请求。
- 服务会拒绝非 IP Host、跨站写请求,并保护 `.moon/settings/` 等凭据路径;这些限制不能替代身份认证。
- 远程管理可以上传并安装插件更新包,等同于能在设备上执行代码。
- 只在可信局域网中临时启用。
- 不要把端口映射到公网,不要通过反向代理公开。
- 公共 Wi-Fi、访客网络或其他不可信网络中不要开启。
- 使用结束后立即关闭,或打开「空闲自动关闭」;不需要自动运行时不要启用开机自启。
### 本地数据
插件数据位于 KOReader 数据目录下的 `.moon/`:
```text
.moon/
├── settings/ # 通用、功能和数据源配置(含凭据、锁屏密码哈希)
├── book.sqlite3 # 书籍、章节、目录、进度、笔记、统计和 AI 摘要
├── cache/ # 下载书籍、章节、封面、双语版 / 排版版和 HTTP 缓存
├── dictionary.sqlite3 # 拼音 / 小鹤双拼词库
├── dictionary-wubi.sqlite3 # 五笔词库(选择后独立下载)
├── dictionary-cangjie.sqlite3
├── dictionary-zhuyin.sqlite3
├── screensaver/wallpapers/ # 默认锁屏壁纸文件夹
└── book.log # 月读独立日志
```
数据库身份使用 `(source_id, stable_id)`。本地书籍的 `stable_id` 是文件路径,在线书籍使用来源提供的稳定 ID;章节文件通过物理路径反查所属书籍和章节序号。
数据库使用增量迁移。插件升级不会主动清空用户数据;“清理缓存”只删除可重新生成的缓存(包括双语版和排版版),不删除数据库中的书籍身份、进度、笔记和统计,也保留 KOReader 的 `.sdr` 边车(阅读位置、书签和标注)。
在线来源、AI 服务和书城的凭据保存在本机 `.moon/settings/`。请自行保护 KOReader 数据目录,不要把整个目录分享给他人。
## 设置索引
设置根页分为书库、外观、桌面、阅读、系统、安全、订阅和维护几组(订阅组在启用订阅后出现),每行下方有一句副标题说明管什么:
- **书库 → 当前书库:** 点按直接弹窗切换当前数据源或混合模式。
- **书库 → 账号:** 本地书籍(目录 / WebDAV,含连接测试)与各在线来源的登录和服务配置(每个书源一行,进二级页)、Z-Library 与 OPDS 书城的开关和账号。
- **书库 → 书架显示:** 封面风格、显示名称 / 作者、点击书籍动作、随机一本及范围、书架每行数量、书库页签(多选,文件夹页签仅本地书库有)。
- **外观 → 外观 / 界面壁纸 / 屏幕 / 语言:** 界面字体、缩放、背景遮罩、弹窗关闭手势(下滑 / 上滑 / 关闭);全局壁纸;屏幕刷新、彩色屏幕支持、夜间与亮度(自动夜间模式、自动亮度);KOReader 界面语言。
- **桌面 → 启动与按键 / 桌面顶栏 / 桌面快捷面板 / 底栏拓展:** 启动打开桌面、物理翻页键与反转翻页键(有按键的设备);顶栏状态项;桌面快捷动作的启停与排序;底栏「拓展」格与要显示的插件入口。
- **阅读 → 阅读行为 / 阅读页顶栏与底栏 / 阅读快捷面板:** 脚注弹窗、读到 99% 自动标记已读、翻页动画与风格、阅读侧栏;阅读页状态栏组件;阅读快捷动作的启停与排序。
- **阅读 → 查词 / 划词菜单 / 生僻字注音:** 划词手柄、翻译、X-Ray、词典、文字识别(OCR)、百科和段评;按钮开关、顺序与来源;拼音、英语音标注音。
- **阅读 → AI 接口:** 接口地址、API 密钥、模型、连接测试、AI 请求超时,以及阅读助手(章节摘要、前情提要)开关。
- **系统 → 网络 / 时间 / 输入法 / 远程管理 / 设备:** HTTP 代理与网络超时;时区、系统时间与网络校时;中文输入法开关、键盘布局、简繁转换与词库;远程管理服务开关、端口、开机自启和空闲自动关闭;设备名称与头像。
- **安全 → 锁屏壁纸 / 锁屏密码:** 锁屏接管开关、背景、主体、位置、宽度、文案和账单周期(广告版 Kindle 上提示并可一键去除锁屏广告,去除后自动重启);开关锁屏密码(4~6 位数字)、修改密码和忘记密码说明。
- **订阅:** 启用订阅、下载文章图片。
- **维护:** 功能开关(停用用不到的功能)、存储空间、清理缓存、清除当前源统计、导入 KOReader 统计、调试日志、自动检查更新 / 检查更新、关于(含书友交流群、Bug 反馈群二维码)和关闭桌面。
## 开发与测试
项目不需要构建,插件交付物是 `book.koplugin/`。
离线测试只需要系统 `luajit` 和 `libsqlite3`(macOS 自带;Debian/Ubuntu `apt install luajit libsqlite3-0`),不启动 KOReader、不需要克隆 KOReader 源码:
```bash
./tests/run.sh # 全部
./tests/run.sh tests/book/catalog_spec.lua # 单个文件(可多个)
```
- 测试文件 `tests/<模块镜像>/xxx_spec.lua`,与 `book.koplugin/` 目录一一对应;跨模块的架构检查(`feature_boundary_spec`、`text_box_bg_spec`)放 `tests/` 根。
- 每个 spec 在独立 luajit 进程里跑,0 断言判失败。断言库 `tests/support/assert.lua`,KOReader 模块桩 `tests/support/stubs.lua`(缺什么补什么,不整树 stub),主题弹窗记录桩 `tests/support/theme_stubs.lua`。
- 测试数据全部写到仓库根的 `test/` 沙箱(git 忽略,可随时删除),绝不碰模拟器数据。
- 仓库根有 `koreader/` 克隆时 frontend 模块用真的;有模拟器构建时再多跑少数需要 native 库的 spec。没有也只是这几条 skip,其余全跑。
- 静态检查(LuaLS,仓库根执行,两个路径必须是绝对路径):`lua-language-server --check="$PWD" --configpath="$PWD/.luarc.json" --checklevel=Warning`,提交前应为 0 条。
- 推到 `main` / 开 PR 时 GitHub Actions 自动跑全部测试(`.github/workflows/test.yml`)。
本机模拟器需要仓库根目录下有 KOReader 源码和 Homebrew GNU 工具链:
```bash
./run.sh
```
新增数据源遵循 `source/base.lua` 和 `source/registry.lua` 接口;第三方书源以独立插件形式提供 `moon_source.lua`,契约见 [`examples/moonsource-demo.koplugin/moon_source.lua`](examples/moonsource-demo.koplugin/moon_source.lua)。文字处理复用 `utils/text.lua`,SQLite 访问必须使用参数化查询,耗时文件与解析任务放到 worker,数据库写入留在主进程。
模块契约写在各模块头注释里(表结构在各 `*_db.lua` 表模块头注释里),开发文档见[月读文档站](https://moon.ankio.net/develop)的「开发文档」。
### 扩展开发
扩展是独立的 KOReader 插件(`_meta.lua` + 返回空 `WidgetContainer` 的 `main.lua` + 根目录的 `moon_source.lua`),月读在 KOReader 加载完全部插件后扫描并登记。扩展用 `provides` 自己声明能力:
```lua
return {
api = 1, -- 必须等于 Registry.API
id = "ext.greeting", -- 非书源写在这里;书源取 meta().id
provides = { source = false, home_widgets = { widget } },
}
```
- **书源与非书源:** `provides.source = true` 才是书源,需要 `meta()` / `new()`,出现在数据源列表里;`source = false` 的扩展(例如只加首页组件)不需要 meta/new,也不能当活跃源。没写 `provides` 的旧描述文件仍按书源处理(顶层 `source = false` 除外),首页组件取顶层 `home`。
- **首页组件:** 出现在首页编辑的「添加组件」里,与内置组件一样摆放。简写表 `{ id, title, build(ctx, w, h), icon?, height? / heightRange?, settings?(desktop, id) }`,用 `ui.themes.widgets.*` 拼控件;需要请求、刷新和生命周期时写继承 `desktop.pages.home.base` 的完整组件类。
- **id 规则:** 扩展 id 必须是 `ext.`(字母数字 `_-`),写进书库与配置,发布后不能改,重名时先加载的生效;组件 id 必须以 `<扩展 id>.` 开头,简写表可只写短名,月读自动补前缀。
- **出错处理:** 描述文件不合约定、组件 id 不合规或重名只记日志并跳过;组件运行时抛错被 pcall 隔离,记日志后画空白占位,不影响首页和内置源。
- **保存的布局:** 扩展卸载或禁用后组件不再显示,但首页布局里的位置保留,重装后回到原处。
- **功能挂点:** `provides.features = { setting, panel, topbar, events, hooks, lookup }` 往月读的设置页(`entries(desktop)`)、快捷面板(`actions()`)、桌面顶栏(`items()`)、数据事件(`book_identity_changed` / `book_removed`)、阅读页就绪(`hooks.onReaderReady(plugin)`)和查词面板(`lookup.tabs` / `lookup.actions`)加功能,形状与内置 `features//` 的约定文件相同(lookup 形状见 `features/rare/lookup.lua` 的 `externalTabs` / `externalActions`);值可以是表,也可以是插件内模块名(用到时才 require)。开关、顶栏项、设置页、查词 Tab / 操作按钮 id 自动加 `<扩展 id>.` 前缀,回调出错只记日志,配置用 `utils.settings.getSource(<扩展 id>)`。查词 `actions` 由扩展自己决定是否登记,核心与示例默认不追加操作按钮。其它 KOReader 事件、菜单和手势由扩展插件自己的 `main.lua` 处理。
示例:书源 [`examples/moonsource-demo.koplugin`](examples/moonsource-demo.koplugin/moon_source.lua)(书源 + 首页组件),非书源 [`examples/moonwidget-demo.koplugin`](examples/moonwidget-demo.koplugin/moon_source.lua)(首页组件 + 设置 / 快捷面板 / 顶栏 / 查词 Tab)。分步指南见文档站[扩展插件](https://moon.ankio.net/develop/extend/plugin)、[接一个数据源](https://moon.ankio.net/develop/extend/source)与[锁屏与首页组件](https://moon.ankio.net/develop/extend/components)。
## 版本与发布
版本文件是 `book.koplugin/bookversion.lua`,源码树中默认显示 `0.0.0-dev`。
发布时 CI 在 `v*` tag 中注入版本、打包 `book.koplugin/`,并把 `extensions/*.koplugin` 各自打成独立 zip,一起发布到 GitHub Release。本地打包:`tools/package.sh [版本] [输出 zip] [插件目录]`,插件目录默认 `book.koplugin`。
## 许可证
本项目采用 [GNU GPLv3](LICENSE)。
## 社区
感谢 [LINUX DO](https://linux.do/) 社区的支持与认可。