# What changed in opendal

> 33 changes in opendal 0.59 from its official release notes, upgrade guides and advisories: 4 breaking, 1 deprecations, 8 new APIs and options. Each one cited. Sources checked 2026-10-19. HTML: https://unstale.sh/pypi/opendal/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## opendal 0.59

### Breaking changes

- Redundant async overloads are removed from the .NET binding, and Operator is simplified. (0.59.5) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5)
- GooseFS rejects unknown write_type values instead of defaulting to MUST_CACHE. (0.59.5) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5)
- confined_join and prepare_path now reject absolute paths. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- Unknown write_type values are rejected instead of defaulting to MUST_CACHE. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)

### Deprecations

- The WebDAV service option enable_conditional_read is deprecated. (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)

### New APIs and options

- Adds an implementation of Read and Seek for Buffer. (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- Adds Check to the .NET binding. (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- Adds Exists to the .NET binding. (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- The HDFS service adds copy support. (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- The Azure Blob service adds support for custom credential providers. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- GooseFS exposes cache features. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- A native MoonBit binding is initialized, enabling developers to use OpenDAL from MoonBit. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- The .NET binding exposes user metadata and returns metadata from Write and Copy. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)

### Performance

- Resolved downloads are reused across readers. (0.59.5) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5)
- AsyncFile writes avoid staging copies. (0.59.5) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5)
- Synchronous File writes avoid staging copies. (0.59.5) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5)
- AsyncFile writes avoid staging copies. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- Synchronous File writes avoid staging copies. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- Directory creation is coalesced by parent and name. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- The Python binding releases the GIL during blocking File I/O. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)

### Behavior and default changes

- The Hugging Face resolve cache is opt-in. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)

### Fixes and other changes

- Retries now occur on HTTP status code 429. (0.59.5) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5)
- Paths passed to Deleter::delete are normalized. (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- Pass the cancellation token by name: replace op.ListAsync(path, token) with op.ListAsync(path, cancellationToken: token). (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- OSS now prefers OIDC credentials over ECS metadata. (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- Prefetch is disabled for concurrent writes and copies. (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- Pass the cancellation token by name: replace op.ReadAsync(path, token) with op.ReadAsync(path, cancellationToken: token). (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- Pass the cancellation token by name: replace op.StatAsync(path, token) with op.StatAsync(path, cancellationToken: token). (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- Pass the cancellation token by name: replace op.WriteAsync(path, bytes, token) with op.WriteAsync(path, bytes, cancellationToken: token). (0.59.4) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.4)
- GooseFS read streams now return metadata. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- Hugging Face follows case redirects instead of resolving the canonical repository ID. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- The Java binding installs a default HTTP transport on load. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.5), [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
- Seafile retries incomplete authentication initialization. (0.59.3) — [release notes](https://github.com/apache/opendal/releases/tag/v0.59.3)
