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.
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 withCancellationTokensupport. Streamwrappers —OpenReadStream/OpenWriteStreamreturn ordinary .NETStreams 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.
Useful Links
- Services & configuration: /services
- OpenDAL Scheme reference: docs.rs/opendal — enum.Scheme
- Source & examples:
bindings/dotnet/
Next steps
- Getting started — a runnable program, then a real backend.
- Connecting to your storage — build an operator for any service.
- Common tasks — read, write, stream, list, presign, and more.
- Going to production — layers, errors, and capability checks.