Apache OpenDAL™ C Binding (WIP)
July 10, 2026 · View on GitHub
A C binding for OpenDAL, providing blocking access to S3, GCS, Azure Blob, the local filesystem, and 50+ more storage backends through a single C API.
We release the OpenDAL C binding independently of the
opendal crate (Rust core). For updates
and compatibility, use the C binding version instead of the opendal crate
version.
User guide: https://opendal.apache.org/docs/bindings/c
Building
Requirements: C11/C++14 compiler, CMake, Rust toolchain.
mkdir -p build && cd build
# Default build (memory + fs services)
cmake ..
make
# Enable additional services
cmake .. -DFEATURES="opendal/services-s3,opendal/services-gcs"
make
The header is at include/opendal.h. The shared library is written to
../../target/debug/ after building.
Example
#include <assert.h>
#include <stdio.h>
#include "opendal.h"
int main(void)
{
/* Build an operator for the "memory" service. */
opendal_result_operator_new result = opendal_operator_new("memory", NULL);
assert(result.op != NULL && result.error == NULL);
opendal_operator *op = result.op;
/* Write bytes. */
const char *msg = "Hello, OpenDAL!";
opendal_bytes data = { .data = (uint8_t *)msg, .len = 15 };
opendal_error *err = opendal_operator_write(op, "/hello.txt", &data);
assert(err == NULL);
/* Read them back. */
opendal_result_read r = opendal_operator_read(op, "/hello.txt");
assert(r.error == NULL);
printf("%.*s\n", (int)r.data.len, r.data.data);
opendal_bytes_free(&r.data);
opendal_operator_free(op);
return 0;
}
See examples/ for more, including error handling patterns.
Full documentation is at https://opendal.apache.org/docs/bindings/c.
Contributing
See CONTRIBUTING.md at the repository root. To run
tests you need Valgrind and GTest:
cd build && make tests && ./tests
Format C sources with make format (requires clang-format). Do not manually
format include/opendal.h.
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.