Embeddable version control system
[!NOTE]
Lix is in alpha · Follow progress to v1.0 →
Lix is an embeddable version control system that can be imported as a library. Use lix, for example, to enable human-in-the-loop workflows for AI agents like diffs and reviews.
- It's just a library — Lix is a library you import. Get branching, diff, rollback in your existing stack
- Tracks semantic changes — diffs, blame, and history are queryable via SQL
- Approval workflows for agents — agents propose changes in isolated versions, humans review and merge
How does Lix compare to Git? →
Getting started
JavaScript ·
Python ·
Rust ·
Go
npm install @lix-js/sdk
import { openLix, selectWorkingDiff } from "@lix-js/sdk";
const lix = await openLix({
environment: new InMemorySQLite()
});
await lix.db.insertInto("file").values({ path: "/hello.txt", data: ... }).execute();
const diff = await selectWorkingDiff({ lix }).selectAll().execute();
Semantic change (delta) tracking
Unlike Git's line-based diffs, Lix understands file structure through plugins. Lix sees price: 10 → 12 or cell B4: pending → shipped, not "line 4 changed" or "binary files differ".
JSON file example
Before:
{"theme":"light","notifications":true,"language":"en"}
After:
{"theme":"dark","notifications":true,"language":"en"}
Git sees:
-{"theme":"light","notifications":true,"language":"en"}
+{"theme":"dark","notifications":true,"language":"en"}
Lix sees:
property theme:
- light
+ dark
Excel file example
The same approach works for binary formats. With an XLSX plugin, Lix shows cell-level changes:
Before:
| order_id | product | status |
| -------- | -------- | -------- |
| 1001 | Widget A | shipped |
| 1002 | Widget B | pending |
After:
| order_id | product | status |
| -------- | -------- | -------- |
| 1001 | Widget A | shipped |
| 1002 | Widget B | shipped |
Git sees:
-Binary files differ
Lix sees:
order_id 1002 status:
- pending
+ shipped
How Lix Works
Lix is change-first: it stores semantic changes as queryable data, not snapshots.
Plugins parse files and app state into structured entities. Lix stores what changed semantically — not just which bytes differ. Audit trails, rollbacks, and history become simple SQL queries:
SELECT * FROM change_history
WHERE entity_id = 'order.1002.status'
ORDER BY created_at DESC;
- Doesn't reinvent databases — uses SQLite, Postgres, etc.
- SQL API for changes — query diffs, history, and audit trails directly
- Branching & merging — isolate agent work, compare, and merge
┌─────────────────────────────────────────────────┐
│ Lix │
│ │
│ ┌────────────┐ ┌──────────┐ ┌─────────┐ ┌─────┐ │
│ │ Filesystem │ │ Branches │ │ History │ │ ... │ │
│ └────────────┘ └──────────┘ └─────────┘ └─────┘ │
└────────────────────────┬────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ SQL database │
│ (SQLite, Postgres, etc.) │
└─────────────────────────────────────────────────┘
Read more about Lix architecture →
Learn More
- Getting Started Guide - Build your first app with Lix
- Documentation - Full API reference and guides
- Discord - Get help and join the community
- GitHub - Report issues and contribute
Blog posts
- Introducing Lix: An embeddable version control system
- What if a Git SDK to build apps exists?
- Git is unsuited for applications
- Does a git-based architecture make sense?