MCPcopy Index your code
hub / github.com/apache/opendal

github.com/apache/opendal @v0.57.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.57.0 ↗ · + Follow
9,442 symbols 32,854 edges 1,199 files 2,202 documented · 23% 4 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Apache OpenDAL™: One Layer, All Storage.

GitHub Discussions Discord DeepWiki

Apache OpenDAL™ (/ˈoʊ.pən.dæl/, pronounced "OH-puhn-dal") is an Open Data Access Layer that gives every language a unified way to access object storage, file storage, cloud SaaS, databases, protocols, and key-value services.

Apache OpenDAL™ is guided by its vision of One Layer, All Storage and its core principles: Open Community, Solid Foundation, Fast Access, Object Storage First, and Extensible Architecture. Read the explained vision at OpenDAL Vision.

OpenDAL Architecture

At a Glance

  • Project: Apache OpenDAL™
  • Vision: One Layer, All Storage
  • Core package: Rust crate [opendal][Rust Core Link]
  • Main abstraction: Operator
  • Extension points: language bindings, layers, and services
  • Common layers: retry, timeout, logging, tracing, metrics, throttling, and concurrency control
  • Access targets: object storage, file systems, cloud SaaS, databases, protocols, and key-value services

Why OpenDAL

Apache OpenDAL™ turns the vision of One Layer, All Storage into a practical data access layer for applications, libraries, and data systems.

  • Zero-cost core: built in Rust with composable services and layers, so applications only enable the backends and capabilities they use.
  • Production-ready access: add retry, timeout, logging, tracing, metrics, throttling, and concurrency limits through reusable layers.
  • One API, all storage: access object storage, file systems, cloud SaaS, databases, protocols, and key-value services through the same interface.
  • Open and extensible: add new services, layers, and language bindings while keeping the same unified access model.

Choose Your Language

Start with the binding for your application runtime. Each binding provides access to the same OpenDAL service model while following its language ecosystem.

Note: Each binding has its own independent version number, which may differ from the Rust core version. When checking for updates or compatibility, always refer to the specific binding's version rather than the core version.

Rust logo

[Rust Core]

[Package][Rust Core Link] · [Docs][Rust Core Release Docs] · [Dev Docs][Rust Core Dev Docs] | C logo

[C Binding]

[Dev Docs][C Binding Dev Docs] | C++ logo

[Cpp Binding]

[Dev Docs][Cpp Binding Dev Docs] | D logo

[D Binding] | | Dart logo

[Dart Binding] | .NET logo

[Dotnet Binding] | Go logo

[Go Binding]

[Package][Go Binding Link] · [Docs][Go Release Docs] | Haskell logo

[Haskell Binding] | | Java logo

[Java Binding]

[Package][Java Binding Link] · [Docs][Java Binding Release Docs] · [Dev Docs][Java Binding Dev Docs] | Lua logo

[Lua Binding] | Node.js logo

[Node.js Binding]

[Package][Node.js Binding Link] · [Dev Docs][Node.js Binding Dev Docs] | OCaml logo

[OCaml Binding] | | PHP logo

[PHP Binding] | Python logo

[Python Binding]

[Package][Python Binding Link] · [Dev Docs][Python Binding Dev Docs] | Ruby logo

[Ruby Binding] | Swift logo

[Swift Binding] | | Zig logo

[Zig Binding] | | | |

Choose Your Layers

Add layers when your application needs cross-service behavior such as retries, timeouts, observability, or traffic control.

Retry icon

[RetryLayer]

Retry temporary failures. | Timeout icon

[TimeoutLayer]

Bound slow or hanging operations. | Logging icon

[LoggingLayer]

Emit structured operation logs. | Tracing icon

[TracingLayer]

Trace requests across systems. | | Metrics icon

[MetricsLayer]

Export operation metrics. | Prometheus icon

[PrometheusLayer]

Expose Prometheus metrics. | OpenTelemetry icon

[OtelMetricsLayer]

Export OpenTelemetry metrics. | Traffic control icon

Traffic Control

[ThrottleLayer] · [ConcurrentLimitLayer] | | Content type icon

[MimeGuessLayer]

Infer Content-Type from paths. | Route icon

[RouteLayer]

Route operations by path. | Cache icon

[FoyerLayer]

Add hybrid cache behavior. | Layers icon

[All Layers][Layers Docs]

Explore the full layer list. |

Explore all available layers in the [layers documentation][Layers Docs].

Choose Your Services

