First public release.
A protocol-based virtual filesystem for Elixir. Mount git repos, in-memory scratch space, and database-backed application state behind one value, then thread that value through your agent loop the way Plug.Conn flows through a request pipeline.
Highlights
VFS.Mountableprotocol — pluggable virtual filesystem with state-threading reads. Every op (reads included) returns the updated impl, so lazy backends keep their caches.%VFS{}mount table with longest-prefix routing; itself aVFS.Mountable, so mount tables nest.VFS.Memoryin-memory backend (read+write), plusVFS.Skeleton/VFS.Defaultfor backend authors.- Structured errors —
%VFS.Error{kind, path, mount, message}; pattern-match on POSIX-style:kindatoms. - Lazy by default —
stream_read/3is the primary read primitive (:chunk_size,:byte_range,:line_range);VFS.read_file/2is derived.walk/3is fully lazy and composes withStream.take/2over unbounded backends. - Telemetry —
[:vfs, _, _]events on every data-flow op, OTel-ready. - Fail-fast trust boundaries —
VFS.mount/3validates the backend implements the protocol at mount time.
Quality bar
- 48 doctests / 52 properties / 332 tests, 100% line coverage, 97.7% mutation kill rate
- Conformance suite parametrized over every shipped backend
- CI matrix: Elixir 1.16.3 (floor) through 1.20-rc, plus a release-style protocol-consolidation leg
Requires Elixir 1.16+. Sole runtime dependency: telemetry.
See CHANGELOG.md for the full release notes, including the pre-release audit history.