首页 › weekly › 本地优先:7个离线同步开源引擎

本地优先:7个离线同步开源引擎

本期发掘思路

前几轮我们挖过终端工具、自托管应用和变现基建,这一期换个完全不同的角度:Local-First(本地优先)开发者技术栈。它是过去两年悄然成型的基建浪潮——应用先把数据存在用户设备本地,再用 CRDT(无冲突复制数据类型)等算法在后台异步同步,网络断了照常用,数据主权还给用户。Figma、Notion 的丝滑离线体验背后正是这套思路,而它的大部分积木如今都是开源的。

这一期从同步内核、同步引擎、隐私数据库到应用平台,拆出一条完整的「本地优先」选型链路。7 个仓库里有 Star 上万的顶梁柱,也有不到 2000 星的小而美遗珠。

说明:文中 Star 数为成文时的约数,仓库活跃度与最新数据请以 GitHub 页面为准。


1. yjs —— CRDT 界的事实标准

仓库:yjs/yjs | Star 约 1.7 万+ | 长期活跃维护

一句话定位:想在你的编辑器里加上「多人同时编辑不打架」的能力,Yjs 就是那个几乎绕不开的地基。它解决的是协同编辑中最疼的问题:两个人同时改同一段文字,合并结果必须天然正确,不需要中心服务器仲裁。

核心拆解:Yjs 是一个高性能 CRDT 实现,数据模型有 Y.Text、Y.Map、Y.Array 三大类,任意嵌套就能表达文档、画布、表格等复杂结构。它的杀手锏是生态:y-websocket、y-webrtc 开箱即用地搭同步层,y-prosemirror、y-codemirror、y-monaco 让主流编辑器几行代码变协作版,还有 y-indexeddb 做本地持久化。JupyterLab 的官方实时协作、AFFiNE 等知名产品都构建在它之上。纯 JavaScript 实现,也支持通过 WASM 借力 y-crdt(Rust 移植版)。

上手难度:⭐⭐⭐(CRDT 心智模型需要一点时间,API 本身很友好)

适用人群:做协同文档、白板、表单类产品的前端与全栈开发者。变现方向:基于 Yjs 做垂直场景 SaaS(合同协同、教案协作),或者给企业做私有化实时协作中间件——需求真实且付费意愿强。


2. Automerge —— 本地优先理论的正统嫡系

仓库:automerge/automerge | Star 约 5k | 持续迭代

一句话定位:2019 年 Ink & Switch 实验室那篇《Local-first software》论文是整个思潮的宣言书,而 Automerge 就是论文的官方落地实现,血统最正。

核心拆解:Automerge 把一个 JSON 文档变成可以多端并发修改、最终一致收敛的对象——改动就像 git commit 一样被完整记录,任意两个副本交换历史后自动合并。2.0 版把核心重写为 Rust,性能有了数量级的提升,上层 automerge-repo 提供 DocHandle 抽象:你像操作本地对象一样改文档,存储、网络同步、状态管理全被接管。它对改动历史完整保留的设计,让撤销、审计、离线合并这些需求几乎免费获得。代价是内存占用和包体积比 Yjs 略高,文档型以外的场景要自己权衡。

上手难度:⭐⭐(automerge-repo 的 API 面向对象式操作,入门曲线平缓)

适用人群:研究型工程师、想彻底理解 CRDT 原理的人、需要在应用内嵌完整编辑历史的团队。二开方向:把 Automerge 嵌进 IoT/边缘设备的配置同步,或者做「自带版本历史」的即时存档类工具。


3. Loro —— 新一代 Rust CRDT,移动端玩家的心头好

仓库:loro-dev/loro | Star 约 4k(增速可观)| 高频更新

一句话定位:如果 Yjs 和 Automerge 是上一代的答案,Loro 就是这一代社区对「更全、更快、更移动端友好」的重新作答。它是一个 Rust 编写、全平台绑定的 CRDT 库,2024 年起在 Hacker News 反复刷屏。

核心拆解:Loro 的野心是把 CRDT 该有的数据结构一次配齐:文本(含 Peritext 富文本格式)、列表、可移动列表、Map、树结构都有,而且各容器可独立导入导出,大型文档只同步变更的部分。几个亮点值得点名:浅快照(Shallow Snapshot)让新设备加入时不必重放全部历史,秒级初始化;Ephemeral Store 专门处理光标位置、在线状态这类「不需要持久化」的瞬态消息;事件系统与 Undo 能力原生内置。WASM 绑定让浏览器、Swift/Kotlin 移动端都能用同一套内核。

