Open source · MIT

Version control system for files and application data

Store files and SQL tables in one repository. Branch, diff, merge, and roll back changes to both.

JavaScriptRustPythonGo
Read the docs

Any format

Store text, binaries, and large files. Plugins provide structured diffs for supported formats, including Markdown and CSV.

Embeddable

Runs in-process inside your product. Storage is pluggable: memory, filesystem, browser OPFS, or S3.

Designed as a database

Files, app tables, and history are rows in one ACID database. Query all of it with SQL.

>350knpm weekly downloads
756GitHub stars

Adoption

Weekly npm downloads of @lix-js/sdk

100k200k300k400k500k
september 2025through Sep 20, 2026
README.md · opral/lixview on GitHub →

Lix

Version control system for files and application data

weekly downloads on NPM Discord GitHub Stars X (Twitter)

Lix is a version control system for files and application data. Store files of any format alongside SQL tables in one repository. Branch, diff, merge, and roll back changes to both. Lix runs inside your app or connects to a server:

One Lix repository holding files of every format and the application's own database tables
  • 📄 Any format. Store text, binaries, and large files. Plugins provide structured diffs and merges for supported formats, including Markdown and CSV.
  • 🧩 Embeddable. Runs in-process as a library. Storage is pluggable: memory, filesystem, browser OPFS, or S3.
  • 🗄️ Designed as a database. File content, app tables, and history are rows in one ACID OLTP database. Query millions of rows with SQL.
  • Real-time collaboration. People and agents share a repository and see changes as they happen.
  • 🔒 Permissions (planned). Per file, per group, stored in the repository and versioned like any other change.

Why not Git?

Git versions files well, but application data usually lives in a separate database. Committing a SQLite database to Git versions its bytes, not its rows: changes are hard to review or merge, and each database revision adds to the repository. Lix stores queryable tables alongside files and versions changes to both.

GitLix
Process modelSeparate CLI processLibrary in your process
StorageLocal diskMemory · filesystem · OPFS · S3
Application dataSeparate databaseSQL rows, ACID, with the files
Recording changesManual commitsTracked writes commit automatically
FormatsText linesStructured diffs with plugins for supported formats
CollaborationPush and pullReal time

Getting started

JavaScript JavaScript · Rust Rust · Python Python · Go Go

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

Run locally with FilesystemStorage:

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"),
]);

Or against a server:

const lix = await openLix({
  server: {
    url: "https://example.com/lix/01936f4e-7b6c-7c3d-8f9a-123456789abc",
  },
});

Lix is in alpha.

Prime use cases

Co-locate code, documents, and app state

Code lives in Git. Documents, design files, and media live in Drive, Figma, and S3. App state lives in Postgres. No system versions all of them together. Lix stores them in one repository with one history.

One Lix repository holding files of every format and the application's own database tables
// A script, a 4.8 GB video, and an app table in one transaction.
await lix.executeBatch([
  {
    sql: "INSERT INTO lix_file (path, content) VALUES ($1, $2)",
    params: ["/automations/weekly-report.js", source],
  },
  {
    sql: "INSERT INTO lix_file (path, content) VALUES ($1, $2)",
    params: ["/media/launch.mp4", video],
  },
  {
    sql: "UPDATE orders SET status = 'shipped' WHERE id = $1",
    params: [1002],
  },
]);

// Branch, diff, and roll back all of it together.

Give each customer a repository

Your customers want agents that write automations and edit their documents, with a way to review and undo. Drive has no version control. Your customers do not have GitHub repos. Embed Lix and give each customer a repository that holds their code, documents, spreadsheets, and media.

Your product creates one Lix repository per customer, each holding a different mix of automations, handbooks, pricing, and knowledge files
// One hosted repository per customer.
const lix = await openLix({
  server: {
    url: `https://example.com/lix/${customer.repositoryId}`,
  },
});

// The agent writes an automation. Lix commits the change automatically.
await lix.execute("INSERT INTO lix_file (path, content) VALUES ($1, $2)", [
  "/automations/booking.ts",
  code,
]);

// Your UI shows the diff. The customer clicks accept or undo.

Apps with version control

Your app reads and writes SQL rows and normal files. Lix records every change with its author, so history, blame, branching, and rollback are queries instead of features you build.

An app window with a document diff, an accept and undo control, and a history sidebar with checkpoints, all provided by Lix
// A normal app write. "orders" is a table you registered with a Lix schema.
await lix.execute("UPDATE orders SET status = 'shipped' WHERE id = 1002");

// The history sidebar, diff view, and undo button are queries:
const changes = await lix.execute(`
  SELECT created_at, account_id, schema_key, row_pk, snapshot_content
  FROM lix_change
  ORDER BY created_at DESC
`);

Read more about diffs →

How Lix works

Files × database

Plugins map files to SQL rows. A paragraph, cell, or property becomes a row Lix can version.

With FilesystemStorage, the file stays available on disk. Its rows are queryable with SQL. Lix tracks changes to both.

A plugin maps /orders.csv to SQL rows with row, field, and value columns

Runs in-process as part of your infrastructure

Lix runs in-process with pluggable storage: memory, filesystem, browser OPFS, or S3. See the Storage docs.

Lix runs in-process inside your product, with an arrow to pluggable storage: memory, filesystem, or S3

Try a hosted repository

Try out lixray.com:

LixRay: a repository for your entire company. Works with Claude, OpenAI, and Gemini.

Learn more

License

MIT

Start with the JavaScript SDK

MIT licensed. Runs in the browser and on the server.