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

Sms Sender Bundle Laravel Package

kphoen/sms-sender-bundle

A Symfony bundle that integrates the SMS Sender library, letting PHP applications send text messages through configurable gateways and providers via a simple service-based API.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Premise check first: this is not a Laravel package. kphoen/sms-sender-bundle is a Symfony2 bundle — a Kernel-registered bundle with a DependencyInjection/*Extension class, XML/YAML service definitions, and a Resources/config tree. Laravel has no bundle concept, no AppKernel, and no autoloading convention that maps to Symfony's bundle namespace layout. Any "integration" into a Laravel codebase is therefore a port, not an install.

Architecture fit: Poor. The bundle's only real value is (a) service-container wiring and (b) a thin Symfony-facing wrapper around the kphoen/sms-sender library's SenderInterface and its concrete senders. In a Laravel app the container wiring is replaced by a service provider, so roughly 80% of the package's code is dead weight. The genuinely reusable asset is the underlying library's sender abstraction and its concrete provider adapters — and even that is a 2014-era design that predates PSR-18 HTTP clients and modern provider SDKs.

Integration feasibility: Low-to-moderate, and asymmetric in effort. composer require will resolve only against PHP 5.x-era constraint sets; on a modern PHP 8.1+ / Laravel 10+ stack it will not install without --ignore-platform-reqs and a fork. There is no maintained path. The honest options are: (1) reimplement a SmsSender-style interface in the app and write one or two adapters against a current provider SDK, or (2) lift the sender interface shape as a design reference and discard the code. Neither is a "leverage" story — both are greenfield.

Technical risk: High and largely unmitigable.

  • Deprecated upstream. The maintainer has explicitly marked it [DEPRECATED]. There is no expected fix for anything, including security issues.
  • Dormant since 2014-10-21. Twelve years without a release means no PHP 7/8 support, no PSR-4 migration, no dependency refresh, and transitive dependencies that will collide with a modern framework's constraints.
  • Effectively zero adoption. 14 stars and 0 dependents. There is no user base to surface bugs, no Stack Overflow corpus, no forks carrying patches. The composite score of ~1.18 with opportunity at 0.76 reflects exactly this: low signal, low momentum.
  • Silent-failure surface. SMS senders are I/O against third-party gateways. A 2014 wrapper will have no retry policy, no idempotency keys, no typed exceptions for provider rate-limits, and no webhook/DLR handling — the failure modes that actually matter in production.

Key questions for the team:

  1. What is the actual requirement — transactional SMS delivery, or a provider abstraction we can swap later? The former is a two-day provider SDK integration; the latter is an interface we should own, not inherit.
  2. Which provider is contracted? If it's Twilio/Vonage/MessageBird, their maintained SDKs make this package redundant by definition.
  3. Is there any existing code that already depends on kphoen/sms-sender? With 0 dependents reported, almost certainly not — confirm before spending review time.
  4. Does the application need delivery receipts, retries, and queuing? If yes, no 2014-era library will satisfy the requirement regardless of maintenance status.

Recommendation: Do not adopt. Treat the repository as a historical reference for interface shape only.

Integration Approach

Stack fit: None at the framework layer. A Symfony bundle's integration contract is AppKernel::registerBundles() plus container compilation; Laravel's is register()/boot() on a service provider plus the facade/container binding system. These do not overlap. There is no shim, no bridge package, and no community precedent for running Symfony2 bundles inside Laravel. Forcing it would mean vendoring the bundle, stripping the DI extension, and manually re-registering each service — at which point you have rewritten the package and inherited only its maintenance debt.

Migration path (the defensible one):

  1. Define an application-owned contract — e.g. App\Contracts\SmsSender with a single send(SmsMessage $message): SmsResult method. Keep it deliberately narrower than the 2014 interface; skip anything the app does not call.
  2. Implement one adapter against the chosen provider's current official SDK, with an HTTP client injected for testability.
  3. Bind the interface in a service provider, with a null/log adapter bound in local and testing environments — mirroring the NullSender pattern the old library got right.
  4. If multiple providers are anticipated, add a manager that resolves the adapter from config, rather than importing a bundle's provider-switching config tree.

Compatibility: Assume the package is incompatible with anything you are running. Concretely: no PHP 8 typed-property or union-type support, PSR-0-era autoloading assumptions, Symfony 2.3–2.8-era container APIs, and dependency constraints pinned to abandoned HTTP/mail libraries. Verify by reading composer.json in the repository rather than trusting the description — but budget for the answer being "unusable on our stack."

Sequencing: Interface first, one adapter second, queue integration third, second provider last and only if a real requirement exists. Do not sequence the evaluation of this package ahead of that work — it cannot inform it. The entire evaluation should cost under an hour, most of it spent reading composer.json and the sender interface, and it should terminate in a decision to build rather than adopt.

If a fork is somehow mandated: scope it as a hard fork under application ownership, drop the bundle layer entirely, keep only the SenderInterface and concrete adapters, and accept that the team now owns every transitive dependency. That is a strictly worse outcome than the three-step path above, and should be documented as such.

Operational Impact

Maintenance: Total, from day one. The upstream is deprecated and dormant; there is no version to pin to a supported branch, no security advisory channel, and no expectation of a patch. Any fork becomes an internal product with an internal owner — which is fine for a 100-line adapter and is not fine for a vendored framework plugin. Maintenance cost is not proportional to code size here; it is proportional to the number of abandoned transitive dependencies inherited.

Support: None external. No maintainer responsiveness, no issue tracker activity that matters, no community to escalate to. Internal support means one engineer reads the source. That is acceptable for a small, well-understood adapter and unacceptable for anything touching revenue-bearing notifications, where the failure question is "who do we call at 2am."

Scaling: The pattern the bundle encourages — synchronous send inside the request cycle — is the wrong shape. SMS gateways have per-second rate limits, variable latency (200ms to multi-second), and transient 5xx behavior. Sends belong on a queue with retries, exponential backoff, and a dead-letter path; that is Laravel's ShouldQueue notification or a Bus::dispatch job, none of which this package knows about. Concurrency scaling is therefore entirely a function of the code you write around it, not the package.

Failure modes to expect:

  • Silent degradation — provider returns 200 with an error body; a 2014 wrapper will not distinguish these.
  • No idempotency — retries duplicate messages, which is user-visible and expensive at scale.
  • Unbounded blocking — no timeout discipline on the underlying HTTP call; one slow gateway stalls the worker pool.
  • No delivery visibility — no DLR/webhook handling, so "sent" and "delivered" are conflated in logs and dashboards.
  • Dependency collision — a transitive HTTP or mail library pinned to a 2014 version silently downgrades something else in the app, or fails to resolve at all.

Ramp-up: Near-zero knowledge transfer available. There is no documentation beyond a README written for Symfony2 developers in 2014, no examples in a modern idiom, and no one on the team is likely to have seen this package before. Realistic ramp-up is "read the source," which for a two-class wrapper is an afternoon — but that afternoon buys you a deprecated code path, not a capability.

Bottom line for planning: budget this package at zero engineering days. Budget the replacement at three to five days: interface, one provider adapter, queue wiring, tests, and an alerting hook on send failures. That estimate is defensible, reviewable, and produces an asset the team owns — which this package, at 14 stars, one deprecation notice, and no release in twelve years, cannot.

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.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums