nexmo/laravel
Official Laravel integration for Vonage, formerly Nexmo. It provides a service provider, facade, config file, and notification channel for sending SMS messages and making voice calls via the Vonage API from any Laravel app, with simple installation and setup.
Architecture fit. nexmo/laravel is a thin Service Provider wrapper: it publishes config/nexmo.php, registers a singleton of the Vonage (formerly Nexmo) PHP Client in the container, and exposes a Nexmo facade. That is a very small surface area — roughly one provider class plus config. It solves a real ergonomic problem (credential wiring, DI, testability of the client) but it is not architectural glue; it does not provide queues, retries, webhook controllers, message persistence, or templating. Any production-grade SMS/voice integration will still require us to build delivery tracking, webhook signature verification, and rate-limit handling ourselves.
Integration feasibility. Mechanically trivial — composer require plus auto-discovery on Laravel 5.5+. The blocker is not effort, it is compatibility: the final release (2022-02-03) targets the Laravel 8 / PHP 7.4–8.0 era and depends on the pre-v3 vonage/client line. On Laravel 10/11 with PHP 8.2+, Composer constraint resolution will either fail outright or force a stale SDK. There is also substantial functional overlap with Laravel core: the framework ships a first-party Vonage notification channel (formerly Nexmo) configured through config/services.php, which covers the dominant use case (transactional SMS from a Notification). For most requests the package is redundant.
Technical risk. The decisive fact is archived: yes. No upstream patches, no security advisories, no PHP/Laravel version bumps, no response to Vonage API changes or SDK deprecations. Risks in priority order:
vonage/client CVE or Guzzle/PSR-18 conflict leaves us with no supported remediation other than forking.application_id; config-file secrets risk being committed. No secret-manager integration.Key questions.
Stack fit. Fits Laravel 5.5–8 comfortably; fits Laravel 9–11 only via a fork or a hand-rolled replacement. PHP 7.4 is end-of-life and PHP 8.1+ is the realistic floor for new services, which puts the package outside our supported baseline. Where the package does fit is behind a narrow internal interface — SmsSender::send() / VoiceCaller::place() — so the vendor coupling is one adapter class, not scattered across the codebase.
Migration path. Three viable routes, in order of preference:
Vonage notification channel plus config/services.php credentials. Zero extra dependency, maintained by the framework, covers transactional SMS. Requires converting Nexmo::message()->send(...) call sites into Notification classes or a small VonageSender adapter over vonage/client directly.app/Providers and bind Vonage\Client ourselves (3–5 lines). Retains existing call sites, removes the archived dependency from composer.json, and puts version control of the SDK back on us. Best if we have voice/verify usage that core does not cover.Compatibility. Confirm the resolved vonage/client major against Laravel's HTTP client and Guzzle versions, and against PHP 8.2/8.3. Watch for the legacy nexmo/client package name being pulled transitively — that name is fully deprecated. Also verify service provider auto-discovery does not collide with an already-registered Vonage\Client binding from another package.
Sequencing.
Nexmo::, nexmo. config reads, toNexmo() on notifications) and classify as SMS / voice / verify.SmsSender/VoiceCaller interfaces and route existing call sites through them.composer.json, delete config/nexmo.php, rotate credentials that lived in it.Maintenance. Effectively zero upstream maintenance available — we inherit 100% of the burden the moment we adopt. The realistic ongoing cost is not code churn (the package is tiny) but version-lock drag: it will be the reason a Laravel upgrade stalls, and it will be re-litigated in every dependency audit. Budget a one-off 1–3 engineer-days for replacement, and treat any "keep it" decision as accepting a permanent, unowned liability.
Support. No maintainer, no issue triage, no security channel. Internal support must be: the platform team owns the adapter; Vonage's own support covers API behaviour but not this package. On-call runbooks need to name the adapter and the credential rotation procedure explicitly, because there is no upstream documentation to fall back on.
Scaling. The package itself does not constrain throughput — it holds a singleton client, and the bottleneck is Vonage account-level rate limits and per-country sender ID rules. But it provides none of the scaling primitives: no queue integration, no backoff, no idempotency keys, no batch API usage. At volume, we will be building rate limiting and retry-with-jitter ourselves; that work is required regardless of whether this package is present, so it does not argue for keeping it.
Failure modes.
signature_secret validation ourselves.Ramp-up. Learning curve is near-zero for a Laravel developer (facade + config), which is precisely why it gets adopted casually and then orphaned. The real ramp-up is domain knowledge: Vonage API auth modes (key/secret vs JWT/application), sender ID permissibility by country, DLR semantics, and the Messages API migration. That knowledge is required either way — the package saves none of it.
Recommendation. Do not adopt. For existing usage, contain (freeze new call sites), wrap behind an internal interface, and migrate to Laravel's first-party Vonage channel or a direct vonage/client binding within one quarter; the high opportunity score and low overall score indicate the ecosystem gap is already being filled elsewhere, and the archived status removes any argument for patience.
How can I help you explore Laravel packages today?