sendinblue/sendinblue-api-bundle
A Symfony bundle that integrates the Sendinblue (now Brevo) API into Symfony applications, offering service configuration for transactional email, SMS, and marketing features. Low adoption; verify compatibility with current Brevo SDKs before use.
Bottom line: do not adopt this bundle. It is an archived, 2017-era Symfony bundle wrapping a deprecated API generation, with no dependents and no maintainer. The correct move is to treat it as a reference implementation at best and build against the current Brevo (formerly SendinBlue) v3 API instead.
Architecture fit — the framing is wrong. This is a Symfony 2.x/3.x Bundle, not a Laravel package. That distinction matters more than the version numbers: a Symfony bundle ships a Bundle class, a DI Extension, a configuration tree, and service definitions loaded through the Symfony kernel. Laravel has no bundle lifecycle — no register()/boot(), no service container compiler passes, no config/*.yml tree. There is no facade, no publishable config, no Laravel service provider. To use it in Laravel you would either (a) manually instantiate the bundle's extension in a service provider and hope nothing depends on kernel boot ordering, or (b) ignore the bundle entirely and use the underlying API client class directly. Option (b) is the only sane path, and it means roughly 90% of what this repository actually contains — the Symfony wiring — is dead weight for a Laravel codebase.
Integration feasibility: low. Practical blockers in order of severity:
api.sendinblue.com/v2.0). The vendor's current surface is v3 (api.brevo.com/v3) with a different auth header, different resource shapes, and different pagination. Any account relying on v2 endpoints is on borrowed time; new accounts may not have v2 access at all.--ignore-platform-reqs merely defers the failure to runtime.Technical risk: high and unrecoverable. The failure mode is not "it breaks loudly on install" — that would be fine. It is "it installs on a legacy branch, works in staging, and then the V2 endpoint is retired or its response shape drifts," producing silent delivery failures on transactional email, which is exactly the class of outage you cannot tolerate.
Key questions to resolve before any code is written:
Given the 0.2 score, the 11.01 "opportunity" signal almost certainly reflects category demand (email/CRM integration is universally needed), not the quality of this artifact. Do not let the opportunity score pull a decision on the package score.
Stack fit: poor as delivered, workable as a thin adapter. The right integration shape in Laravel is a vendor-neutral interface in the application layer — something like App\Contracts\EmailProvider with send(), sendTemplate(), upsertContact(), subscribeToList() — plus a driver that talks HTTP. The bundle should not appear in that design at all. If you want the bundle's API client class, vendor it or fork it into a namespaced third-party/ directory with the Symfony scaffolding deleted, and never let it leak past the driver.
Migration path:
getbrevo/brevo-php, v3) or, for a handful of endpoints, a plain Laravel Http::withHeaders(['api-key' => ...]) client. The latter is often less work than auditing an old SDK and has no transitive dependency surface.config/services.php behind an env flag. This is the artifact that makes the whole decision reversible.Compatibility: assume nothing resolves. Before committing, run a throwaway composer require sendinblue/sendinblue-api-bundle against the actual project's lockfile in a scratch branch. Expect a Guzzle constraint failure; expect PHP 8.1/8.2 deprecation warnings (dynamic properties, ${var} interpolation) even if it resolves.
Sequencing: (1) spike a direct v3 HTTP call for one transactional send and one contact upsert — one day, and it answers most open questions; (2) define the interface and config surface; (3) implement the driver with retries and idempotency keys; (4) put sends behind queued jobs, not the request cycle; (5) run in parallel with the incumbent provider behind a flag, comparing delivery outcomes; (6) remove the old path and the flag. The bundle, if used at all, appears only inside step 3 and is contained by steps 2 and 6.
Maintenance: you inherit full ownership on day one. Archived means no upstream fixes, no dependency bumps, no PHP 8 compatibility work, no response to Guzzle CVEs. Budget for a fork that only ever receives the patches you write under incident pressure — the worst kind of maintenance load.
Support: there is no support path. Brevo's support organisation supports the current API and current SDK; referencing a 2017 Symfony bundle will get you a link to migration docs. Internal support depends on whoever performed the integration, with no external escalation available.
Scaling: expect the wrapper to be synchronous and unbatched. Transactional sends inside a request add provider latency to user-facing p95 and tie your availability to theirs. Contact/list operations at volume will hit rate limits with no backoff logic. Plan on queue workers, chunked contact sync, exponential backoff on 429, and idempotency keys so retries do not double-send. The bundle contributes nothing here; all of it is yours to build.
Failure modes to instrument for:
api-key headers during any partial migration.Ramp-up: misleadingly steep for the value delivered. A Laravel team must learn Symfony 2/3 bundle conventions — extension loading, compiler passes, YAML config trees — to debug code that provides no Laravel-idiomatic surface. Documentation is nine years stale and describes an API generation the vendor no longer documents. Onboarding cost lands on one engineer, and that knowledge is unhireable and untransferable. A direct v3 HTTP client, by contrast, is readable by any Laravel developer on day one.
Recommendation: reject for new work; if the incumbent integration depends on it, schedule replacement against the v3 API with a thin internal adapter as the containment boundary.
How can I help you explore Laravel packages today?