Pick the storage services that your application needs. See the full OpenDAL service configuration docs in the [services documentation][Services Docs].

Object Storage File Storage
AWS logo s3 Google Cloud logo gcs Azure logo azblob OpenDAL logo fs Apache Hadoop logo hdfs Apache Hadoop logo hdfs-native
Alibaba Cloud logo oss Huawei Cloud logo obs Tencent Cloud logo cos Apache Hadoop logo webhdfs lakeFS logo lakefs IPFS logo ipfs
Volcengine logo tos Backblaze logo b2 OpenStack logo swift IPFS logo ipmfs Azure logo azfile Azure logo azdls
Upyun logo upyun Vercel logo vercel-blob Alluxio logo alluxio Tencent Cloud logo goosefs Databricks logo dbfs
MongoDB logo gridfs MDN Web Docs logo opfs GitHub logo monoiofs
GitHub logo compfs
Cloud SaaS Standard Protocols
Google Drive logo gdrive Dropbox logo dropbox OneDrive logo onedrive HTTP icon http FTP icon ftp WebDAV icon webdav
Aliyun Drive logo aliyun-drive

Extension points exported contracts — how you extend this code

Builder (Interface)
Builder is used to set up underlying services. This trait allows the developer to define a builder struct that can: - [68 …
core/core/src/types/builder.rs
MetricsIntercept (Interface)
The interceptor for metrics. All metrics related libs should implement this trait to observe opendal's internal operati [6 …
core/layers/observe-metrics-common/src/lib.rs
ServiceConfig (Interface)
Service configurations that are mapped from OpenDAL [120 implementers]
bindings/java/src/main/java/org/apache/opendal/ServiceConfig.java
ReactiveOpenDALOperations (Interface)
Interface that specified a basic set of Apache OpenDALOperations, implemented by ReactiveOpenDALTemplate. [102 implementers]
integrations/spring/opendal-spring/src/main/java/org/apache/opendal/spring/core/ReactiveOpenDALOperations.java
OperatorOption (Interface)
OperatorOption configures operator layers. [4 implementers]
bindings/go/layer.go
NodeLayer (Interface)
(no doc) [6 implementers]
bindings/nodejs/src/layer.rs
PythonLayer (Interface)
(no doc) [4 implementers]
bindings/python/src/layers.rs
IntoSendFuture (Interface)
Make given future `Send`. [1 implementers]
integrations/object_store/src/utils.rs

Core symbols most depended-on inside this repo

clone
called by 1517
core/layers/retry/src/lib.rs
unwrap
called by 909
core/services/monoiofs/src/core.rs
write
called by 646
integrations/spring/opendal-spring/src/main/java/org/apache/opendal/spring/core/OpenDALOperations.java
is_empty
called by 614
core/services/gcs/src/core.rs
header
called by 580
core/core/src/raw/rps.rs
push
called by 433
core/core/src/raw/http_util/uri.rs
delete
called by 422
integrations/spring/opendal-spring/src/main/java/org/apache/opendal/spring/core/OpenDALOperations.java
read
called by 417
integrations/spring/opendal-spring/src/main/java/org/apache/opendal/spring/core/OpenDALOperations.java

Shape

Method 5,461
Function 2,064
Class 1,671
Enum 77
Interface 69
Route 47
Struct 44
FuncType 5
TypeAlias 4

Languages

Rust78%
Java6%
C#5%
C++3%
Go3%
Python2%

Modules by API surface

bindings/java/src/main/java/org/apache/opendal/ServiceConfig.java183 symbols
bindings/dotnet/src/operator.rs84 symbols
core/core/src/raw/ops.rs75 symbols
core/core/src/types/operator/operator.rs73 symbols
bindings/nodejs/src/lib.rs70 symbols
core/layers/observe-metrics-common/src/lib.rs69 symbols
bindings/dotnet/OpenDAL/Operator.cs67 symbols
core/core/src/types/buffer.rs66 symbols
core/services/s3/src/core.rs59 symbols
bindings/dotnet/OpenDAL/NativeMethods.cs58 symbols
core/services/s3/src/backend.rs57 symbols
core/layers/tail-cut/src/lib.rs54 symbols

Datastores touched

(mysql)Database · 1 repos
(mongodb)Database · 1 repos
mydbDatabase · 1 repos
myAuthDBDatabase · 1 repos
dbDatabase · 1 repos
usersDatabase · 1 repos
your_databaseDatabase · 1 repos
your_databaseDatabase · 1 repos

For agents

$ claude mcp add opendal \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page