opral/lix · 上手攻略

  • 仓库:opral/lix
  • 链接:https://github.com/opral/lix
  • 分类:开发者工具 · 版本控制 · 数据基础设施
  • 作者:Tom
  • 更新:2026-08-27

是什么

Lix 是一个面向现代应用的通用版本控制系统——它同时版本化管理普通文件(像 Git)、应用数据库表(像传统 DB migration)、评论和审核记录(像 CMS),并在这些维度上支持分支、Diff、Merge 和回滚。

核心定位:文件 + SQL 数据库 + 版本控制,三位一体。任何格式的文件、任何应用数据、任何变更历史,都在一个 ACID OLTP 数据库中统一版本化管理。LLM Agent 和人类用户操作的是普通文件和应用表,Lix 在底层自动记录每次变更的作者、时间戳和内容差异。

当前 SDK 状态:JavaScript/TypeScript(@lix-js/sdk)稳定,Rust 支持在 Beta,Python 和 Go 支持在规划中(见 GitHub issues)。


解决什么问题

传统工具的三大割裂

工具 文件 SQL 数据 版本历史
Git ✅(但只是文本 Diff)
PostgreSQL/SQLite ❌(除非借助外部工具)
CMS / 协作工具 ❌(各自独立)

结果:同一个变更涉及文件 + 数据库行 + 业务状态,需要在三个系统间手动维护一致性。

Lix 的答案

所有变更都在同一个 OLTP 数据库中记录,Diff 精确到行/列/单元格级别,而非字节级别的文本 Diff。分支、Merge、回滚同时覆盖文件内容和数据库行,且保证 ACID 事务一致性。

典型问题 Lix 解决: - LLM Agent 改了一个配置又改了一个数据库字段,如何一起回滚? - 每次部署需要同时迁移 schema 和 seed data,如何保证幂等? - 不同客户的配置/数据需要隔离分支,如何复用同一套基础设施?


快速安装

环境要求

  • Node.js 18+(JavaScript SDK)
  • Rust 1.70+(Rust SDK)
  • 服务器模式可选:Python 3.10+ 或直接用 lixray.com 托管

JavaScript SDK(最常用)

npm install @lix-js/sdk @lix-js/storage-filesystem

本地文件系统存储(开箱即用)

import { openLix } from "@lix-js/sdk";
import { FilesystemStorage } from "@lix-js/storage-filesystem";

const lix = await openLix({
  storage: new FilesystemStorage({ path: "./repository" }),
});

// 写入文件
await lix.execute(
  "INSERT INTO lix_file (path, content) VALUES ($1, $2)",
  ["/notes/status.txt", new TextEncoder().encode("ready")]
);

// 查询历史
const changes = await lix.execute(`
  SELECT created_at, account_id, schema_key, row_pk, snapshot_content
  FROM lix_change
  ORDER BY created_at DESC
`);

连接到远程服务器

const lix = await openLix({
  server: {
    mode: "remote",
    url: "https://example.com/repositories/acme",
  },
});

自托管 Lix 服务器

参考文档:/docs/hosting.md(需 Python 3.10+ 服务端)

托管方案:LixRay

不想自建服务器?用 https://lixray.com,三分钟创建仓库,无需自己运维。


核心概念

插件:文件格式 → SQL 行

Lix 的插件系统将文件格式映射为可版本化的 SQL 行:

  • 文本文件 → lix_file 表(path, content)
  • 业务数据 → 自定义表(products, orders 等)
  • 审核记录 → lix_review / lix_comment

插件让你用 SQL 查询文件的版本历史,而不只是看文本 Diff。

存储后端

存储方式 说明
FilesystemStorage 本地文件系统,适合开发和小规模
BrowserOPFSStorage 浏览器 OPFS,适合纯前端应用
S3Storage S3 兼容对象存储,适合生产大规模部署
远程服务器 通过 LixRay 或自建服务器访问

变更粒度

传统 Git Lix
文本 Diff(按行) 精确到 clause / cell / row
文件是原子单位 行/列变更可独立分支和回滚
Binary 文件不可比对 文件内容可映射为行后比对

权限系统(即将到来)

