Skip to main content
Apache OpenDAL™ — Open Data Access Layer

One Layer,
All Storage.

One zero-cost Operator for object storage, file systems, databases and more — in the language you already ship.

50+services
17languages
5k+stars
10M+downloads
$ cargo add opendal
use opendal::services::S3;
use opendal::Operator;

// Configure a backend once, then use one Operator.
let builder = S3::default().bucket("data");
let op = Operator::new(builder)?.finish();

op.write("hello.txt", "Hello, World!").await?;
let bytes = op.read("hello.txt").await?;
Why OpenDAL

A storage layer you can build production on.

OpenDAL turns one vision — One Layer, All Storage — into a practical foundation for applications, libraries and data systems.

01

One API, all storage

Object storage, file systems, cloud SaaS, databases, protocols and key-value services reached through a single Operator and one mental model.

02

Zero-cost core

Built in Rust with composable services and layers. Compile in only the backends and capabilities you use, and pay for nothing else.

03

Production-ready by composition

Stack retry, timeout, logging, tracing, metrics, throttling and concurrency limits as reusable layers — no rewrites, no glue code.

04

Open and extensible

Add services, layers and language bindings without forking the model. Developed in the open and governed the Apache Way.

Capabilities

Configure once. Access anything.

One Operator is a full toolkit for real-world data — read and write at scale, recover from failures, and work with files — the same way on every backend.

Read in parallel
let op = Operator::new(S3::default().bucket("data"))?.finish();

// Read just the bytes you need.
let head = op.read_with("logs/today").range(0..64 * 1024).await?;

// Or pull a large object in parallel chunks.
let full = op
.read_with("big.parquet")
.concurrent(8)
.chunk(8 * 1024 * 1024)
.await?;
Services

50+ storage services, one interface.

Enable only the backends your application needs. The Operator contract stays identical across every one.

Object Storage

s3gcsazblobosscosobsb2tos

File Storage

fshdfsalluxiolakefsipfsdbfs

Cloud SaaS

gdrivedropboxonedrivehfgithubkoofr

Protocols

httpftpwebdavsftp

Databases

sqlitemysqlpostgresqlmongodbsurrealdbd1

Key-Value

redisetcdrocksdbmemcachedtikvfoundationdb
Bindings

Ship it in your language.

Each binding exposes the same OpenDAL service model while following its own ecosystem's conventions.

Rust
Python
Java
Go
Node.js
C
C++
.NET
Ruby
PHP
Swift
Haskell
OCaml
Lua
Dart
D
Zig
Layers

Production behavior, composed — not coded.

Stack cross-cutting concerns as reusable layers. The order is explicit and the core stays zero-cost.

Start building

One layer for all your storage.

Join the infrastructure builders, platform teams and application developers accessing data freely, painlessly and efficiently.