Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Flysystem Aws S3 V3 Minio Laravel Package

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.

Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package is a fork of 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.
  • That gap no longer exists. Flysystem 2/3 and the native Laravel 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.
  • The only defensible fit is a legacy application pinned to Laravel 5.5–8 with Flysystem 1.x that already depends on this fork's specific behaviour. Even then, the native v1 AwsS3v3Adapter with ['endpoint' => ..., 'bucket_endpoint' => false] typically covers the same ground.

Integration feasibility

  • Composer-level feasibility on modern stacks is low. Expect hard conflicts against league/flysystem ^3.0 (required by Laravel 9+) and against current aws/aws-sdk-php releases.
  • PHP constraint is almost certainly ^5.6|^7.0-shaped; it will not declare PHP 8.x support, which blocks or warns on Composer 2 with modern platforms.
  • No repository, no CI, no visible test suite, no changelog. Integration effort is therefore unknown rather than small — the risk premium sits in discovery, not in code.

Technical risk

  • Abandonment: no release in ~8 years, 25 stars, no upstream. No CVE response path, no PHP 8/9 compatibility work, no MinIO protocol drift handling.
  • Supply chain: a stale fork pins transitive AWS SDK versions, which is exactly the dependency you do not want frozen (SigV4, TLS defaults, retry/backoff behaviour).
  • Obsolescence risk is asymmetric: the package can only lose value over time. There is no roadmap in which it becomes more useful.
  • Low functional risk if evaluated honestly: the underlying behaviour is simple config plumbing; this is not a complex subsystem to replace.

Key questions

  1. What Laravel and PHP versions are in scope today, and what is the upgrade horizon?
  2. Which MinIO capabilities are actually required — presigned PUT/GET, multipart, bucket policies, versioning, SSE, CDN URL rewriting?
  3. Is MinIO fronted by TLS with a private/self-signed CA, and is virtual-hosted-style access used anywhere?
  4. Does any existing code depend on driver-specific methods beyond the Storage facade contract?
  5. Is there a maintained internal fork, or is the vendor relationship effectively "we own it"?

Integration Approach

Stack fit

  • Greenfield (Laravel 9+): do not adopt. Use the bundled 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.
  • Legacy (Laravel 5.5–8 / Flysystem 1.x): treat this package as a stopgap only, and only if a compatibility spike passes cleanly.

Migration path

  • The application almost certainly talks to the disk through the 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.
  • Recommended direction is removal, not adoption:
    1. Pin a baseline and snapshot current behaviour (put/get/delete/exists, url(), temporaryUrl(), multipart over ~100 MB).
    2. Swap the disk driver to s3 with endpoint + use_path_style_endpoint, drop the package from composer.json.
    3. Re-run the same behaviour suite against the same MinIO bucket.
    4. Cut over behind the unchanged disk name; no release coordination with feature teams needed.

Compatibility

  • Watch for: visibility handling (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

  • Week 0: compatibility spike — composer require --dry-run, plus one bucket round-trip.
  • Week 1: behaviour baseline and gap list for presigned URLs and public visibility.
  • Week 2: config migration in staging; run the baseline suite.
  • Week 3: production cutover (config-only), monitor error rates for 48 hours.
  • Week 4: remove the dependency, delete the fork from any internal mirrors.

Operational Impact

Maintenance

  • Adopting this package transfers maintenance ownership to your team by default — there is no upstream to lean on. Budget it as an internal fork, not as a dependency. Removing it eliminates that line item entirely.
  • If retained, pin the exact version, vendor the source into the repo, and add it to the security-review register with an explicit expiry date.

Support

  • No maintainer, no issue triage, no security advisories. Any incident becomes an internal debugging exercise against an unfamiliar 2017 codebase layered over an AWS SDK version you did not choose.
  • Conversely, the native path is supported by Laravel and AWS SDK maintainers, which is where your team's existing debugging knowledge already lives.

Scaling

  • The adapter is not on the data path in any meaningful way — throughput and durability are MinIO's problem. Scaling characteristics are essentially identical to the native driver, so the package offers no scaling upside to offset its risk.
  • The one scaling-adjacent constraint is the pinned AWS SDK: older SDKs have weaker retry/backoff and connection-reuse behaviour under high concurrency, which can surface as tail-latency spikes during large uploads.

Failure modes

  • Signature/region mismatch (AuthorizationHeaderMalformed) from a missing or wrong region.
  • Path-style vs virtual-hosted-style misconfiguration producing DNS or 404 errors at the bucket boundary.
  • TLS trust failures against self-signed MinIO certificates.
  • Presigned URLs pointing at an unreachable internal endpoint.
  • Composer resolution failures during unrelated upgrades — a slow-burn failure that blocks the platform team rather than the feature team.
  • Silent abandonment: no failure at all until a PHP or Laravel upgrade forces an unplanned migration under deadline.

Ramp-up

  • Low for engineers: the API is the 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

  • Do not adopt. The package is functionally superseded, unmaintained since 2017, and its stated benefits are native configuration on any supported Laravel version. Treat it as technical debt with a removal ticket, not a dependency to evaluate. If a legacy system already uses it, schedule the config-only migration in the next maintenance window and close the item.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table
siberfx/flysystem-wasabi
hollyit/token-replace
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel