overtrue/flysystem-cos
Flysystem adapter for Tencent Cloud COS (Cloud Object Storage). Plug Tencent COS into League Flysystem and Laravel's filesystem so you can read, write, and manage remote objects using the familiar Storage API.
Storage facade — the expansion becomes a config change, not a re-architecture of the upload layer.spatie/laravel-backup targets), and private-file sharing via signed URLs. It also makes unit-economics comparisons concrete — COS egress and storage pricing for CN traffic vs. S3/CloudFront — which is often the deciding input for the China launch business case.Adopt when:
Storage::disk('cos') semantics, including signed/temporary URLs, without writing and owning an adapter.Look elsewhere or defer when:
league/flysystem-aws-s3-v3 for S3; it is better supported and needs no evaluation.qcloud/cos-sdk-v5) directly, and the adapter may not surface them.Adoption gate: pin the version, wrap it behind a filesystem.disks.cos config block plus an integration test that exercises upload, signed URL, and delete against a real bucket. That makes the exit cost measurable before you commit.
To executives: "A small, free adapter that lets us store and serve files from Tencent Cloud's object storage without changing our application code. It removes the main technical blocker for serving users in mainland China and lets us hit COS/China CDN pricing instead of paying to move bytes across borders. Cost is a few hours of integration and an ongoing maintenance risk we can contain by isolating it behind our existing storage configuration."
To engineering: "It's a Flysystem adapter, so it registers as a normal Laravel disk — no new abstractions, no SDK calls scattered through the codebase. Roughly one dependency, standard Storage API, signed URLs included. Caveats: small community (~80 stars) and an unverified upstream repo, so pin the version, keep the disk config as the only touchpoint, and have the fallback be the native qcloud/cos-sdk-v5 behind the same interface. Before adopting, confirm Flysystem major compatibility with our Laravel version and add one integration test against a real bucket so a swap later is a half-day, not a sprint."
How can I help you explore Laravel packages today?