Open-source project
awslabs/mountpoint-s3 avatar
awslabs/mountpoint-s3

Mountpoint for Amazon S3: a file client that reads like a filesystem and writes like a bucket

A simple, high-throughput file client for mounting an Amazon S3 bucket as a local file system.

5,775 stars252 forksRustApache-2.0

At a glance

What is it?
Mountpoint for Amazon S3 exposes an S3 bucket through open and read, but it implements only part of POSIX. This review covers what the mechanism actually does, how to install it on Linux, and where the tool stops being the right answer.
Who is it for?
Adopt Mountpoint for Amazon S3 if your workload reads large objects concurrently or writes new objects sequentially and you run Linux on EC2 or in a container, because the RPM and DEB packages and the IAM role path make setup short. Do not adopt it if your application depends on directory renames, symlinks, in-place edits, or a non-Amazon S3 endpoint, since the README states those are outside the supported design.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 27, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The gap Mountpoint for Amazon S3 fills, and the applications it is not for

Object storage has no directories, no file handles and no rename. Code written against a file interface expects all three. Mountpoint for Amazon S3 sits in that gap: it presents a bucket as a mounted filesystem so an existing program can call open and read instead of being rewritten against the S3 object API. The README describes it as "a simple, high-throughput file client for mounting an Amazon S3 bucket as a local file system", and says it automatically translates file operations into S3 object API calls.

The audience is narrower than "anyone who wants S3 as a disk". AWS optimizes this client for high read throughput on large objects, potentially from many clients at once, and for writing new objects sequentially from a single client at a time. Three patterns fit: reading large objects from many instances without downloading them first, touching an unpredictable subset of a large data set, and uploading output directly to S3 or pushing files up with tools like cp. Two patterns do not. S3 has no native directory rename and no symlinks, so applications that rely on those will misbehave. And editing existing files is explicitly called out as a bad fit, with the README telling you not to work on a Git repository or run vim inside the mount. That second exclusion is the one that catches people, because a mount that lists and reads correctly looks like a normal filesystem right up to the first save.

How the translation layer works, from FUSE calls to S3 API requests

The repository is a Rust workspace with six members. mountpoint-s3 is the binary crate, mountpoint-s3-fs holds the filesystem logic, mountpoint-s3-client is the S3 client, mountpoint-s3-crt and mountpoint-s3-crt-sys wrap the AWS Common Runtime, and mountpoint-s3-fuser is a vendored FUSE binding pinned to ABI 7-28 with the libfuse feature. The Makefile comments explain why the FUSE crate is vendored: the build targets exist partly so clippy and rustfmt can be skipped on that crate.

Data flow follows that split. The kernel routes filesystem calls through FUSE to the vendored binding, mountpoint-s3-fs interprets them, and mountpoint-s3-client turns them into S3 object requests over the CRT. The release profile in Cargo.toml sets lto = true and codegen-units = 1, which is a deliberate build-time cost paid for runtime throughput. The practical consequence of the architecture is that every read is a network operation with object-level granularity rather than block-level caching, so the mount is a translation layer, not a local cache. The README points at doc/SEMANTICS.md for the full account of POSIX support and how the differences can affect an application; that document, not the README, is where you find out whether a specific call your program makes is implemented.

Installing Mountpoint for Amazon S3 on Linux and mounting a bucket

The README gives package-based installs for the major Linux families. On Amazon Linux 2023 it is a single dnf command:

bash
sudo dnf install mount-s3

On other RPM-based distributions such as Fedora, CentOS and RHEL (SUSE is excluded), the README downloads the RPM and installs it locally. On Graviton instances you replace x86_64 with arm64 in the URL:

bash
wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
sudo yum install -y ./mount-s3.rpm

Ubuntu uses the same pattern with a DEB package:

bash
wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.deb
sudo apt-get install -y ./mount-s3.deb

Credentials come from an IAM role attached to the EC2 instance, from the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables, or from other sources listed in doc/CONFIGURATION.md. With credentials in place, the mount is one command taking the bucket name and a local directory:

bash
mount-s3 amzn-s3-demo-bucket /path/to/mount

The README then demonstrates ordinary shell operations against the mount, including listing the directory, writing Data.txt with echo, and reading it back with cat. Unmounting uses umount on the same path, and the README notes you might need sudo. The README does not document a rollback procedure for a partially written object, so plan around the write semantics rather than expecting an undo. For Kubernetes, the README points to the Mountpoint for Amazon S3 CSI driver in the EKS documentation instead of a host mount.

Where the POSIX gap becomes a production incident

