λιμνη · LIMNĒ · THE LAKE
A lake for
your data.
LimniFS is a content-addressed, compressed, immutable filesystem image format. Layered like a lake — warm surface, thermocline, cold deep. Merkle-rooted, network-native, signed.
- 0
- External wire-format dependencies
- 4
- Target adapter languages (Rust, Python, Ruby, TS)
- ∞
- Overlay chain depth (format-unbounded)
DropId = BLAKE3(plaintext) · the same drop lives in many representations across all three layers
.features
Six invariants of the lake.
Every LimniFS decision ladders back to these six. Spec-first, custom wire format, OCP via registries.
.identity
Content-addressed identity
Every drop is named by BLAKE3 of its plaintext. Codec, encryption, and erasure coding are representations — they never change identity. Dedup survives re-encryption, re-compression, re-encoding.
.layers
Three-layer format
Drop store (bulk bytes), filesystem metadata (deterministic Merkle B-tree), manifest (small, signed). Each independently versioned. Each byte-addressable.
.tiers
Staged compression
Write fast with LZ4 (epilimnion). Deepen in the background with zstd, lzma, or brotli per class (hypolimnion). Identity never changes; readers stay tier-agnostic.
.deltas
First-class deltas & overlays
A delta is a normal image with a base_root. Stack them as overlays (meromictic chains are valid forever). Flatten for metadata-only compaction. Turnover for full repack + GC.
.locators
Locator-agnostic distribution
Slabs live behind file://, https://, s3://, ipfs://, or limni-p2p:// locators. Mirror racing fetches in parallel; lying locators are demoted. Manifest can live apart from drop store.
.crypto
Authenticated encryption, signed roots
AEAD registry (XChaCha20-Poly1305 mandatory baseline; AES-OCB; GCM; Ascon). HPKE per-recipient key wrap. Optional sigstore signature bundle over the Merkle root.
.quickstart
Three commands
to your first .lim image.
The limni CLI (from λιμναω, "to sketch a lake") packs, mounts, verifies, and re-distributes. Cross-platform; reproducible.
# press a directory into a .lim image
limni limn ./my-app -o my-app.lim
# verify content-addressed identity
limni verify my-app.lim
# mount read-only and explore
limni mount my-app.lim /mnt/limOutput: my-app.lim — content-addressed, Merkle-rooted, ready for any locator.
.ecosystem
One org, four repos.
Separation is load-bearing: the spec lives alone so any language can implement from it; the Rust workspace lives alone for atomic cross-crate PRs; the legacy adapter lives alone as a license-scan boundary.
Rust workspace
limnifs/limnifs
Core reader, writer, crypto, locators, CLI, FUSE.
The format, dissected
limnifs/spec
Multi-file, onion-layered, bit-level. The SSOT.
Python reference reader
limnifs/limnifs-py
Written from spec alone — the spec-sufficiency oracle.
Legacy adapter
limnifs/limnifs-frozen2
Read-only DwarFS Frozen2 import. License boundary.
.begin
Dive in.
Read the spec. Dissect every byte. Build an adapter in your language.