SQLite 负责落盘、索引、事务与查询执行。
RxJS 把查询结果、实体变更和副作用汇成同一条数据流。
实体元数据统一定义字段、关系、查询构造与生成代码的边界。
分支、同步与撤销重做建立在本地数据版本之上,按需启用。
UI、业务规则、查询与持久化在浏览器内执行;远端负责交换变更,不接管每一次本地读写。
界面、领域逻辑、查询与事务在浏览器内运行。离线时继续读写,联网后再按需同步。
页面、表单与详情视图直接消费本地查询结果,常用读写无需等待网络往返。
实体规则、关系约束、查询构造与副作用在浏览器里闭环执行。
SQLite + OPFS 负责事务、索引、查询执行与持久化。
把本地提交、分支状态和需要共享的数据推到远端。
拉取远端变更,并合并到本地数据流。
远端充当共享存储或同步中继点,负责交换版本与变更,不替浏览器执行业务主流程。
每一层都服务于同一个目标——让数据应用真正跑在浏览器里
提供事务、索引与 SQL 查询,适合多数浏览器端结构化数据场景。
在浏览器内提供 PostgreSQL 兼容能力,适合复杂查询与扩展需求。
约束模型定义、生成代码与消费端 API,在编译期暴露类型错误。
用 Observable 连接查询结果、变更事件与副作用,构成统一的响应式数据流。
浏览器支持时使用 OPFS 持久化文件,不支持时选择其他 VFS。
基于 TypeScript AST,将实体元数据转换为类型、查询构建器与框架适配代码。
以下能力都可以在文档、demo 和源码里直接验证
用元数据描述实体,并从模型推导查询、表单与类型约束。
三个框架共享模型与查询语义,各自保留符合框架习惯的 UI 绑定 API。
从模型定义生成类型与辅助代码,减少重复实现。
通过浏览器内数据库、Worker 与查询缓存划分计算和持久化职责。
当前已验证版本分支、撤销重做、条件同步与跨 Tab 同步。
从模型定义到界面订阅,每一步都有明确输入与输出
const TodoEntity: EntityMetadataOptions = {
name: 'Todo',
displayName: 'Todo',
repository: 'Repository',
extends: ['EntityBase'],
properties: [
{ name: 'title', type: PropertyType.string },
{ name: 'completed', type: PropertyType.boolean, default: false },
{ name: 'createdAt', type: PropertyType.date }
]
};
nx run rxdb-client-generator:generate
# 输出内容包括:
# - 实体类型定义
# - CRUD 与查询辅助代码
# - 框架集成封装
# - 关系映射与表单支持
Todo.find({
where: {
combinator: 'and',
rules: [{ field: 'completed', operator: '=', value: false }]
}
}).subscribe(todos => {
console.log('未完成任务:', todos);
});
const { value: todos } =
useFind(Todo, { where: {...} });
const { value: todos } =
useFind(Todo, { where: {...} });
const { value: todos } =
useFind(Todo, { where: {...} });
先通过在线演示观察查询、关系与写入如何落地,再结合文档评估存储、框架绑定与同步边界。