深入ReadAny架构:Tauri+React19+SQLite技术栈全解,本地优先设计哲学

发布时间:2026/10/2 12:51:42
深入ReadAny架构:Tauri+React19+SQLite技术栈全解,本地优先设计哲学 深入ReadAny架构TauriReact19SQLite技术栈全解本地优先设计哲学【免费下载链接】ReadAnyAI-powered cross-platform e-book reader with semantic search, RAG chat, local vector store, notes, TTS, and WebDAV sync.项目地址: https://gitcode.com/gh_mirrors/re/ReadAnyReadAny 是一款 AI 驱动的跨平台电子书阅读器核心特性包括语义搜索、RAG 智能问答、本地向量库、读书笔记、TTS 朗读和多后端 WebDAV 同步。它的桌面端基于 Tauri 2 React 19 构建数据层全面采用 SQLite践行本地优先Local-First的设计哲学——所有书籍、笔记、向量索引都保存在你自己的设备上。本文带你从整体架构到关键模块完整拆解这套技术栈的设计思路。一、Monorepo 布局一个仓库多端覆盖ReadAny 使用 pnpm workspaces 管理多个子包工作区配置在 pnpm-workspace.yaml 中子包作用技术栈packages/app桌面/网页应用Tauri 2 React 19 Vite 7packages/app-expo移动端应用React Native Expopackages/core跨端共享核心库纯 TypeScriptpackages/cli命令行工具TypeScriptfoliate-js电子书解析引擎JavaScriptwebsite官网与文档Astro这种共享核心 薄平台层的结构是理解整个架构的钥匙业务逻辑RAG、同步、统计、TTS都写在packages/core里桌面端和移动端只是它上面的壳。二、前端层React 19 Zustand Tailwind 4桌面端前端位于 packages/app/关键依赖可以从 packages/app/package.json 一目了然React 19 react-router 7组件与路由页面包括书架、阅读器、聊天、笔记、统计等Zustand 5轻量状态管理如 reader-store.ts、tts-store.ts状态还能持久化到本地Tailwind CSS 4 Radix UI样式与无头组件保证跨平台视觉一致性foliate-jsworkspace 内部包负责 EPUB/PDF 等格式的章节解析与翻页渲染i18next84 个语言文件界面多语言全覆盖。前端只负责展示与交互不直接碰文件系统——一切磁盘操作都交给 Tauri 命令或 core 库的平台抽象层。三、桌面端Tauri 2 用 Rust 守住系统边界Tauri 的 Rust 侧代码在 packages/app/src-tauri/依赖清单见 Cargo.toml。入口 lib.rs 只注册了 10 个左右命令职责非常克制SQLite 初始化应用启动时由 db/mod.rs 同步创建readany.db向量库命令vector_insert、vector_search、vector_rebuild等由 vector/mod.rs 实现同步命令sync_vacuum_into数据库快照、sync_hash_file文件哈希比对LAN 服务器基于 axum 的局域网同步服务sync/lan_server.rs。为什么不让 JS 直接干这些因为涉及原生扩展加载sqlite-vec、WAL 模式管理、多线程文件 IORust 既安全又高效。Tauri 2 的插件机制sql、fs、http、updater、window-state则把常用能力标准化了前端一行invoke即可调用。四、SQLite 数据层一个文件承载全部数据ReadAny 把所有结构化数据——书籍元数据、书签、高亮、笔记、聊天记录、阅读时长——都放进单个readany.db文件。数据库访问层在 packages/core/src/db/db-core.ts几个值得注意的工程细节WAL 模式 合理 PRAGMAjournal_mode WAL、synchronous NORMAL、busy_timeout 15000让读写并发更稳数据根目录可配置桌面端支持通过desktop-data-root.json自定义数据位置方便迁移与备份版本化迁移migrations.ts 按版本号增量升级表结构平台抽象桌面走 Tauri 的 sqlite 插件移动端走 SQLite 模块上层查询代码如 book-queries.ts完全共享。单文件数据库带来的直接好处备份 复制一个文件迁移 拷贝到另一台机器。这正是本地优先哲学的落地方式。五、本地向量库sqlite-vec 让 RAG 离线可用AI 问答的检索侧完全在本地完成链路是章节文本 → 分块(chunker) → 向量化(embedding) → sqlite-vec 存储 → 语义检索 → 拼装上下文 → LLM 回答向量化双模式vectorize-trigger.ts 支持内置模型Transformers.js 跑在 Web Worker 中完全离线和远程 OpenAI 兼容 API 两种模式向量存储vector/mod.rs 用 rusqlite 加载 sqlite-vec 扩展把向量存进vec0虚拟表默认维度 384与业务数据同库管理LLM 侧core 库通过 LangChain 接入多家服务商OpenAI、Anthropic、Google、DeepSeek 等密钥只存在本地设置里。也就是说检索不上传原文只有你主动提问时相关片段才会发给大模型。隐私与体验在这里达成了平衡。六、多后端同步数据在自己手里同步方式随你选同步代码集中在 packages/core/src/sync/提供多种后端WebDAV任何个人网盘/NAS 都可用S3 兼容Cloudflare R2、阿里云 OSS、MinIO 等s3-backend.ts局域网直连扫码 6 位配对码连接另一台 ReadAny设计细节见 docs/sync-design.md。数据库同步采用 SQLite 原生的VACUUM INTO做一致性快照书籍文件则靠哈希比对判断同步方向冲突策略简单明确。没有强制账号体系同步目标由用户自己的存储决定。七、为什么坚持本地优先把 ReadAny 的架构决策串起来看动机非常清晰本地优先原则在 ReadAny 中的体现数据主权readany.db 书籍文件全在本机备份一个目录即可离线可用阅读、笔记、语义搜索、内置向量化全程无需网络隐私默认RAG 检索在本地默认不向第三方上传书的内容可替换后端LLM、Embedding、同步存储均可自由切换或自建网络能力AI 问答、云端 Embedding、云同步只是增强项而不是必需品——这是它与 SaaS 阅读器最本质的区别。八、总结一张图看懂技术栈表现层React 19桌面/ React Native移动端共享 Zustand 状态与 i18n系统层Tauri 2 Rust暴露最小化的命令接口数据层SQLiteWAL承载业务数据sqlite-vec 承载向量索引智能层core 库的 RAG 管线 LangChain 多模型适配同步层WebDAV / S3 / LAN 多后端快照 哈希的简单可靠策略。如果你想亲自验证只需 clone 仓库git clone https://gitcode.com/gh_mirrors/re/ReadAny然后用 pnpm 安装依赖运行tauri dev即可在本地跑起这个数据全部属于自己的 AI 阅读器。从 packages/core/ 的 RAG 模块到 packages/app/src-tauri/ 的 Rust 实现每一层都短小可读是很好的本地优先应用架构学习样本。【免费下载链接】ReadAnyAI-powered cross-platform e-book reader with semantic search, RAG chat, local vector store, notes, TTS, and WebDAV sync.项目地址: https://gitcode.com/gh_mirrors/re/ReadAny创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考