tiime/newrelic-bundle
Symfony bundle that integrates New Relic monitoring into your app, handling transaction naming, custom metrics, and exception tracking with minimal boilerplate. Simplifies APM setup so developers get clearer visibility into performance and errors.
Architecture fit — poor for Laravel, plausible for Symfony
The package is a Symfony bundle, not a Laravel package. It registers through the Symfony Kernel (Bundle class, DI extension, compiler passes) and hooks the Symfony event dispatcher. Laravel has no bundle registration mechanism — it uses service providers and its own container — so this code cannot be composer required into a Laravel app and expected to function. For our Laravel estate, architecture fit is effectively zero without a rewrite of the registration layer. For any Symfony services in the portfolio, fit is reasonable: the package is a thin adapter over the New Relic PHP agent's newrelic_* functions, which is the correct layer to own.
Integration feasibility — feasible, unproven MIT license removes legal friction. Integration would be a standard Composer dependency plus agent installation in the runtime image; no SaaS contract, no data-plane changes. The blocking issue is evidence: 2 stars, 0 dependents, and a single-source vendor (Tiime-Software appears to be a company publishing from its internal stack). There is no signal of third-party production use, meaning we would be the first external adopter and would absorb all discovery cost.
Technical risk — high
ext-newrelic is loaded. If it is not, behaviour ranges from a silent no-op to a fatal error at container compile time — both are unacceptable in CI and in ephemeral containers.Key questions for the maintainer / spike
newrelic extension, or degrade gracefully to a no-op when absent?Stack fit Segment the portfolio. For Laravel services, reject the package and instead use the New Relic PHP agent's native Laravel support plus a small internal middleware for custom attributes. For Symfony services, this bundle is a legitimate candidate, but only after the spike below. Do not attempt to bridge the two with a shared abstraction — the registration models are incompatible and the abstraction would cost more than either implementation.
Migration path Adopt additively, never as a replacement for the agent baseline:
newrelic_bundle.enabled: false by default) so it can be disabled per environment via config, not a code deploy.newrelic_* calls in place until parity is demonstrated in staging for two release cycles, then remove them in a separate change.Compatibility
Pin an explicit matrix before merging: PHP minor, Symfony LTS, New Relic PHP agent major, and the base image. The agent must be baked into every image (dev, CI, staging, prod) or the bundle's behaviour diverges across environments — the most common cause of "works in staging" New Relic incidents. Confirm newrelic.ini application naming is owned by deployment config, not by the bundle, so we do not end up with split app names in the New Relic account.
Sequencing
newrelic_* call, confirm extension dependency and no-op behaviour. If the surface is under a few hundred lines, escalate the build-vs-adopt decision immediately.Maintenance Assume we own this code. Budget roughly one to two engineer-days per quarter for agent-version compatibility and Symfony upgrades, plus ad-hoc time when the New Relic agent changes its hook behaviour. If the upstream repository goes dormant — a realistic outcome for a company-published bundle with 2 stars — the internal fork becomes the only copy, so it must live in our org with our CI, our PHPStan baseline, and a documented upgrade procedure. Do not let it remain a transitive dependency pulled from Packagist in production.
Support No vendor SLA, no paid support, MIT with no warranty. Support is internal platform engineering. There is no visible security disclosure process, so vulnerability response defaults to our own dependency scanning and patch cycle. Communicate this explicitly to stakeholders: this is not a supported product, it is a code contribution we are choosing to maintain.
Scaling Runtime cost is negligible — the bundle issues function calls into the agent, which buffers in-process and transmits out-of-band via the daemon. The real scaling concern is observability data volume: custom attributes attach to every transaction, so high-cardinality values (user IDs, request IDs, raw URLs) inflate ingest cost and can hit New Relic attribute limits. Enforce a review rule that only low-cardinality attributes ship. On high-throughput workers, verify the bundle does not force full transaction traces, which would multiply agent overhead.
Failure modes
Ramp-up A mid-level PHP engineer familiar with Symfony DI needs about half a day to understand and safely modify the bundle. The larger cost is on the consuming side: the team must be fluent in NRQL, dashboard authoring, and alert policy design to realize any value from the added instrumentation. Plan for one engineer to take a New Relic observability track alongside the integration, otherwise the bundle adds payload without adding signal.
Recommendation: Do not adopt as a dependency in Laravel services — it is architecturally incompatible. For Symfony services, run the two-day source audit and one-week staging spike, and default to forking at the audited commit rather than consuming upstream directly. If the audit shows a thin wrapper, build the internal shim instead; the maintenance burden will be lower than carrying an unmaintained third-party bundle.
How can I help you explore Laravel packages today?