league/flysystem-dropbox
Flysystem adapter for Dropbox storage in PHP. Read, write, list, delete, and manage files and directories through Flysystem’s unified API, making Dropbox easy to integrate into Laravel or any PHP application.
Architecture fit. This adapter implements Flysystem 1.x's League\Flysystem\AdapterInterface. That contract was removed in Flysystem 2.0 and has no equivalent in Flysystem 3.x, which is what Laravel 9+ ships. Structurally, therefore, the package only "fits" Laravel 5.x-era applications. Even there it is unlikely to function: the 2015 release targets Dropbox API v1, which Dropbox retired in 2017, so the transport layer is dead regardless of the PHP-side interface.
Integration feasibility. Low to zero for new work. Composer will conflict with league/flysystem ^2|^3, modern Guzzle, and PHP 8.x constraints. There are no dependents recorded, which suggests the ecosystem already migrated; the sanctioned path is the package's own deprecation notice pointing at spatie/flysystem-dropbox, which is maintained, targets Flysystem 3, and speaks Dropbox API v2. Any effort spent making this package install is effort not spent on the replacement that already exists.
Technical risk. High and asymmetric. Abandoned and archived upstream, last release June 2015, no security response channel, no PHP 8 compatibility, no typed signatures. The principal risk is not runtime failure in isolation — it is that a pinned legacy dependency becomes a platform-upgrade blocker, preventing Laravel/PHP upgrades across every service that still resolves it, and that the failure is silent (storage exceptions surfacing as user-facing write errors) rather than loud at build time.
Key questions.
composer.lock in our estate today, and which services/Laravel versions?Stack fit. Do not add this package. For the target stack (Laravel 9+/Flysystem 3/PHP 8.1+), the correct dependency is spatie/flysystem-dropbox, wired through a Laravel filesystem disk so application code keeps using the Storage facade. The call-site surface (put, get, delete, listContents, url/temporary links) is largely unchanged, which keeps blast radius small.
Migration path.
composer.lock, config/filesystems.php, and DI bindings for the abandoned package and any AdapterInterface usage.Storage/FilesystemManager rather than instantiating the adapter directly. Where they don't, introduce the seam first; it is the only non-trivial code work.Compatibility. Validate the PHP / Flysystem / Dropbox SDK version matrix explicitly; the SDK major version and Laravel minor version are the two constraints most likely to bite. Do this on a branch before committing to a date.
Sequencing. Audit → seam → credentials → adapter swap → test → cutover → decommission. Run the audit as a fast, timeboxed spike (days): its output determines whether this is a one-service fix or a programme, and that distinction drives the estimate far more than the code change does.
Maintenance. Effectively zero upstream. Every future bug, PHP deprecation, or API change becomes ours to fix in a fork. That is a permanent, unbounded tax; migration is a bounded one-time cost. The economics are not close.
Support. No CVE channel, no maintainer, no vendor escalation. Dropbox support will not diagnose a dead SDK. Any incident routes to our own on-call, who will have no upstream to lean on.
Scaling. The adapter is thin; throughput is bounded by Dropbox API rate limits and token refresh, not by this package. The problem is that retry/backoff, connection pooling, and error classification cannot be improved without forking — so scaling issues become unfixable-by-design rather than merely hard.
Failure modes. (a) Hard runtime failure from the retired v1 endpoints; (b) auth failures as legacy tokens expire with no refresh logic; (c) Composer resolution failures that block framework upgrades estate-wide; (d) silent storage errors surfacing as user-facing data loss symptoms. (c) is the one to socialise with engineering leadership — it is an organisational risk, not a service-level one.
Ramp-up. The API surface is small and well understood, so per-service migration is measured in days. The real effort sits in inventory, credential re-provisioning, and test coverage of storage paths — all of which the replacement package's documentation substantially shortens, and none of which this package can help with.
How can I help you explore Laravel packages today?