- What is graham-campbell/flysystem and what does it actually do?
- It is a thin Laravel service provider and manager wrapper around league/flysystem v1.x, built on graham-campbell/laravel-manager. It registers a flysystem container binding, exposes a Flysystem facade, and adds a connection() and setDefaultConnection() manager API. It also ships a publishable config/flysystem.php file containing per-driver connection stubs plus an optional cache layer.
- Which PHP and Laravel versions does graham-campbell/flysystem support?
- Version 8.0 requires PHP 7.4 through 8.1 and supports Laravel 8 only. The compatibility matrix terminates at Laravel 8, so Laravel 9, 10 and 11 are not supported. This is because those releases ship Flysystem 3, whose API is not backward compatible with the Flysystem 1.x adapters this package depends on.
- How do I install graham-campbell/flysystem in a Laravel application?
- Run composer require graham-campbell/flysystem:^8.0, then publish the config file with the vendor:publish command. Laravel package auto-discovery registers the service provider automatically, and you can optionally alias the Flysystem facade. There are no migrations, middleware or queue changes involved, so the only real friction is the transitive dependency tree pulled in by each adapter you enable.
- Is this package redundant with Laravel's built-in Storage facade?
- Largely yes. Laravel has shipped a first-party Flysystem integration since 5.0, and the Storage facade plus Illuminate\Filesystem\FilesystemManager already provide named disks, disk() switching and a default disk concept. This package duplicates that surface with a different vocabulary, using connection() instead of disk(), which is a second name for the same idea rather than a benefit. The only meaningful functional delta is a set of non-native adapters and a two-tier cache abstraction.
- Which storage adapters does it support that Laravel's Storage does not?
- It adds third-party adapters for Azure Blob, Dropbox, Google Cloud Storage, GridFS, WebDAV and ZipArchive. Native Laravel Storage already covers local, S3, FTP and SFTP. For any of those native drivers this package should be rejected outright, since you gain nothing and take on an extra abstraction.
- Does graham-campbell/flysystem work with Laravel 9, 10 or 11?
- No. The package is pinned to Flysystem 1.x, which is end of life, while Laravel 9 and above moved to Flysystem 3. The API changed incompatibly, with FilesystemInterface removed or reshaped and adapters rewritten. Migrating off this package is therefore a rewrite of every call site rather than a simple version constraint bump.
- How do I switch connections or set the default filesystem in this package?
- Use Flysystem::connection('name') to resolve a configured connection and setDefaultConnection() to change the default at runtime. Each connection is defined in config/flysystem.php alongside its driver and adapter options. Note that the README explicitly warns you to diff your published config against the package config on every release, because config drift is a known recurring hazard.
- How does the caching layer in Laravel Flysystem work?
- The package offers a two-tier cache abstraction, either backed by an Illuminate cache store or by league/flysystem-cached-adapter. Caching is configured per connection in config/flysystem.php, so you can enable it for slow remote drivers such as S3 or Dropbox while leaving local disks uncached. Be aware that whichever path you choose runs on top of Flysystem 1.x.
- Is graham-campbell/flysystem safe to use in production and is it still maintained?
- Treat it as high risk. It has a single maintainer and zero dependents, and the underlying Flysystem 1.x ecosystem is end of life, meaning security patching for your data path has effectively stopped. That may be tolerable for non-critical assets on a Laravel 8 app, but it is a poor fit for user uploads or regulated content. If your Laravel upgrade horizon is within twelve months, adopting it just defers a forced-removal project, with interest.
- When should I actually choose this package over Laravel's Storage facade?
- There is exactly one defensible adoption pattern: a Laravel 8 application that genuinely needs a driver Laravel does not ship, such as Azure Blob, Dropbox, Google Cloud Storage, GridFS, WebDAV or ZipArchive. If your requirement is S3, local, FTP or SFTP, native Storage covers it and this package should be rejected. Also check whether your codebase already uses Storage, because running both means two competing filesystem abstractions and a doubled test surface.