上手难度:⭐⭐(文档质量高,TypeScript API 设计克制)

适用人群:做移动端离线应用、绘画/笔记类 App 的团队,以及对同步性能有极致要求的场景。变现思路:以 Loro 为内核做本地优先笔记或白板产品,性能就是差异化卖点;也可提供移动端集成的商业支持。

小选型参考:三者同属 CRDT 内核——Yjs 胜在生态成熟、编辑器集成最多;Automerge 胜在血统与历史语义完整;Loro 胜在结构全面与移动端性能。新项目选型建议先跑官方 benchmark 对着自己的数据形态测一遍。


4. ElectricSQL —— 把 Postgres 直接同步进浏览器

仓库:electric-sql/electric | Star 近万(增长迅猛)| 活跃

一句话定位:CRDT 库解决的是「端与端」的同步,Electric 解决的是「数据库与端」的同步:把 Postgres 里的数据切片成只读数据集,实时推送到成千上万个前端客户端,网络断了就攒着,恢复后续传。

核心拆解:架构上是一个 Rust 写的同步服务,部署在你的 Postgres 前面。你用 Shapes(数据形状)声明式地订阅,比如「user_id=42 的所有未完成工单」,Electric 监听 Postgres 逻辑复制流,把符合形状的数据变更编译成增量日志推给客户端。前端侧官方提供了 TanStack DB、 Dexie、SQLite 等一整套写入器,数据落到本地后查询和普通本地数据库无异。对管理系统、工单、看板这类「读多写少」的企业应用,它能砍掉绝大部分手写的 API 和 loading 状态——前端直接消费一份始终新鲜的本地数据副本。

上手难度:⭐⭐⭐(需要自部署同步服务,理解 Shape 的数据建模)

适用人群:被 REST API 胶水代码折磨的后端转全栈、企业内部工具团队。商业潜力明显:企业数据实时同步是典型的「愿意付费换省心」场景,围绕它做托管部署或行业模板都有空间。


5. RxDB —— 离线优先数据库的变现教科书

仓库:pubkey/rxdb | Star 约 2.2 万 | 长期高频更新

一句话定位:JavaScript 生态里资历最老的离线优先响应式数据库之一:数据存在用户设备上,界面订阅查询、数据一变视图自动更新,多端之间通过复制协议保持一致。

核心拆解:RxDB 的设计非常「前端友好」:用 JSON Schema 建模,Collection + Query 的心智模型接近 MongoDB,底层存储引擎可插拔——浏览器 IndexedDB、Electron、React Native、Node 各有对应实现,甚至可以换成 SQLite。它真正强大的地方是复制协议生态:官方提供与 CouchDB、GraphQL 后端、WebRTC P2P 的复制器,还有带冲突处理的 CRDT 插件,自定义协议也有清晰的接口。订阅式查询配合 RxJS,让「本地数据驱动 UI」这件事变成了默认姿势。

上手难度:⭐⭐(熟悉 Schema 和响应式编程即可,文档细致)

适用人群:需要在弱网环境稳定工作的应用——销售外勤、仓储盘点、医疗记录、飞行模式下的工具类 App。它同时是本期最值得研究的商业化样本:核心开源、高级插件与专业版收费的模式已跑通多年,想开源变现的作者可以逐帧研究它的定价与功能切分。


6. Evolu —— 小而美的端到端加密本地优先后端

仓库:evoluhq/evolu | Star 约 1.3k | 持续维护

一句话定位:一个把「隐私」焊死在架构里的本地优先数据库工具:数据只存在用户设备和其自有云端存储里,服务器只能看到加密后的乱码,连运营商都无法偷看。

核心拆解:Evolu 的思路极简而优雅——本地用 WASM 版 SQLite 存数据,同步层只传输加密过的消息,任何一台便宜的无状态服务器都能当中继,因为密钥永远不离开用户设备。密钥与账号体系用 Passkey 管理,换设备时凭生物识别就能恢复数据,不需要传统密码。对 React 开发者体验极佳:useQuery、useMutation 两个 Hook 就完成本地读写与自动同步,Schema 校验直接复用 Schema 库生态。支持 Web 与 React Native/Expo。代码量不大,读源码就能看懂全链路,非常适合作为「本地优先 + E2EE」的教学样本。

