Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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:

  1. Unpatchable supply chain — a transitive vonage/client CVE or Guzzle/PSR-18 conflict leaves us with no supported remediation other than forking.
  2. Abandonment drift — Vonage has renamed brand, SDK namespace, and API versions; a pinned legacy SDK will gradually diverge from current API behaviour (e.g. Messages API vs legacy SMS API, JWT/application auth for voice).
  3. Credential handling — voice requires a private key file path plus application_id; config-file secrets risk being committed. No secret-manager integration.
  4. False confidence from popularity — 319 stars reflect 2017–2019 adoption; the reported dependent count (0) and score (1.97) indicate the ecosystem has already moved off it.

Key questions.

  • Do we need raw API access (voice, verify, number insight, messages API) or only SMS notifications? If only SMS, we can drop the dependency entirely.
  • Which Vonage SDK major version do our other services standardise on, and does that resolve against our Laravel/PHP matrix?
  • Is there an existing internal owner, or would this be an unowned dependency?
  • Are we prepared to fork and vendor the provider (~1 file + config) under our own namespace, and who carries that pager?
  • What are the compliance requirements on message content and delivery receipts (PII retention, audit trail)?

Integration Approach

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:

  1. Replace with Laravel core (recommended). Use the built-in 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.
  2. Vendor the provider. Copy the Service Provider and config into 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.
  3. Fork and publish internally. Only justified if multiple teams depend on the facade; costs a maintained repo and release process.

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.

  1. Inventory call sites (Nexmo::, nexmo. config reads, toNexmo() on notifications) and classify as SMS / voice / verify.
  2. Freeze: no new usage; add a lint/CI check preventing new imports.
  3. Land the internal SmsSender/VoiceCaller interfaces and route existing call sites through them.
  4. Swap the implementation behind the interface (core channel or direct SDK), one call site per PR.
  5. Remove the package from composer.json, delete config/nexmo.php, rotate credentials that lived in it.
  6. Only then evaluate whether voice/verify features need a net-new build.

Operational Impact

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.

  • Silent degradation — legacy SDK calls that no longer match Vonage API behaviour can fail with ambiguous errors; without our own structured logging around the adapter, failed sends are invisible.
  • Dependency deadlock — a Laravel/PHP upgrade cannot proceed until the package is removed; if discovered mid-upgrade, it becomes a schedule risk rather than a backlog item.
  • Credential leakage — published config files are a common source of committed secrets; rotating after removal is mandatory.
  • Webhook spoofing — the package offers no signature verification helper, so inbound delivery receipts and inbound SMS are an unguarded endpoint unless we implement signature_secret validation ourselves.
  • Private-key path failures — voice auth reads a PEM from disk; container image changes silently break it.

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.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console