Layered, Immutable, Merkle-rooted, Network Image filesystem.
LimniFS is a content-addressed, compressed, immutable filesystem image
format for archival, distribution, and cold storage. It packs directory
trees into a single .lim file with BLAKE3 content addressing,
per-content-class compression, and Merkle-rooted integrity.
# Build
cargo build --release
# Create an image from a directory
./target/release/limni limn my-project/ my-project.lim
# Verify integrity
./target/release/limni verify my-project.lim
# List contents
./target/release/limni ls my-project.lim
# Extract
./target/release/limni extract my-project.lim output/
# Mount (requires FUSE; Linux/macOS)
./target/release/limni --features fuse mount my-project.lim /mnt/limnifs- Content-addressed. Every drop's identity is
BLAKE3(plaintext). Codec, encryption, and erasure coding are representations, never identity. - Per-content-class compression. The seine classifier routes each chunk to the best codec: ZSTD for text, LZ4 for binary, store for incompressible data.
- Merkle-rooted integrity. The manifest root commits to the entire image. One signature verifies everything.
- Pure Rust. No C dependencies. Air-gapped safe.
#![forbid(unsafe_code)]. - Parallel. The writer uses rayon for parallel chunking, hashing, and compression.
- Six codecs. Store, LZ4, ZSTD, Brotli, DEFLATE, Snappy — all pure Rust, all behind an OCP codec registry.
- Optional crypto. XChaCha20-Poly1305 AEAD, HPKE key wrap, Ed25519 signing, Shamir k-of-n secret sharing — each behind a feature flag.
- Erasure coding. Reed-Solomon systematic Vandermonde for per-slab redundancy and offline repair.
- Remote locators. HTTP range streaming, S3, IPFS/CAR — slabs can live anywhere.
- FUSE mount. Read-only mount on Linux and macOS.
| Id | Codec | Encode | Decode | Pure Rust |
|---|---|---|---|---|
| 0x00 | store | yes | yes | yes |
| 0x01 | LZ4 | yes | yes | yes (lz4_flex) |
| 0x02 | ZSTD | yes (L1) | yes | yes (ruzstd) |
| 0x03 | XZ/LZMA2 | no | yes | yes (omnizip-lzma) |
| 0x04 | Brotli | yes (q11) | yes | yes (brotli) |
| 0x05 | DEFLATE | yes (L6) | yes | yes (miniz_oxide) |
| 0x06 | Snappy | yes | yes | yes (omnizip-snappy → snap) |
Adding a codec is one new file + one register() call — the dispatch
code never changes (open/closed via [CodecRegistry]).
Benchmarked against DwarFS 0.15.6 on a 440 MB text corpus:
| Operation | LimniFS | DwarFS | Ratio |
|---|---|---|---|
| Create | 0.62s (700 MB/s) | 1.00s | 1.6x faster |
| Extract | 0.59s (8500 files/s) | 1.37s | 2.3x faster |
| Image size | 8% smaller | baseline | — |
| Crate | Description |
|---|---|
[limnifs-format] |
Wire-format primitives (header, cursor, version constants) |
[limnifs-core] |
Manifest parser, drop store, codec registry, crypto, locators |
[limnifs-write] |
Writer pipeline (FastCDC, classifier, slab packing, deepening) |
[limnifs-conformance] |
Test vectors and differential harness |
[limni] |
The limni CLI binary |
| Flag | Adds | Air-gapped safe? |
|---|---|---|
| (default) | BLAKE3, LZ4, ZSTD, Brotli, DEFLATE, Snappy, Ed25519 | yes |
http |
HTTP/S3/IPFS locators | network required |
fuse |
FUSE mount | system FUSE required |
key-wrap |
HPKE X25519 key wrap | yes |
signing |
Ed25519 manifest signing | yes |
git clone https://github.com/limnifs/limnifs.git
cd limnifs
cargo build --release
# Binary: target/release/limni[dependencies]
limnifs-core = "0.1"Apache-2.0 OR MIT.
- Format specification
- Python reference reader
- Website
- omnizip-rs — pure-Rust codec ports