azure-oss/storage-file-share
Laravel filesystem driver for Azure File Share. Integrates with the Storage facade so you can read, write, list, and delete files on Azure file shares through familiar Laravel APIs, with package config for quick setup in your app.
What the artifact actually is. azure-oss/storage-file-share is not an independently maintained library — it is a read-only subtree split of AzureOss\Storage\File\Share from the php-oss-for-azure monorepo, published so Composer can resolve the component in isolation. Every architectural question about this package is really a question about that monorepo: issue trackers, PRs, release notes, and version tags live upstream, and the split repo is a build artifact. A TPM must plan against the monorepo, not the package page.
Architecture fit. The package targets the Azure Files (File Share) REST surface — SMB-semantics storage with real directory hierarchies, share quotas, leases, and snapshots. This is materially different from Blob Storage, and the most common integration mistake is treating them as interchangeable. Fit is good only if we have a genuine reason to want POSIX-ish file semantics (lift-and-shift of a legacy file-consuming app, shared config/asset drop, mounted volume parity between on-prem and cloud). If the requirement is "store user uploads" or "serve media," Blob plus Flysystem is the correct answer and this package is the wrong tool.
Integration feasibility. Moderate at best, and the gap is Laravel-shaped.
config/filesystems.php driver, and — based on the package's scope — no league/flysystem adapter. Storage::disk('azure-files') will not work out of the box; we would write and own a Flysystem adapter or call the client directly behind our own repository interface.Technical risk — high, and concentrated in provenance.
| Risk | Severity | Note |
|---|---|---|
| Zero stars / zero dependents | High | No production signal to borrow confidence from. We would be an early adopter, paying the debugging tax. |
| Read-only split repo | High | No issues, no PRs, no local patch path. Every fix is a fork or an upstream campaign. |
| Single-maintainer / bus factor | High | Community org project; continuity plan required. |
| No local emulator | High | Azurite does not emulate File Shares. CI integration tests need a live storage account — cost, secrets, and flakiness. |
| Release metadata hygiene | Medium | The published last-release timestamp is anomalous relative to the current date; version provenance needs verification before we pin anything. |
| Score 16.9, opportunity 51.6 | Medium | The scoring says "real gap in the market, no one has proven it." That is an accurate description of the risk we would be taking. |
Key questions to put to the maintainers or answer in a spike.
microsoft/azure-storage-file-share SDK.Stack fit. PHP 8.x / Laravel 10–11 is plausible but unverified; the package must be validated against our exact runtime before it enters any design document. The integration surface we should plan for is a thin internal boundary: App\Contracts\FileShareRepository with an Azure-backed implementation, so the vendor client never leaks into controllers, jobs, or Blade views. That boundary is what makes a later swap to Blob, S3, or a self-hosted SMB gateway a contained change rather than a rewrite.
Migration path. Do not place this on a critical path in phase one. Sequence it as:
Compatibility and coexistence. File Share and Blob can coexist cleanly under one Laravel app with two disks. Plan for that from day one: it costs nothing and preserves the option to route object-storage workloads to Blob while keeping File Share for the narrow case that justifies it. Secrets go to Key Vault and are surfaced via our existing config pipeline; no connection strings in .env beyond a Key Vault reference.
Sequencing dependencies. Security review of the auth model gates the spike. The CI storage-account provisioning (IaC + cost approval) gates step 2. Nothing gates step 1 — start there.
Maintenance. We own more of this than the package page implies: the adapter, the test harness, and the upgrade treadmill. Budget roughly 10–15% of one engineer's time ongoing, plus the standing cost of tracking upstream monorepo releases manually since there are no dependents or security advisories to alert us. A Dependabot-only posture is insufficient for a zero-adoption dependency — we need a named owner and a quarterly review.
Support. There is effectively no support channel. The read-only repo cannot accept issues; upstream response times are unknown and un-SLA'd. Escalation path for a production defect is: patch via Composer repositories fork override, then upstream. That fork path must be rehearsed before go-live, not discovered during an incident.
Scaling. Azure Files has hard, per-share limits that differ by tier (transaction-optimized, hot, cool; standard vs. premium). Throughput and IOPS are provisioned, not elastic — a share that performs in staging can throttle in production under concurrency. REST access carries per-operation latency meaningfully higher than local disk; anything in a request/response cycle should be assumed to need caching or async offload. Large-file concurrency and SMB-vs-REST client behaviour both need load characterization before we commit to volume.
Failure modes to instrument from day one.
ServerBusy) under bursty concurrency — requires exponential backoff in the adapter, not the caller.Ramp-up. Low conceptual ramp for anyone who knows Laravel's filesystem, moderate for Azure Files specifics. The real cost is the absence of tribal knowledge: no blog posts, no Stack Overflow corpus, no prior art to search when something breaks. Allocate pairing time and write internal runbooks as the spike output rather than after the fact. Teams that have only used S3/Blob will underestimate the semantic differences (directories that actually exist, leases, share quotas) — a short internal primer is worth the hour.
Recommendation. Treat this as a conditional bet, not a default. It is the right package only if we have a concrete workload that requires SMB-style file semantics and no viable alternative. The low score is not a verdict on code quality — it is an accurate statement that nobody has de-risked this for us, and at zero dependents we would be doing that work ourselves. Fund the two-week spike, gate everything on it, and keep the Blob path open until the spike says otherwise.
How can I help you explore Laravel packages today?