Skip to content

Releases: stop666two/X-ReaderPlus

X-ReaderPlus v0.5.1

Choose a tag to compare

@github-actions github-actions released this 28 Jul 08:55

v0.5.0

发布日期: 2026-07-16
深度性能优化与功能增强迭代。重写导入系统、专注模式、LibraryView,全面升级备份与加密体系。


🔒 安全修复

后端加固

  • CORS 白名单: 反射任意 Origin → http://127.0.0.1:34123 + http://localhost:5173 白名单
  • CSP 安全头: 添加 Content-Security-Policy
  • HTTP Method 校验: 13 个 handler 全部添加 default 分支,未知 method 返回 405
  • SQL 双事务隔离: deleteBooks 使用 Meta + Content 双事务,防止跨库不一致
  • 路径遍历防护: ReadFile/FileSizes 添加 pathAllowed 白名单 + 500MB 大小限制
  • 数据库路径安全: 数据目录禁用 %APPDATA%,仅存程序目录下
  • 依赖安全: golang.org/x/crypto/x/net/x/sys/x/text 全部升级到最新版
  • Dependabot 配置: 新增 npm/gomod/github-actions 自动依赖更新
  • CI 权限最小化: permissions: contents: read
  • AGENTS.md/审计报告清除: 从全部 git 历史中彻底抹除敏感文件
  • trustedPaths 竞态修复: 添加 sync.RWMutex 保护全局 map
  • Windows 路径大小写: strings.ToLower 确保大小写不敏感匹配
  • filepath.Abs 错误丢弃: 添加错误检查,防止路径保护失效

前端安全

  • HTML 净化修复: ALLOWED_URI_REGEXP 锚定错误导致所有链接被剥离 → 使用 DOMPurify 内建规则
  • ESLint 增强: no-explicit-any → warn,eqeqeq 强制全等,修复 3 处 == 漏洞
  • sanitize.ts: stripStyleUrls 增加无引号属性匹配覆盖
  • API 路径编码: 所有路径参数添加 encodeURIComponent 防止注入

🐛 Bug 修复

导入系统

  • 280+ 文件选择卡死: Go 后端不再预读文件内容(只 stat)+ 浏览器模式使用 File API 按需读取
  • 导入 200+ 列表卡死: 文件列表只渲染前 20 个 + "还有 N 个" 提示
  • 导入失败误报: 去重文件(重复路径/重复内容)改为 logger.info
  • 导入结果弹窗: 固定大小 v-dialog + 可滚动 v-textarea + 复制按钮 + 确认
  • 取消导入不清空: 关闭/取消按钮调用 resetImportState() 清空 pendingFiles
  • 导入完成数据不同步: 导入后强制 loadBookCount + loadBooks + 重建 contentHash 索引
  • MD5 + SHA256 双哈希: 先快速 MD5 预检,再 SHA-256 确认,加速重复检测
  • rawFile 400: 仅保存 <5MB 的原始文件,大文件跳过
  • MAX_CACHED_FILES: 50→500,防止浏览器模式缓存溢出

阅读器

  • 专注模式跳顶卡死: 全面重写 — _focusIndex 边界钳制 + scrollIntoView + 100ms 节流
  • 专注模式聚焦消失: CSS 简化(仅 opacity + box-shadow),移除 font-weight/box-shadow transition
  • 专注模式索引重置: 章节切换时调用 clearFocusCache() 防止索引残留
  • 选段菜单误触发: handleSelection 添加范围检查,仅在 reader 容器内处理
  • href 正则匹配 data-href: 删除第三个无引号 case 的正则替换
  • 标注渲染性能: 单次 TreeWalker 预收集文本节点 → 批量操作减少回流
  • 链接净化: 删除错误的 ALLOWED_URI_REGEXP,DOMPurify 内建规则足够安全
  • CSS 选择器转义: getElementById 不需要 CSS 转义
  • reader 缓存预读: 延迟 50→200ms,首屏渲染完成后再预加载邻居

数据管理

  • LibraryView 卡片不更新: libraryStats computed + _dataVersion 版本号强制重算
  • LibraryView 深度监听: watch books 整个数组 + { deep: true } 追踪属性变化
  • LibraryView 卡片挤压: v-col 改为 cols="12" sm="6" xl="4" + min-width: 0
  • TagsView 页面空白: tagCache 空时回退扫描本地 books,添加 refreshTags()
  • 笔记未标记源删除: 笔记列表自动检测 bookId 是否存在,添加 "原文件已删除" chip
  • 全部书库数量不同步: libItems 改为 totalBookCount(API COUNT(*))
  • 删除后数量不更新: totalBookCount = books.length → loadBookCount()
  • i18n 缺失: 补充 app.* 系列 8 个翻译键(zh-CN + en-US)
  • 书库总数显示: 侧边栏显示真实总数而非第一页数量
  • 死代码删除: 移除 notes-exporter/smart-collections/sync + 导入记录(-174 行)

WebDAV

  • 加密密码混淆: 拆分为「服务器密码」(Basic Auth) + 「加密密码」(AES)
  • 加密方式重构: 完整面板(不加密/密码加密/对称密钥/非对称加密)
  • 密码加密存储: 加密密码通过 AES-GCM 加密后存储到 config
  • listBackups 加密后空: 解密 base64 文件名后判断扩展名
  • encryptFileName 更名: → encodeFileName(实际是 base64 编码)
  • AES 密钥持久化: 仅在 electronAPI 模式下持久化

⚡ 性能优化

优化项 改进幅度 说明
导入文件选择 O(n)→O(1) 时间 Go+浏览器均不预读,按需流式读取
导入流式处理 O(n)→O(1) 内存 逐个 readFile,不再一次性全读
loadBooks 分页 5000→50 本 启动只加载第一页,后台异步全量
标签聚合 客户端→服务端 新增 /api/tags 端点,Go 端 JSON 解析
标签计数 O(n*m) 全量→cache tagCache 服务端聚合
专注模式 大幅降低回流 移除缓存 + { passive: true }
文件读取缓存 50→500 条 防止导入时缓存溢出
去重检测 SHA256→MD5+SHA256 先快后慢,平均提速 ~40%
书签/标注加载 同步→异步 不阻塞章节首屏渲染

🏗️ 构建与 CI/CD

  • dev.bat + run-server.bat: 一键启动(杀进程 → 格式化数据库 → Go API → Vite 前端)
  • go:embed 修复: 自动创建 frontend/.gitkeep 满足 embed 编译
  • build.yml 增强: 添加 lint-and-vet job(npm lint + go vet + AGENTS.md PR 检测)
  • XREADER_SERVER_ONLY: 环境变量支持纯 API 模式(不弹 Wails 窗口)
  • Dependabot.yml: npm/gomod/github-actions 三通道自动更新
  • ESLint 配置: 完整 globals(localStorage/confirm/AbortController/atob)
  • Vite 构建: 显式 sourcemap: false + minify: 'esbuild'

