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, Layerno longer work. Update them to use the dedicated submodules:
from opendal.types import Metadata
from opendal.layers import LayerThe 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 #6504
- feat(bindings/ruby): publish ruby binding by @erickguan in #6539
- feat(services/s3): add support for HTTP 429 TooManyRequests for S3-compatible services by @justinjoseph89 in #6589
- feat: Add Operator Registry by @Xuanwo in #6608
- feat: Add from_uri support for more object storage services by @Xuanwo in #6665
- feat(services/webdav): Implement write returns metadata by @yunchipang in #6660
- feat: Add from_uri support for http/webdav/ftp/sftp by @Xuanwo in #6666
- feat(services/swift): Implement write returns metadata by @yunchipang in #6669
- feat(buffer): add chunk iterator for Buffer by @TennyZhuang in #6672
- feat(services/dropbox): Implement write returns metadata by @yunchipang in #6673
- feat: Add from_uri support for all services by @Xuanwo in #6668
- chore(bindings/python): Add Justfile and format codebase by @chitralverma in #6677
- feat: Introduce TailCutLayer by @Xuanwo in #6680
- feat(services/gdrive): Implement write returns metadata by @yunchipang in #6683
- feat(bindings/python): Add stubs for Exception and Capability by @chitralverma in #6690
- feat(bindings/python): Add stubs for some more types by @chitralverma in #6703
- feat(bindings/python)!: Add stubs for remaining types by @chitralverma in #6720
- feat(bindings/python)!: Stubs fix for operator and version by @chitralverma in #6728
- RFC-6707: Capability Override Layer by @Xuanwo in #6707
- feat(bindings/python)!: Generate stubs for Operator overloads and Scheme by @chitralverma in #6729
- feat(bindings/nodejs): add concurrent limit layer by @kingsword09 in #6739
- feat(bindings/python): Enable ftp/hdfs_native/sftp for python by @chitralverma in #6745
- feat: implement content-md5 for s3 by @waynexia in #6508
- feat(services/compfs): implement IoVectoredBuf for Buffer by @meteorgan in #6762
- feat(services/lakefs): Implement write returns metadata by @kingsword09 in #6770
- Add
connection_pool_max_sizeoption to memcached and redis builders by @trxcllnt in #6759 - fix:(bindings/python) Gate service-sftp on windows targets by @chitralverma in #6777
- feat(binding/nodejs): add TimeoutLayer, LoggingLayer and ThrottleLayer in nodejs binding by @Kilerd in #6772
Changed
- refactor: Migrate cloudflare_kv from adapter::kv to Access instead by @kingsword09 in #6340
- refactor: Centralize date/time handling with Timestamp wrapper by @dami0806 in #6650
- refactor: Move Config related back to
config.rsinstead by @Xuanwo in #6667 - refactor: Remove deprecated project virtiofs by @Xuanwo in #6682
- refactor(core): remove conditional compilation in PageList trait by @crwen in #6715
- refactor: migrate tikv service from adapter::kv to impl Access directly by @koushiro in #6713
- refactor: migrate memcached service from adapter::kv to impl Access directly by @koushiro in #6714
- refactor: migrate mysql service from adapter::kv to impl Access directly by @koushiro in #6716
- refactor: migrate postgresql service from adapter::kv to impl Access directly by @koushiro in #6718
- refactor: migrate persy service from adapter::kv to impl Access directly by @koushiro in #6721
- refactor: migrate foundationdb service from adapter::kv to impl Access directly by @koushiro in #6722
- refactor: migrate surrealdb service from adapter::kv to impl Access directly by @koushiro in #6723
- refactor: migrate mongodb service from adapter::kv to impl Access directly by @koushiro in #6724
- refactor: migrate d1 service from adapter::kv to impl Access directly by @koushiro in #6725
- refactor: migrate gridfs service from adapter::kv to impl Access directly by @koushiro in #6726
- refactor: Migrate sqlite from adapter::kv to Access instead by @NoxTav in #6328
- refactor: migrate sled service from adapter::kv to impl Access directly by @koushiro in #6731
- refactor: migrate rocksdb service from adapter::kv to impl Access directly by @koushiro in #6732
- refactor: migrate redb service from adapter::kv to impl Access directly by @koushiro in #6733
- refactor: Remove deprecated kv and typed_kv adapters by @kingsword09 in #6734
- refactor(hdfs): restructure HdfsBackend and introduce HdfsCore by @kingsword09 in #6736
- refactor(hdfs-native): restructure HdfsNativeBackend and introduce HdfsNativeCore by @kingsword09 in #6737
- refactor(services): impl Debug for all service builders by @koushiro in #6756
- refactor(types)!: use string-based scheme over enum-based approach by @koushiro in #6765
Fixed
- fix(services/cloudflare_kv): Use DEFAULT_SCHEME constant for Cloudflare KV scheme by @kingsword09 in #6568
- fix(bindings/d): Enhance D bindings build script and tests for OpenDAL by @kingsword09 in #6569
- fix(services/obs): send Range header only for non-full reads by @QuakeWang in #6574
- ci: Fix default branch name in Ruby release workflow by @erickguan in #6585
- fix: expose ListDyn + WriteDyn by @bonsairobo in #6596
- fix(integrations/cloud_filter): upgrade cloud_filter to resolve CI failures after Rust 1.90.0 by @kingsword09 in #6602
- fix(integrations/unftp-sbe): properly shutdown after write by @choucavalier in #6601
- fix(azblob): don't call AzureStorageConfig::from_env on wasm by @bonsairobo in #6594
- fix: censor the "sig" query param for Azure SAS URIs by @bonsairobo in #6603
- fix(bindings/ruby): publish ruby binding gem by @erickguan in #6606
- fix(docs): docs.rs built failed by @FreeChenMou in #6658
- fix(layers/throttle): await limiter before throttled writes by @TennyZhuang in #6671
- fix:(bindings/python) Minor fix in stubs by @chitralverma in #6744
- fix: retry on 409 with AWS S3 by @wolfv in #6742
- fix(bindings/ruby): fix release build error by @erickguan in #6766
- fix(binding/nodejs): add missing lister methods by @Kilerd in #6769
- fix(bindings/python): Update python/stubgen & core/hdfs-native by @chitralverma in #6774
Docs
- doc(bindinds/ruby): add examples and links by @erickguan in #6609
- docs: spelling and minor wording change by @carlsonp in #6620
- docs(bin): add badges to bin tools README by @kingsword09 in #6642
- docs(python): add documentation for local usage by @jayceslesar in #6480
- docs(apps): add migration guide, update links; remove bin/{oli,ofs} (#6689) by @tao12345666333 in #6705
- docs(core/types): add some comments for Buffer by @meteorgan in #6746
- docs: Make it clear that bindings have different version with rust core. by @0lai0 in #6780
CI
- ci: Switch from --nocapture to --no-capture by @kingsword09 in #6567
- ci: Add patch file to Ruby release workflow by @erickguan in #6592
- build: enhance build website by @tisonkun in #6640
- ci: use shas fix action permissions by @kenwoodjw in #6659
- ci: Bump doc toolchain to allow opendal docs build by @Xuanwo in #6661
- ci: build and test on python3.14t by @kenwoodjw in #6670
- ci(nodejs): enable npm trusted publishing by @kingsword09 in #6685
- ci: remove ofs behavior tests and planning (#6689) by @tao12345666333 in #6704
- ci: Auto add ML thread link in github discussion by @Xuanwo in #6709
- ci: Fix bug in discussion thread link auto append by @Xuanwo in #6711
- ci: Fix GHA CI again by @Xuanwo in #6712
- ci: Remove hdfs-native from arm platform by @Xuanwo in #6792
Chore
- ci: switches etcd image to official etcd image by @kingsword09 in #6562
- chore(bindings/nodejs): replace custom sleep with setTimeout in tests by @kingsword09 in #6563
- chore(layers/prometheus-client): upgrade prometheus-client dependency to v0.24 by @koushiro in #6523
- chore(core): typo: update comments on
BytesRange::newby @TheR1sing3un in #6570 - chore(website): update The ASF logo by @suyanhanx in #6575
- chore: fix website build by @tisonkun in #6579
- chore: make clippy happy when using rust 1.90.0 by @kingsword09 in #6590
- chore: apache project provides code under ALv2 by @tisonkun in #6598
- chore: remove dead project openval by @Xuanwo in #6604
- chore: upgrade opentelemetry to 0.31.0 by @tisonkun in #6623
- chore(deps): bump tempfile from 3.20.0 to 3.23.0 in /bin/ofs by @dependabot[bot] in #6611
- chore(deps): bump tempfile from 3.21.0 to 3.23.0 in /bin/oli by @dependabot[bot] in #6610
- chore(deps): update datafusion requirement from 49.0.2 to 50.0.0 in /integrations/object_store by @dependabot[bot] in #6613
- chore(deps): bump @docusaurus/plugin-client-redirects from 3.8.1 to 3.9.1 in /website by @dependabot[bot] in #6614
- chore: avoid build warning by @tisonkun in #6627
- build: update docusaurus together by @asukaminato0721 in #6626
- chore(deps): bump the github-actions group with 8 updates by @dependabot[bot] in #6633
- chore(deps): bump logforth from 0.27.0 to 0.28.1 in /bin/ofs by @dependabot[bot] in #6629
- chore(deps): bump the http-serialization-utils group in /core with 7 updates by @dependabot[bot] in #6634
- chore(deps): bump clap from 4.5.38 to 4.5.41 in /bin/oli by @dependabot[bot] in #6630
- chore(deps): bump the logs-errors-checksums group in /core with 2 updates by @dependabot[bot] in #6635
- chore(deps): bump the pyo3 group in /bindings/python with 2 updates by @dependabot[bot] in #6631
- chore(deps): bump the third-party-actions group with 2 updates by @dependabot[bot] in #6636
- chore(deps): bump axum from 0.7.9 to 0.8.6 in /bin/oay by @dependabot[bot] in #6612
- chore(deps): bump the others group in /core with 15 updates by @dependabot[bot] in #6637
- chore: OpenDAL MSRV to 1.85 and edition 2024 by @fatelei in #6615
- refactor!: migrate chrono to jiff by @tisonkun in #6643
- chore: support more error codes for S3-compatible services by @leiysky in #6651
- chore: fixup timestamp refactor by @tisonkun in #6663
- chore: remove oay: delete bin/oay; drop CI; update release/dev tooling, dependabot, docs by @tao12345666333 in #6691
- chore: cleanup for moving oli/ofs and removing oay (#6689) by @tao12345666333 in #6700
- chore(deps): bump actions/setup-node from 5 to 6 in the github-actions group by @dependabot[bot] in #6695
- chore(deps): bump the http-serialization-utils group across 1 directory with 3 updates by @dependabot[bot] in #6717
- chore(deps): bump the others group in /core with 2 updates by @dependabot[bot] in #6698
- chore(deps): bump tokio from 1.47.1 to 1.48.0 in /core in the async-runtime group by @dependabot[bot] in #6696
- chore: remove integrations cloud_filter and fuse3; update CI/docs/README by @tao12345666333 in #6727
- chore: fixup README render and broken links by @tisonkun in #6735
- chore: apply suggestions from clippy 1.91.0 by @kingsword09 in #6754
- chore: cleanup some useless code related to services that were removed due to lack of maintenance by @koushiro in #6763
- chore: rename delete module => deleter module; ServiceAccessor => ServiceBackend by @koushiro in #6757
- chore(services): unify scheme usage by @koushiro in #6764
- chore(services): remove empty list operation and update docs of all services by @koushiro in #6768
- Bump to version 0.55.0 by @Xuanwo in #6771
- chore(types)!: remove deprecated
Operator::from_mapandOperator::via_mapby @koushiro in #6775 - chore(types)!: remove deprecated
list_with_versioncapability by @koushiro in #6781 - chore(services/s3)!: remove deprecated
S3::security_tokenby @koushiro in #6779 - chore(services/fs): use NotADirectory directly by @meteorgan in #6786
- chore: Fix build by @Xuanwo in #6789
- chore: Don't introduce openssl for python binding by @Xuanwo in #6790
New Contributors
- @TheR1sing3un made their first contribution in #6570
- @howardlau1999 made their first contribution in #6504
- @QuakeWang made their first contribution in #6574
- @justinjoseph89 made their first contribution in #6589
- @bonsairobo made their first contribution in #6596
- @choucavalier made their first contribution in #6601
- @carlsonp made their first contribution in #6620
- @FreeChenMou made their first contribution in #6658
- @dami0806 made their first contribution in #6650
- @yunchipang made their first contribution in #6660
- @jayceslesar made their first contribution in #6480
- @NoxTav made their first contribution in #6328
- @wolfv made their first contribution in #6742
- @trxcllnt made their first contribution in #6759
- @sebbASF made their first contribution in #6783
- @0lai0 made their first contribution in #6780
Full Changelog: v0.54.1...v0.55.0