toneflix-code/kudisms-notification
Send SMS notifications from your Laravel app through Kudisms. This package adds a notification channel plus a lightweight API client, so you can deliver messages to one or many recipients using a simple, familiar Notification class.
Architecture fit. Unchanged, and the release does not touch it. This remains a thin Laravel notification channel — service provider plus a KudiSmsChannel — composing with mail/database/broadcast rather than replacing them. Nothing in 2.0.0 adds surface area; the diff is names, constraints, and dev tooling. That is the good news: the architectural judgement from the prior assessment holds without re-litigation.
Integration feasibility. The effort estimate changes from "low, contingent on three verifications" to "low, contingent on a platform prerequisite." 2.0.0 requires PHP ^8.3|^8.4 and Illuminate ^12.0|^13.0. If your application is on Laravel 11 or PHP 8.2 — plausible, given Laravel 11 is still inside its support window — this release is simply not installable, and upgrading the package means upgrading the framework first. That inverts the dependency direction: an SMS channel is now gating a platform upgrade. Two concrete traps worth naming. First, the PHP constraint is ^8.3|^8.4, which excludes PHP 8.5; if your platform roadmap targets 8.5, this package becomes the blocking constraint on a future upgrade, and you should raise it upstream now rather than discover it at cutover. Second, the vendor and namespace both changed (toneflix-code/kudisms-notification → toneflix/kudisms-notification, ToneflixCode\KudiSmsNotification → Toneflix\KudiSmsNotification), and the upgrade notes also tell you to update the published config — implying the config key or filename may have moved. Any config('…') reference, env var name, or queue/failure-handling override in application code must be re-verified, not just imports.
Technical risk. Mixed, and materially improved on one axis while a new axis opens.
Improved: the presence of Testbench ^10.11|^11.1 and Pest ^4, plus support for a Laravel major that did not exist at 1.1.1, is evidence of an active maintainer tracking the framework. The prior assessment's "assume frozen at the version you pin" posture should be softened — this is a maintained package, not an abandoned one. That is a real de-risking of the bus-factor and staleness concerns.
Newly opened — the vendor rename. A package rename is a supply-chain event, not a cosmetic one:
replace/provide. The notes give a manual composer remove / composer require sequence but do not mention a replace directive for the old package name. If one is absent, any transitive dependency still requiring the old name will install both side by side, and you will have two notification channels registered under different namespaces. Confirm this before migrating.toneflix/kudisms-notification is a shorter, more generic name than before. Once the old name is deprecated, an unclaimed toneflix-code/* slot is a squatting target. Note the old vendor's disposition.git diff -M with rename detection against 1.1.1 and confirm the only functional deltas are the constraint bumps.Key questions.
replace/provide for toneflix-code/kudisms-notification?-M detection is applied?ShouldQueue correctness, non-2xx and timeout semantics, retry/backoff, per-message sender ID override, credential logging, delivery receipts.Stack fit. Two qualifying statements now sit in front of the previous one. The package fits a Laravel 12/13, PHP 8.3+ application serving Nigerian or West African users. It no longer fits a Laravel 11 estate, and a Laravel 11 estate should not upgrade its framework to obtain an SMS channel. The regional-gateway caveat stands unchanged: if multi-country delivery is on the roadmap, this is the wrong abstraction.
Migration path. 2.0.0 is a validation of the prior recommendation rather than a revision of it, and the two paths now diverge sharply:
SmsSender interface plus adapter absorbs this release at the cost of a composer require and one binding line. The namespace churn becomes irrelevant — nothing in application code references Toneflix\… directly. This is precisely the scenario the seam was built for.app/, 2.0.0 delivers you nothing: the only changelog entries are the rename, constraints, and tooling. Do not re-integrate to chase a rename. Instead, diff 1.1.1 against 2.0.0 manually and cherry-pick anything behavioural, if it exists at all. Staying vendored forfeits the (now real) upstream maintenance, so record that as a deliberate trade, not an oversight.Compatibility. Pin exactly, no caret range — unchanged advice, but now with sharper edges. Because the constraint jumps from (presumably) Laravel 10/11 to 12/13 in a single major, you should expect future releases to drop Laravel 12 on a similar cadence; a pinned version plus a Renovate PR you review manually is the correct posture. Add a CI job that runs your notification tests against both declared Laravel versions if you can afford the matrix, and at minimum against your target. Confirm the package does not constrain illuminate/support in a way that blocks Laravel 14, and log the PHP 8.5 exclusion as a tracked risk with an owner and a date.
Sequencing.
git diff -M 1.1.1 vs 2.0.0; confirm rename-only plus constraints, and read the test directory if it now exists.replace directive.composer remove then composer require toneflix/kudisms-notification:^2.0 (pin exact), re-publish config, and diff the published config against your existing copy before overwriting.config() keys or env var names; grep the codebase for ToneflixCode to prove the swap is complete.Http::fake() test suite — success, 4xx, 5xx, timeout — and send one real SMS to a controlled number.Maintenance. The headline revision: this package is maintained, and the maintenance is active enough to track a new Laravel major and refresh its dev tooling. Budget for the opposite failure mode from the one previously described — not a frozen dependency, but a maintainer who will happily ship majors. Two majors in the package's visible history, with a vendor rename in the second, means you should plan for a breaking release roughly in step with Laravel majors. The mitigation is unchanged in shape and now clearly load-bearing: the seam or the vendor copy, plus an exact pin. Assign explicit internal ownership either way.
Support. Unchanged in substance — KudiSMS supports their API, not this wrapper — with one addition: the support surface moved. GitHub issues, security disclosure, and any historical discussion now live under a new org. Update the runbook's links, and note that issues filed against the old repository may go unread. Escalation remains: on-call reads the source, then contacts the gateway.
Scaling. No change. Throughput is gateway-bound, not package-bound. Confirm KudiSMS rate limits and per-message cost before building volume features; size queue workers for OTP bursts; add idempotency or dedupe at the application layer because retries against a non-idempotent gateway mean double billing. The only new scaling-adjacent note is the PHP ceiling — being unable to run 8.5 is a staffing-and-tooling constraint more than a throughput one, but it belongs on the same roadmap.
Failure modes. The previously listed quiet failures all still apply verbatim — swallowed errors, credential or sender-ID expiry, unqueued blocking calls, regulatory DND filtering, "sent ≠ delivered," credential leakage in logs. The release adds two migration-specific ones:
config:cache retaining an old key that no longer matches the package's lookup, producing an empty credential at send time rather than a startup error. Verify by clearing and rebuilding config as part of the upgrade, and by asserting a canary send immediately after deploy.-M diff review in step 2 is the control; do not skip it because the changelog says "renamed."Ramp-up. Developer ramp-up remains low — the mental model is the mail channel, the source is short, an hour end-to-end. The upgrade adds perhaps two hours of mechanical work (composer swap, import sweep, config diff, one canary). The real cost is unchanged and still non-obvious: KudiSMS's account model — sender ID approval, DND lists, credit top-ups — and the gateway's failure vocabulary. Half a day, budgeted against the gateway rather than the code. Add one item: whoever owns the upgrade should own the PHP 8.5 exclusion follow-up, or it will be rediscovered during a platform migration under time pressure.
How can I help you explore Laravel packages today?