# universal_pathlib changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [0.3.10] - 2026-02-22 ### Fixed - upath.extensions: fix ProxyUPath as copy or move target on 3.14+ (#547) ### Changed - upath: updated flavours (#545) - ci: updated development dependencies (#550) ## [0.3.9] - 2026-01-31 ### Fixed - upath.core: raise TypeError if using subclass directly with wrong protocol (#541) - upath.core: (backcompat) TypeError on protocol incompatibility (#540) - upath.extensions: Pydantic serialize ProxyUPath (#538) ### Changed - upath: updated flavours (#512) ## [0.3.8] - 2026-01-11 ### Added - tests: add missing pathlib abc tests (#511) - tests: split base test cases into joinable/readable/writable tests (#507) - docs: describe UPath/s3fs behavior with `is_dir()` (#503) ### Fixed - upath.implementations.cloud: fix S3Path copy to local with name collision of file/dir (#533) - upath.core: fix behaviour of `UPath.parent` and `UPath.parents` (#529) - upath.implementations.github: adjust GitHubPath error reporting (#522) - upath.implementations.cloud: fix error handling on HfPath (#521) - upath.implementations.zip: disable write mode in universal-pathlib (#520) - upath.implementations.tar: fix error handling for write methods (#519) - upath.implementations.http: fix HTTPPath error handling for unsupported methods (#518) - upath.implementations.data: fix DataPath error handling for unsupported methods (#517) - upath.core: fix `touch()` method (#515) - upath.extensions: fix `is_relative_to()` for extensions (#510) - upath.extensions: fix error behavior for `hardlink_to()` backport and `symlink_to()` (#508) - upath: fix `iterdir()` behaviour when raising NotADirectoryError for all UPath subclasses (#506) - tests: xfail on name resolution error in github suite (#523) - tests: fix GitHub tests without a network connection (#509) ### Changed - upath: adjust behavior of `UPath.copy()` and `UPath.copy_into()` with str and Path targets (#530) - upath.core: handover cached fs instances in `with_segments()` (#516) - tests: split test suite according to abcs and cleanup tests (#513) - tests: remove two unused helper functions introduced in #492 (#505) - ci: do not hardcode Python executable name (#504) - ci: updated development dependencies (#501) ## [0.3.7] - 2025-12-03 ### Added - upath.implementations.ftp: added FTPPath support (#485) - tests: added comprehensive warning checks in test suite (#487) - tests: added xfail handling for network connectivity issues (#492) ### Fixed - upath: fixed trailing slash behavior for cloud paths (#488) - upath.core: fixed rename implementation for relative paths (#493) - upath.implementations.memory: fixed MemoryPath root (#495) - upath.implementations.ftp: added support for FTP modification time info format (#485) - upath.implementations.local: fixed rename return type on Python 3.14+ (#493) - upath.extensions: fixed .cwd() behavior for ProxyUPath (#493) - upath.extensions: fixed typing of .cwd() method (#493) - docs: fixed typing example in README (#484) - pypi: fixed maintainer display on PyPI (#486) ### Changed - upath.core: deprecated keyword arguments for UPath.rename() (#496) - ci: updated development dependencies (dvc, huggingface-hub) ## [0.3.6] - 2025-11-13 ### Added - upath: add `UnsupportedOperation` exception for better pathlib compatibility (#474) - upath: backport pathlib 3.10-3.14 method signatures (follow_symlinks, newline, case_sensitive, recurse_symlinks, walk_up, etc.) (#476) - docs: add ProxyUPath usage example (#475) - tests: add comprehensive pathlib backport signature tests (#474, #476, #477) ### Fixed - upath.types: correct `st_birthtime` and `st_birthtime_ns` availability (Windows 3.12+, macOS, FreeBSD only) (#476, #477) - upath: fix `stat()` return type to use `StatResultType` protocol (#476) - upath: fix equality checks for extensions and local paths (#477) - upath.implementations.local: fix `_copy_from` method (#477) - upath.core: remove unneeded lines in `_fs_factory` (#478) ### Changed - upath.core: raise `TypeError` when creating UPath with incompatible protocols (#477) ## [0.3.5] - 2025-11-09 ### Added - upath.implementations.cloud: add `HfPath` for Hugging Face Hub support (#457) - docs: MkDocs documentation on Read The Docs (#468, #469) ### Fixed - upath: fix `relative_to` for simplecache, smb, sftp and extensions (#458) ### Changed - ci: nox and ci updates (#466) - upath: update flavours (#467) ## [0.3.4] - 2025-10-16 ### Added - upath.implementations: add `SimpleCachePath` for simplecache protocol support (#453) - upath: support JSON schema generation for Pydantic integration (#451) ### Changed - upath: move pathlib-abc from `0.5.1` to `>=0.5.1,<0.6.0` (#450) - upath.core: deprecate `_protocol_dispatch=False` parameter (#454) ## [0.3.3] - 2025-10-08 ### Added - upath.implementations: add `ZipPath` for ZIP archive filesystem access (#442) - upath.implementations: add `TarPath` for TAR archive filesystem access (#443) - tests: add chained ZIP and TAR path tests (#440) ### Fixed - upath.core: remove `chain_parser` parameter from type overloads to improve type narrowing (#436) ### Changed - docs: update README with notes about `__fspath__()` behavior ## [0.3.2] - 2025-10-05 ### Added - upath.types: add storage_options submodule with TypedDict classes for all filesystem implementations (#432) - upath.implementations: add storage_options type annotations to all UPath subclass constructors (#432) - upath: add type overloads to narrow UPath type based on protocol parameter (#431) - upath.registry: add overloads to `get_upath_class()` to return correct subclass type based on protocol (#429) - typesafety: add comprehensive tests for storage_options type checking (#432) - typesafety: add tests for protocol-based type narrowing (#429, #431) ### Fixed - upath: fix chained paths `.path` property to return correct normalized paths (#426) - upath.implementations: correct `.path` normalization for cloud and http paths (#426) - upath._protocol: raise error when explicitly requesting empty protocol but another protocol is found (#430) - upath.core: adjust Pydantic v2 schema to support None protocol (#430) - tests: add xfail when hitting GitHub rate limit (#429) ## [0.3.1] - 2025-10-03 ### Added - upath: add `UPath.from_uri()` classmethod (#423) - upath: add `UPath.move_into()` method (#422) - upath: implement `.info` property (#416) - typesafety: add thorough typechecks to UPath interface (#414) ### Fixed - upath: fix type annotations for upath.core, upath.extensions and upath.implementations (#420) - upath: backport types and methods to local implementations (#421) - upath: stricter upath types and remove Compat* protocol (#417) ### Changed - maintenance: update license identifier and restrict ci permissions (#424) ## [0.3.0] - 2025-09-29 ### Fixed - upath: support relative paths (#405) - upath: implement chain functionality (#346) - upath: fix upath suffixes (#407) - upath: update flavours (#350, #351, #400, #403, #411) - upath: fix GH test skipping (#361) - ci: update ubuntu runners (#359) - ci: address skip_existing deprecation (#369) - tests: split protocol mismatch test (#365) - tests: ensure non-local upaths raise with builtin open (#368) - tests: add an xfail test for // behaviour on s3 (#370) - tests: fix xfail call args (#409) - tests: add a os.PathLike test (#410) ### Added - upath: api extensions via `upath.extensions.ProxyUPath` (#372) - upath: add upath.types in preparation for deriving from pathlib-abc (#364) - upath: add optional support for pydantic (#395) - upath: list late registered protocols (#358) - repo: add a security policy (#327) - ci: start running against 3.14 (#363) ### Changed - upath: inherit from `pathlib_abc.ReadablePath` and `pathlib_abc.WritablePath` (#366, #402, #404) - upath: drop Python 3.8 (#360) - upath: remove deprecated accessor support (#362) ## [0.2.6] - 2024-12-13 ### Fixed - upath: add support for 'abfss' protocol in WrappedFileSystemFlavour (#311) - upath: fixed sftp join issue for non-root prefixed paths (#294) - upath: fixed missing typing-extension dependency (#290) - upath: updated flavour sources (#285, #299, #313, #319) - tests: minor fixes for moto and gcs tests without internet connectivity (#312) ### Changed - ci: switch to trusted publishing ### Added - tests: allow configuring smb port via env var (#314) ## [0.2.5] - 2024-09-08 ### Fixed - upath.implementations.cloud: move bucket check to subclasses (#277) - upath: enable local tests on windows and fix is_absolute (#278) - upath: updated flavour sources (#273) ### Added - upath: adds support for python-3.13 (#275) ## [0.2.4] - 2024-09-07 ### Fixed - upath: fix UPath.rename type signature (#258) - upath: prevent SMBPath.rename warnings (#259) - upath: implement UPath.samefile (#261) - upath: fix UPath.touch(exists_ok=False) if file exists (#262) - upath: UPath.joinpath() raise error on protocol mismatch (#264) - tests: silence test warnings (#267) - tests: fix http xpass test (#266) - tests: use newer moto server (#248) - tests: mkdir test on existing gcs bucket (#263) ### Added - upath: add SFTPPath implementation (#265) ### Changed - upath: move setup.cfg to pyproject.toml (#260) - upath: UPath.lstat now returns but raises a warning (#271) - upath: updated flavours to the newest versions (#272) ## [0.2.3] - 2024-08-23 ### Added - upath: add st_birthtime as standard field (#254) - upath: added SMBPath and tests (#219) - ci: added typesafety checks (#212) ### Fixed - upath: fix UPath.is_absolute on <3.12 (#256) - upath: fix UPath.rename for absolute paths (#225) - upath._flavour: fix path parsing due to change in urllib.parse.SplitResult behavior (#236) - upath: fixed typing regressions (#212) - upath: update flavour sources (#224, #237, #252) - docs: fix link to filesystem spec optional dependencies (#232) ## [0.2.2] - 2024-03-04 ### Fixed - upath: fixed comparison with pathlib.Path on py<3.12 (#203) - upath: imports of filesystem classes are now lazy (#200) - upath: open() now passes fsspec options through to fsspec (#204) - upath: fixed regression for args that implement `__fspath__` different from `__str__` (#200) - docs: fixed entrypoint examples for UPath subclass registration (#196) ## [0.2.1] - 2024-02-18 ### Added - upath: added `UPath.joinuri()` (#189) ### Fixed - fixed `UPath` instances not hashable (#188) - fixed missing `packaging` dependency (#187) - fixed pypi package classifiers ## [0.2.0] - 2024-02-13 ### Added - upath: support Python 3.12 (#152) - upath: improved subclass customization options (#173) - upath: support `local` uri scheme (#150) - upath: added `GitHubPath` (#155) - upath: added `DataPath` for data uris (#169) ### Changed - tests: xfail tests if optional dependency is missing (#160) ### Fixed - fixed netloc handling of `memory://netloc/a/b` style uris (#162) - fixed broken mkdir for cloud filesystems (#177) - fixed UPath().stat() now returns a `os.stat_result`-like object (#179) ## [0.1.4] ### Changed - upath: require fsspec>=2022.1.0 (#148). ### Fixed - upath.implementation.local: fixes _kwargs in local sub paths (#158). - upath: fix iterdir trailing slash (#149). - upath: consistent glob behaviour for "**" patterns (#143). ## [0.1.3] ### Fixed - upath: restore compatibility with "fsspec<2022.03.0" in line with setup.cfg (#139). ## [0.1.2] ### Added - upath.registry: provide `available_implementations()` and `register_implementation()` (#134). - upath: add `UPath.storage_options` and `UPath.protocol` (#135). ### Fixed - upath: fix `UPath.as_uri()` (#133). ## [0.1.1] ### Fixed - restore `._kwargs` and `._url` on `PosixUPath` and `WindowsUPath` subclasses (#131). - tests: fixed and refactored core tests (#130). ## [0.1.0] ### Changed - updated past changelog entries. - changed `UPath.__new__` behavior to return `UPath` subclasses for local paths (#125). ### Fixed - improved azure test separation (#123). ### Added - tests to confirm pydantic `BaseSettings` behavior (#127). ## [0.0.24] - 2023-06-19 ### Added - started a changelog to keep track of significant changes (#118). - add support for abfss protocol (#113). - add cpython pathlib tests (#104). - implemented `.rename` (#96). ### Fixed - various webdav test fixes (#103, #107, #109). - fixed issue with `._url` parsing (#102). - improved error messages (#96). - fixed `.rglob()` method (#96). ### Changed - modernized package dev tools (#105). - updated ipynb example notebook (#96). ## [0.0.23] - 2023-03-24 ### Added - Implement `UPath.resolve` with a special redirect-following implementation for `HTTPPath` (#86). ## [0.0.22] - 2023-03-11 ### Fixed - Respect exist_ok in mkdir when creating parent directories (#83). ## [0.0.21] - 2022-09-19 ### Changed - Changed the `UPath` implementation registry to lazily import implementations (#78). - Refactored class methods (#77). ### Fixed - Fixed S3 paths with a `+` (#76). ## [0.0.20] - 2022-08-30 ### Added - Python 3.11 compatibility (#69). ### Fixed - Fix `.parents` (#75). - Fix `.with_*` methods (#73). ### Changed - Use `NotADirectoryError` instead of custom error (#74). ## [0.0.19] - 2022-06-22 ### Added - started a changelog to keep track of significant changes [Unreleased]: https://github.com/fsspec/universal_pathlib/compare/v0.3.10...HEAD [0.3.10]: https://github.com/fsspec/universal_pathlib/compare/v0.3.9...v0.3.10 [0.3.9]: https://github.com/fsspec/universal_pathlib/compare/v0.3.8...v0.3.9 [0.3.8]: https://github.com/fsspec/universal_pathlib/compare/v0.3.7...v0.3.8 [0.3.7]: https://github.com/fsspec/universal_pathlib/compare/v0.3.6...v0.3.7 [0.3.6]: https://github.com/fsspec/universal_pathlib/compare/v0.3.5...v0.3.6 [0.3.5]: https://github.com/fsspec/universal_pathlib/compare/v0.3.4...v0.3.5 [0.3.4]: https://github.com/fsspec/universal_pathlib/compare/v0.3.3...v0.3.4 [0.3.3]: https://github.com/fsspec/universal_pathlib/compare/v0.3.2...v0.3.3 [0.3.2]: https://github.com/fsspec/universal_pathlib/compare/v0.3.1...v0.3.2 [0.3.1]: https://github.com/fsspec/universal_pathlib/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/fsspec/universal_pathlib/compare/v0.2.6...v0.3.0 [0.2.6]: https://github.com/fsspec/universal_pathlib/compare/v0.2.5...v0.2.6 [0.2.5]: https://github.com/fsspec/universal_pathlib/compare/v0.2.4...v0.2.5 [0.2.4]: https://github.com/fsspec/universal_pathlib/compare/v0.2.3...v0.2.4 [0.2.3]: https://github.com/fsspec/universal_pathlib/compare/v0.2.2...v0.2.3 [0.2.2]: https://github.com/fsspec/universal_pathlib/compare/v0.2.1...v0.2.2 [0.2.1]: https://github.com/fsspec/universal_pathlib/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/fsspec/universal_pathlib/compare/v0.1.4...v0.2.0 [0.1.4]: https://github.com/fsspec/universal_pathlib/compare/v0.1.3...v0.1.4 [0.1.3]: https://github.com/fsspec/universal_pathlib/compare/v0.1.2...v0.1.3 [0.1.2]: https://github.com/fsspec/universal_pathlib/compare/v0.1.1...v0.1.2 [0.1.1]: https://github.com/fsspec/universal_pathlib/compare/v0.1.0...v0.1.1 [0.1.0]: https://github.com/fsspec/universal_pathlib/compare/v0.0.24...v0.1.0 [0.0.24]: https://github.com/fsspec/universal_pathlib/compare/v0.0.23...v0.0.24 [0.0.23]: https://github.com/fsspec/universal_pathlib/compare/v0.0.22...v0.0.23 [0.0.22]: https://github.com/fsspec/universal_pathlib/compare/v0.0.21...v0.0.22 [0.0.21]: https://github.com/fsspec/universal_pathlib/compare/v0.0.20...v0.0.21 [0.0.20]: https://github.com/fsspec/universal_pathlib/compare/v0.0.19...v0.0.20 [0.0.19]: https://github.com/fsspec/universal_pathlib/tree/v0.0.19