Skip to content

Store once. Sync the difference. Verify the bytes.

Introducing Casita: A content-addressed store for source code and build artifacts

Store once.
Sync the difference.
Verify the bytes.

Built in Rust. Apache 2.0.

terminalcasita
# Attach this project to Casita
$ casita init

# Import and name a directory
$ casita import ./project --root demo
casita.directory.v1:...
root demo

# Audit stored content
$ casita fsck --audit-only
Supported platformsLinuxmacOSWindows

Cargo using Casita

Cargo writes all three outputs directly into Casita.

Cargo

$ cargo build --bin uv
libuv.rlib
ACD→

Waiting

uv
ABC→

Waiting

uv.d
E→

Waiting

Writing outputs

Casita

cargo/builds/uvNamed root
Output directoryDirectory object · file entries
uvFile object
libuv.rlibFile object
uv.dFile object
BlobFile contents
BlobFile contents
BlobFile contents
Achunk
Bchunk
Cchunk
Dchunk
Echunk

Storage links, not compilation dependencies. Chunk boundaries and sharing are illustrative; directory payload details are omitted.

Run uv

uv
ABC

Awaiting metadata

Output tree prepared. Executable discovered and run.

Proposed Cargo integration · uv 0.12.7 · executable reconstruction shown; chunks are illustrative. Run applications → · Verified artifact ↗

Benchmarks

First import. Small update. Sync the difference.

Median of 10 runs · seconds · lower is faster

First import

Import into an empty repository.

  • Casita0.361 s
  • Git0.564 s
  • restic0.977 s
  • Borg0.833 s
  • tar + zstd0.078 s

Small update

Re-import an edited copy of the tree.

  • Casita0.249 s
  • Git0.132 s
  • restic0.984 s
  • Borg0.979 s
  • tar + zstd0.085 s

Sync the update

Local sync to a destination with the base tree.

  • Casita0.115 s
  • Git0.023 s
  • restic1.464 s
  • BorgNot measured
  • tar + zstdNot measured

Each chart has its own scale. Sync measures a local update, not a network transfer.

AMD Ryzen 7 7840S · 27.2 GiB RAM · Linux / Btrfs

Baseline: 2026-08-29 · Casita 45699f8 · Source data ↗

Run details and comparison limits

Measured 2026-08-29 at Casita revision 45699f8, using the standard profile and the powersave CPU governor. These are published baseline results, not measurements of the current build.

The update inserts 4 KiB into one file and adds an 8 KiB file. Re-import uses a copied tree; it does not measure an in-place edit. Sync starts with the base tree already at the destination.

Warm cache pre-reads regular files; cold cache requests eviction with POSIX_FADV_DONTNEED. Neither controls filesystem metadata or device caches. The filesystem uses zstd compression on an encrypted volume.

Git, backup tools, and tar archives have different publication and verification guarantees. restic uses repository encryption; Casita and Borg use plaintext repositories. tar + zstd rebuilds the archive for an update. Borg and tar + zstd have no sync measurement in this suite.

Timings use the report’s nearest-rank p50: the fifth sorted sample of ten. Setup and validation are outside the timed region. Every accepted sample passes integrity and restored-content checks. Raw samples and hardware details ↗

borg 1.4.5 · casita 0.1.0 · git version 2.55.0 · restic 0.19.1 compiled with go1.26.5 on linux/amd64 · tar (GNU tar) 1.35; *** Zstandard CLI (64-bit) v1.5.7, by Yann Collet ***

Get started with Casita.

Follow the quick start or explore the Rust library.