eo/airbrake-bundle
EoAirbrakeBundle integrates Airbrake.io and Errbit error tracking into Symfony2 apps, forwarding exceptions with configurable async delivery, optional API key toggling, and a built-in simulate route for testing.
Architecture fit — the premise needs correcting before anything else. The brief classifies this as a Laravel/PHP package; it is not. EoAirbrakeBundle is a Symfony2 bundle: it registers Eo\AirbrakeBundle\EoAirbrakeBundle in AppKernel, ships a DependencyInjection extension, and configures through a config.yml tree under the eo_airbrake key. Laravel has no bundle registry, no kernel class of that vintage, and no compatible config loader. A TPM's first act is to reclassify the artifact — this is a reference implementation for Symfony 2.1–2.8, not a candidate dependency for the Laravel estate. The genuinely portable asset is the thin glue: an exception hook plus an Airbrake v2 notice payload, realistically a few hundred lines.
Integration feasibility — low against the modern stack, with a hard blocker. Composer may resolve, but the bundle's assumptions about HttpKernel, DependencyInjection, and Config components were rewritten several times between Symfony 2 and Symfony 6/7 (which Laravel 9–11 runs on). PHP 8 is unverified and unlikely: 2016-era code predates the removal of each()/create_function() and the scalar/return-type hardening that followed. Expect fatal errors at boot, before the notifier is ever exercised. The README's install instruction — "eo/airbrake-bundle": "dev-master" — is itself disqualifying for production: an unpinned branch is not a supply-chain posture we can defend.
Technical risk — high, and concentrated entirely in abandonment. Last release 2016-11-16, roughly nine years stale. 5 stars and 0 dependents means no downstream pressure, no issue triage, no patch cadence, and no CVE response path. The target API is Airbrake v2 (/notifier_api/v2/notices); hosted Airbrake.io has moved on from that surface, while self-hosted Errbit remains v2-compatible by design and is therefore the only credible runtime target. The composite 2.5/5 matches the evidence. The opportunity: 0.92 figure is a sparsity artifact of a five-star, zero-dependent sample — it signals unmet demand for Airbrake/Errbit glue in general, not value in this package. Do not admit it into a prioritization model unqualified.
Key questions a TPM must force answers to before spending an hour of engineering:
Stack fit — reject as a dependency, retain as a spec. For Laravel, use Airbrake's official PHP notifier with its Laravel service provider, or evaluate a consolidated platform. Bridging a Symfony bundle into Laravel is pure maintenance tax. If a legacy Symfony 2.x application genuinely exists in the portfolio, that is the single context where this fits with zero adaptation: pin a tagged release (never dev-master), vendor the source, and confine it to that app. It must not become a shared internal service.
Migration path — migrate the capability, not the package. Sequence it as four gated phases, each with a decision the TPM owns:
Compatibility. Treat PHP 8 and Symfony/Laravel ≥3.4 as out of scope for the bundle itself. Verify Composer resolution first on anything legacy; a resolution failure is a same-day stop, not a spike.
Sequencing principle. Decide the destination and ship instrumentation on modern stacks before touching the legacy Symfony case. The legacy work is a bounded, single-app exception — fund it only if that app is revenue-bearing or compliance-relevant, and only with an assigned owner.
Maintenance. Effectively zero upstream. Every PHP minor upgrade, Guzzle bump, or Airbrake API change becomes our patch. Budget it as owned source: a vendored fork with a named maintainer and a documented patch log, or don't take it at all. The honest finding is that the glue is roughly a day of engineering — which argues for buy the vendor, build the glue.
Support. No vendor SLA, no security advisory channel, no community triage. Incident response for the notifier itself rests entirely on internal capacity. For a component whose job is to report incidents, being unable to distinguish "no errors" from "notifier silently broken" is the worst possible failure.
Scaling. Fine on request volume — async socket delivery by default and optional synchronous cURL keep request latency unaffected. The scaling ceiling is not throughput, it is noise: without a disciplined ignored_exceptions list (defaults exclude HttpException, including 404s and access denials) and production-only reporting, alert fatigue erodes on-call trust faster than any volume limit. Alerting policy is a product decision encoded in config, and it belongs in the review, not in a defaults file.
Failure modes to design for.
Ramp-up. Low for anyone who has configured an error tracker; the config surface is six keys. The real ramp-up is organizational — establishing who triages, what pages, and what the release-tagging convention is. That work is identical regardless of vendor, which is precisely why the vendor choice should not be allowed to gate it.
Ask. Reclassify the package as a Symfony-era reference implementation; decide SaaS vs. self-hosted Errbit this sprint; ship a supported notifier on modern stacks with production-only reporting, an ignored-exception policy, and a release marker; defer vendor consolidation (Sentry-class tooling) to the next platform review rather than accreting point tools.
How can I help you explore Laravel packages today?