上手难度:⭐⭐(React 优先,加密细节被封装得很好)

适用人群:做日记、健康记录、密码簿、心理测评等隐私敏感小工具的独立开发者。这是本期最典型的「小而美」:星不高,但踩在「用户开始认真关心数据归属」的趋势点上。二开方向:面向医疗、心理咨询等合规行业的加密同步托管服务。


7. DXOS —— 不止同步,是一整套本地优先应用平台

仓库:dxos/dxos | Star 约 2k 上下 | 活跃开发

一句话定位:前面六个是单点工具,DXOS 想给你的是全家桶:身份、数据、网络三层齐备的本地优先应用操作系统,官方用它打造了协作工具 Composer 作为参考实现。

核心拆解:DXOS 架构分三层——Halo 负责去中心化身份与设备管理(设备间互信配对);ECHO 是对象数据库,底层基于 Automerge,多端数据自动收敛;Mesh 处理节点发现与 P2P 网络传输。开发者在其上用 React SDK 声明 Schema、订阅空间(Space)内的对象,就能得到多设备、多用户的协作应用,服务器可以退化成一个不太可靠的消息搬运工。Composer 展示了最终形态:本地优先的 Notion 式大纲与画布,掉网照样编辑,设备间无缝漫游。

上手难度:⭐⭐⭐⭐(平台化意味着概念更多:Space、Identity、Agent 都要理解)

适用人群:想直接造「本地优先版 Notion/Figma」的团队、对数据主权产品有执念的创业者。学习价值大于拿来即用:把它的分层设计吃透,即便最终只用其中一层,也物超所值。


本期横向对比

仓库 定位 类型 Star(约) 上手难度 典型场景
yjs CRDT 内核,生态最全 库 1.7 万+ ⭐⭐⭐ 协同编辑器、白板
automerge 正统 CRDT,历史完整 库 5k ⭐⭐ 需要完整编辑历史的应用
loro 新一代 Rust CRDT 库 4k ⭐⭐ 移动端离线应用
electric Postgres 读路径同步 同步引擎 近万 ⭐⭐⭐ 企业工具、实时看板
rxdb 离线优先响应式数据库 数据库 2.2 万 ⭐⭐ 弱网行业应用
evolu E2EE 本地优先后端 数据库+框架 1.3k ⭐⭐ 隐私敏感小工具
dxos 本地优先应用平台 全栈框架 2k ⭐⭐⭐⭐ 本地优先协作产品

全景图

mindmap
  root((本地优先技术栈))
    CRDT 内核
      Yjs 生态最全
      Automerge 历史完整
      Loro 移动端性能
    数据同步
      ElectricSQL
        Postgres 读路径
      RxDB
        多种复制协议
    隐私优先
      Evolu
        端到端加密
        Passkey 恢复
    应用平台
      DXOS
        ECHO 对象数据库
        Composer 参考应用
    落地场景
      协同编辑器
      弱网行业应用
      隐私合规工具

本期之最

最值得立即尝试:yjs。 一个下午就能给现有编辑器加上实时协作,官方文档与示例覆盖了所有主流编辑器,是理解本地优先的最佳第一课。

最有商业潜力:ElectricSQL。 企业应用对「数据实时到达客户端」的需求刚性且预算充足,它的 Shape 模型把后端工作量压缩了一个量级,围绕它做行业解决方案或托管服务都有清晰的付费路径。

最被低估:Evolu。 Star 数不显眼,但「服务器只见乱码」的架构设计在同体量项目里几乎绝无仅有。隐私合规市场正在变大,它很可能成为大量敏感数据小应用的隐形地基。

参考来源

  1. Local-first software — Ink & Switch — 本地优先思潮的起源论文,Automerge 同源出品
  2. Yjs 官方文档 — CRDT 数据类型与编辑器绑定接入指南
  3. Automerge 官网 — automerge-repo 架构说明与 2.0 Rust 内核文档
  4. ElectricSQL 官网 — Shapes 读路径同步模型与部署文档
  5. RxDB 官方文档 — 存储引擎、复制协议与商业化插件说明
  6. DXOS 官网 — Halo、ECHO、Mesh 三层架构文档与 Composer 案例

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入