Apache OpenDAL™ Go Binding
A native Go binding for OpenDAL: access S3, GCS, Azure Blob, the local
filesystem, and many more services through one API, with the
performance of the Rust core underneath. It is built on opendal-c via
purego and libffi, so no CGO is
required.
New to the model behind the API? Read Concepts first — service, operator, layer, operation are the same four ideas in every language.
note
This binding has its own version number, independent of the Rust core. Check compatibility against the binding's version, not the core's.
Status
Released and usable, published to pkg.go.dev.
Capabilities
- Synchronous API — every operation is a blocking method that returns a Go
error; there is no async variant. - Streaming reads and writes through
io.ReadSeekCloserandio.WriteCloser. - Per-scheme packages — each service is a small companion module under
github.com/apache/opendal-go-services/<scheme>that you import alongside the binding. - Presigned URLs for services that support them, returned as
*net/http.Request.
Installation
The binding requires libffi to be installed on your system.
go get github.com/apache/opendal/bindings/go@latest
Each service lives in its own companion module. Add the schemes you use, for example the in-memory service:
go get github.com/apache/opendal-go-services/memory
Useful Links
- API reference: pkg.go.dev
- Services & configuration: /services
- Source & examples:
bindings/go/ - Scheme packages:
opendal-go-services
Next steps
- Getting started — a runnable program, then a real backend.
- Connecting to your storage — build an operator for any service.
- Common tasks — read, write, stream, list, copy, rename, and presign.
- Going to production — retries, timeouts, errors, and capability checks.