Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Storage File Share Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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.

  • There is no Laravel service provider, no 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.
  • The Laravel/Azure ecosystem's Flysystem adapter story is Blob-centric. This package sits beside that ecosystem, not inside it.
  • Authentication model (shared key vs. SAS vs. Entra ID/identity) must be confirmed; our standard is managed identity + Key Vault, and a shared-key-only client would be a security review blocker.

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.

  1. Does the client abstract HTTP via PSR-18/PSR-17, or does it hard-bind Guzzle? This determines testability and whether we can inject a mock transport.
  2. Which auth modes are supported — shared key only, or SAS and Entra ID tokens with refresh?
  3. Coverage of the operations we need: directory create/delete, ranged/chunked upload for files >4 MiB, leases, snapshots, share quota, listing with pagination and continuation tokens.
  4. PHP and Laravel version support matrix; any dependency on the legacy microsoft/azure-storage-file-share SDK.
  5. Semver discipline and breaking-change policy across monorepo splits — subtree splits frequently ship tag churn that breaks Composer constraints.
  6. Is a Flysystem adapter planned upstream, or is adapter maintenance permanently ours?

Integration Approach

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:

  1. Spike (1–2 weeks). Provision a throwaway storage account in a sandbox subscription. Exercise auth, directory ops, chunked upload, listing pagination, and error shapes against real Azure. Output: a go/no-go memo and a written list of unsupported operations.
  2. Adapter + boundary. Build the Flysystem adapter (or repository interface) with contract tests that run against the live account in a nightly pipeline, not per-PR.
  3. First workload: a batch/off-cycle job. Report archival, export staging, or an integration file drop — asynchronous, retryable, and low blast radius. This buys production evidence without user-facing exposure.
  4. Promote only after a full quarter of clean operation and only if the workload genuinely needs file semantics.

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.

Operational Impact

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.

  • Throttling (HTTP 503 / ServerBusy) under bursty concurrency — requires exponential backoff in the adapter, not the caller.
  • Auth expiry / token refresh if SAS or Entra ID is used; a stale-token failure looks like an outage.
  • 409 Conflict on concurrent directory/file creation — idempotency is not free here.
  • Partial uploads from chunked transfers leaving orphaned uncommitted blocks; needs a reconciliation job.
  • Listing pagination truncation — silent data loss in exports if continuation tokens are mishandled.
  • Silent vendor abandonment — the failure mode with no error code. Mitigate with the repository boundary and an annual build-vs-buy re-evaluation.

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.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core