v0.55.0
Rust Core Upgrade to v0.55
Public API
Timestamp types now come from jiff
All public metadata APIs that previously exposed chrono::DateTime<Utc> now use jiff::Timestamp. For example, Metadata::last_modified() and related setters return/accept Timestamp values (core/src/types/metadata.rs). Update downstream crates to depend on jiff if they manipulate these timestamps or convert them to other formats.
Scheme handling is string-based
OperatorInfo::scheme() now returns &'static str instead of Scheme, and Operator::via_iter accepts impl AsRef<str> (typically the services::*_SCHEME constants). Additionally, the deprecated constructors Operator::from_map and Operator::via_map have been removed. Migrate any code that relied on the enum variants or the removed constructors to the new string-based constants and from_iter/via_iter.
List APIs only support versions
OpList::with_version()/version() and Capability::list_with_version have been removed after a long deprecation cycle. Use with_versions()/versions() on OpList and read Capability::list_with_versions instead.
S3Builder::security_token removed
S3Builder no longer exposes the deprecated security_token() helper. Use session_token() exclusively when configuring temporary credentials.
KV-style services no longer pretend to support list
Services that never returned meaningful results for Operator::list (such as D1, FoundationDB, GridFS, Memcached, MongoDB, MySQL, Persy, PostgreSQL, Redb, Redis, SurrealDB, TiKV, etc.) now rely on the default Unsupported implementation. Those features will be implemented later.
Raw API
Deprecated KV adapters removed
The legacy opendal::raw::adapters::{kv, typed_kv} modules have been deleted. Services should directly implement Access instead of depending on the adapters. Remove the corresponding imports and shim layers from any out-of-tree services.
Bindings Python Upgrade to v0.47
Breaking change: Module exports are explicit
opendal.__init__ now only re-exports the capability, exceptions, file, layers, services, types, Operator, and AsyncOperator symbols. Imports such as:
from opendal import Metadata, Layer
no longer work. Update them to use the dedicated submodules:
from opendal.types import Metadata
from opendal.layers import Layer
The legacy helper module opendal.__base has also been removed together with _Base.
Breaking change: Capability accessors renamed
Both Operator.full_capability() and AsyncOperator.full_capability() have been renamed to capability(). Adjust your code accordingly:
-caps = op.full_capability()
+caps = op.capability()
Breaking change: Service identifiers now have typed enums
The constructors for Operator / AsyncOperator provide overloads that accept opendal.services.Scheme members. While plain strings are still accepted at runtime, type checkers (pyright/mypy) expect the new enum values. Migrate code bases that relied on importing the old Scheme enum from opendal to from opendal import services and use services.Scheme.<NAME>.
What's Changed
Added
- feat(services/oss): allow users to specify endpoint addressing style by @howardlau1999 in https://github.com/apache/opendal/pull/6504
- feat(bindings/ruby): publish ruby binding by @erickguan in https://github.com/apache/opendal/pull/6539
- feat(services/s3): add support for HTTP 429 TooManyRequests for S3-compatible services by @justinjoseph89 in https://github.com/apache/opendal/pull/6589
- feat: Add Operator Registry by @Xuanwo in https://github.com/apache/opendal/pull/6608
- feat: Add from_uri support for more object storage services by @Xuanwo in https://github.com/apache/opendal/pull/6665
- feat(services/webdav): Implement write returns metadata by @yunchipang in https://github.com/apache/opendal/pull/6660
- feat: Add from_uri support for http/webdav/ftp/sftp by @Xuanwo in https://github.com/apache/opendal/pull/6666
- feat(services/swift): Implement write returns metadata by @yunchipang in https://github.com/apache/opendal/pull/6669
- feat(buffer): add chunk iterator for Buffer by @TennyZhuang in https://github.com/apache/opendal/pull/6672
- feat(services/dropbox): Implement write returns metadata by @yunchipang in https://github.com/apache/opendal/pull/6673
- feat: Add from_uri support for all services by @Xuanwo in https://github.com/apache/opendal/pull/6668
- chore(bindings/python): Add Justfile and format codebase by @chitralverma in https://github.com/apache/opendal/pull/6677
- feat: Introduce TailCutLayer by @Xuanwo in https://github.com/apache/opendal/pull/6680
- feat(services/gdrive): Implement write returns metadata by @yunchipang in https://github.com/apache/opendal/pull/6683
- feat(bindings/python): Add stubs for Exception and Capability by @chitralverma in https://github.com/apache/opendal/pull/6690
- feat(bindings/python): Add stubs for some more types by @chitralverma in https://github.com/apache/opendal/pull/6703
- feat(bindings/python)!: Add stubs for remaining types by @chitralverma in https://github.com/apache/opendal/pull/6720
- feat(bindings/python)!: Stubs fix for operator and version by @chitralverma in https://github.com/apache/opendal/pull/6728
- RFC-6707: Capability Override Layer by @Xuanwo in https://github.com/apache/opendal/pull/6707
- feat(bindings/python)!: Generate stubs for Operator overloads and Scheme by @chitralverma in https://github.com/apache/opendal/pull/6729
- feat(bindings/nodejs): add concurrent limit layer by @kingsword09 in https://github.com/apache/opendal/pull/6739
- feat(bindings/python): Enable ftp/hdfs_native/sftp for python by @chitralverma in https://github.com/apache/opendal/pull/6745
- feat: implement content-md5 for s3 by @waynexia in https://github.com/apache/opendal/pull/6508
Changed
- refactor: Migrate cloudflare_kv from adapter::kv to Access instead by @kingsword09 in https://github.com/apache/opendal/pull/6340
- refactor: Centralize date/time handling with Timestamp wrapper by @dami0806 in https://github.com/apache/opendal/pull/6650
- refactor: Move Config related back to
config.rsinstead by @Xuanwo in https://github.com/apache/opendal/pull/6667 - refactor: Remove deprecated project virtiofs by @Xuanwo in https://github.com/apache/opendal/pull/6682
- refactor(core): remove conditional compilation in PageList trait by @crwen in https://github.com/apache/opendal/pull/6715
- refactor: migrate tikv service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6713
- refactor: migrate memcached service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6714
- refactor: migrate mysql service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6716
- refactor: migrate postgresql service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6718
- refactor: migrate persy service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6721
- refactor: migrate foundationdb service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6722
- refactor: migrate surrealdb service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6723
- refactor: migrate mongodb service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6724
- refactor: migrate d1 service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6725
- refactor: migrate gridfs service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6726
- refactor: Migrate sqlite from adapter::kv to Access instead by @NoxTav in https://github.com/apache/opendal/pull/6328
- refactor: migrate sled service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6731
- refactor: migrate rocksdb service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6732
- refactor: migrate redb service from adapter::kv to impl Access directly by @koushiro in https://github.com/apache/opendal/pull/6733
- refactor: Remove deprecated kv and typed_kv adapters by @kingsword09 in https://github.com/apache/opendal/pull/6734
- refactor(hdfs): restructure HdfsBackend and introduce HdfsCore by @kingsword09 in https://github.com/apache/opendal/pull/6736
Fixed
- fix(services/cloudflare_kv): Use DEFAULT_SCHEME constant for Cloudflare KV scheme by @kingsword09 in https://github.com/apache/opendal/pull/6568
- fix(bindings/d): Enhance D bindings build script and tests for OpenDAL by @kingsword09 in https://github.com/apache/opendal/pull/6569
- fix(services/obs): send Range header only for non-full reads by @QuakeWang in https://github.com/apache/opendal/pull/6574
- ci: Fix default branch name in Ruby release workflow by @erickguan in https://github.com/apache/opendal/pull/6585
- fix: expose ListDyn + WriteDyn by @bonsairobo in https://github.com/apache/opendal/pull/6596
- fix(integrations/cloud_filter): upgrade cloud_filter to resolve CI failures after Rust 1.90.0 by @kingsword09 in https://github.com/apache/opendal/pull/6602
- fix(integrations/unftp-sbe): properly shutdown after write by @choucavalier in https://github.com/apache/opendal/pull/6601
- fix(azblob): don't call AzureStorageConfig::from_env on wasm by @bonsairobo in https://github.com/apache/opendal/pull/6594
- fix: censor the "sig" query param for Azure SAS URIs by @bonsairobo in https://github.com/apache/opendal/pull/6603
- fix(bindings/ruby): publish ruby binding gem by @erickguan in https://github.com/apache/opendal/pull/6606
- fix(docs): docs.rs built failed by @FreeChenMou in https://github.com/apache/opendal/pull/6658
- fix(layers/throttle): await limiter before throttled writes by @TennyZhuang in https://github.com/apache/opendal/pull/6671
- fix:(bindings/python) Minor fix in stubs by @chitralverma in https://github.com/apache/opendal/pull/6744
- fix: retry on 409 with AWS S3 by @wolfv in https://github.com/apache/opendal/pull/6742
- fix(bindings/ruby): fix release build error by @erickguan in https://github.com/apache/opendal/pull/6766
- fix(binding/nodejs): add missing lister methods by @Kilerd in https://github.com/apache/opendal/pull/6769
- fix(bindings/python): Update python/stubgen & core/hdfs-native by @chitralverma in https://github.com/apache/opendal/pull/6774
Docs
- doc(bindinds/ruby): add examples and links by @erickguan in https://github.com/apache/opendal/pull/6609
- docs: spelling and minor wording change by @carlsonp in https://github.com/apache/opendal/pull/6620
- docs(bin): add badges to bin tools README by @kingsword09 in https://github.com/apache/opendal/pull/6642
- docs(python): add documentation for local usage by @jayceslesar in https://github.com/apache/opendal/pull/6480
- docs(apps): add migration guide, update links; remove bin/{oli,ofs} (#6689) by @tao12345666333 in https://github.com/apache/opendal/pull/6705
- docs(core/types): add some comments for Buffer by @meteorgan in https://github.com/apache/opendal/pull/6746
- docs: Make it clear that bindings have different version with rust core. by @0lai0 in https://github.com/apache/opendal/pull/6780
CI
- ci: Switch from --nocapture to --no-capture by @kingsword09 in https://github.com/apache/opendal/pull/6567
- ci: Add patch file to Ruby release workflow by @erickguan in https://github.com/apache/opendal/pull/6592
- build: enhance build website by @tisonkun in https://github.com/apache/opendal/pull/6640
- ci: use shas fix action permissions by @kenwoodjw in https://github.com/apache/opendal/pull/6659
- ci: Bump doc toolchain to allow opendal docs build by @Xuanwo in https://github.com/apache/opendal/pull/6661
- ci: build and test on python3.14t by @kenwoodjw in https://github.com/apache/opendal/pull/6670
- ci(nodejs): enable npm trusted publishing by @kingsword09 in https://github.com/apache/opendal/pull/6685
- ci: remove ofs behavior tests and planning (#6689) by @tao12345666333 in https://github.com/apache/opendal/pull/6704
- ci: Auto add ML thread link in github discussion by @Xuanwo in https://github.com/apache/opendal/pull/6709
- ci: Fix bug in discussion thread link auto append by @Xuanwo in https://github.com/apache/opendal/pull/6711
- ci: Fix GHA CI again by @Xuanwo in https://github.com/apache/opendal/pull/6712
- ci: Remove hdfs-native from arm platform by @Xuanwo in https://github.com/apache/opendal/pull/6792
Chore
- ci: switches etcd image to official etcd image by @kingsword09 in https://github.com/apache/opendal/pull/6562
- chore(bindings/nodejs): replace custom sleep with setTimeout in tests by @kingsword09 in https://github.com/apache/opendal/pull/6563
- chore(layers/prometheus-client): upgrade prometheus-client dependency to v0.24 by @koushiro in https://github.com/apache/opendal/pull/6523
- chore(core): typo: update comments on
BytesRange::newby @TheR1sing3un in https://github.com/apache/opendal/pull/6570 - chore(website): update The ASF logo by @suyanhanx in https://github.com/apache/opendal/pull/6575
- chore: fix website build by @tisonkun in https://github.com/apache/opendal/pull/6579
- chore: make clippy happy when using rust 1.90.0 by @kingsword09 in https://github.com/apache/opendal/pull/6590
- chore: apache project provides code under ALv2 by @tisonkun in https://github.com/apache/opendal/pull/6598
- chore: remove dead project openval by @Xuanwo in https://github.com/apache/opendal/pull/6604
- chore: upgrade opentelemetry to 0.31.0 by @tisonkun in https://github.com/apache/opendal/pull/6623
- chore(deps): bump tempfile from 3.20.0 to 3.23.0 in /bin/ofs by @dependabot[bot] in https://github.com/apache/opendal/pull/6611
- chore(deps): bump tempfile from 3.21.0 to 3.23.0 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6610
- chore(deps): update datafusion requirement from 49.0.2 to 50.0.0 in /integrations/object_store by @dependabot[bot] in https://github.com/apache/opendal/pull/6613
- chore(deps): bump @docusaurus/plugin-client-redirects from 3.8.1 to 3.9.1 in /website by @dependabot[bot] in https://github.com/apache/opendal/pull/6614
- chore: avoid build warning by @tisonkun in https://github.com/apache/opendal/pull/6627
- build: update docusaurus together by @asukaminato0721 in https://github.com/apache/opendal/pull/6626
- chore(deps): bump the github-actions group with 8 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6633
- chore(deps): bump logforth from 0.27.0 to 0.28.1 in /bin/ofs by @dependabot[bot] in https://github.com/apache/opendal/pull/6629
- chore(deps): bump the http-serialization-utils group in /core with 7 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6634
- chore(deps): bump clap from 4.5.38 to 4.5.41 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6630
- chore(deps): bump the logs-errors-checksums group in /core with 2 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6635
- chore(deps): bump the pyo3 group in /bindings/python with 2 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6631
- chore(deps): bump the third-party-actions group with 2 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6636
New Contributors
- @TheR1sing3un made their first contribution in https://github.com/apache/opendal/pull/6570
- @howardlau1999 made their first contribution in https://github.com/apache/opendal/pull/6504
- @QuakeWang made their first contribution in https://github.com/apache/opendal/pull/6574
- @justinjoseph89 made their first contribution in https://github.com/apache/opendal/pull/6589
- @bonsairobo made their first contribution in https://github.com/apache/opendal/pull/6596
- @choucavalier made their first contribution in https://github.com/apache/opendal/pull/6601
- @carlsonp made their first contribution in https://github.com/apache/opendal/pull/6620
- @FreeChenMou made their first contribution in https://github.com/apache/opendal/pull/6658
- @dami0806 made their first contribution in https://github.com/apache/opendal/pull/6650
- @yunchipang made their first contribution in https://github.com/apache/opendal/pull/6660
- @jayceslesar made their first contribution in https://github.com/apache/opendal/pull/6480
- @NoxTav made their first contribution in https://github.com/apache/opendal/pull/6328
- @wolfv made their first contribution in https://github.com/apache/opendal/pull/6742
- @trxcllnt made their first contribution in https://github.com/apache/opendal/pull/6759
- @sebbASF made their first contribution in https://github.com/apache/opendal/pull/6783
- @0lai0 made their first contribution in https://github.com/apache/opendal/pull/6780
Full Changelog: https://github.com/apache/opendal/compare/v0.54.1...v0.55.0