We are rewriting Nix using LLMs, splitting into layers.
Casita is the first standalone layer, a content-addressed object store for source code and build artifacts, with deduplication, verification, synchronization, and garbage collection.
For full explaination on why and what it supports today, see
Great question, I should probably write this up.
Here you go, a bit of brain dump.
Casita is Apache2, snix is GPL3, this is really important for our mission to mainstream Nix.
Casita defines a generic object graph, so you can express a lot of things with simple trait implementations of CustomFormat or Importer, where as in snix there’s a concept of services doing things, implementing their own logic including storage.
That means you can fully express Casita as a backend for Git, including all mutable bits.
Another way to look at this, in Casita you have one store for blobs and another store for all immutable and mutable metadata, (like git refs) expressed via roots.
At the feature level, snix doesn’t have a lot of higher-level things like GC, WAL S3.
I also have a branch with CasitaFS sketched out, kernel filesystem implemented in Rust. That’s the end goal in term of performance.
Casita also doesn’t have any of the gRPC stuff, it’s all pure Rust, but you can implement your own sync protocols.
It does support rsync-style sync protocol to sync difference between two machines.
Git does a lot of work on the backend to pack deltas down to small sizes, and optimize the on-disk representation. Is this something that’s planned for Casita? I remember Git on IPFS suffering the same issue of inability to store diffs and huge storage sizes.
Re: CasitaFS, instead of building your own filesystem, could you use ZFS blocks for storage?