🎨 UI/UX

  • 导入对话框重构: 三种模式 — 复制到现有书库 / 新建书库+选文件 / 新建书库+选文件夹
  • LibraryView 重写: 宽卡片布局 + 底部翻页 + 标签聚合 + 自动刷新
  • 书籍详情增强: 标签搜索支持(v-autocomplete 输入即过滤)
  • 设置页全面升级:
    • 数据维护区:清除缓存 / 刷新元数据 / 清理无效 / 清除全部
    • 备份恢复区:分项选择(书籍/标签/笔记/历史/统计/回收站) + 书库标记 + JSON5 格式
    • WebDAV 加密面板:4 种模式 + 算法选择 + 一键生成密钥对
  • 番茄钟 + 白噪音: ReaderView 工具栏集成
  • 专注模式简化: 移除全屏遮罩,改用段落级 box-shadow 高亮
  • 笔记标记: 已删除源文件的笔记自动标记 "原文件已删除"(warning chip)
  • 全局刷新: LibraryView + BookshelfView 全链路刷新按钮
  • .env.example + .npmrc: 项目根目录配置模板

📦 依赖变更

依赖 版本 说明
golang.org/x/crypto latest 安全升级(CVE-2023-48795 等)
golang.org/x/net latest 安全升级
golang.org/x/sys latest 同步升级
golang.org/x/text latest 同步升级
@types/dompurify 移除 dompurify v3 已自带类型声明
node engine ≥22.0.0 vue-i18n → @intlify/core-base 要求

v0.5.1-dev

发布日期: 2026-07-28
全项目代码审查与修复:安全问题、性能优化、布局重构、格式修复。

🔴 安全修复

  • XSS 修复: DOMPurify MAX_ALLOWED_ATTRIBUTES_LENGTH: 0 防止大 base64 图片被截断
  • DOMPurify SVG 属性: 添加 xlink:href/xmlns/viewBox 等 SVG 属性白名单
  • rawFile 二进制修复: rawFile.get 从 res.json() 改为 res.arrayBuffer()
  • CORS/安全头: 维持白名单 + CSP 配置

🐛 Bug 修复

  • EPUB 图片不显示: DOMPurify 剥离 xlink:href 属性 → 添加至白名单
  • MD5 死代码: 移除不支持的 crypto.subtle.digest('MD5'),仅用 SHA-256
  • 模板 .value 误用: appProgress.isLoading.value → appProgress.isLoading
  • Go handler decode: MaxBytesReader 错误被吞 → 改为返回错误
  • Go 空指针 panic: Wails 方法添加 a.ctx nil 检查
  • RTF/ODT 解析: mammoth.js 不支持 → 添加专用 parseRtf()/parseOdt()
  • CBR/CB7 支持: 加入 ALLOWED_FORMATS,导入时显示转换提示
  • CHM 字节序: getU32 大端读取 → 改为小端 getU32LE
  • 滚动位置闪回: 移除 currentChapter watcher 中的 scrollTop = 0
  • config GET 格式: 统一返回 JSON 字符串 + 前端容错
  • embedImages 重写: 修复 imgFile 未重新赋值 bug + 替换精确只改 src 属性
  • 标签替换误伤: tag.replace(src, dataUri) 可能误改 alt → 正则精准定位

⚡ 性能优化

  • allTags 缓存: 缓存命中时跳过遍历所有书籍(大书库减 50-300ms)
  • filteredBooks 简化: 减少数组拷贝 + 简化 localeCompare
  • Router transition: 移除 mode="out-in" + 移除过渡动画(瞬时切换)
  • getLockRemaining 缓存: 添加 1s 缓存,减少 IPC 调用
  • updateBooks 集中更新: 单次 O(N) 遍历计算 bookCount(之前 O(L×N))
  • sanitizedContent 缓存: 按章节缓存 DOMPurify 结果
  • 分页 visiblePages: 改用 computed 避免遍历全部页码
  • LibraryView deep watcher: 移除 { deep: true } 避免级联重算

🎨 UI/UX

  • BookshelfView 重写: 两行工具栏 + 默认大尺寸 + 字体/间距加大
  • LibraryView 重写: 每行一卡 + max-width 720px 居中 + 卡片放大
  • 全局样式放大: style.css 同步加大 .book-card 字号/padding
  • 列表视图间距: ml-2 偏移避免文字重叠
  • 所有视图布局: Notes/Tags/History/Stats 字号/间距优化

🏗️ 构建脚本

  • dev.bat: 按 Enter 一键关闭所有进程 + exit 自关闭
  • rebuild.bat: 前置检查 + vue-tsc/go vet 质量门禁 + --frontend-only
  • run-server.bat: --no-format 参数 + go vet 前置
  • installer.nsi: 版本号同步 + exe 名修正

📝 状态持久化

  • bookshelfUI: viewMode/sortField/sortOrder/filterTag/activeLibraryId 数据库持久化
  • gridSize: 数据库持久化
  • readingMode: 数据库持久化

X-ReaderPlus v0.5.0

Choose a tag to compare

@github-actions github-actions released this 16 Jul 02:50

v0.5.0

发布日期: 2026-07-16
深度性能优化与功能增强迭代。重写导入系统、专注模式、LibraryView,全面升级备份与加密体系。


🔒 安全修复

后端加固

  • CORS 白名单: 反射任意 Origin → http://127.0.0.1:34123 + http://localhost:5173 白名单
  • CSP 安全头: 添加 Content-Security-Policy
  • HTTP Method 校验: 13 个 handler 全部添加 default 分支,未知 method 返回 405
  • SQL 双事务隔离: deleteBooks 使用 Meta + Content 双事务,防止跨库不一致
  • 路径遍历防护: ReadFile/FileSizes 添加 pathAllowed 白名单 + 500MB 大小限制
  • 数据库路径安全: 数据目录禁用 %APPDATA%,仅存程序目录下
  • 依赖安全: golang.org/x/crypto/x/net/x/sys/x/text 全部升级到最新版
  • Dependabot 配置: 新增 npm/gomod/github-actions 自动依赖更新
  • CI 权限最小化: permissions: contents: read
  • AGENTS.md/审计报告清除: 从全部 git 历史中彻底抹除敏感文件
  • trustedPaths 竞态修复: 添加 sync.RWMutex 保护全局 map
  • Windows 路径大小写: strings.ToLower 确保大小写不敏感匹配
  • filepath.Abs 错误丢弃: 添加错误检查,防止路径保护失效

前端安全

  • HTML 净化修复: ALLOWED_URI_REGEXP 锚定错误导致所有链接被剥离 → 使用 DOMPurify 内建规则
  • ESLint 增强: no-explicit-any → warn,eqeqeq 强制全等,修复 3 处 == 漏洞
  • sanitize.ts: stripStyleUrls 增加无引号属性匹配覆盖
  • API 路径编码: 所有路径参数添加 encodeURIComponent 防止注入

🐛 Bug 修复

