Upgrade to v0.49
May 28, 2026 ยท View on GitHub
Breaking changes
Hugging Face config requires repoType
ServiceConfig.Hf no longer relies on the backend's implicit model default. Set repoType explicitly when creating Hugging Face operators:
ServiceConfig.Hf config = ServiceConfig.Hf.builder()
+ .repoType("model")
.repoId("username/repo")
.build();
Use the appropriate value for the repository: model, dataset, space, or bucket.
Generated service configs use canonical service names
Generated ServiceConfig entries now use canonical OpenDAL service names.
- Replace
ServiceConfig.HuggingfacewithServiceConfig.Hf. scheme()now returns hyphenated canonical service names for affected services, such asaliyun-drive,cloudflare-kv,hdfs-native,vercel-artifacts,vercel-blob, andyandex-disk, instead of the previous underscore variants.
Removed services
The following services have been removed:
- Chainsafe service has been removed (PR-5744) - The service has been sunset.
- libsql service has been removed (PR-5616) - Dead service removal.
Batch operations removed
PR-5393 removes the batch concept from OpenDAL. All batch-related operations and capabilities have been removed.
Capability changes
Options-based API
New options classes have been introduced for structured operation configuration:
ReadOptions- for read operationsWriteOptions- for write operationsListOptions- for list operationsStatOptions- for stat operations
Example usage:
// Read with options
ReadOptions options = ReadOptions.builder()
.range(0, 1024)
.ifMatch("etag")
.build();
byte[] data = operator.read("path/to/file", options);
// Write with options
WriteOptions options = WriteOptions.builder()
.contentType("text/plain")
.cacheControl("max-age=3600")
.build();
operator.write("path/to/file", data, options);
Upgrade to v0.48
Breaking change
PR-6169 The append method in AsyncOperator has been deprecated. Please use the write method with WriteOptions.builder().append(true).build() instead.
Upgrade to v0.47
Breaking change
artifactId of the opendal-java has changed from to opendal to align with the convention of entire OpenDAL project.
<dependencies>
<dependency>
<groupId>org.apache.opendal</groupId>
- <artifactId>opendal-java</artifactId>
+ <artifactId>opendal</artifactId>
<version>${opendal.version}</version>
</dependency>
<dependency>
<groupId>org.apache.opendal</groupId>
- <artifactId>opendal-java</artifactId>
+ <artifactId>opendal</artifactId>
<version>${opendal.version}</version>
<classifier>${os.detected.classifier}</classifier>
</dependency>
</dependencies>
Upgrade to v0.46
Breaking change
PR-4641 renames async Operator to AsyncOperator and BlockingOperator to Operator.
Upgrade to v0.44
Breaking change
Because of a TLS lib issue, we temporarily disable the services-ftp feature.
Upgrade to v0.41
Breaking change for constructing operators
PR-3166 changes the API for constructing operators:
Previous:
new BlockingOperator(scheme, config);
new Operator(scheme, config);
Current:
BlockingOperator.of(scheme, config);
Operator.of(scheme, config);
Now, there is no public constructor for operators, but only factory methods. In this way, the APIs are free to do arbitrary verifications and preparations before constructing operators.