Skip to content
LimniFS

.format · the .lim spec

Every byte,
dissected.

The LimniFS wire format is owned end-to-end. No FlatBuffers, no Avro, no Cap'n Proto. Every fixed-width type is specified to bit position; every optional section carries an explicit presence bit; every byte is determined by SPEC.md.

A lake, in three layers.

A .lim image is structured like a body of water. The manifest floats on the surface — small, signed, identity. The metadata extends through the thermocline — a Merkle B-tree whose nodes are content-addressed, whose every level shares structure with prior versions. The drop store lies below the thermocline — cold, dense, packed.

Each layer is independently versioned (per-section version bytes, not per-record vtables). Each layer is independently parsed (no layer reaches into another's bytes). Each layer is independently addressable (HTTP range fetches the section you need).

→ Start with the manifest dissect — it is the smallest, most concrete, most signed.

LAYER 3 · MANIFESTThe signed identity.magic · versions · feature flags · slab index · cryptoparams · EC params · DMS · delta · history · Merkle rootthermoclineLAYER 2 · FILESYSTEM METADATAThe Merkle B-tree.inodes · directory tree · xattrs · slice → drop mapsper-class Seine recordsdeterministic · content-addressed · delta-friendlyLAYER 1 · DROP STOREThe bulk bytes.slabs (4–64 MiB) · drops · solid windows · Reed-Solomon shardsslab 0slab 1slab 2slab 3+ Reed-Solomon shards (optional)SURFACETHERMOCLINEDEEP

DropId = BLAKE3(plaintext) · the same drop lives in many representations across all three layers

.sections

Six sections. Read in order, or jump.

.format-invariants

Five things every reader MUST honor.

  1. Identity rule. DropId = BLAKE3(plaintext). Codec, AEAD, EC, locator are representations — never identity.
  2. Merkle root = image identity. The signed root over the metadata blob and manifest sections. Two images with the same root are byte-equivalent.
  3. Two-level addressing. Slice → drop → (slab, offset, len, representation). Small drops never map to scattered storage.
  4. Determinism. Same input + same parameters ⇒ byte-identical image. Nondeterminism is a tracked bug class.
  5. Per-section versioning. Within a version byte, every field is fixed-width and order-pinned. Cross-version: forward compatible, backward explicit-reject.