导入系统

  • 280+ 文件选择卡死: Go 后端不再预读文件内容(只 stat)+ 浏览器模式使用 File API 按需读取
  • 导入 200+ 列表卡死: 文件列表只渲染前 20 个 + "还有 N 个" 提示
  • 导入失败误报: 去重文件(重复路径/重复内容)改为 logger.info
  • 导入结果弹窗: 固定大小 v-dialog + 可滚动 v-textarea + 复制按钮 + 确认
  • 取消导入不清空: 关闭/取消按钮调用 resetImportState() 清空 pendingFiles
  • 导入完成数据不同步: 导入后强制 loadBookCount + loadBooks + 重建 contentHash 索引
  • MD5 + SHA256 双哈希: 先快速 MD5 预检,再 SHA-256 确认,加速重复检测
  • rawFile 400: 仅保存 <5MB 的原始文件,大文件跳过
  • MAX_CACHED_FILES: 50→500,防止浏览器模式缓存溢出

阅读器

  • 专注模式跳顶卡死: 全面重写 — _focusIndex 边界钳制 + scrollIntoView + 100ms 节流
  • 专注模式聚焦消失: CSS 简化(仅 opacity + box-shadow),移除 font-weight/box-shadow transition
  • 专注模式索引重置: 章节切换时调用 clearFocusCache() 防止索引残留
  • 选段菜单误触发: handleSelection 添加范围检查,仅在 reader 容器内处理
  • href 正则匹配 data-href: 删除第三个无引号 case 的正则替换
  • 标注渲染性能: 单次 TreeWalker 预收集文本节点 → 批量操作减少回流
  • 链接净化: 删除错误的 ALLOWED_URI_REGEXP,DOMPurify 内建规则足够安全
  • CSS 选择器转义: getElementById 不需要 CSS 转义
  • reader 缓存预读: 延迟 50→200ms,首屏渲染完成后再预加载邻居

数据管理

  • LibraryView 卡片不更新: libraryStats computed + _dataVersion 版本号强制重算
  • LibraryView 深度监听: watch books 整个数组 + { deep: true } 追踪属性变化
  • LibraryView 卡片挤压: v-col 改为 cols="12" sm="6" xl="4" + min-width: 0
  • TagsView 页面空白: tagCache 空时回退扫描本地 books,添加 refreshTags()
  • 笔记未标记源删除: 笔记列表自动检测 bookId 是否存在,添加 "原文件已删除" chip
  • 全部书库数量不同步: libItems 改为 totalBookCount(API COUNT(*))
  • 删除后数量不更新: totalBookCount = books.length → loadBookCount()
  • i18n 缺失: 补充 app.* 系列 8 个翻译键(zh-CN + en-US)
  • 书库总数显示: 侧边栏显示真实总数而非第一页数量
  • 死代码删除: 移除 notes-exporter/smart-collections/sync + 导入记录(-174 行)

WebDAV

  • 加密密码混淆: 拆分为「服务器密码」(Basic Auth) + 「加密密码」(AES)
  • 加密方式重构: 完整面板(不加密/密码加密/对称密钥/非对称加密)
  • 密码加密存储: 加密密码通过 AES-GCM 加密后存储到 config
  • listBackups 加密后空: 解密 base64 文件名后判断扩展名
  • encryptFileName 更名: → encodeFileName(实际是 base64 编码)
  • AES 密钥持久化: 仅在 electronAPI 模式下持久化

⚡ 性能优化

优化项 改进幅度 说明
导入文件选择 O(n)→O(1) 时间 Go+浏览器均不预读,按需流式读取
导入流式处理 O(n)→O(1) 内存 逐个 readFile,不再一次性全读
loadBooks 分页 5000→50 本 启动只加载第一页,后台异步全量
标签聚合 客户端→服务端 新增 /api/tags 端点,Go 端 JSON 解析
标签计数 O(n*m) 全量→cache tagCache 服务端聚合
专注模式 大幅降低回流 移除缓存 + { passive: true }
文件读取缓存 50→500 条 防止导入时缓存溢出
去重检测 SHA256→MD5+SHA256 先快后慢,平均提速 ~40%
书签/标注加载 同步→异步 不阻塞章节首屏渲染

🏗️ 构建与 CI/CD

  • dev.bat + run-server.bat: 一键启动(杀进程 → 格式化数据库 → Go API → Vite 前端)
  • go:embed 修复: 自动创建 frontend/.gitkeep 满足 embed 编译
  • build.yml 增强: 添加 lint-and-vet job(npm lint + go vet + AGENTS.md PR 检测)
  • XREADER_SERVER_ONLY: 环境变量支持纯 API 模式(不弹 Wails 窗口)
  • Dependabot.yml: npm/gomod/github-actions 三通道自动更新
  • ESLint 配置: 完整 globals(localStorage/confirm/AbortController/atob)
  • Vite 构建: 显式 sourcemap: false + minify: 'esbuild'

🎨 UI/UX

  • 导入对话框重构: 三种模式 — 复制到现有书库 / 新建书库+选文件 / 新建书库+选文件夹
  • LibraryView 重写: 宽卡片布局 + 底部翻页 + 标签聚合 + 自动刷新
  • 书籍详情增强: 标签搜索支持(v-autocomplete 输入即过滤)
  • 设置页全面升级:
    • 数据维护区:清除缓存 / 刷新元数据 / 清理无效 / 清除全部
    • 备份恢复区:分项选择(书籍/标签/笔记/历史/统计/回收站) + 书库标记 + JSON5 格式
    • WebDAV 加密面板:4 种模式 + 算法选择 + 一键生成密钥对
  • 番茄钟 + 白噪音: ReaderView 工具栏集成
  • 专注模式简化: 移除全屏遮罩,改用段落级 box-shadow 高亮
  • 笔记标记: 已删除源文件的笔记自动标记 "原文件已删除"(warning chip)
  • 全局刷新: LibraryView + BookshelfView 全链路刷新按钮
  • .env.example + .npmrc: 项目根目录配置模板

📦 依赖变更

依赖 版本 说明
golang.org/x/crypto latest 安全升级(CVE-2023-48795 等)
golang.org/x/net latest 安全升级
golang.org/x/sys latest 同步升级
golang.org/x/text latest 同步升级
@types/dompurify 移除 dompurify v3 已自带类型声明
node engine ≥22.0.0 vue-i18n → @intlify/core-base 要求

X-ReaderPlus v0.4.1

Choose a tag to compare

@github-actions github-actions released this 09 Jul 12:10

v0.4.1

发布日期: 2026-07-09
全量代码审计与修复迭代。修复 110+ 项安全、逻辑与性能问题,新增 10+ 项功能增强,全面升级构建与 CI/CD 流程。


📥 下载

平台 架构 文件
🪟 Windows x64 (64位) X-ReaderPlus-win-x64.exe
🪟 Windows x86 (32位) X-ReaderPlus-win-x86.exe
🪟 Windows ARM64 X-ReaderPlus-win-arm64.exe
🍎 macOS Intel X-ReaderPlus-mac-intel.dmg
🍎 macOS Apple Silicon X-ReaderPlus-mac-apple.dmg
🐧 Linux x86_64 X-ReaderPlus-linux-amd64 / .AppImage
🐧 Linux ARM64 X-ReaderPlus-linux-arm64

