nodrew/php-airbrake-bundle
Symfony bundle for integrating Airbrake error tracking into PHP applications. It captures exceptions and errors, sends them to Airbrake for monitoring and alerting, and supports straightforward configuration for environment-specific reporting so teams can spot and fix production issues faster.
Architecture fit. The package is a Symfony2 bundle, not a PHP library with framework-agnostic bindings. A bundle is a specific Symfony construct: it ships a DependencyInjection\Extension to parse YAML configuration, a bundle class for registration in AppKernel, and typically an event listener wired to kernel.exception. None of that machinery exists in Laravel. Laravel's equivalent extension points are service providers, the App\Exceptions\Handler (report() / render()), and middleware — so there is no natural seam where this package slots in. Its only reusable asset is the thin glue between config and the underlying php-airbrake client, which is on the order of a few hundred lines and trivially reproducible.
Integration feasibility. Low. Composer resolution is the first hard blocker: a Symfony2 bundle pins Symfony components (framework-bundle, http-kernel, dependency-injection, config, yaml) at 2.x, while Laravel 10/11 depend on Symfony 6/7 components. Those constraints collide, and Composer will either refuse to install or attempt to downgrade the application's shared Symfony packages — unacceptable collateral damage for an error-reporting integration. Even with a --ignore-platform-reqs workaround, class references to removed APIs (e.g., GetResponseForExceptionEvent, renamed in Symfony 4.4) will fatal at boot. Realistically this is a fork-and-rewrite exercise, not an install.
Technical risk. Very high. Signals are unambiguous: 14 stars, zero dependents, score 0.43. There is no community vetting, no evidence of recent maintenance, and a single-author bus factor. The bundle transitively drags in the legacy php-airbrake client, which targets Airbrake's older notifier protocol — a protocol Airbrake has been steering customers away from in favor of its current endpoint. Adopting this means inheriting two layers of abandonment (bundle and client) and being exposed to a vendor-side deprecation you do not control.
Key questions.
Stack fit. Poor. A Laravel target should use an official or actively maintained Airbrake notifier (airbrake/phpbrake is the vendor-maintained PHP client) wired through Laravel's native error pipeline. This bundle offers no Laravel service provider, no package discovery, and no configuration schema Laravel can read — everything would be hand-ported.
Migration path. Skip the bundle. If Airbrake is mandated: add the maintained PHP notifier, bind it as a singleton in a service provider, and dispatch notices from App\Exceptions\Handler::report(). Extend coverage to Queue::failing(), the Artisan command error path, and Log::listen for critical-level entries so you match the breadth a bundle hooking kernel.exception would have given you. If a legacy Symfony2 app genuinely needs this bundle for parity, run both stacks in parallel behind a per-service configuration flag rather than trying to unify the wiring.
Compatibility. Assume incompatibility until proven otherwise by a throwaway spike branch. Expect to touch namespaces, event class names, and the notifier client's constructor signature. Treat the package as reference source, not as a dependency.
Sequencing.
airbrake/phpbrake against a scratch project on the target Laravel/PHP versions; verify payload rendering and rate-limit behaviour.Maintenance. Zero expected upstream activity. Adoption is a permanent fork commitment; budget for it as internal code, not as a dependency. The surface area is small enough that a fork is technically viable, but you would be forking the client too.
Support. No vendor support, no maintainer SLA, no responsive issue tracker. Incidents will be debugged by whoever wrote the integration, from source, under pressure. Document the notification path accordingly.
Scaling. The package is not the bottleneck — Airbrake's ingest is — but the legacy client is typically synchronous on the request path with no batching or async flush. Under error storms (a broken deploy, a poisoned queue) you get one blocking HTTP call per exception, which compounds latency precisely when the system is already degraded. Add timeouts, sampling, and a circuit breaker regardless of vendor.
Failure modes. Silent drops if the client swallows transport errors and you have no meta-monitoring; request-path timeouts when Airbrake is slow; ingestion quietly breaking when the legacy protocol is retired, with no client-side alarm; Composer resolution failures blocking every deploy if this ever lands in composer.json; boot-time fatals from removed Symfony classes; and credentials (project ID, API key) sitting in committed YAML, which is a secrets-hygiene finding independent of everything else. Each of these argues for a thin, observable, vendor-swappable abstraction rather than a bundle.
Ramp-up. Learning the package itself is an afternoon. Learning why it exists, what it was meant to replace, and whether the Airbrake contract is still live is the real cost — and that investigation is worth doing before, not after, someone adds a line to composer.json.
How can I help you explore Laravel packages today?