coraxster/flysystem-aws-s3-v3-minio
A Flysystem AWS S3 v3 adapter built for MinIO object storage. Use familiar S3 APIs against self-hosted MinIO buckets in Laravel and PHP projects, with straightforward configuration for custom endpoints, credentials, and bucket paths.
Architecture fit
league/flysystem-aws-s3-v3 v1.x, published September 2017. It targets Flysystem 1.x and the Laravel 5.x filesystem manager era, where AwsS3v3Adapter had no ergonomic way to set a custom endpoint or force path-style access.s3 driver accept endpoint, use_path_style_endpoint, bucket, region, and url directly, and have done since the Laravel 8/9 line. For any application on a currently supported Laravel version, adopting this package is a capability downgrade, not an addition.AwsS3v3Adapter with ['endpoint' => ..., 'bucket_endpoint' => false] typically covers the same ground.Integration feasibility
league/flysystem ^3.0 (required by Laravel 9+) and against current aws/aws-sdk-php releases.^5.6|^7.0-shaped; it will not declare PHP 8.x support, which blocks or warns on Composer 2 with modern platforms.Technical risk
Key questions
Storage facade contract?Stack fit
league/flysystem-aws-s3-v3 and configure the s3 disk with endpoint, use_path_style_endpoint => true, and an explicit region (MinIO generally requires a non-empty region such as us-east-1). Zero new dependencies.Migration path
Storage facade and a disk name in config/filesystems.php. That is the seam: replacing the driver is a configuration change, not an application-code change, provided the disk name is preserved.url(), temporaryUrl(), multipart over ~100 MB).s3 with endpoint + use_path_style_endpoint, drop the package from composer.json.Compatibility
public/private ACLs are rejected by default on modern MinIO unless enabled), url() emitting the endpoint host instead of the public CDN host, and presigned URLs signed for the internal endpoint being unusable by browsers. The last is the most common production surprise and is solved by a separate url/CDN config, not by an adapter fork.Sequencing
composer require --dry-run, plus one bucket round-trip.Maintenance
Support
Scaling
Failure modes
AuthorizationHeaderMalformed) from a missing or wrong region.Ramp-up
Storage facade they already know. The ramp-up cost is concentrated in decision work — establishing that the package is unnecessary — and in the presigned-URL/CDN edge cases, which deserve a short runbook regardless of which driver is chosen.TPM recommendation
How can I help you explore Laravel packages today?