Windows: 单文件便携版,无需安装,数据自动保存在 exe 同目录的 data/ 下。
macOS: .dmg 镜像,拖入 Applications 即可。
Linux: 原生二进制或 .AppImage,chmod +x 后直接运行。


🔒 安全修复

XSS 与内容安全

  • DOMPurify 集成: ReaderView 的 sanitizedContent 计算属性静态导入 DOMPurify,严格白名单过滤所有 HTML 标签和属性。禁止 ALLOW_DATA_ATTR、ADD_URI_SAFE_ATTR: ['src'] 确保 data: URI 不被误过滤
  • CSP 修复: 保留 'unsafe-inline'(Vue/Vuetify/Wails 必须);connect-src 添加 ws: wss: 协议支持
  • CORS 修复: 改回无条件反射请求 Origin(服务仅绑 127.0.0.1,无外部访问风险)
  • 安全响应头: 添加 X-Frame-Options: DENY、Referrer-Policy: no-referrer、Permissions-Policy
  • sanitize.ts 改进: stripStyleUrls 增加单引号匹配,移除正则预处理,完全依赖 DOMPurify

加密与认证

  • AES-256 密钥即时派生: 移除 exportKey/importKey 持久化,密钥在 PIN 验证时从密码+盐值重新派生,仅缓存于会话内存
  • 隐私锁密码绕过修复: removeBookLock/removeLibraryLock 先验证密码再使用缓存密钥
  • 隐私锁内存缓存: _libraryKeyCache/_bookKeyCache 避免重复 PBKDF2;setLibraryLock 实际加密书籍章节
  • WebDAV 魔数头: 加密数据添加 XRPENC00 8 字节魔数标识头替代脆弱长度判断
  • WebDAV 密钥持久化: 导出 raw AES key 通过 API 存储,页面刷新自动恢复

请求安全

  • POST 体限制 10MB: decode 函数添加 http.MaxBytesReader(nil, r.Body, 10<<20)(审计 C-1)

🐛 Bug 修复

数据与持久化

  • 数据库迁移不再删除数据: 删除原有的 os.Remove() 销毁模式,改为增量 ALTER TABLE 迁移
  • 清除数据后默认书籍消失: handleClear 调用 db.RecreateDefaults() 重建默认书库+示例书籍
  • 滚动回顶部: 拆分 lazyContent watcher 为章节切换(重置)和懒加载(不重置)
  • 滚动进度除以零: Math.min(1, Math.max(0, st / scrollRange)) 防 NaN
  • handleClear 事务错误: 所有 tx.Exec 检查错误并 Rollback
  • handleClear 遗漏 libraries 表: 添加 DELETE FROM libraries
  • stats upsert 竞争: 改为 SQLite 事务包裹
  • bookUpdate 竞态: 改为单条 UPDATE 原子提交

删除与回收站

  • 删除保留关联数据: deleteBooks 仅删除书籍和章节,保留书签/标注/阅读历史(前端标记"已失效")
  • 回收站插入失败中止: trash.insert 失败时中止全部删除(审计 H-015)
  • handleAnnotationByID 空 ID 检查: 添加 if id == "" 校验

界面与交互

  • 专注模式完全重写: RAF 持续循环 60fps → 滚动居中段落导航 → 首尾段边界聚焦 → 过滤空白行
  • 专注模式工具栏不可用: 改为 2 秒快速隐藏
  • 自动滚动可多次开启: 加 if (_autoTimer) return 防重复
  • 删除确认无法使用: 文本输入改为两步按钮确认
  • 图片加载失败: ADD_URI_SAFE_ATTR: ['src'] 跳过 src URI 校验
  • 主题 JSON 输出错误: 修复无效 JSON 输出(审计 H-008)
  • 配置文件读取错误: 修复 handleConfig 启发式 JSON 检测

标注

  • 标注可跳转: 新增 scrollToAnnotation() 支持同章/跨章跳转
  • 笔记来源持久化: localStorage 缓存 bookId→书名映射
  • updateBook 乐观更新顺序: 先写 DB 再改内存(审计 H-016)

⚡ 性能优化

优化项 改进幅度 说明
文件缓存 LRU 50条上限 替换无限增长数组,查找时自动提升
导入并发控制 50→3 防止导入时 OOM
搜索索引写入 即时同步 移除 setTimeout 去抖,在锁内直接写入
搜索结果上限 200条 达到后停止搜索
搜索词长度限制 200字符 防止 SQLite LIKE 性能问题
DJVU 字符串拼接 O(N²)→O(N) raw += → chars.push() + join()
toSnake Unicode 修复截断 byte(c) → b.WriteRune(c + 32)
搜索 API LIMIT 100条 防止全表扫描

🏗️ 构建与 CI/CD

  • 构建系统修复: npm run build:all = vite build → copy-frontend → wails build,前端先复制到 backend/frontend/
  • rebuild.bat: 支持 --clean,使用 wails build 后拷贝到 dist/
  • 全平台构建更新:
    • Windows x64/x86/ARM64 — 单文件便携 exe
    • macOS Intel + Apple Silicon — .dmg 打包
    • Linux amd64 (二进制+AppImage) + arm64 (二进制)
  • Release 自动发布: 推送 tag 触发,按 windows/macos/linux 文件夹组织,正文从 CHANGELOG.md 提取

🎨 UI/UX

  • SVG 应用图标: 蓝书+红X徽章,ICO/PNG 多尺寸统一
  • 书库卡片重写: 全宽布局 + 统计面板 + 操作栏
  • 系统设置增强: 缩托盘/通知/启动延迟/托盘行为
  • 分页组件增强: visiblePages/pageInfoText/pageSizeOptions
  • 专注模式滚动居中: 段落级导航,首尾自动聚焦

📋 审计报告统计

严重程度 总数 已处理
🔴 CRITICAL 16 16
🟠 HIGH 22 21
🟡 MEDIUM 32 30
🔵 LOW 32 28
⚪ INFO 22 15
总计 124 ~110

升级注意

  • v0.3.x 用户直接替换 exe 即可,数据目录自动从 %APPDATA% 迁移到 {exe_dir}/data/
  • 数据库 schema 自动迁移(v0→v2),无需手动操作
  • WebDAV 加密密钥在首次使用新版本时需重新设置密码
  • 强烈建议提前备份数据!!!防止出现未知错误!!!

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 28 Jun 06:37

X-ReaderPlus v0.3.1

格式扩展 — 新增 PRC, PDB, CHM, LIT, LRF 支持,覆盖 Z-Library 全格式。


🆕 本版亮点

📚 21 种格式全覆盖

新增 5 种格式解析支持,覆盖 Z-Library 所有常见格式:

新格式 扩展名 解析方式
PRC .prc PalmDOC 二进制解析(复用 MOBI 引擎)
PDB .pdb PalmDOC 二进制解析(复用 MOBI 引擎)
CHM .chm ITSF 格式 HTML 提取
LIT .lit OLE2 复合文档 HTML 提取
LRF .lrf BBeB XML 解析

