通过脚本注入方式增强官方 Web 端体验,完全兼容官方功能的同时提供更好的桌面体验
|
安装包仅 ~5MB |
基于 Rust + Tauri v2 构建 |
完全开源 |
✓ macOS 原生菜单栏 ✓ 窗口位置/大小记忆
✓ 完整键盘快捷键 ✓ 恢复最后阅读页面
✓ 多显示器支持 ✓ 一键移动窗口
|
🎨 界面优化
|
⌨ 翻页控制
|
全新可插拔式插件系统,支持第三方适配器与自定义脚本
✓ 支持 .atrd 插件包安装/卸载 ✓ 微信读书作为内置默认插件
✓ 标准化插件开发接口 ✓ 内置本地阅读(EPUB/TXT)插件
✓ 插件级命名空间隔离 ✓ 配置命名空间与独立阅读位置
内置插件开发工具,无需外部 IDE 即可创建和编辑插件
|
📝 表单式配置
|
💻 代码编辑
|
路径: 设置 → 插件管理 → 新建插件
以插件为数据源的多站点阅读器,一个壳切换多个书城
✓ 外部插件运行时加载 ✓「书店」菜单站内切换 + 当前站对勾
✓ 每个书店独立记住阅读进度 ✓ 卸载重装进度自动接回
✓ macOS 拦第三方追踪域名 ✓ 番茄小说官方插件内置支持
内置「本地书屋」:TXT / EPUB 开箱即读,文件不出本机
✓ TXT 中文章节智能切分 ✓ EPUB 多级目录折叠导航
✓ 双栏/单列切换与排版自定义 ✓ 阅读进度与章节位置记忆
✓ 深浅主题自由切换 ✓ 沙箱渲染,禁用书籍内脚本
✓ 拖拽 TXT/EPUB 到窗口直接打开 ✓ EPUB 注册系统文件关联,双击即读
- ✅ 启动后自动检测更新
- 📥 一键下载安装
- 🔔 新版本通知
前往 Releases 页面 下载最新版本:
| 平台 / 芯片 | 下载文件 |
|---|---|
| 🍎 macOS Apple Silicon (M1/M2/M3/M4) | weixin-reader-x.x.x-macos-aarch64.dmg |
| 💻 macOS Intel | weixin-reader-x.x.x-macos-x86_64.dmg |
| 🪟 Windows x64 (Intel/AMD) | weixin-reader-x.x.x-windows-x86_64-setup.exe |
| 🪟 Windows ARM64 (Snapdragon X) | weixin-reader-x.x.x-windows-aarch64-setup.exe |
正式版本通过 GitHub Actions 原生 runner 构建 x64 和 ARM64 两个 NSIS 安装包。需要自行打包的 Windows 开发者,在对应架构的 Windows 环境运行:
bun install --frozen-lockfile
# x64(Intel/AMD)
bun run tauri build --bundles nsis --target x86_64-pc-windows-msvc -- --locked
# ARM64(Snapdragon X 等)
bun run tauri build --bundles nsis --target aarch64-pc-windows-msvc -- --lockedgit clone https://github.com/dengcb/weixin-reader-desktop.git
cd weixin-reader-desktop
bun install# 🚀 启动开发模式(热重载 + 自动同步版本)
bun start
# 🔨 构建注入脚本
bun run build:inject
# 📦 完整构建
bun run buildbun run debug # 快速调试(ARM)
bun run debug:arm # Apple Silicon
bun run debug:intel # Intelbun run release:all # 正式构建 macOS ARM + Intel,生成发布元数据
bun run release:upload # 创建 tag/draft、上传 macOS、触发 Windows x64 + ARM64 workflow
bun run release:status # 查看 Windows workflow、资产、SHA-256 和 Authenticode
bun run release:publish # 校验全部平台、生成 latest.json、输入完整 tag 后发布
bun run release:arm # 单架构诊断构建,不能直接正式上传
bun run release:intel # 单架构诊断构建,不能直接正式上传
bun run release:clear # 清理本地发布文件bun test # TypeScript 前端
cargo test --lib --manifest-path src-tauri/Cargo.toml # Rust 后端(Windows:--lib 必需,dev 全目标有已知 LNK1241,见 test/README.md)CI 在每次 push 时自动执行完整的质量门禁(typecheck + test + build + IPC 检查 + inject.js 一致性校验)。
| 层级 | 技术 | 说明 |
|---|---|---|
| 前端 | TypeScript + Bun | 注入脚本开发、打包与 DOM 测试 |
| 后端 | Rust + Tauri v2 | 原生桌面能力与系统集成 |
| 构建 | Bun | 极速包管理与脚本执行 |
| 测试 | Cargo + Bun Test | Rust、Bun DOM 与 Playwright 三层回归 |
┌──────────────────────────────────────────────────────────┐
│ Tauri 应用 │
├──────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ IPC ┌─────────────────┐ │
│ │ │◄──────────────────►│ │ │
│ │ Rust 后端 │ │ WebView 前端 │ │
│ │ │ │ │ │
│ │ • 原生菜单 │ │ • inject.js │ │
│ │ • 设置仓储 │ │ • AppRuntime │ │
│ │ • 多显示器 │ │ • 状态同步 │ │
│ │ • 自动更新 │ │ │ │
│ │ │ │ │ │
│ └─────────────┘ └────────┬────────┘ │
│ │ │
└──────────────────────────────────────────────│──────────┘
│
┌────────────────▼──────────────┐
│ 当前匹配的阅读网站(WeRead / 插件)│
└───────────────────────────────┘
inject.ts 只负责防重复注入并创建 AppRuntime。AppRuntime 是注入层唯一生命周期所有者,依次初始化设置、注册/加载插件、应用站点缩放、创建 Managers、监听插件热重载;页面销毁时按逆序释放资源。
站点能力统一为 ReaderSiteRuntime:微信读书通过桥接器委托给既有 WeReadAdapter,外部插件通过包装器接入。PluginRegistry / PluginLoader 是唯一站点来源,所有 Manager 只能经 SiteContext 获取当前运行时。
位于 src/scripts/managers/ 目录:
| 管理器 | 核心职责 |
|---|---|
IPCManager |
🎯 发布初始及后续路由、章节和标题状态 |
AppManager |
🚀 恢复当前 URL 滚动位置,处理离开阅读页时的状态收口 |
MenuManager |
📋 菜单状态同步,处理菜单动作 |
StyleManager |
🎨 宽屏模式,隐藏工具栏,样式注入 |
ThemeManager |
🌓 深色模式与外部链接处理 |
TurnerManager |
📖 翻页控制器(含子模块:自动翻页、滑动翻页、鼠标隐藏) |
RemoteManager |
🎮 遥控器与键盘输入,统一发布翻页方向事件 |
核心层还包括:
AppRuntime:初始化、热重载和逆序销毁。PluginRegistry/PluginLoader:唯一站点注册与生命周期入口。SiteContext:当前ReaderSiteRuntime与可重启的双栏观察器。SettingsStore:前端合并视图、串行 patch、订阅与冲突重试;不直接读写文件。EventBus/BaseManager:有限状态历史和资源自动清理;瞬时翻页事件不保留历史。
位于 src-tauri/src/ 目录:
| 模块 | 核心职责 |
|---|---|
lib.rs |
🎯 应用入口,插件初始化,脚本注入 |
commands.rs |
🔌 IPC 命令定义(前后端通信接口) |
menu.rs |
📋 原生菜单构建,事件处理,多站点「书店」切换 |
sites.rs |
🏪 站点首页 URL 解析(内置 + 外部插件) |
tracker_blocker.rs |
🚫 macOS 原生拦截第三方追踪域名(不拦网站自有代码) |
monitor.rs |
🖥 多显示器支持,事件驱动检测 |
plugin_manager.rs |
🔌 插件校验、安装、卸载与运行时代码读取 |
settings.rs |
💾 schema v2 设置仓储、版本 patch、统一锁与原子替换 |
reading_progress.rs |
📍 按站点/URL 独立保存滚动位置,每站点最多 10,000 条 |
update.rs |
🔄 自动更新检查与安装 |
tauri-plugin-opener → 外部链接处理
tauri-plugin-dialog → 插件选择、导出与原生确认对话框
tauri-plugin-window-state → 各窗口位置与尺寸持久化
tauri-plugin-log → 2 MiB 单文件、最多 3 份日志
tauri-plugin-updater → GitHub Release 更新检查、下载与重启安装
- 🔌 第三方插件开发指南 - Manifest、自声明规范、代码与样式组织、构建测试和社区验收
- 🏗 插件与站点架构 -
ReaderSiteRuntime、插件运行时与开发约束 - 🔁 事件与生命周期 - EventBus、BaseManager 与资源清理规范
- 🔐 Tauri 2.11 与 IPC - Capability 拆分和命令一致性规则
- 🧪 测试指南 - 当前测试结构与必要质量门禁
- ✍️ 软件签名 - Windows 签名角色、来源与发布约束
- 📘 2026 架构重构记录 - 本次重构的动机、改动和兼容边界
本项目仅为个人学习和使用的第三方客户端,与腾讯公司及微信读书团队、字节跳动公司及番茄小说团队均无任何关联
|
无隐私收集 |
网页内容由官方站点直接加载 |
仅供学习交流 |
Windows 代码签名由 SignPath Foundation 免费提供 —— 感谢他们为开源项目消除 SmartScreen "未知发布者" 警告。
本地 EPUB 阅读使用 foliate-js 核心模块,采用 MIT License。第三方许可见 THIRD-PARTY-NOTICES.md。
MIT License © 2026
Built with ❤ using Rust & Tauri
如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!