The limitation is not a bug list, it is a design boundary. S3 does not natively support directory renaming or symlinks, and the README says applications using those operations are probably not the right fit. A build system that renames a directory to swap releases, a package manager that relies on symlink farms, or an editor that writes a temp file and renames it over the original will all hit this. The README's own example, not running vim in the mount, is the clearest statement of the boundary.

The second failure mode is concurrency on writes. The client is optimized for writing new objects sequentially from a single client at a time. If two processes append to or overwrite the same object, you are outside the documented sweet spot. The third is endpoint compatibility. The README states the client is designed for high-performance access to Amazon S3, that it may be functional against other storage services with S3-like APIs, that AWS cannot support those use cases, and that they may break when changes are made to better support Amazon S3. Anyone pointing this at a third-party object store is accepting that risk knowingly. Finally, there is a version warning worth repeating: the README flags v1.4.0, released on January 26, 2024, as containing an issue causing intermittent read failures, and recommends upgrading to v1.4.1 or later.

Mountpoint for Amazon S3 compared with s3fs, goofys and EFS

The honest comparison is against the FUSE clients people already run. s3fs and goofys both present S3 as a filesystem, but they aim for broader POSIX coverage and compatibility with non-Amazon endpoints. Mountpoint for Amazon S3 goes the other way: it narrows the surface to the operations S3 can serve well and tunes for throughput on large-object reads. That is why the README can say it is not the right fit for directory renames and in-place edits instead of trying to emulate them. If your application needs rename semantics, a client that emulates them is a better match, with the understanding that emulation costs extra requests.

Against Amazon EFS the difference is architectural rather than feature-level. EFS is a network filesystem with real file semantics and a different cost model; Mountpoint for Amazon S3 is a translation layer over object storage, so it inherits S3's durability and its lack of rename. For a workload that only reads large objects or writes new ones, the object-storage path can be the cheaper and simpler one. For a workload that behaves like a shared home directory, it is the wrong tool and EFS is the right one. The README does not offer a migration guide between the two, so the decision has to be made from the access patterns.

Maintenance, releases and what the Apache-2.0 licence means here

The repository is not archived, and the last push was on 2026-09-22. Releases have been reasonably regular: 1.22.3 on 2026-04-28, 1.23.0 on 2026-07-21, and 1.24.0 on 2026-08-24. The README states the project is generally available and that future feature development is tracked on a public roadmap, with feedback taken through GitHub issues. That is a normal AWS open source cadence, and it means upgrade cost is mostly the cost of tracking a fast-moving client rather than a frozen one.

The licence is Apache-2.0, which permits commercial and private use and requires preserving notices; the repository carries a NOTICE file alongside LICENSE. That is a permissive arrangement, but it is not legal advice and does not cover the separate terms of the S3 service itself. The more concrete operational cost is the vendored FUSE crate: mountpoint-s3-fuser is pinned to ABI 7-28 with libfuse, and the Makefile exists partly to keep tooling away from it. If you build from source rather than installing the RPM or DEB, that vendoring step is part of your build, and the release profile's lto = true and codegen-units = 1 will make those builds slow.

Editorial conclusion

Adopt Mountpoint for Amazon S3 if your workload reads large objects concurrently or writes new objects sequentially and you run Linux on EC2 or in a container, because the RPM and DEB packages and the IAM role path make setup short. Do not adopt it if your application depends on directory renames, symlinks, in-place edits, or a non-Amazon S3 endpoint, since the README states those are outside the supported design. Before rolling it out, read doc/SEMANTICS.md against your application's actual file operations, and check whether you need the CSI driver rather than a host mount.

Frequently asked questions

How do I mount an S3 bucket in Linux with Mountpoint for Amazon S3?

Install the package for your distribution (sudo dnf install mount-s3 on Amazon Linux 2023, or the RPM or DEB from the release URL on other systems), make sure valid AWS credentials are available, then run mount-s3 followed by the bucket name and the local directory, for example mount-s3 amzn-s3-demo-bucket /path/to/mount.

How does Mountpoint for Amazon S3 differ from s3fs or goofys?

Mountpoint for Amazon S3 is optimized for high read throughput on large objects and sequential writes of new objects, and the README states it is probably not the right fit for applications that need directory renaming or symlinks. Clients like s3fs and goofys aim at broader POSIX compatibility instead.

Can I mount an S3 bucket on my Mac with Mountpoint for Amazon S3?

The README documents installation for Amazon Linux 2023, other RPM-based distributions and Ubuntu, and points to doc/INSTALL.md for other options. macOS is not among the installation paths given in the README.

Official sources

  1. awslabs/mountpoint-s3 on GitHub
  2. Issues
  3. License: Apache-2.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/awslabs-mountpoint-s3.svg)](https://hysenlabs.com/projects/awslabs-mountpoint-s3)