consilience/flysystem-azure-file-storage
Flysystem adapter for Azure File Storage that lets Laravel and PHP applications read, write, and manage files on Azure file shares through the familiar Storage API. Configure a disk and use Azure Files like any other filesystem.
Architecture fit. The package occupies the adapter layer between Laravel's Storage facade / FilesystemManager and Flysystem, so its architecture is inherently coupled to the host framework's Flysystem major version. Flysystem v3 is the version shipped by Laravel 9+, meaning this release aligns the package with the modern Laravel baseline and is the correct long-term direction. For applications on Laravel 9/10 the fit is strong; for Laravel 8 and below the fit is effectively zero without also upgrading the framework. The public Laravel disk API (Storage::get, put, exists, url, temporaryUrl) is largely stable across the boundary, but the adapter contract underneath changes materially: League\Flysystem\FilesystemAdapter method signatures, Visibility enum instead of string constants, StorageAttributes/DirectoryListing for listings, and a new exception hierarchy (UnableToReadFile, UnableToWriteFile, etc.). This is an internal re-architecture of the adapter even where the Laravel-facing surface is unchanged.
Integration feasibility. Mechanically low effort — Composer install, Laravel package discovery, and a config/filesystems.php disk entry — provided the version matrix lines up (PHP 8.0+, Flysystem 3, Laravel 9+). The release note materially raises the effort: "not fully complete, but good enough for a release" signals known gaps being deferred to issue #12. We should assume incomplete coverage of at least some adapter methods (candidate areas: copy/move, visibility handling, MIME/checksum metadata, recursive delete, paginated listing, URL/temporary-URL generation) until the issue is reviewed. Treat this as a pilot-and-verify integration, not a drop-in bump.
Technical risk: medium-high.
StorageAttributes), visibility handling, exception types, and path normalization differ from v2; these surface as subtle regressions in sync jobs, media pipelines, and error handling rather than as hard failures.league/flysystem-adapter-test-verifier, which is the minimum bar for a storage adapter.Key questions.
url/temporaryUrl, visibility, and stream handling behaviorally identical to the prior release?Stack fit. Fit is binary and version-gated, not gradual: modern stack (PHP 8.0+, Laravel 9+, Flysystem 3) is a clean fit; legacy stack (Laravel 8-, Flysystem 1/2, PHP 7.x) is blocked. Confirm the target app's framework and PHP versions before any package-level work, because the framework upgrade — not the package — is the critical path.
Migration path.
Compatibility. Flysystem 3 is incompatible with v2 plugins and direct API calls; Laravel's Storage facade insulates most application code, so breakage concentrates in custom driver internals, event/exception handling, and any code asserting on Flysystem types. Other packages pinned to Flysystem 2 (common in older media/backup packages) will create Composer deadlock and must be upgraded or replaced first. Any custom Flysystem plugins must be recompiled against v3 contracts.
Sequencing. Framework/PHP upgrade → dependency-conflict resolution (including transitive Flysystem consumers) → package 1.0.x adoption with issue #12 reviewed → parity testing → staged rollout → documentation and runbook update. Do not sequence the package upgrade ahead of the framework upgrade, and do not adopt 1.0.0 on a business-critical disk before the issue #12 gap list is understood.
Maintenance. This creates a new v1 maintenance line with acknowledged follow-up work, so expect a stream of patch/minor releases resolving issue #12. Pin exact or tilde versions (~1.0.x) rather than caret ranges, and gate major/minor bumps behind manual review in dependency automation. Budget ongoing effort to track the issue and changelog, since the release note itself is the only signal provided here.
Support. Community/open-source support with no vendor SLA; responsiveness depends on the maintainer. For business-critical storage paths, document an internal fallback (fork, vendored patch, or an alternative maintained adapter) and record the decision owner. The "good enough for a release" framing means support requests about deferred functionality will likely be directed to issue #12 rather than resolved quickly.
Scaling. The adapter is a thin translation layer, so throughput and capacity are dominated by the backing store (local, S3, SFTP). Flysystem 3's lazy DirectoryListing is a genuine improvement for large-directory scans and memory footprint, provided the adapter implements it correctly rather than materializing arrays. Watch stream handling and recursive delete on very large trees; those are the usual scaling failure points in adapters.
Failure modes.
UnableTo* or not-implemented errors at runtime in untested code paths.FilesystemException handling and existing catch blocks.Ramp-up. Low for developers using the Laravel Storage facade; medium for anyone maintaining custom adapters, Flysystem plugins, or error handling. Plan a 1–2 day spike to read issue #12, validate the adapter against the upstream test verifier, and run the parity harness. Update storage runbooks and rollback procedures before production cutover.
How can I help you explore Laravel packages today?