不离开书页,读懂一个观点,留下一条真正有用的笔记。
UV Reader 是中文优先的独立桌面阅读器(Electron),支持 EPUB、PDF、FB2、MOBI、AZW3 和 CBZ。阅读、划线、批注、阅读笔记和可选的 AI 伴读都在同一个窗口里完成,不再依赖 Obsidian。
状态:开发中,计划作为独立桌面应用发布,暂未提供安装包;当前可从源码构建运行。
| 能力 | 说明 |
|---|---|
| 阅读 | 分页 / 滚动两种模式,滚轮翻页,页码跳转,单栏或双栏,五套阅读主题,内置与自定义字体 |
| 划线批注 | 三色划线、就近批注、右键菜单,阅读笔记自动汇总 |
| 阅读笔记 | 每本书一篇 Markdown 笔记,↩ 可跳回原文对应位置 |
| 目录 | 左侧栏,可搜索、可关闭,高度与阅读区一致 |
| 适合页面 | 正文按可用宽度铺满;PDF 切到单页并放大到约 90% 阅读区宽度 |
| AI 伴读(可选) | HTTP 服务(DeepSeek、Kimi、通义千问、智谱 GLM、MiniMax、硅基流动、豆包、OpenRouter、OpenAI、Ollama、LM Studio、自定义端点)与本机 CLI/ACP(Codex、Claude、Grok、Kimi、ZCode) |
| 本地优先 | 书籍、进度、划线、笔记都保存在本机文件;AI 关闭时不联网 |
前置:Node.js 22 或更高。
npm ci
npm run desktop:install # 安装 Electron;网络受限时先设置 ELECTRON_MIRROR
npm run desktop:build
npm run desktop:start- 开发:
npm run desktop:dev(watch 构建,重启应用生效) - 冒烟:
npm run desktop:smoke(打开内置示例书,退出码 0/1) - 端到端:
npm run desktop:e2e(Playwright 驱动 Electron:翻页、划线、笔记、目录、AI 密钥链路等)
npm run desktop:dist:dir # 只出免安装目录(apps/desktop/release/win-unpacked)
npm run desktop:dist # Windows:NSIS 安装包 + 便携版
npm run desktop:smoke:packaged # 用打包产物跑冒烟(退出码 0/1)
npm run build:icon # 重新生成应用图标(纯 Node,无外部依赖)- 产物:
apps/desktop/release/UV-Reader-<版本>-setup.exe、UV-Reader-<版本>-portable.exe;macOS 为 dmg、Linux 为 AppImage(需在对应系统上构建)。 - 版本号取自根
package.json;图标由scripts/make-app-icon.mjs生成到apps/desktop/build/icon.png。 - 已注册
.epub/.pdf/.mobi/.azw3/.fb2/.cbz文件关联与单实例;用“打开方式”传入的路径会在启动后自动打开。 - 网络受限时先设置镜像:
ELECTRON_MIRROR、ELECTRON_BUILDER_BINARIES_MIRROR(例如 npmmirror 对应路径)。
npm test # 阅读核心单元测试
npm run test:shim # 宿主兼容层契约测试
npm run test:desktop # 桌面壳测试
npm run check:i18n # 9 种语言字典与占位符一致性
npx eslint packages/reader/src/ --max-warnings=0CI(.github/workflows/ci.yml)按上述顺序执行,并在 xvfb 下跑一次桌面冒烟。
本机已安装并登录 CLI(Claude Code / Codex / Grok / Kimi / ZCode)时,可以手动验证 AI 伴读的 CLI 链路(不依赖 ACP 适配器,未安装时自动走兼容模式):
npm run desktop:test:cli # 默认 claude-cli,自动探测可执行文件
npm run desktop:test:cli -- codex-cli # 指定 provider;第三个参数可传二进制路径apps/desktop/ Electron 壳:主进程、预加载、渲染进程、打包脚本
packages/reader/ 阅读核心与界面(main.js 仍通过兼容层运行)
packages/host-shim/ Obsidian API 兼容层(迁移期过渡,之后会随重构移除)
assets/starter-books/ 内置公版示例书
迁移进行中:阅读逻辑会逐步从 packages/reader/src/main.js 抽成与宿主无关的模块,packages/host-shim 是过渡方案,最终目标是桌面端只依赖纯阅读模块。计划与进度见 docs/standalone-desktop-plan.md。
书籍、阅读进度、划线和笔记都在本地文件中,无账号、无遥测。可选联网能力默认关闭:翻译(Google Translate)、AI 伴读(你选择并配置的服务或本机 CLI)。详见 SECURITY.md。
项目整体采用 GNU GPL v3.0 only(GPL-3.0-only),完整条款见 LICENSE。第三方组件、字体与改编来源见 NOTICE.md、fonts/README.md 与 licenses/。需要 GPL 之外的授权可联系作者协商商业授权。
UV Reader is a Chinese-first standalone desktop reader (Electron) for EPUB, PDF, FB2, MOBI, AZW3 and CBZ. Reading, highlighting, notes and an optional AI companion live in one window; Obsidian is no longer required.
Status: in development; planned for release as a standalone desktop app. No installer is published yet — build from source for now.
Features: paged/scrolling reading, wheel paging, page jump, single or two columns, five page themes, bundled and custom fonts, three-colour highlights with inline comments, one Markdown reading note per book with backlinks, a searchable left TOC sidebar, fit-to-width reading (PDFs are zoomed to ~90% of the reading area), and optional AI assistance through HTTP providers or locally signed-in CLIs (Codex, Claude Code, Grok, Kimi, ZCode).
Build and run:
npm ci
npm run desktop:install
npm run desktop:build
npm run desktop:startTests: npm test, npm run test:shim, npm run test:desktop, npm run check:i18n, npx eslint packages/reader/src/ --max-warnings=0.
License: GNU GPL v3.0 only. Third-party notices live in NOTICE.md.