Introducing Casita: A content-addressed store for source code and build artifact
11 hours ago
- Casita is the first standalone layer from rewriting Nix in Rust: a content-addressed object store for source code and build artifacts, available as a Rust library and CLI for Linux, macOS, and Windows.
- It addresses the challenge of managing many source versions and build artifacts in agentic development, avoiding both expensive duplication and wasteful deletion.
- Cargo integration via an ArtifactStorage interface can import and restore registry archives, Git dependencies, and workspace outputs through different backends; the Casita backend is currently experimental.
- The storage model generalizes Git: immutable blobs are addressed by BLAKE3 hash, and object records for files, directories, and commits form a graph above the blobs.
- Optional Bao outboard hashes allow range verification without reading entire blobs, while full sequential reads still verify the complete hash.
- Roots name saved object graphs and can be permanent or evictable, enabling flexible retention and garbage collection; unchanged files share blobs across versions.
- Importers support filesystem directories, tar archives, NAR archives with canonical SHA-256 verification, and native Git objects while preserving original IDs.
- Portable .casitar archives contain complete saved graphs, can be transferred via file, pipe, or release artifact, and are fully verified on import.
- Synchronization reuses existing content, verifies incoming objects, and only updates destination names after the complete saved version arrives.
- Garbage collection reclaims unreachable data, including automatic collection on disk pressure that can release least-recently-used evictable roots while preserving permanent roots.
- Experimental integrations include a Gix adapter for native Git object storage, CasitaFS for read-only mounts, and an S3 profile using Chroma's wal3 write-ahead log for shared multi-writer repositories.
- Casita is pre-release and not yet tagged v0.1.0; remaining work includes improving performance, broadening benchmarks, and completing real-world integrations.