Changelog

The s3fs project uses Calendar Versioning (CalVer) in the format YYYY.MM.PATCH. This document provides a historical record of all significant bug fixes, features, and dependency changes.

2026.2.0

  • add custom error handling (#1003)
  • do delete placeholders with rm(recursive=True) (#1005)
  • force new session if it was explicitly closed (#1002)

2026.1.0

  • allow aiobotocore 3 (#998)

2025.12.0

  • remove optional dependencies (#995)
  • add support for py3.14 and remove 3.9 (#993)
  • add link docs->repo (#992)

2025.10.0

  • get bucket info on demand (#987)
  • add CoC (#986)
  • add goatcounter tracker (#985)

2025.9.0

  • update README for distribution compliance (#977)

2025.7.0

  • fix exclusive write for small files (#974)
  • acknowledge Anaconda support (#972)
  • fix test typo (#970)

2025.5.1

  • no changes

2025.5.0

  • simpler requirements syntax (#958)
  • use head_bucket for info(bucket) (#961)

2025.3.2

  • no changes

2025.3.1

  • get_event_loop -> get_running_loop at shutdown (#954)

2025.3.0

  • recreate sessino object on refresh (#939)
  • re-enable CI tests (#940)

2025.2.0

  • update docstrings to new default values (#934)
  • fix CI (#936)

2024.12.0

  • CI fixes (#922)
  • smaller threshold for copy_managed (#921)
  • exclusive write (#917)
  • fix bug in _find (#913)
  • parse query without upstream infer_storage_options (#912)
  • bug in _upload_file_part_concurrent (#910)

2024.10.0

  • invalidate cache in one-shot pipe file (#904)
  • make pipe() concurrent (#901)
  • add py3.13 (#898)
  • suppoert R2 multi-part uploads (#888)

2024.9.0

  • no change

2024.6.1

  • no changes

2024.6.0

  • no changes

2024.5.0

  • widen fsspec req version (#869)
  • _bulk_delete must return list (#866)
  • retry on "reduce request rate" (#865)

2024.3.1

  • accept kwargs in get_file (#863)

2024.3.0

  • don't fail ls is parent is unaccessible (#860)
  • allow checksum error to retry (#858)
  • don't lsbuckets for isdir(bucket) (#856)
  • concurrent uplads of parts in put_file (#848)

2024.2.0

  • fix cache lookup in _info (#840)

2023.12.2

  • no changes

2023.12.1

  • revert fallback to anon (#835)

2023.12.0

  • fall back to anon if no creds are found or passed at all (#823)
  • relax version bounds for aiobotocore (#829)
  • avoid key error if LastModified missing (#828)
  • add make_mucket_versioned method (#825)
  • retain TZ on modified time (#818)

2023.10.0

  • make protocol attribute a tuple (#812)
  • update to aiobotocore 2.7.0 (#809)
  • fix in _get_file following failure after connect (#805)
  • test for du of nonexistent (#803)

2023.9.2

  • allow size= in fs.open() (#797)
  • rmdir for non-bucket (#975)
  • moto updates (#973)
  • fix CI warnings (#792)
  • dircache usage with depth (#791)

2023.9.1

  • retry ClientPayloadError while reading after initial connection (#787)
  • don't pass ACL if not specified (#785)

2023.9.0

  • aiobotocore to 2.5.4
  • better ** support in bulk ops/glob (#769)
  • default ACL to "private" rather than blank (#764)
  • invalidate cache in rm_file (#762)
  • closing client in running loop (#760)

2023.6.0

  • allow versions in info.exists (#746)
  • streaming file to update it's size for tell (#745, 741)

2023.5.0

  • Fix "_" in xattrs tests (#732)
  • Fix file pointer already at end of file when retrying put (#731)
  • Fix repeated find corrupting cache (#730)
  • Remove duplicate class definition (#727)
  • return list of deleted keys in bulk deleted (#726)

2023.4.0

  • Add streaming async read file (#722)
  • Doc fixes (#721)
  • aiobotocore to 2.5.0 (#710)

2023.3.0

  • Allow setting endpoint_url as top-level kwarg (#704)
  • minimum python version 3.8 (#702)
  • Update docs config (#697)
  • get/put/cp recursive extra tests (#691)

2023.1.0

  • parse lambda ARNs (#686)
  • recursive on chmod (#679)
  • default cache to be readahead (#678)
  • temporary redirects in headBucket (#676)
  • async iterator for listings (#670)

2022.11.0

  • optionally listing versions with ls (#661)

2022.10.0

  • directory cache race condition (#655)
  • version aware find (#654)

2022.8.0

  • aiobotocore 2.4.0 (#643)
  • del/list multipart uploads (#645)
  • disallow prerelease aiohttp (#640)
  • docs syntax (#634)

2022.7.0

  • aiobotocore 2.3.4 (#633)

2022.5.0

  • aiobotocore 2.3 (#622, fixes #558)
  • rate limiting (#619, #620)

2022.3.0

  • pre-commit (#612)
  • aiobotocore 2.2 (#609)
  • empty ETag (#605)
  • HTTPClientError retry (#597)
  • new callbacks support (#590)

2022.02.0

  • callbacks fixes (#594, 590)
  • drop py36 (#582)
  • metadata fixes (#575, 579)

2022.01.0

  • aiobotocore dep to 2.1.0 (#564)
  • docs for non-aws (#567)
  • ContentType in info (#570)
  • small-file ACL (#574)

2021.11.1

  • deal with missing ETag (#557)
  • ClientPayloadError to retryable (#556)
  • pin aiobotocore (#555)

2021.11.0

  • move to fsspec org
  • doc tweaks (#546, 540)
  • redondant argument in _rm_versioned_bucket_contents (#439)
  • allow client_method in url/sign (POST, etc) (#536)
  • revert list_v2->head for info (#545)

2021.10.1

  • allow other methods than GET to url/sign (#536)

2021.09.0

  • check for bucket also with get_bucket_location (#533)
  • update versioneer (#531)

2021.08.1

  • retry on IncompleteRead (#525)
  • fix isdir for missing bucket (#522)
  • raise for glob("*") (#5167)

2021.08.0

  • fix for aiobotocore update (#510)

2021.07.0

  • make bucket in put(recursive) (#496)
  • non-truthy prefixes (#497)
  • implement rm_file (#499)

2021.06.1

  • bucket region caching (#495)

2021.06.0

  • support "prefix" in directory listings (#486)
  • support negative index in cat_file (#487, 488)
  • don't requite ETag in file details (#480)

2021.05.0

  • optimize info, exists (and related) calls for non-version aware mode
  • copy with entries without ETag (#480)
  • find not to corrupts parent listing (#476)
  • short listing to determine directory (#472, 471)

Version 2021.04.0

  • switch to calver and fsspec pin
  • py36 (#462)
  • async fixes (#456, 452)

Version 0.6.0

  • update for fsspec 0.9.0 (#448)
  • better errors (#443)
  • cp to preserve ETAG (#441)
  • CI (#435, #427, #395)
  • 5GB PUT (#425)
  • partial cat (#389)
  • direct find (#360)

Version 0.5.0

  • Asynchronous filesystem based on aiobotocore

Version 0.4.0

  • New instances no longer need reconnect by Martin Durant
  • Always use multipart uploads when not autocommitting by Marius van Niekerk
  • Create CONTRIBUTING.md by Jacob Tomlinson
  • Use autofunction for S3Map sphinx autosummary by James Bourbeau
  • Miscellaneous doc updates by James Bourbeau
  • Support for Python 3.8 by Tom Augspurger
  • Improved performance for isdir by Nate Yoder
  • Increased the minimum required version of fsspec to 0.6.0