overtrue/laravel-easy-sms
Send SMS messages in Laravel through multiple Chinese SMS providers with one simple, unified API. EasySms for Laravel handles configuration, gateways, and message sending so you can notify users by text without writing provider-specific code.
php -v and composer show laravel/framework first; if either is below the floor, you are on the v3 line and should stay there until you can upgrade.composer.json before the README. The require block is the authoritative statement of which illuminate/* versions v4 actually accepts. "Adds Laravel 13 support" does not automatically mean Laravel 12 was dropped — verify whether the constraint is ^13.0 (hard cut) or ^12.0|^13.0 (additive). This single line determines whether the upgrade is a coordinated framework jump or a drop-in.composer require <vendor>/<package>:^4.0 --with-all-dependencies
Use --with-all-dependencies on the first install; a major bump frequently pulls transitive constraints that need re-resolution alongside the framework.UPGRADE.md or a CHANGELOG.md entry listing removed methods, renamed config keys, and dropped support. Read that section before touching application code — it is the highest-signal document in the release.laravel/framework and the package together in one commit so the lockfile reflects a coherent set. Upgrading the package first and the framework second is how you end up debugging a resolution error that masks the real breakage.^3.0 and a new PHP 8.3 / Laravel 13 leg against ^4.0. Do not try to test both package majors in a single job — the dependency solver will fight you.^3.0|^4.0 in a feature branch so you can run the suite against both, then narrow to ^4.0 once green. This is especially useful for catching behaviour drift that static analysis misses.php artisan vendor:publish --tag=<package>-config into a scratch directory and diff against your existing published copy. Major versions routinely rename keys, and a stale published config silently wins over new defaults.composer.json, not the lockfile alone. "<vendor>/<package>": "^4.0" documents the intent; the lockfile documents the moment. Teams that rely only on the lockfile get surprised on the next composer update.composer.json edit.composer require fails after the bump, read the full conflict output; it names the specific package and version range blocking you. Nine times out of ten it is an unrelated dependency that also needs a major bump.config/app.php or a bootstrap/providers.php entry can cause double registration or, worse, a stale class reference that fails only on certain code paths.php artisan optimize:clear (or config:clear, route:clear, view:clear) before concluding anything is broken. A cached config from v3 pointing at a renamed key is the single most common false alarm after a major bump.How can I help you explore Laravel packages today?