计划支持:按文件、按分组的细粒度权限,且权限本身也版本化(permissions are coming)。


典型适用场景

场景 说明
每个客户一个仓库(SaaS) 每个客户的数据用独立 Lix 仓库,天然隔离;权限管理在规划中
LLM Agent 文件同步 Agent 和应用操作同一目录,Lix 记录所有变更,UI 展示 Diff 供人工审核
应用内建版本控制 CRM/CMS 的记录变更历史、审核流、评论,直接是 Lix 表,无需另外开发审计日志
配置 + 数据的联合回滚 配置文件和数据库默认值同步版本化,一个命令同时回滚
实时协作 多个人/Agent 同时操作同一仓库,变更实时同步(通过服务器模式)

场景示例:多租户 SaaS

// 每个客户一个仓库
const lix = await openLix({
  server: {
    mode: "remote",
    url: `https://lixray.com/@acme/customer-${customer.id}`,
  },
});

// Agent 自动写入自动化脚本
await lix.execute(
  "INSERT INTO lix_file (path, content) VALUES ($1, $2)",
  ["/automations/booking.ts", code]
);

// UI 直接展示 Diff,客户点 Accept 或 Undo

场景示例:Git + 数据库联合版本化

// 普通应用写操作(同时更新文件和表)
await lix.execute("UPDATE orders SET status = 'shipped' WHERE id = 1002");

// 历史、追责、撤销都是 SQL 查询
const history = await lix.execute(`
  SELECT created_at, account_id, schema_key, row_pk, snapshot_content
  FROM lix_change
  WHERE schema_key = 'orders' AND row_pk = 1002
  ORDER BY created_at DESC
`);

坑与注意

  1. Python/Go SDK 尚未完成:当前 Python SDK 在 GitHub issue #373,Go SDK 在 #370。如果只打算用这两种语言,目前无法使用,需等待正式 release。

  2. 权限系统未上线:README 明确说"permissions (soon)"。如果需要细粒度权限控制(不同用户访问不同文件/行),目前 Lix 还无法满足,需要等待后续版本。

  3. 生产部署成熟度:Lix 整体项目仍处于活跃开发阶段(v0.x),API 和存储格式可能存在破坏性变更;不建议在核心业务未做充分测试前用于生产关键路径。

  4. 自建服务器复杂度:Lix 服务器模式需要自行维护(参考 docs/hosting.md),涉及数据库迁移、存储配置等;相比直接用 LixRay 托管,有更高的运维门槛。

  5. Git 兼容性:Lix 不是 Git 的替代品——它版本化管理的是文件和行,不是 Git 的分支模型。如果需要 Git 工作流(如 Pull Request、代码审查),Lix 不提供这些功能。

  6. 大型二进制文件:虽然支持普通文件和二进制内容,但大文件(GB 级别)的存储性能和 S3 成本需要评估;建议结合 Git LFS 或对象存储分层策略。

  7. Plugin 开发门槛:若需要自定义文件格式映射,需要了解 Lix 的插件 API,目前文档有限,可能需要参考源码。


与同类对比

维度 Lix Git Dolt PlanetScale SQLite
文件版本化
SQL 数据版本化
分支/Merge(数据)
行级/列级 Diff ✅(插件)
细粒度回滚
实时协作 ✅(服务器)
多租户隔离 ✅(仓库级)
权限系统 规划中
SDK 成熟度 JS 稳定 / Rust Beta N/A Go/Python 稳定 MySQL 兼容 稳定
许可证 MIT GPL Apache 商业 公共领域

核心差异:Dolt 是 Git for SQL Data(数据可像代码一样 clone/fork/push/pull),Lix 进一步扩展到任意文件 + 任意业务数据 + 实时协作,且有 Plugin 架构支持细粒度 Diff。


一句话推荐结论

如果你正在构建需要"每个客户独立数据空间 + LLM Agent 自动操作 + 人工审核 Diff"的 SaaS 产品,Lix 是目前唯一同时具备文件/数据联合版本化、细粒度变更追踪和实时协作的开源基础设施——尤其是 JavaScript/TypeScript 生态的项目,可以从今天开始集成 @lix-js/sdk