javihgil/nexmo-bundle
A Symfony bundle that integrates Nexmo (now Vonage) SMS services into your application, handling client configuration and service wiring so you can send text messages through a simple, dependency-injection-friendly interface.
Architecture fit. This is not a Laravel package. javihgil/nexmo-bundle is a Symfony2 bundle (Jgm\NexmoBundle) that wires the legacy nexmo/client PHP SDK into Symfony's DI container via an Extension/Configuration pair and XML service definitions, registered through AppKernel. There is no ServiceProvider, no facade, no publishable config — none of the idioms a Laravel integration would need. For a Laravel codebase the only reusable artifact is the shape of the integration (a config schema for api_key/api_secret and a thin service wrapper around the client), which is on the order of 100–200 lines. That is a specification, not a dependency.
Integration feasibility. Low. Composer resolution is expected to fail against a modern Laravel stack: the bundle's constraints sit in the Symfony 2.x / PHP 5.x era and pull the nexmo/client v1 line, which in turn pins Guzzle 5/6 — conflicting with Laravel 8+ (Guzzle 7, Symfony 5/6 components). Forcing install with --ignore-platform-reqs yields runtime class mismatches rather than a working integration. Even inside a Symfony application the bundle would only be viable on an EOL Symfony branch.
Technical risk. High, and concentrated in three places:
| Risk | Detail |
|---|---|
| Abandonment | Archived, last release 2016-03-01. No security disclosure path, no CVE patching, no issue triage. |
| Vendor drift | Nexmo rebranded to Vonage in 2020; the v1 PHP SDK is EOL. Credential and auth models (API key/secret vs. application ID + JWT) have moved on, particularly for Messages/Voice/Verify. |
| Validation | 7 stars, 0 dependents. Essentially no production signal — no evidence anyone is running this at scale. |
The MIT license is permissive, so forking is legally clean; it is the maintenance liability, not the license, that is the blocker.
Key questions.
Stack fit. Use vonage/client (current major) directly, or skip the SDK for simple SMS and call the REST API through Laravel's Illuminate\Support\Facades\Http, which gives testing fakes, retries, and middleware for free. Bind either behind a first-party SmsSender contract in a VonageServiceProvider; configuration belongs in config/services.php reading from .env, which is the Laravel-native equivalent of what the bundle did for Symfony.
Migration path. Treat the bundle as a reference implementation, not a dependency:
api_key, api_secret, plus any sender/from default) into a documented config block.FakeSmsSender for tests so no CI job touches the network.For a Symfony shop, the equivalent move is plain service wiring in services.yaml against vonage/client, or a maintained bundle — not this one.
Compatibility. Expect a hard wall, not a soft one:
| Dimension | This package | Target stack |
|---|---|---|
| Framework | Symfony 2.x bundle | Laravel 10/11 |
| PHP | 5.x era | 8.1+ |
| HTTP client | Guzzle 5/6 | Guzzle 7 |
| Vendor SDK | nexmo/client v1 (EOL) |
vonage/client v4 |
Sequencing.
vonage/client in a service provider, send a real SMS to a staging number, verify credential handling end to end.SmsSender + DTOs before the second use case lands, while swapping is still cheap.Maintenance. Zero upstream. Adopting this means permanently owning a fork of an abandoned bundle and an EOL SDK — every Laravel, PHP, and Guzzle upgrade becomes our remediation work, with no one upstream to diff against. The first-party alternative is a few hundred lines we already understand.
Support. No maintainer, no vendor relationship, no escalation path. Vonage support will not troubleshoot an SDK that has been EOL for years, which means the first production incident is fully internal regardless of which path we take — the difference is whether we're debugging our own 200 lines or someone else's 2016 code.
Scaling. The bundle contributes nothing to throughput; it is a thin DI wrapper over synchronous HTTP. Scale is governed by provider rate limits and our own queueing. Recommend dispatching sends through a queued job with a rate limiter and idempotency key, and keeping the HTTP call out of the request cycle. Connection pooling is a non-issue at our volume.
Failure modes.
Ramp-up. Negligible for the bundle itself — it is small and readable. The real cost is that it encodes an obsolete pattern: engineers onboarding to it would learn Nexmo-era conventions that no longer match Vonage's current auth and messaging surfaces. Budget half a day of Vonage API orientation (SMS vs. Messages API, signatures, webhooks) per engineer instead.
Recommendation. Do not adopt. The package is archived, framework-mismatched, SDK-EOL, and unvalidated by any dependents. The integration it represents is small enough that a first-party Laravel implementation on vonage/client costs roughly 1–3 engineer-days and eliminates every risk above except the commercial ones, which are unaffected by the library choice.
How can I help you explore Laravel packages today?