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.
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.
Key questions for the business owner:
SmsGateway interface with a Vonage adapter, not a vendor-specific bundle.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:
VonageServiceProvider registering a client from config/services.php, resolved via the container and injectable as an interface.vonage/client SDK directly, or a maintained Laravel notification channel, to avoid hand-rolling HTTP.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).
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.
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.
How can I help you explore Laravel packages today?