OpenDAL provides native bindings for multiple programming languages, enabling developers to use the unified data access layer from their preferred programming environment. The language bindings maintain API consistency across languages while providing idiomatic interfaces that feel natural to each language's ecosystem.
For information about the core OpenDAL architecture that these bindings expose, see Core Architecture. For details about individual language-specific implementations, see the respective subsections: Python Binding, Java Binding, NodeJS Binding, C Binding, and Other Language Bindings.
OpenDAL employs two primary integration strategies for language bindings: direct Rust integration for select languages and a C-based approach for broader language compatibility.
Sources: bindings/python/Cargo.toml168-169 bindings/java/Cargo.toml153 bindings/nodejs/Cargo.toml155-159 bindings/c/README.md97-99 bindings/go/README.md6
All language bindings share a common service feature architecture, with variations based on platform compatibility and binding maturity.
Service Category | Default Features | Extended Features | Platform Restrictions |
---|---|---|---|
Cloud Storage | services-s3 , services-azblob , services-gcs , services-cos | services-obs , services-oss , services-swift | None |
File Systems | services-fs , services-webdav , services-webhdfs | services-hdfs , services-sftp | Unix only for SFTP |
Key-Value | services-memory | services-redis , services-memcached , services-sled | Varies by binding |
Databases | None (default) | services-postgresql , services-mysql , services-sqlite | Feature-dependent |
Sources: bindings/python/Cargo.toml31-46 bindings/java/Cargo.toml34-49 bindings/nodejs/Cargo.toml30-45
Sources: bindings/python/Cargo.toml168 bindings/java/Cargo.toml153 bindings/nodejs/Cargo.toml155-159
The direct integration bindings use language-specific FFI technologies:
pyo3
crate for seamless Rust-Python integration, supporting both synchronous and asynchronous operationsjni
crate, providing async-first APIs through AsyncOperator
napi
and napi-derive
crates for native addon developmentThe C binding serves as the stable ABI foundation for most language bindings, providing a consistent interface that can be consumed by various language FFI systems.
Sources: bindings/c/README.md11-51 bindings/c/README.md97-99
Most language bindings follow a common pattern of wrapping the C library:
libffi
with purego
for CGO-free integration, providing native Go interfaces without C compilation requirementsSources: bindings/go/README.md6 bindings/cpp/README.md11-21 bindings/haskell/README.md11-24 bindings/ruby/README.md5
Each direct Rust binding follows consistent Cargo configuration patterns:
Sources: bindings/python/Cargo.toml154-156 bindings/java/Cargo.toml29-31 bindings/nodejs/Cargo.toml149-151
Different bindings have varying levels of service support based on platform constraints and implementation maturity:
services-sftp
are conditionally enabledprotoc
(like services-etcd
, services-tikv
) are often disabled in bindingsservices-foundationdb
, services-rocksdb
) may be excludedSources: bindings/python/Cargo.toml172-180 bindings/java/Cargo.toml163-168 bindings/nodejs/Cargo.toml55-80
Auto-refresh not enabled yet