Skip to content
/ lix Public

Embeddable version control system

Notifications You must be signed in to change notification settings

opral/lix

Repository files navigation

Lix

Embeddable version control system

97k weekly downloads on NPM Discord GitHub Stars X (Twitter)

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 JavaScript · Python Python · Rust Rust · Go 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 uses SQL databases as query engine and persistence layer. Virtual tables like file and file_history are exposed on top:

SELECT * FROM file_history
WHERE path = '/orders.xlsx'
ORDER BY created_at DESC;

When a file is written, a plugin parses it and detects entity-level changes. These changes (deltas) are stored in the database, enabling branching, merging, and audit trails.

┌─────────────────────────────────────────────────┐
│                      Lix                        │
│                                                 │
│ ┌────────────┐ ┌──────────┐ ┌─────────┐ ┌─────┐ │
│ │ Filesystem │ │ Branches │ │ History │ │ ... │ │
│ └────────────┘ └──────────┘ └─────────┘ └─────┘ │
└────────────────────────┬────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────┐
│                  SQL database                   │
│            (SQLite, Postgres, etc.)             │
└─────────────────────────────────────────────────┘

Read more about Lix architecture →

Learn More

Blog posts

License

MIT

About

Embeddable version control system

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 11

Languages