opral/lix
Embeddable version control system for files and tables.
Lix – 文件与 SQL 数据表的版本控制
这是什么
- 一套库,让你将一组普通文件(文本、二进制、CAD、视频……)以及关系表视为单一受版本控制的仓库。
- 整个系统存在于单一 ACID OLTP 数据库中,因此你可以用普通 SQL 查询文件与数据行的历史记录。
为何重要
- 传统版本控制系统(Git、Mercurial)只对原始字节进行版本控制。当应用将其状态存储在数据库中时,你要么将该数据库分开保存,要么把整个文件倾倒进 Git,这使得审查、合并与回滚行级变更变得十分痛苦。
- Lix 弥合了这一差距:一个分支可以同时包含代码变更以及对应的数据行更新,而且你可以对两者进行差异比对与合并。
主要功能
| 功能 | 你能获得什么 |
|---|---|
| 任意文件 | 文本、二进制、大型媒体。插件可为 Markdown、CSV 等提供结构化差异;其他格式则回退为整文件历史。 |
| SQL 数据表 | 在仓库中定义数据表;数据行的版本控制方式与文件相同。 |
| 以数据库为后端 | 所有数据都存储在单一 ACID 数据库中;你可以对数百万行执行 SQL 查询。 |
| 实时协作 | 多个用户或代理可实时看到变更。 |
| 可嵌入 | 以库形式在进程内运行。存储后端:内存、文件系统、浏览器 OPFS 或 S3。 |
| 规划中的权限 | 按文件/组的 ACL 会与其他所有内容一起存储并进行版本控制。 |
如何使用
- 安装 JavaScript SDK(
@lix-js/sdk)与存储实现,例如@lix-js/storage-filesystem。 - 打开指向某个文件夹(或远程服务器)的仓库,然后开始发出 SQL 语句。
import { openLix } from "@lix-js/sdk";
import { FilesystemStorage } from "@lix-js/storage-filesystem";
const lix = await openLix({
storage: new FilesystemStorage({ path: "./repo" }),
});
await lix.execute(
"INSERT INTO lix_file (path, content) VALUES ($1, $2)",
["/notes/status.txt", new TextEncoder().encode("ready")]
);
- 变更会自动提交;你之后可以查询
lix_change表,以构建 UI 的差异/撤销面板。
典型使用场景
- 将代码、文档与应用状态放在一起 – 将脚本、其设计文档,以及它所操作的数据行保存在同一分支中,便于审查。
- 每位客户专属的仓库 – SaaS 产品为每个租户提供私有的 Lix 仓库,存储其自动化流程、文档与业务数据,内置审计轨迹与回滚功能。
- 受版本控制的工作流 – 将 Lix 嵌入内部工具,让你对自己数据表的每次写入都自动进行版本控制,无需额外工程就能获得历史记录、归属与分支功能。
状态
- 项目处于 alpha 阶段。已有 JavaScript/TypeScript 与 Rust 的 SDK;Python 与 Go 正在规划中。
- 名为 LixRay 的托管服务提供云端托管的仓库,可与 Claude、OpenAI 和 Gemini 等 LLM 集成。
何处了解更多
- JavaScript 与 Rust 的快速入门指南。
- 完整文档位于 https://lix.dev/docs。
- 社区 Discord 与 GitHub 仓库,可报告问题与贡献。
Lix 本身不是 AI 模型,但它的定位是可被 AI 代理(例如由 LLM 驱动的助手)使用的基础设施,用来存储并对其生成的文件与数据库更新进行版本控制。
相关
- 项目
- 项目
- 项目
- 项目
- 项目