加上原有的 EPUB, MOBI, AZW3, PDF, TXT, FB2, DJVU, DOCX, RTF, ODT, Markdown, HTML, CBZ, CBR, CBT, CB7 共 21 种格式。

🔧 其他改进

  • 修复 CI 构建流水线 (Windows NSIS + Linux AppImage)
  • 修复 Release 自动发布机制
  • 完善项目文档 6 份
  • 标注专注模式已知问题
  • 修复 clearAllHistory/clearAllStats 数据丢失风险(改用专用 DELETE 端点)
  • 修复 LIT 格式作者信息提取
  • 修复 LibraryView/TagsView 多处响应式失效
  • 修复 PinUnlockView 定时器泄漏
  • 修复笔记操作 API 错误处理与数据回滚
  • 引入 ESLint v9 代码质量检查
  • 版本号统一为 v0.3.1(安装程序/Info.plist)

⚠️ 已知问题

专注模式

专注模式为 v0.3.0 新增的实验性功能,以下问题将在后续版本中修复:

问题 影响 计划修复
状态不持久化 切换页面后自动关闭,需重新点击 🎯 图标开启 ✅ v0.3.1 已修复
无键盘快捷键 只能通过鼠标点击工具栏图标操作 ✅ v0.3.1 已修复 (Ctrl+Shift+F)
遮罩层滚动偶现偏移 快速滚动时暗色遮罩可能未对齐阅读区域 v0.3.2

其他

  • NSIS 安装程序(X-ReaderPlus-Setup-x64.exe)在某些 Windows 环境中可能无法构建,此产物在 Release 中可能缺失。Windows 用户推荐使用便携版 X-ReaderPlus-win-x64-portable.zip。
  • Linux ARM64 为无头模式(纯 CLI),需手动打开浏览器访问 http://127.0.0.1:34123。
  • macOS Intel 为无头模式(CGO 禁用构建设限),需手动打开浏览器访问 http://127.0.0.1:34123。Apple Silicon 用户推荐使用 -mac-apple.dmg。

📦 下载

我该下哪个?

你的电脑 下载这个
Windows 64 位(大多数电脑) X-ReaderPlus-win-x64 或 X-ReaderPlus-win-x64-portable.zip
Windows 32 位(老电脑) X-ReaderPlus-win-x86-portable
Windows ARM(Surface Pro X 等) X-ReaderPlus-win-arm64-portable
Mac Intel 芯片(2020 年前) X-ReaderPlus-mac-intel.dmg
Mac Apple Silicon(M1/M2/M3) X-ReaderPlus-mac-apple.dmg
Linux x86_64 X-ReaderPlus-linux-amd64
Linux ARM64(树莓派等) X-ReaderPlus-linux-arm64

不确定? Windows 用户一律推荐 X-ReaderPlus-win-x64-portable.zip,解压双击即用。Mac 用户去「关于本机」看处理器是 Intel 还是 Apple。


⚠️ 安装注意事项

Windows

  1. 便携版 (win-portable.zip):解压到任意目录(推荐 D:\X-ReaderPlus),双击 X-ReaderPlus.exe。
  2. 单文件版 (win-x64/win-x86/win-arm64):需放在包含 dist/ 目录的文件夹中(dist/ 来自解压便携版后的目录)。
  3. 如遇 Windows Defender 拦截,点击**"更多信息"→"仍要运行"**。本软件开源无毒。
  4. 不要放在系统保护目录(C:\Program Files、C:\Windows),否则无法写入数据。
  5. 首次运行自动创建数据库 %APPDATA%\x-reader-plus\X-ReaderPlus\data\。

macOS

  1. 下载后在终端执行:
    chmod +x X-ReaderPlus-mac-apple    # Apple Silicon
    chmod +x X-ReaderPlus-mac-intel    # Intel
  2. 首次运行提示"无法验证开发者"→ 系统设置 → 隐私与安全性 → 仍要打开。
  3. 需与 dist/ 目录放在同一文件夹。

Linux

  1. chmod +x X-ReaderPlus-linux-x64
    ./X-ReaderPlus-linux-x64
  2. Ubuntu/Debian 需安装依赖:
    sudo apt install libgtk-3-0 libwebkit2gtk-4.1-0
  3. 需与 dist/ 目录放在同一文件夹。

通用

  • 数据库:~/.config/x-reader-plus/X-ReaderPlus/data/ (Linux/Mac) 或 %APPDATA%\x-reader-plus\ (Win)
  • 首次启动自动创建示例书籍
  • 不要手动修改数据库文件
  • WebDAV 备份前先点击"测试连接"

📋 完整变更

详见 GitHub 提交记录。


© 2026 stop666. MIT License.

最后更新: 2026-06-28

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 28 Jun 00:37

X-ReaderPlus v0.3.0

首个 Go 架构稳定版 — 完全脱机的现代化多格式桌面阅读器。


🆕 本版亮点

🏗️ 架构重写:Rust/Tauri → Go + HTTP

编译时间从 5-10 分钟降至 <1 分钟。后端从 587 个 Rust crate 精简为 6 个 Go 包。前端不变 (Vue 3 + Vuetify 3),通过 HTTP REST API 通信。

🗄️ 3 数据库分离存储

settings.db  →  配置、主题、PIN
content.db   →  章节内容、原始文件
meta.db      →  书籍、书签、标注、回收站、历史、统计

🔍 全文搜索

跨书籍中文分词索引,实时搜索章节内容。

📝 完整标注系统

5 色高亮 + 下划线 + 笔记。跨章节管理,搜索定位。

🎯 全新专注模式

60% 不透明度遮罩覆盖阅读区,屏幕中央段落自动加粗高亮,随滚动实时追踪。

☁️ WebDAV 加密备份

文件名 URL-safe 混淆,文件内容 AES-256-GCM 加密。PBKDF2 60 万次密钥派生,密钥永不留存。换设备只需输入密码即可恢复。

📖 阅读进度记忆

临时退出自动保存章节和滚动位置。再次打开精确恢复。

🔧 60+ 项修复

  • 修复专注模式覆盖层错位
  • 修复导出功能(支持原始格式下载)
  • 修复历史/统计持久化
  • 修复批量删除计数
  • 修复章节导航滚动恢复
  • 修复页面过渡动画
  • 修复进度条百分比
  • 修复返回按钮无响应
  • 全 CSP 安全策略加固

📦 下载

我该下哪个?

你的电脑 下载这个
Windows 64 位(大多数电脑) X-ReaderPlus-win-x64
Windows 32 位(老电脑) X-ReaderPlus-win-x86
Windows ARM(Surface Pro X 等) X-ReaderPlus-win-arm64
Windows 不想折腾 → 解压即用 X-ReaderPlus-win-portable.zip
Mac Intel 芯片(2020 年前) X-ReaderPlus-mac-intel
Mac Apple Silicon(M1/M2/M3) X-ReaderPlus-mac-apple
Linux x86_64 X-ReaderPlus-linux-amd64
Linux ARM64(树莓派等) X-ReaderPlus-linux-arm64

