Apache OpenDAL™ C++ Binding

June 17, 2026 · View on GitHub

status: unreleased

A C++ binding for OpenDAL, providing access to S3, GCS, Azure Blob, HDFS, the local filesystem, and 50+ more services through one API.

Note: This binding is experimental/WIP. Only Clang and AppleClang are currently supported. The API may change without notice.

Note: This binding has its own independent version number. When checking compatibility, refer to this binding's version, not the Rust core version.

Integration via CMake

FetchContent

include(FetchContent)

FetchContent_Declare(
  opendal-cpp
  GIT_REPOSITORY https://github.com/apache/opendal.git
  GIT_TAG        v0.40.0
  SOURCE_SUBDIR  bindings/cpp
)
FetchContent_MakeAvailable(opendal-cpp)

target_link_libraries(your_target opendal_cpp)

Vendored source

mkdir third_party && cd third_party
git clone https://github.com/apache/opendal.git
cd opendal && git checkout v0.40.0
add_subdirectory(third_party/opendal/bindings/cpp)
target_link_libraries(your_target opendal_cpp)

Prerequisites

  • CMake ≥ 3.22
  • Clang or AppleClang with C++17 support (C++20 required for async)

Build

mkdir build && cd build
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
make

CMake options

OptionDefaultDescription
OPENDAL_DEVOFFEnable all development options at once
OPENDAL_FEATURES""Comma-separated list of services, e.g. "opendal/services-s3"
OPENDAL_ENABLE_ASYNCOFFEnable async API (requires C++20)
OPENDAL_ENABLE_TESTINGOFFBuild and enable tests
OPENDAL_ENABLE_DOCUMENTATIONOFFBuild Doxygen docs
OPENDAL_ENABLE_ADDRESS_SANITIZEROFFEnable address sanitizer

Example

#include "opendal.hpp"
#include <iostream>

int main() {
    // Construct an operator. The second argument is a config map.
    opendal::Operator op("memory");

    // Write, read, stat.
    op.Write("hello.txt", "Hello, OpenDAL!");
    std::string data = op.Read("hello.txt");
    std::cout << data << "\n";

    opendal::Metadata meta = op.Stat("hello.txt");
    std::cout << "size=" << meta.ContentLength() << "\n";
}

See the user guide for more examples including streaming reads, directory listing, real backends, and the async API.

Contributing

See CONTRIBUTING.md at the repository root.

License and Trademarks

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.