php-bug-catcher/perf-collector-bundle
A Symfony bundle for collecting application performance metrics. It captures profiling data from your PHP app so you can analyze slow requests, bottlenecks, and regressions, with integration into the Bug Catcher platform for centralized performance monitoring.
Evidence base: This assessment is derived from release metadata only (v2.0.0-RC2 notes). No source review, API documentation, or prior assessment exists. Confidence is correspondingly low; treat the risk items below as questions to close, not conclusions.
Architecture fit: php-bug-catcher/perf-collector is a performance-instrumentation package — inherently cross-cutting. Expect it to attach to the request lifecycle (kernel listeners/middleware), sample timings, and ship data to a local or remote store. That is architecturally cheap to add (no domain-model coupling) but broad in blast radius: it executes on every request in the hot path. Its Symfony constraint implies a Symfony bundle rather than a Laravel-native package; if we intend to run it inside Laravel, it will be pulling against the framework's pinned symfony/* component versions rather than sitting alongside them.
Integration feasibility: The RC2 change is purely dependency metadata — Symfony 8 is now allowed, CI covers 8.1, and no code changed. Practically this converts a hard install failure into a normal composer require. RC1 was uninstallable on the exact platform the package targets, so there is no meaningful migration population; for us this is a greenfield install either way.
Technical risk:
2.0.0-RC2 means the public API and configuration schema are not frozen. Anything we build against it may need rework at GA.composer update.Key questions:
Stack fit: If the application is Symfony 8, fit is native and the only question is bundle registration and config surface. If the application is Laravel, treat it as a third-party Symfony-component dependency: verify with composer why-not php-bug-catcher/perf-collector and composer depends symfony/http-kernel that the constraint set does not collide with the framework's pinned components. Laravel's own Symfony component versions lag the Symfony release train, so "supports Symfony 8" may not imply "installable in our Laravel version."
Migration path: There is no migration from RC1 — it could not be installed. Two realistic paths:
2.0.0-RC2 exactly, do not use a ^2.0@RC range, and accept rework at GA.2.0.0 GA. Preferred unless there is a concrete profiling need in the next few weeks.Compatibility checks before any code: PHP floor (8.4 for Symfony 8), Symfony component range, and whether the package declares conflicts with common instrumentation peers (debug toolbars, APM agents, other profilers) — overlapping listeners are a classic source of duplicated timing and double-reported metrics.
Sequencing:
Maintenance: Moving to Packagist removes the VCS repository stanza — a small but real win for composer.json hygiene and for onboarding. The offsetting cost is that we now inherit whatever the maintainer publishes. Pin via composer.lock, review lockfile diffs on update, and consider a private mirror or a version allowlist if this lands on the critical path.
Support: No prior assessment and no LTS signal. An RC with two iterations to fix an installability defect is not yet a track record. Assume no vendor support; the maintainer's responsiveness is itself a diligence item.
Scaling: Two axes. Per-request overhead scales linearly with traffic and is the more dangerous one since it sits in the hot path. Storage/ingest volume scales with request count times sampling rate; without sampling and asynchronous flushing, a collector can become a bottleneck it was deployed to diagnose. Establish the overhead budget (e.g. sub-millisecond p50 target) before enabling broadly.
Failure modes to design against:
composer update fails or silently downgrades unrelated packages. This is precisely the RC1 failure mode, and it will recur if the package's constraint surface is loose in the other direction.Ramp-up: Installation and boot is low effort — hours, not days. Interpreting the collected data and tuning sampling to a level that is informative without being expensive is the real work, and it is per-team. Budget a short enablement session for whoever owns performance, plus a written note on where the disable switch lives and when to use it.
How can I help you explore Laravel packages today?