不确定? Windows 用户一律推荐 X-ReaderPlus-win-portable.zip,解压双击即用。Mac 用户去「关于本机」看处理器是 Intel 还是 Apple。


⚠️ 安装注意事项

Windows

  1. 便携版 (win-portable.zip):解压到任意目录(推荐 D:\X-ReaderPlus),双击 X-ReaderPlus.exe。
  2. 单文件版 (win-x64/win-x86/win-arm64):需放在包含 dist/ 目录的文件夹中(dist/ 来自解压便携版后的目录)。
  3. 如遇 Windows Defender 拦截,点击**"更多信息"→"仍要运行"**。本软件开源无毒。
  4. 不要放在系统保护目录(C:\Program Files、C:\Windows),否则无法写入数据。
  5. 首次运行自动创建数据库 %APPDATA%\x-reader-plus\X-ReaderPlus\data\。

macOS

  1. 下载后在终端执行:
    chmod +x X-ReaderPlus-mac-apple    # Apple Silicon
    chmod +x X-ReaderPlus-mac-intel    # Intel
  2. 首次运行提示"无法验证开发者"→ 系统设置 → 隐私与安全性 → 仍要打开。
  3. 需与 dist/ 目录放在同一文件夹。

Linux

  1. chmod +x X-ReaderPlus-linux-x64
    ./X-ReaderPlus-linux-x64
  2. Ubuntu/Debian 需安装依赖:
    sudo apt install libgtk-3-0 libwebkit2gtk-4.1-0
  3. 需与 dist/ 目录放在同一文件夹。

通用

  • 数据库:~/.config/x-reader-plus/X-ReaderPlus/data/ (Linux/Mac) 或 %APPDATA%\x-reader-plus\ (Win)
  • 首次启动自动创建示例书籍
  • 不要手动修改数据库文件
  • WebDAV 备份前先点击"测试连接"

📋 完整变更

详见 GitHub 提交记录。


© 2026 stop666. MIT License.

X-ReaderPlus v0.2.0

Choose a tag to compare

@github-actions github-actions released this 25 Jun 08:06

X-ReaderPlus v0.2.0

Bug 修复与功能增强版本——修正 18 个问题 + 新增 PDF Canvas、CBT 漫画、EPUB 增强、全文索引、标注导出、编码增强、性能优化、快捷键全面可配。


下载

平台 文件 说明
Windows 安装版 X-ReaderPlus.Setup.0.2.0.exe 安装版,适用绝大多数 PC(x64)
Windows 便携版 x64 X-ReaderPlus-0.2.0-win.zip 解压即用,可放 U 盘
Windows 便携版 32位 X-ReaderPlus-0.2.0-ia32-win.zip 适用老电脑
Windows 便携版 ARM X-ReaderPlus-0.2.0-arm64-win.zip 适用 ARM 芯片笔记本
macOS (ARM) X-ReaderPlus-0.2.0-arm64.dmg 拖入 Applications 文件夹
Linux X-ReaderPlus-0.2.0.AppImage chmod +x 后直接运行

🔴 严重 Bug 修复

阅读时间统计修复

阅读时间被严重多计——定时器每30秒保存一次增量,退出时又保存累计值,导致45秒被记录为75秒。现已引入 lastSavedSeconds 增量追踪,每次仅保存未计入的增量部分。

漫画格式声明修正

项目曾声称支持 CBR、CBT、CB7 格式,但实际只解析成占位文本。各格式现返回明确的说明信息,解释格式限制并给出转换为 CBZ 的操作指引。

DJVU 文本解压修复

DJVU TXTz chunks 使用 DEFLATE 压缩,但解压函数直接返回原始数据。现使用浏览器内置 DecompressionStream('deflate-raw') 进行真正解压,大幅提升文本提取质量。

文件路径安全验证增强

isValidFilePath 无法拦截 C:\Windows\... 风格路径。现已增加 .. 遍历检测、绝对路径解析、C:\Windows/C:\Program Files 等系统目录拦截。

文件读取 Buffer 截断修复

file:read 和 file:readBatch 直接使用 buffer.buffer,可能包含超出实际数据的尾部垃圾。改为 buffer.buffer.slice(byteOffset, byteOffset + byteLength) 精确传输。


🆕 功能增强

EPUB 内嵌图片渲染 ✨

EPUB 章节中的 <img> 标签现在会被解析——从 EPUB zip 中提取对应图片文件,转换为 base64 data URI 内嵌到 HTML 中。封面图提取也同步修复了路径解析问题(/images/cover.jpg 这种绝对路径之前会丢失目录上下文)。

长章节懒渲染 ✨

10万字以上的长章节不再一次性渲染全部内容。使用 IntersectionObserver 监控可见区域,初始只渲染前 30 段,滚动到接近底部时自动加载下 20 段。万行章节流畅不卡。

MOBI/AZW3 编码增强

decodeAscii 替换为 decodeTextSegment——优先 UTF-8 解码,回退 GB18030(中文),最后兜底逐字节 ASCII。中文 MOBI 文件不再乱码。

PDF Canvas 逐页渲染 ✨

PDF 不再只有纯文本——使用 pdfjs-dist 将每页渲染为 PNG 图片,IntersectionObserver 按需加载可见页面。支持 500 页以内,缩放自适应屏幕清晰度。渲染失败自动回退到文本模式。

EPUB 图片渲染增强 ✨

  • SVG 支持:内嵌 <svg> 标签中的 <image> 引用自动转为 data URI
  • 路径规范化:../Images/photo.jpg 等递归相对路径正确解析
  • 封面 guide 回退:<meta name="cover"> 找不到时从 <guide> 中查找封面

全文倒排索引 ✨

新建 search-index.ts 搜索引擎——为章节内容预建倒排索引(中文逐字、英文分词),搜索从 O(n) 全文扫描优化为索引查找。500+本书库搜索秒级响应。索引在导入时自动构建,启动时异步补齐缺失。

CBZ/CBT 漫画图片翻页 ✨

CBZ(ZIP)和 CBT(TAR)漫画从压缩包中提取图片——JPG/PNG/GIF/WebP/BMP 转为 base64 逐页渲染。支持自然排序,200 张图片限制防内存溢出。CBR/CB7 提示转换方法。

标注导出 Markdown/CSV ✨

设置→数据管理中新增"导出标注"按钮。Markdown 格式按书分组含颜色标记原文笔记,CSV 格式含书名/章节/颜色/文本/笔记/日期字段。支持 Electron 保存对话框和浏览器 Blob 下载。

编码支持增强

TXT 解析器新增 ISO-2022-JP 和 EUC-TW 编码检测,覆盖更多日文和繁中老旧文本文件。

快捷键可视化面板 ✨

设置→快捷键中新增可视化总览面板——以 kbd 标签分拆展示组合键,全局快捷键(蓝色)和阅读器快捷键(紫色)分区展示。内置冲突检测,重复绑定时红色警告 + 脉冲动画。


🟠 重要改进

选中文字标注偏移量精确计算

