# Apache OpenDAL™: *One Layer, All Storage.*
[](https://github.com/apache/opendal/discussions)
[](https://opendal.apache.org/discord)
[](https://deepwiki.com/apache/opendal)
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](https://opendal.apache.org/vision).
## 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 Core]**
[Package][Rust Core Link] · [Docs][Rust Core Release Docs] · [Dev Docs][Rust Core Dev Docs] |
**[C Binding]**
[Dev Docs][C Binding Dev Docs] |
**[Cpp Binding]**
[Dev Docs][Cpp Binding Dev Docs] |
**[D Binding]** |
|
**[Dart Binding]** |
**[Dotnet Binding]** |
**[Go Binding]**
[Package][Go Binding Link] · [Docs][Go Release Docs] |
**[Haskell Binding]** |
|
**[Java Binding]**
[Package][Java Binding Link] · [Docs][Java Binding Release Docs] · [Dev Docs][Java Binding Dev Docs] |
**[Lua Binding]** |
**[Node.js Binding]**
[Package][Node.js Binding Link] · [Dev Docs][Node.js Binding Dev Docs] |
**[OCaml Binding]** |
|
**[PHP Binding]** |
**[Python Binding]**
[Package][Python Binding Link] · [Dev Docs][Python Binding Dev Docs] |
**[Ruby Binding]**
[Package][Ruby Binding Link] · [Docs][Ruby Binding Docs] |
**[Swift Binding]** |
|
**[Zig Binding]** | | | |
## Choose Your Layers
Add layers when your application needs cross-service behavior such as retries, timeouts, observability, or traffic control.
| | | | |
| :---: | :---: | :---: | :---: |
|
**[RetryLayer]**
Retry temporary failures. |
**[TimeoutLayer]**
Bound slow or hanging operations. |
**[LoggingLayer]**
Emit structured operation logs. |
**[TracingLayer]**
Trace requests across systems. |
|
**[MetricsLayer]**
Export operation metrics. |
**[PrometheusLayer]**
Expose Prometheus metrics. |
**[OtelMetricsLayer]**
Export OpenTelemetry metrics. |
**Traffic Control**
[ThrottleLayer] · [ConcurrentLimitLayer] |
|
**[MimeGuessLayer]**
Infer `Content-Type` from paths. |
**[RouteLayer]**
Route operations by path. |
**[FoyerLayer]**
Add hybrid cache behavior. |
**[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 | ||||
|---|---|---|---|---|---|
| Cloud SaaS | Standard Protocols | ||||
| Databases | Key-Value & Embedded | ||||
| cloudflare-kv | |||||
| vercel-artifacts | |||||