https://github.com/lamco-admin/lamfold
no_std read-only media filesystem stack — ISO9660/UDF/SquashFS/EROFS/cramfs/romfs/cpio with fs-verity integrity (the shepherd), for UEFI bootloaders (development repo)
https://github.com/lamco-admin/lamfold
Last synced: about 1 month ago
JSON representation
no_std read-only media filesystem stack — ISO9660/UDF/SquashFS/EROFS/cramfs/romfs/cpio with fs-verity integrity (the shepherd), for UEFI bootloaders (development repo)
- Host: GitHub
- URL: https://github.com/lamco-admin/lamfold
- Owner: lamco-admin
- License: other
- Created: 2026-06-05T19:35:24.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-06-05T20:06:52.000Z (about 2 months ago)
- Last Synced: 2026-06-05T22:07:28.084Z (about 2 months ago)
- Language: Rust
- Size: 148 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# lamfold
> A `no_std`, integrity-verifying **read-only media filesystem stack** — a shared
> substrate under thin, clean-room format frontends.
This is a **metacrate workspace** (one repo, many published crates), the same
shape as the `lamco-wayland` / `lamco-rdp` workspaces. The name is a sheepfold —
the enclosure holding the *flock* of formats — and the layered, recursive
structure it reads. Authoritative spec: `the lamfold design spec`.
## Crates
| Crate | Role | Status |
| ----- | ---- | ------ |
| [`crates/lamfold`](crates/lamfold) | **substrate core** — codec registry (deflate/lz4/zstd/xz/lzo), immutable-block cache, bounded zero-copy parse + read-cap, `FoldFrontend` trait, the shepherd (`Verifier` seam + native fs-verity Merkle) | ✅ substrate + shepherd (21 tests) |
| [`crates/lamfold-iso`](crates/lamfold-iso) | **optical frontend** — ISO9660 + Rock Ridge + Joliet + El Torito + zisofs | ✅ complete |
| [`crates/lamfold-udf`](crates/lamfold-udf) | **UDF frontend** — ECMA-167 / OSTA 1.02 read | ✅ base (real mkudffs image) |
| [`crates/lamfold-squash`](crates/lamfold-squash) | **compressed frontend** — SquashFS 4.0 (gzip/xz/zstd/lz4/lzo), the live-ISO root | ✅ complete (real mksquashfs image) |
| [`crates/lamfold-erofs`](crates/lamfold-erofs) | **forward-standard frontend** — EROFS (uncompressed) + the shepherd (fs-verity block gating) | ✅ complete (real mkfs.erofs image) |
| [`crates/lamfold-cramfs`](crates/lamfold-cramfs) | **legacy compressed frontend** — cramfs (per-page zlib) | ✅ complete (real mkcramfs image) |
| [`crates/lamfold-romfs`](crates/lamfold-romfs) | **minimal-embedded frontend** — Linux romfs (`-rom1fs-`) | ✅ complete (real genromfs image) |
| [`crates/lamfold-cpio`](crates/lamfold-cpio) | **initramfs frontend** — newc cpio tree (reuses `cpio_reader`) | ✅ complete (real cpio archive) |
Every frontend is a thin member that depends on `lamfold` (the namesake core,
like the `lamco-wayland` crate within the `lamco-wayland` workspace) and contains
*only* on-disk structure parsing — codecs, caching, bounded parse, and
verification all come from the substrate. Each member publishes as its own crate
(Debian/crates.io granularity) while versioning and CI'ing together.
## Use
Not yet on crates.io — development is in progress. Until the first release,
depend on the member you need via this Git repository:
```toml
# the optical frontend (ISO9660 + Rock Ridge / Joliet / El Torito / zisofs)
lamfold-iso = { git = "https://github.com/lamco-admin/lamfold", default-features = false, features = ["zisofs"] }
# the EROFS frontend + the shepherd (fs-verity integrity)
lamfold-erofs = { git = "https://github.com/lamco-admin/lamfold", default-features = false, features = ["verity"] }
# …and lamfold-udf / -squash / -cramfs / -romfs / -cpio, plus the `lamfold` substrate core.
```
Once published, the same members will be available as crates.io versions
(`lamfold-iso = "X.Y.Z"`, …) — see each crate's `documentation` link.
## Build / test (whole workspace)
```bash
cargo test # all members
cargo build --no-default-features # no_std check
cargo clippy --all-targets -- -D warnings
```
The pinned, all-permissive dependency set lives once in the workspace root's
`[workspace.dependencies]` (zero copyleft in the tree). MIT OR Apache-2.0.