azure-oss/storage
Azure Blob Storage driver for Laravel. Register Azure as a native filesystem disk and use the familiar Storage facade to upload, retrieve, list, and delete blobs, generate URLs, and manage containers—no custom SDK code required.
Architecture fit. azure-oss/storage is a metapackage — the AzureOss\Storage\Meta subtree — not a Laravel package. It ships no service provider, no publishable config, no facade, no filesystem driver. It is a Composer convenience aggregate that pulls in the individual AzureOss\Storage\{Blob,Queue,Table,File,Common} components.
That places it below Laravel's integration surface. The idiomatic Laravel touchpoint is a custom Flysystem driver behind Storage::disk('azure'), and this package sits underneath that adapter as the transport SDK. It is architecturally fine as a dependency and wrong as an "integration" — there is nothing to install into the framework, only something to wrap.
It is also a suboptimal default for a typical Laravel app. Most applications need Blob only; the meta package drags in Queue, Table, and File surface that will never be exercised, widening the dependency and upgrade footprint for zero benefit. azure-oss/storage-blob is the correct direct dependency unless two or more services are genuinely in use.
Integration feasibility. Composer install is trivial. All the real work is glue: a service provider, a config entry, a singleton client binding, and either a Flysystem adapter or direct SDK calls behind a repository class. Estimated 1–3 engineering days including tests and Azurite-based integration coverage. The open dependency is whether a maintained Flysystem adapter targets this fork specifically — if not, that adapter is additional scope.
Technical risk.
Key questions.
microsoft/azure-storage-php, or is it a rewrite requiring code changes?AzureOss\Storage\* namespaces collide or conflict with MicrosoftAzure\Storage\* if both are transiently present?Stack fit. Works with any Laravel version running a compatible PHP runtime — verify the constraint before committing. Runtime footprint of the meta package is negligible; the cost is dependency surface, not performance. The SDK is PSR-18/PSR-7-based, so it will accept the HTTP client already bound in the container.
Migration path. Two origins are likely:
microsoft/azure-storage-php (direct or via matthewbdaly/laravel-azure-storage): a dependency swap plus namespace changes in application code. Because the namespace root differs, the two can coexist temporarily, which makes parallel running straightforward.Compatibility. Different namespace roots mean low collision risk but also mean no drop-in replacement guarantee. Validate the SDK method signatures the app actually calls rather than trusting stated compatibility. Auth-mode parity is the most likely gap and the most expensive to discover late — confirm managed identity support in a spike before scheduling the migration.
Sequencing.
If the spike fails on managed identity or on an API the app depends on, stop and evaluate the alternative before spending adapter effort.
Maintenance. Releases are automated subtree splits from the monorepo, so version tags stay synchronized across components — pin explicitly and let Dependabot or Renovate handle bumps. The real maintenance exposure is governance: a single under-resourced project controls the fix path. Budget for the possibility of maintaining a fork, and confirm the MIT license permits it (it does). Consuming the specific component rather than the metapackage materially narrows the upgrade blast radius.
Support. GitHub issues only. No vendor, no SLA, no security-response commitment. Mitigate with version pinning, a documented fork procedure, and a named internal owner for the dependency. Do not put this on a path where a support escalation has nowhere to go without a prior conversation about acceptable risk.
Scaling. Scaling characteristics belong to the Azure service and the HTTP client, not to this package. The levers that matter operationally: connection reuse via a singleton client, explicit timeouts, tuned retry/backoff, and chunked uploads with bounded memory for large blobs. The meta package's extra components cost nothing at runtime — they only cost audit and upgrade surface.
Failure modes.
Each maps to a concrete control: health check on the disk, explicit retry ceilings, streaming uploads enforced in the adapter, and fail-fast config validation at boot.
Ramp-up. Low for any engineer who has worked with Azure Storage — the SDK is conventional and the concepts transfer. The learning cost is concentrated in the Laravel glue, not the SDK. With one experienced engineer, plan a two-week window from spike to production cutover for a single Blob-backed disk.
Bottom line. Technically viable, operationally under-supported. Approve for internal or non-critical workloads where the team can absorb a fork; require the spike to clear auth-mode and adapter questions before committing anything customer-facing. Prefer azure-oss/storage-blob over the metapackage unless multiple storage services are genuinely in use.
How can I help you explore Laravel packages today?