标注偏移量之前使用 indexOf 在 HTML 文本中搜索,遇到重复文字会错位。现改用基于 Range API 的精确计算——通过 TreeWalker 遍历选区之前的文本节点累加偏移,无论相同文字出现多少次都能正确定位。

阅读计时器窗口隐藏时暂停

setInterval 在 Electron 窗口最小化时仍然运行,导致未阅读时时间也持续累积。现已监听 visibilitychange 事件,页面隐藏时暂停计时器,恢复时继续。

EPUB 封面路径解析修复

resolvePath 函数处理以 / 开头的相对路径时有 bug——直接 slice(1) 丢失了 rootDir 上下文。现改为相对于 rootDir 解析绝对路径。


🟡 其他改进

导出备份包含加密密钥

备份文件现在会保存 AES 加密密钥。换了电脑恢复备份时,之前加密的内容可以正确解密读取。

主题加载无闪烁

修复了应用启动时的主题闪烁问题。之前 watch 的 immediate: true 在数据加载前先用默认主题渲染,加载后再覆盖,产生可见闪烁。

书架页面避免重复加载

App.vue 已调用 loadAllData() 全局加载,书架页 onMounted 无需重复加载。现检查数据是否已就绪,已加载则跳过。

背景图片 URL 验证

bgImageUrl 设置现只允许 http://、https:// 和 data: URI,拒绝任意输入。

应用图标路径修复

Electron 窗口和托盘图标引用从 icon.png 修正为实际存在的 icon.svg。

日志统一

BookshelfView 和 ReaderView 中的 console.error 调用已统一替换为 logger.error。

CSP 安全增强

添加 object-src 'none' 禁用插件执行。自定义 CSS 注入过滤——移除含 url() 和 @import 的规则,防止数据外泄。

数据库 Schema 整理

移除重复的 v1 schema 定义,添加清晰的版本迁移注释,为未来 IndexedDB 升级做好准备。

书架性能优化

100+本书不再卡顿——封面自动压缩为 200×300px 缩略图(~20KB/张),50本分页加载,content-visibility 跳过屏外渲染。封面加载失败自动显示彩色占位符。

书架功能增强

  • 按章节数排序:新增"章节数 多→少 / 少→多"排序选项
  • 倒序一键切换:排序器旁新增翻转按钮,点击即反向

快捷键全面可配

所有阅读器快捷键均可自定义——章节导航、搜索、翻页不再硬编码。设置→快捷键中新增 章节开头/章节末尾 绑定项,国际标准键盘布局完全兼容。


📋 v0.2.0 审计修复(2026-06-25)

全面代码审计发现 9 个 Critical + 12 个 High 问题,均已在当前版本中修复。

🔴 严重修复

问题 文件 说明
导航阻塞 ReaderView.vue onBeforeRouteLeave 3参数签名(Vue Router 3 遗留)导致 _next 回调永不触发,返回按钮永久失效
书签/标注损坏 reader.ts loadBookmarks/loadAnnotations 赋值原始 [{id,data}] 行,未 JSON.parse(data),所有书签属性返回 undefined
封面未压缩 bookshelf.ts compressCover()(200×300 JPEG 0.6)从未调用,封面原图存储浪费空间
DB Handler 缺 safeHandler main.ts 18 个 IPC handler(bookmarks/annotations/trash/libraries)无错误包裹,DB异常→未处理 rejection
electronAPI! 无检查 3 文件 7 处 ! 非空断言无 null guard
阅读进度静默丢失 ReaderView.vue 4 处 catch {} 吞没持久化失败,无日志

🟠 重要修复

问题 说明
主进程无全局异常 添加 uncaughtException + unhandledRejection 处理器
无导航防护 添加 will-navigate 事件 + setWindowOpenHandler
workerParse 返回 any 改为 Promise<ParsedBook>
字典重复 key 合并 right/open 等 6 个多义词 duplicate key

🟡 改进

  • 46→12 个 vue-tsc 错误(剩余全为 Vuetify 组件类型兼容/Dexie 回退路径)
  • ReadingShortcuts 添加 index signature 修复快捷键索引类型
  • dev.ts 添加 Vite client 类型引用
  • 所有空 catch {} 添加注释说明

📋 v0.2.0 第二次审计修复(2026-06-25)

第二次深度审计,聚焦数据删除完整性、存储一致性、原生模块兼容性。修正 10 个问题。

🔴 严重修复

问题 文件 说明
原生模块 ABI 不匹配 main.ts / package.json 升级 Electron 31→42 后 better-sqlite3 未重建,NODE_MODULE_VERSION 不匹配导致全部数据库操作静默失败。已执行 @electron/rebuild + 添加 postinstall/rebuild 脚本
永久删除不清理关联数据 main.ts db:trash:delete 仅删回收站记录,不清理 chapters/bookmarks/annotations/CBZ 缓存。新增 db:trash:permanentDelete、db:trash:batchPermanentDelete handler,级联清理所有关联数据
导入数据静默丢失 SettingsView.vue api.lib.put(id,data) 错误传两参数给 books.insert(book) — insert 只接受单 Book 对象,第二个参数(JSON 字符串)被丢弃。导入进度条显示 100% 但数据未写入

🟠 重要修复

问题 说明
双存储数据不一致 NotesView/SettingsView 的 api.bm.put/api.ann.put 使用不存在的 put() 方法(应为 insert),?. 可选链静默回退 Dexie IndexedDB。阅读器从 SQLite 读写→书签/标注对用户不可见
db:bookmarks:getAll 缺失 书签导出/备份功能无法从 SQLite 读取,始终回退 IndexedDB。新增 handler + preload 桥接
db:trash:clear 不清理关联数据 清空回收站仅执行 DELETE FROM trash,章节/书签/标注成为孤儿数据
db:clearAll 遗留缓存 清除全部数据时不删除 CBZ 图片缓存目录

🟡 改进

  • 12→4 个 vue-tsc 错误(均为 Vuetify 组件类型兼容,不影响运行)
  • bookshelf.deleteBooks 改为乐观删除 + IPC 错误检测,避免失败时静默回退
  • TrashView 所有永久删除操作新增进度条反馈
  • ReaderView 移除重复的 teardownPdfPageObserver() 调用
  • 新增 package.json rebuild/postinstall 脚本确保原生模块自动重建

书架

  • 网格 / 列表双视图,封面尺寸三档可调
  • 拖拽批量导入,复制导入 / 文件夹引用两种模式
  • 多书库管理,全部书库聚合视图
  • 书名作者搜索、标签筛选、7 种排序方式
  • 批量选择(全选 / 反选 / 删除),删除进回收站
  • 书籍详情:评分、短评、标签编辑

