Skip to content

feat(services): Add wasi-fs backend using wasi:filesystem interface #7004

@JMLX42

Description

@JMLX42

Summary

Add a new OpenDAL backend that leverages the wasi:filesystem interface for file operations. This enables OpenDAL to access the host filesystem when running as a WebAssembly component, with the host runtime (e.g., wasmtime, wasmer) providing the actual filesystem implementation.

Motivation

Currently, the services-fs backend cannot compile to wasm32-wasip2 because it depends on tokio's filesystem features, which are not supported on WASM targets.

However, WASM components can access the host filesystem through the standardized wasi:filesystem interface. A wasi-fs backend would:

  1. Enable filesystem access in WASM components — Components could read/write files preopened by the host runtime
  2. Complement existing backendsmemory and s3 work on WASM, but there's no local filesystem option
  3. Leverage existing WASI ecosystem — Runtimes like wasmtime already implement wasi:filesystem

Proposed Implementation

A new services-wasi-fs feature/backend that:

  • Imports wasi:filesystem/types and wasi:filesystem/preopens interfaces
  • Uses wasi:io/streams for read/write operations
  • Works with preopened directories provided by the host
  • Compiles to wasm32-wasip2 target only (or conditional compilation)

Use Case

We're building WASM components that expose storage capabilities. We want to:

  1. Create an OpenDAL-based storage component
  2. Export wasi:filesystem interface for downstream consumers
  3. Support multiple backends (memory, S3, and host filesystem)

Without a wasi-fs backend, components cannot access files that the host runtime preopens for them.

Research Notes

Backend WASM-compatible Notes
services-memory Works out of the box
services-s3 Works with reqwest/reqsign
services-fs Requires tokio fs (not WASM-compatible)
services-wasi-fs 🆕 Proposed — uses wasi:filesystem imports

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestreleases-note/featThe PR implements a new feature or has a title that begins with "feat"rustPull requests that update Rust code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions