SQLite 负责落盘、索引、事务与查询执行。
RxJS 把查询结果、实体变更和副作用汇成同一条数据流。
实体元数据统一定义字段、关系、查询构造与生成代码的边界。
分支、同步与撤销重做构建在本地数据版本之上,按需叠加。
UI、业务规则、查询和本地持久化先在浏览器里闭环执行。远端只负责交换版本,不接管每一次读写。
界面、领域逻辑、查询与事务都在浏览器里闭环运行。离线照常可用,联网再按需同步。
页面状态、表单和详情页直接消费本地查询结果,不必为每次读写等接口往返。
实体规则、关系约束、查询构造与副作用在浏览器里闭环执行。
SQLite + OPFS 负责事务、索引、查询执行与持久化。
把本地提交、分支状态和需要共享的数据推到远端。
拉回远端最新变更,合并到本地数据流。
远端更像共享仓库或同步中继点,负责交换版本与变更,不替浏览器执行业务主流程。
每一层都服务于同一个目标——让数据应用真正跑在浏览器里
轻量、稳定、久经验证,覆盖大多数浏览器端结构化数据场景。
在浏览器里提供接近 PostgreSQL 的能力,胜任复杂查询与扩展需求。
让模型定义、生成代码和消费端 API 始终对齐,把错误挡在编译期。
查询结果、变更事件、副作用共用一条响应式主线——是系统骨架,不是可选配件。
支持时用 OPFS 获得更可靠的本地文件持久化,不支持时自动回退其他 VFS。
基于 TypeScript AST,把实体元数据翻译成类型、查询构建器与框架适配代码,是生成链路的执行核心。
以下能力都可以在文档、demo 和源码里直接验证
用元数据描述模型,把查询、表单和类型安全从模型一层层向外推导。
三个主流框架共享相同业务语义,差异只保留在 UI 绑定层。
从模型定义自动产出类型和辅助代码,省掉重复手写与随之而来的错误。
围绕浏览器内数据库、Worker 和缓存组织性能边界,不只是在渲染层打补丁。
协作层已覆盖版本分支、撤销重做与条件同步,重点是本地版本流转可复验。
从模型到界面,主链路要短、要稳、可复现
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: {...} });
这套架构要解决的,是复杂前端里数据规则无处安放的问题。先跑 demo 再回到文档,更容易判断它是否适合你的系统。