阅读器

  • 16 种格式支持:EPUB / TXT / Markdown / HTML / MOBI / AZW3 / FB2 / DJVU / DOCX / RTF / ODT / PDF / CBZ
  • CBR / CBT / CB7 识别并提示转换方法
  • 分章节阅读,智能章节检测(中文 / 英文 / 序言 / 番外等)
  • 智能作者识别 + 自动标签识别
  • 章节导航:按钮 / 键盘 / 屏幕边缘点击 / 底部滑块
  • 阅读位置持久化——跨会话记忆
  • 已读章节打勾,目录面板实时标记
  • 专注模式——仅高亮当前段落
  • 排版微调:字号、行距、段距、缩进、字重、字体、边距、页宽
  • 3 种主题:明亮 / 暗黑 / 护眼,主题颜色可深度自定义
  • Ctrl+滚轮缩放,工具栏自动隐藏
  • 全文搜索、自动滚屏、虚拟滚动
  • 阅读统计浮窗

标注与笔记

  • 划词高亮(6 色)+ 划词笔记
  • 复制 / 查词典
  • 全局笔记管理——按书/关键词筛选、笔记跳转定位
  • 笔记软删除可恢复

词典

  • 书库全文搜索
  • 在线英文词典(dictionaryapi.dev)
  • 内置中英互译词典

安全

  • 完全脱机——数据 100% 本地 IndexedDB
  • PIN 码保护——SHA-256 + PBKDF2(60万次迭代)+ AES-256-GCM
  • 两级锁定策略、安全问题重置 PIN
  • HTML 净化(DOMPurify)+ 严格 CSP

桌面特性

  • 无边框自定义窗口 + 系统托盘
  • 老板键(Ctrl+B)、命令面板(Ctrl+K)
  • 开机自启 + 启动最小化到托盘
  • WebDAV 云备份、数据导出/导入

其他

  • 阅读统计、阅读历史、回收站
  • Web Worker 多线程解析
  • SHA-256 内容去重
  • 10 种编码自动检测、批量分块操作

技术栈

Vue 3 + TypeScript + Vite 6 + Electron 42 + Vuetify 3 + SQLite (better-sqlite3) + vue-i18n + Web Crypto API


作者

stop666 — 完全免费,开源(MIT),严禁倒卖。

捐赠 USDT(ETH/ERC20 / BSC/BEP20):
0xbB515f953e16f0a7b51f537BB1DAB6fbB6026533


注意

  • 不支持 DRM 保护的书籍
  • macOS 首次打开需去「系统设置 → 隐私与安全性」放行
  • Windows SmartScreen 弹窗点「更多信息 → 仍要运行」
  • Linux 需要 chmod +x 给执行权限

X-ReaderPlus v0.1.0

Choose a tag to compare

@github-actions github-actions released this 24 Jun 12:45

X-ReaderPlus v0.1.0

完全脱机的现代化多格式电子书阅读器,首个正式版本。


下载

平台 文件 说明
Windows 64位 X-ReaderPlus Setup x.x.x.exe 安装版,适用绝大多数 PC
Windows 32位 X-ReaderPlus Setup x.x.x.exe 安装版,适用老电脑
Windows ARM X-ReaderPlus Setup x.x.x.exe 安装版,适用 ARM 芯片笔记本
Windows 便携版 X-ReaderPlus-x.x.x-win.zip 解压即用,可放 U 盘
macOS X-ReaderPlus-x.x.x.dmg 拖入 Applications 文件夹
Linux X-ReaderPlus-x.x.x.AppImage chmod +x 后直接运行

功能

书架

  • 网格 / 列表双视图,封面尺寸三档可调
  • 拖拽批量导入,复制导入 / 文件夹引用两种模式
  • 多书库管理,全部书库聚合视图
  • 书名作者搜索、标签筛选、7 种排序方式
  • 批量选择(全选 / 反选 / 删除),删除进回收站
  • 书籍详情:评分、短评、标签编辑

阅读器

  • 16 种格式支持:EPUB / TXT / Markdown / HTML / MOBI / AZW3 / FB2 / DJVU / DOCX / RTF / ODT / PDF / CBR / CBZ / CBT / CB7
  • 分章节阅读,智能章节检测(中文 / 英文 / 序言 / 番外等)
  • 智能作者识别(扫描前 40 行 + 后 15 行)
  • 自动标签识别(#标签 / 标签:等格式,前 100 行)
  • 章节导航:按钮 / 键盘方向键 / 屏幕边缘点击 / 底部滑块
  • 阅读位置持久化——关闭重开回到精确位置,跨会话记忆
  • 已读章节打勾,目录面板实时标记
  • 专注模式——仅高亮当前段落,其余渐隐
  • 排版微调:字号(12-32)、行距、段距、缩进、字重、字体、边距、页宽
  • 3 种主题:明亮 / 暗黑 / 护眼,主题颜色可深度自定义
  • Ctrl+滚轮缩放,工具栏 4 秒自动隐藏
  • 全文搜索(关键词高亮 + 结果导航)
  • 自动滚屏(可调速)
  • 虚拟滚动——万行长章节流畅不卡
  • 阅读统计浮窗:阅读速度、预计剩余、全书进度

标注与笔记

  • 划词高亮(6 色:黄绿蓝红橙紫),颜色即时生效
  • 划词笔记——给选中的文字写批注
  • 复制 / 查词典(在线 + 内置 250+ 词中英互译)
  • 全局笔记管理——按书 / 关键词筛选
  • 笔记跳转定位——红色背景居中高亮原文位置
  • 笔记回收站——软删除可恢复
  • 批量选择、编辑、删除

词典

  • 书库全文搜索——标题 / 标签 / 正文 / 笔记可选范围
  • 在线英文词典(dictionaryapi.dev)
  • 内置 250+ 词中英互译词典
  • 词性彩色徽章,最近查询记录

安全

  • 完全脱机——数据 100% 存储本地 IndexedDB
  • PIN 码保护——SHA-256 + PBKDF2(60 万次迭代)+ AES-256-GCM 加密
  • 两级锁定策略——可配置错误次数和锁定时间
  • 安全问题重置 PIN
  • HTML 净化(DOMPurify)+ 严格 CSP

桌面特性

  • 无边框自定义窗口 + 系统托盘
  • 老板键(Ctrl+B)一键隐藏
  • 命令面板(Ctrl+K)全局搜索
  • 开机自启 + 启动最小化到托盘
  • WebDAV 云备份——自动备份(每天/每周/每月)
  • 数据导出 / 导入(加密备份)

其他

  • 阅读统计(藏书量、总字数、格式分布、阅读时长)
  • 阅读历史 + 已删除标记
  • 启动加载进度条
  • Web Worker 多线程解析——导入不卡 UI
  • 内容去重——SHA-256 哈希检测重复书籍
  • 10 种编码自动检测
  • 批量分块操作——删除数千本不卡

技术栈

Vue 3 + TypeScript + Vite + Electron 31 + Vuetify 3 + IndexedDB (Dexie.js) + Web Crypto API


作者

stop666 — 完全免费,开源(MIT),严禁倒卖。

捐赠 USDT(ETH/ERC20 / BSC/BEP20):
0xbB515f953e16f0a7b51f537BB1DAB6fbB6026533


注意

  • 不支持 DRM 保护的书籍
  • macOS 首次打开需去「系统设置 → 隐私与安全性」放行
  • Windows SmartScreen 弹窗点「更多信息 → 仍要运行」
  • Linux 需要 chmod +x 给执行权限