Skip to main content

Apache OpenDAL™ .NET Binding

A native .NET binding for OpenDAL: access S3, GCS, Azure Blob, the local filesystem, and 50+ more services through one API, with the performance of the Rust core underneath.

New to the model behind the API? Read Concepts first — service, operator, layer, operation are the same four ideas in every language.

note

This binding has its own version number, independent of the Rust core. Check compatibility against the binding's version, not the core's.

Status

Unreleased. The package is not yet published to NuGet, so today you build the binding from source (see Installation). The intended package id is Apache.OpenDAL. The API is functional and covered by tests.

Capabilities

  • Sync and async — every operation has a blocking method and an …Async (Task-based) counterpart with CancellationToken support.
  • Stream wrappersOpenReadStream / OpenWriteStream return ordinary .NET Streams you can pipe through.
  • All services included — the binding bundles every backend; there are no build flags to enable individual services.
  • Composable layers for retry, timeout, and concurrency limits.
  • Presigned URLs for services that support them (async API).

Installation

The binding targets net8.0 and net10.0. Until a NuGet package is published, build it from source — you need the .NET SDK and a Rust toolchain for the native library:

cargo build
dotnet build

See Getting started for a runnable example and the build details.

Next steps

  1. Getting started — a runnable program, then a real backend.
  2. Connecting to your storage — build an operator for any service.
  3. Common tasks — read, write, stream, list, presign, and more.
  4. Going to production — layers, errors, and capability checks.