Skip to main content

FS S3FS Next

S3FS is a PyFilesystem interface to Amazon S3 cloud storage.

As a PyFilesystem concrete class, S3FS allows you to work with S3 in the same way as any other supported filesystem.

Independent maintenance fork of PyFilesystem/s3fs by Will McGugan and contributors. Original MIT license and Git history are preserved. This is not an official PyFilesystem release. Requires Python 3.10+; uses FS Next while retaining the fs_s3fs import and s3:// opener.

Migration

Create a fresh virtual environment and replace fs-s3fs with fs-s3fs-next and fs with fs-next in your dependency declarations. Regenerate lock files. Do not install either pair together: they provide the same Python modules, and uninstalling one can break the other. Packages that still require fs or fs-s3fs must update their dependency metadata first. A constraints file cannot substitute distribution names.

python -m venv .venv-next
# Activate the environment, then:
python -m pip install fs-s3fs-next==0.1.0
python -m pip check

For uv or Poetry projects, make the same declaration replacements, regenerate the lock, and sync into a fresh environment. The fork uses its own version series: 0.1.0 is based on upstream 1.1.1 plus compatibility fixes. To roll back, restore the previous declarations and lock into another fresh environment rather than co-installing the packages.

Installing

You can install S3FS from pip as follows:

python -m pip install fs-s3fs-next

Opening a S3FS

Open an S3FS by explicitly using the constructor:

from fs_s3fs import S3FS
s3fs = S3FS('mybucket')

Or with a FS URL:

from fs import open_fs
s3fs = open_fs('s3://mybucket')

Downloading Files

To download files from an S3 bucket, open a file on the S3 filesystem for reading, then write the data to a file on the local filesystem. Here’s an example that copies a file example.mov from S3 to your HD:

from fs.tools import copy_file_data
with s3fs.open('example.mov', 'rb') as remote_file:
    with open('example.mov', 'wb') as local_file:
        copy_file_data(remote_file, local_file)

Although it is preferable to use the higher-level functionality in the fs.copy module. Here’s an example:

from fs.copy import copy_file
copy_file(s3fs, 'example.mov', './', 'example.mov')

Uploading Files

You can upload files in the same way. Simply copy a file from a source filesystem to the S3 filesystem. See Moving and Copying for more information.

ExtraArgs

S3 objects have additional properties, beyond a traditional filesystem. These options can be set using the upload_args and download_args properties. which are handed to upload and download methods, as appropriate, for the lifetime of the filesystem instance.

For example, to set the cache-control header of all objects uploaded to a bucket:

import fs, fs.mirror
s3fs = S3FS('example', upload_args={"CacheControl": "max-age=2592000", "ACL": "public-read"})
fs.mirror.mirror('/path/to/mirror', s3fs)

see the Boto3 docs for more information.

acl and cache_control are exposed explicitly for convenience, and can be used in URLs. It is important to URL-Escape the cache_control value in a URL, as it may contain special characters.

import fs, fs.mirror
with fs.open_fs('s3://example?acl=public-read&cache_control=max-age%3D2592000%2Cpublic') as s3fs:
    fs.mirror.mirror('/path/to/mirror', s3fs)

S3 URLs

You can get a public URL to a file on a S3 bucket as follows:

movie_url = s3fs.geturl('example.mov')

Documentation

FS Next migration for Python 3.10+

The migration includes preserve_time argument compatibility, safe same-path copy/move handling and binary stream mode / readinto corrections. S3 controls LastModified timestamps; preserve_time=True is best effort and does not preserve S3’s LastModified value (setinfo cannot change it).

To run the complete FS Next contract on bucket roots and prefixes without an AWS account or credentials:

python -m pip install . pytest "moto[s3]==5.2.3"
python -m pip check
python -I -m pytest tests/test_fs_next.py -q -ra

Moto exercises local S3 API behavior. It does not certify live AWS IAM, network failures or provider-specific behavior. This package is independently maintained and released. Related upstream fixes were already proposed in PR #81 (readinto) and PR #92 (preserve_time); the contract suite reproduces those failures.

Metadata

Release files for fs-s3fs-next 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fs-s3fs-next 0.1.0
File Size Uploaded
fs_s3fs_next-0.1.0.tar.gz 15.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fs-s3fs-next 0.1.0
File Interpreter ABI Platform
fs_s3fs_next-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.9 kB

Release files / fs_s3fs_next-0.1.0.tar.gz

Download URL fs_s3fs_next-0.1.0.tar.gz
Size 15.0 kB
Tags Source
SHA-256 checksum
How to use checksums
17290764e9f1c12faf715c027cfcee2228f2d0175fa0fc03855ffa6aa17c3608
BLAKE2b-256 checksum
How to use checksums
d09352df23ec17c48b8bfd8f757e9ef666d8571a4599dc4299b7e34af709b246
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release files / fs_s3fs_next-0.1.0-py3-none-any.whl

Download URL fs_s3fs_next-0.1.0-py3-none-any.whl
Size 11.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d07f0658ed7355e935d1a40d0f950544ec7cd9197377dac1ed0a529379651937
BLAKE2b-256 checksum
How to use checksums
392a715ad41724da3180269a46632422c107c08ab036503300e2f3a68ac4421e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page