graham-campbell/flysystem
Laravel Flysystem is a Flysystem bridge for Laravel by Graham Campbell, built on Laravel Manager. It provides a unified filesystem manager with support for local, S3, Dropbox, and other storage adapters, requiring PHP 7.4-8.1 and Laravel 8.
League\Flysystem\Filesystem), so the decision is really “adopt a pre-built manager pattern” vs. “use Laravel's native Storage facade.”Flysystem::connection('foo') plus setDefaultConnection() at runtime supports decisions like “enterprise tenants bring their own bucket,” “EU data stays in EU,” or “dev uses local, prod uses S3.”cache config (illuminate or adapter drivers) lets you ship a cheaper read path for hot files without a new service — a cost/latency trade-off, not just a technical one.0 dependents, Tidelift-backed commercial support option — input to a dependency-approval decision and to whether you need an internal fork/maintenance budget.Consider it when all or most of these hold:
Storage::disk() bound at call sites.FlysystemManager) that behaves like a filesystem, so feature teams can inject one interface and stop caring which provider is behind it.php artisan vendor:publish, edit config/flysystem.php, ship.Look elsewhere when:
Storage / config/filesystems.php covers local, S3, FTP, and SFTP with framework maintenance and docs. This package adds a layer you'd be paying to maintain.Storage is strictly less risk.^1.0 (league/flysystem-aws-s3-v3, -sftp, -webdav, etc.), while Flysystem v2/v3 is current and the v1 adapter packages are deprecated. This is a deliberate version lock, not a detail.0 dependents and a single maintainer mean you are effectively the QA department. Tidelift exists but is a paid subscription, not a guarantee.alcaeus/mongo-php-adapter for GridFS) — budget for breakage.For executives: This is a small, free, MIT-licensed Laravel package that turns file storage into a configuration choice instead of an engineering project. It lets one codebase write to local disk, S3, Azure, Dropbox, Google Cloud, SFTP, or WebDAV, and lets us route different customers to different storage without new development. That is genuinely useful for enterprise “bring your own bucket” asks and for data-residency commitments. The counterweight is risk: it's a one-maintainer wrapper around an older major version of Flysystem, it supports only Laravel 8 / PHP ≤ 8.1, and Laravel's own built-in file storage already does most of this. Recommendation: do not standardize on it; evaluate it only for a legacy Laravel 8 service that needs many adapters at once, and treat it as a time-boxed dependency with a named owner and an exit plan to native Storage.
For engineering: It's a Laravel Manager-based bridge — FlysystemManager bound as 'flysystem', Facades\Flysystem proxying to the default connection, connection('name') for the rest, setDefaultConnection() at runtime, publishable config/flysystem.php with default, connections, and cache sections. Adapters are opt-in Composer packages, so the footprint is only what you use. Two things to go in with eyes open: (1) all adapters are Flysystem v1-era (^1.0), so you're on a deprecated major with no in-place migration to v3; (2) the abstraction is thin — everything still resolves to League\Flysystem\Filesystem — so there's little it does that a custom filesystems.php disk driver couldn't. If we adopt it, wrap it behind our own StorageService interface so the bridge is swappable in one file, and add a CI check that fails on Laravel/PHP version drift.
How can I help you explore Laravel packages today?