Triplit:把实时同步做成"全栈数据库",一个本地优先 TS 方案的冷热
Triplit
开源
TypeScript
实时同步
CRDT
本地优先
2026/10/2
·
阅读时间: 大约 9 分钟
Triplit:把实时同步做成”全栈数据库”,一个本地优先 TS 方案的冷热

“全栈数据库(fullstack database)“是 Triplit 给自己造的词:不是一个装在服务器上、由前端发 REST 请求调用的数据库,而是一个既能跑在浏览器里、又能跑在服务器上、两者之间自动实时同步的 TypeScript 数据层。它的目标用户很明确——本地优先(local-first)应用、实时协同、离线可用的 Web/移动 App。本文基于其 GitHub README(aspen-cloud/triplit)与 Koala 项目库条目,拆解它的设计与现实处境。
一、它解决什么痛点
传统 Web 应用的数据栈是:前端组件 → HTTP API → 业务后端 → 数据库。要做实时,得自己加 WebSocket、做增量推送、处理断线重连、写冲突合并。Triplit 的思路是把这些都下沉到”数据库”这一层:
- 前端里就有一个完整的客户端数据库(TriplitDB,可跑在 browser / node / deno / React Native),本地缓存、可离线读写;
- 一个 Node.js 同步服务器负责持久化与鉴权;
- 你在前端写一个查询,Triplit 智能地把这个查询”订阅”到服务端,结果集一变就增量推送,UI 自动更新;
- 多人同时改,用 CRDT 在属性级合并冲突;
- 乐观更新让每次点击立刻响应,失败可回滚重试。
一句话:把 Firebase/Supabase 那套实时后端,做成了一个你可以 npm 装下来、自托管的开源库。
二、技术构成(monorepo 拆包)
Triplit 是个 pnpm monorepo,各包职责清晰:
| 包 | 作用 |
|---|---|
packages/db(TriplitDB) | 核心数据库,任意 JS 环境可跑,提供”活的查询”与多写一致性 |
packages/client | 浏览器端库,对接本地与远端 TriplitDB |
packages/react / packages/svelte | 框架绑定(useQuery Hook) |
packages/server / server-core | Node 同步服务器;协议无关的 server-core 可自建服务器 |
packages/cli | triplit dev 起本地全栈开发环境(默认端口 6543)、脚手架、迁移 |
packages/console | 管理后台,查看/修改数据、管 schema |
存储层是可插拔的:SQLite、IndexedDB、LevelDB、Memory 都可作 provider。schema 用 TypeScript 代码定义(S.Schema({...})),自动产出迁移与类型提示;读写鉴权在服务端强制执行。
快速上手就是一行:npm create triplit-app@latest my-app,然后 npm run triplit dev。
三、关键能力清单(README 自述)
- 实时同步 + 属性级(property-level)冲突解决;
- 客户端本地数据库缓存,离线模式自动重连并保证一致;
- 乐观更新、失败回滚与重试;
- 关系型查询(relational querying);
- CRDT 驱动的多人协同;
- 用 delta patches 最小化网络流量;
- schema 化数据 + TypeScript 自动补全;
- 官方宣传”完全开源”。
四、口径偏差与必须泼的冷水
这一节是本文的重点,因为 Triplit 有两处方方面面的”宣传口径 vs 现实”:
- “完全开源”没错,但协议是 AGPL v3。查仓库 LICENSE 原文为 GNU AGPL v3。这意味着:你可以自由用、改、自托管;但如果你把修改后的 Triplit 作为网络服务对外提供,AGPL 要求你向所有用户开放对应源码。对想把它闭源包进自家 SaaS 的商业团队,AGPL 是传染性很强的 copyleft——“fully open-source”不等于”可以随便商用闭源”。选它之前法务要过一遍。
- 官网现状:域名已停放。截至本文调研(2026 年 10 月),直接访问
https://www.triplit.dev/返回的是一个”购买该域名”的停放页(见下图),而 README 与文档链接仍指向该域名。GitHub 仓库本身还在、README 仍可读,但项目官方在线门户的消失是一个明确的维护信号——在把它纳入生产路线前,建议先查仓库近期 commit 频率与 issue 响应,判断项目是否仍在活跃维护。 - CRDT = 最终一致,不是强一致。属性级冲突合并适合待办文档、协同编辑这类场景;对”余额不能双花”这类约束,CRDT 给不了事务隔离。它的定位是 local-first 应用数据库,不是 OLTP 真相源。
- “低延迟/最小流量”无数字。README 称 delta patches 省流量,但没有任何吞吐、时延、客户端存储占用的基准。
- Node 同步服务器不是久经考验的存储引擎。它的持久层是可插拔 SQLite 等,自身更像”同步协议 + 数据管理”,大规模生产要自行评估server 的水平扩展能力。

五、优势与局限
优势:
- DX 极其顺手:TS schema + React Hook,前端几乎不用写同步胶水代码;
- 离线优先开箱即用:断线重连、乐观更新、冲突合并全包;
- 自托管友好:可插拔存储,不绑定某家云;
- 客户端即数据库,复杂关系查询在本地也能跑。
局限:
- AGPL v3 对闭源商用不友好;
- 官方门户域名已停放,项目活跃度需自行核实;
- 最终一致模型不适合强事务场景;
- 无公开性能基准;
- 生态(相比 Firebase/Supabase)年轻,踩坑资料少。
六、谁该关注
- 本地优先 / 协同编辑 / 离线 App 的原型团队:它的能力组合几乎是为此量身定做;
- 愿意读源码、自托管的 TS 全栈:monorepo 结构清晰,可改造;
- 想闭源 SaaS 直接套壳的团队:先解决 AGPL 合规,或另选 Apache/MIT 协议方案;
- 看重厂商存续的生产决策者:在官网停放的当下,建议把 Triplit 当”可借鉴的架构参考”而非”压注的底座”,持续观察仓库活跃度。