gordalina/mixpanel-bundle
A Symfony bundle that integrates the Mixpanel PHP library into your app, providing a configured service for tracking events, identifying users, and sending analytics data. Includes dependency-injection setup for your project token and easy injection into controllers and services.
subscription_activated, trial_expired, invoice_paid, seat_limit_hit — are the ones Mixpanel can't reliably get from the browser. This package remains a candidate for wiring those into the Symfony service container so product/analytics teams get funnel and retention data that doesn't depend on client-side JS firing./track, /import, /engage) is a simple, stable HTTP contract, so a thin internal wrapper is a realistic alternative and should be priced against adoption. The 7.0.0 release does not change this calculus: it ships no batching, queueing, or retry capability, which is the only part of the work that is genuinely non-trivial.^7.4 and drops Doctrine annotation support entirely. For a team already on Symfony this is a scheduled migration; for anyone else it's confirmation that the package's release cadence is tied to the Symfony release train, not to Mixpanel's API or to our roadmap./import when you start tracking late.Configuration tree, container compilation. 7.0.0 makes this more explicit, not less: symfony/yaml is now a declared dependency precisely because the bundle loads its own services.yml at compile time. That is a hard coupling to Symfony's container lifecycle, and it should kill this option early rather than after a spike.Consider it only when all of the following hold:
^7.4 for the 7 line, so earlier Symfony 7 minors are now out of support.symfony/yaml dependency confirms the bundle owns config loading at compile time — you are adopting its conventions, not just its HTTP calls.Annotation namespace to Attribute, and removes the Rector set that shipped with 6.0 — so the automated migration tooling that made 6.x upgrades cheap is now something you configure yourself from the changelog.Look elsewhere — or don't adopt — when:
symfony/yaml dependency and compile-time services.yml loading mean you'd be shimming the bundle's container integration, and there is no Laravel-side equivalent in this release.For executives (one paragraph): We re-evaluated the community Symfony bundle for sending server-side product analytics to Mixpanel following its 7.0.0 release. Recommendation is unchanged: do not adopt as-is. The new version is a maintenance release — Symfony 8 support, a tightened Symfony 7 floor, and a dependency declaration fix — plus breaking changes for existing users (Doctrine annotation support removed, namespace renamed, the bundled Rector migration config dropped). It adds no queueing, batching, or retry capability, which is the only genuinely hard part of this work, and it remains a Symfony-only package while our stack is Laravel. The underlying need is real: backend events like subscription activation and trial expiry are where our funnel analysis is thinnest, and Mixpanel's ingestion API is a stable, well-documented HTTP contract. We recommend a small in-house client behind our own interface — roughly one to two engineering days — which gives us the analytics coverage without the dependency risk and keeps us free to switch vendors. Net: same product outcome, lower ongoing risk, and no new package on the critical path of signup and billing flows.
For engineering (the summary that matters): Symfony bundle, not Laravel — 7.0.0 makes the coupling more explicit by declaring symfony/yaml as a hard dependency because the bundle loads its own services.yml at container compile time. So adoption means a shim, not a composer require. 7.0.0 is a major: Symfony 8 support, Symfony 7 narrowed to ^7.4, Doctrine annotations no longer read, Annotation namespace renamed to Attribute, and the Rector set from 6.0 removed — upgrade tooling is now copy-paste from the changelog. If you're not on Symfony, none of that is our problem to solve. It remains a thin wrapper over Mixpanel's /track and /import; the value it adds over our own client is small and the exit cost is low either way. If we do spike it, the only things worth copying are the event-enrichment and DI ergonomics. Regardless of path: dispatch through a queue, never inline in a request that touches revenue, gate on consent, and define the event taxonomy before writing a single track() call.
How can I help you explore Laravel packages today?