# Git in the file, or the file in Git

> Two ways to put Git on agent data. Files in Git, or Git inside the database file. You don't need SQLite just because Beads had one.

By [Ryan Porter](https://anth.us/ryan) · Published 2026-09-01

Canonical: https://anth.us/articles/git-in-the-file/

::image{
  src="images/posts/git-in-the-file.png"
  layout="center-small-image"
  alt="DoltLite wordmark, SQLite feather for the i"
}

There are two ways to put Git on your data.

[Beads](https://github.com/steveyegge/beads) wanted a board agents could share. It indexed that board with SQLite. The index is a second copy of the truth. Git can't merge it. You have to keep it honest.

You don't need that sidecar. A scan of the files is enough. [Kanbus](https://github.com/AnthusAI/Kanbus) [dropped it](https://github.com/AnthusAI/Kanbus/blob/main/docs/VS_BEADS.md). [Virtuus](https://github.com/AnthusAI/Virtuus) made that the product: one JSON file per record. Indexes live in memory and die. The files are the store.

[DoltHub](https://www.dolthub.com/blog/2026-08-31-doltlite-beta/) wanted the other shape. Apps already speak SQLite. They wanted branch, merge, and diff on the rows. They kept the SQL engine. They swapped the B-tree for a Prolly tree. Git lives inside the database file.

So the leftovers are different. DoltLite's is a C storage engine sitting next to the rows. Beads' is a sync tax for a problem the filesystem had already solved. If you're picking a store for agent work, you don't need SQLite just because Beads had one.
