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

Nexmo Bundle Laravel Package

javihernandezgil/nexmo-bundle

Symfony bundle that wraps the Nexmo (now Vonage) SMS API in configurable services, making it easy to send text messages from your controllers. It handles client setup through the Symfony service container, so you can start sending SMS with minimal boilerplate.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Recommendation: No-Go as a dependency; conditional Go as a reference implementation. javihernandezgil/nexmo-bundle is a Symfony2 bundle, not a Laravel package, and it has been archived since its last release in March 2016. Adopting it directly would import an unmaintained dependency chain into a Laravel codebase for a commodity capability (SMS/voice send). The only defensible use is reading it for wiring patterns and then implementing against a current SDK.

Architecture fit — poor. Laravel has no bundle system. The package ships Symfony DependencyInjection extensions, a Configuration tree, and Resources/config service YAML. None of that is resolvable by Laravel's service container. There is no service provider, no publishable config, no facade, no Laravel-idiomatic HTTP client binding. A Laravel integration would be a rewrite with the package used as loose inspiration, not an installation.

Integration feasibility — low, and shrinking. The bundle targets the pre-rebrand Nexmo PHP client, which sits on an older Guzzle generation and PHP constraints that will conflict with Laravel 10/11/12's dependency graph. Nexmo is now Vonage; the SDK lineage, auth model, and API surface have moved on. Even a Symfony shop could not consume this: Symfony 2.x is long EOL and the bundle predates Flex, so the configuration format does not survive a modern Symfony upgrade either. Stars (7) and dependents (0) confirm there is no community to inherit maintenance from.

Technical risk — high.

  • Supply chain: archived repo, no security response path, no CVE monitoring, unpinned transitive dependencies from 2016.
  • API drift: endpoints and credential handling have changed since the bundle was written; behavior is unverifiable without live testing against Vonage.
  • Hidden incompatibility: the failure mode is not a clean install error but a partially working port that breaks on retry logic, webhook parsing, or unicode/multipart SMS paths.
  • Licensing is the one clean signal: MIT permits forking, copying, and internal relicensing of derivative work.

Key questions for the business owner:

  1. What is the actual requirement — one-way SMS alerts, two-way conversational, voice, or Verify/2FA? Each maps to a different Vonage product line and different compliance obligations.
  2. What monthly volume and geographic footprint? This drives whether a managed notification channel, a direct SDK, or a CPaaS abstraction layer is correct.
  3. Which compliance regimes apply — TCPA/10DLC registration in the US, sender ID registration in the EU, GDPR for number storage? None of this is addressed by a 2016 bundle.
  4. Is vendor portability a stated goal? If yes, the answer is an internal SmsGateway interface with a Vonage adapter, not a vendor-specific bundle.
  5. Who owns this code in 12 months? If the answer is unclear, the dependency is unowned.

Integration Approach

Stack fit. Zero out of the box. Laravel's equivalents — service provider, config/ file, facade, queued jobs, notification channel — must all be authored by us. The bundle's reusable surface area is small: a configuration schema, a client factory, and a message DTO shape. That is roughly a day of design work to reproduce idiomatically.

Migration path (if we proceed). Do not composer require this package. Instead:

  1. Extract the intent: which config keys, which send methods, which response handling.
  2. Discard the implementation. Build a VonageServiceProvider registering a client from config/services.php, resolved via the container and injectable as an interface.
  3. Use the current vonage/client SDK directly, or a maintained Laravel notification channel, to avoid hand-rolling HTTP.
  4. Wrap sends in a queued job with explicit retry and idempotency keys; expose delivery receipts through a signed webhook controller.

Compatibility. Target the current supported Laravel and PHP versions, current Guzzle, and Vonage's current auth (API key/secret or JWT for voice). Pin every version. If any part of the 2016 code is copied verbatim, vendor it into app/Support/ and mark it as internal code with a named owner — do not leave it in vendor/ where it looks maintained.

Sequencing. (a) Requirements and compliance scoping, (b) provider decision — Vonage direct vs. abstraction layer vs. managed channel, (c) thin adapter build with contract tests against a sandbox, (d) webhook and delivery-receipt handling, (e) staged rollout on a non-critical notification type before touching auth codes or customer-facing alerts. Do not parallelize (b) and (c).

Operational Impact

Maintenance. The package has no maintainer. Any adoption transfers 100% of maintenance to us, including security patching of a 2016 dependency tree and version drift against Vonage's API. That is a standing tax on a capability that is otherwise a solved problem with maintained libraries.

Support. No upstream issues, no release notes, no upgrade guides, no maintainer to escalate to. Internal support burden falls on whoever wrote the adapter, and their departure is an unmitigated risk unless the adapter is deliberately small and documented.

Scaling. Throughput is not the constraint — Vonage's rate limits and per-country carrier filtering are. Scaling concerns are operational: queue depth on send jobs, backoff on 429s, and webhook ingestion volume. None of these are helped or hindered by the bundle; they must be designed regardless.

Failure modes to plan for.

  • Silent send failures: provider accepts the request but the message is filtered or rejected downstream. Requires delivery-receipt webhooks, not just HTTP 200 handling.
  • Duplicate sends: retries without idempotency keys double-bill and double-notify. Enforce a dedupe key per logical notification.
  • Credential rotation: hardcoded or config-cached secrets cause a full outage window on rotation; design for env-driven reload.
  • Webhook forgery and replay: signature verification and event dedupe are mandatory; the 2016 bundle has no opinion here.
  • Compliance rejection: 10DLC or sender-ID registration lapses cause carrier-level blocking that looks like an application bug.

Ramp-up. Low for the code itself — the bundle is small and easy to read. High for the surrounding surface: Vonage account setup, number provisioning, compliance registration, webhook infrastructure, and observability. Budget the engineering effort against that surface, not against the package, and treat the bundle strictly as a design artifact.

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.
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log