shadesoft/user-agent-parser-bundle
A PHP bundle that parses user-agent strings to identify browser, operating system, device type, and bot traffic, exposing the results through a simple service you can inject wherever request analytics, logging, or content adaptation is needed.
Framework caveat, flag before anything else: despite the "Laravel/PHP" framing, this is a Symfony bundle, not a Laravel package. It will not drop into a Laravel app without a Symfony kernel or manual service wiring. That alone disqualifies it from most Laravel roadmaps.
Almost never for new work. Concretely:
Look elsewhere if you need any of:
[ABANDONED] in its own description. That is the maintainer telling you the answer.Better-fit options to evaluate instead: matomo/device-detector (broadest device/bot coverage), ua-parser/uap-php (actively maintained, mirrors the widely used ua-parser dataset), browscap/browscap-php (capability-level detail), or jensselers/agent for a Laravel-friendly wrapper. Pick one, wrap it behind your own UserAgentResolver interface, and the choice stops being architectural.
To executives: We evaluated this package and recommend not adopting it. It is formally abandoned and archived by its author, has no users or downstream dependents, and is a Symfony component rather than a Laravel one — meaning integration cost is higher than the feature is worth. Browser and OS detection is a commodity capability available from at least three actively maintained libraries at zero licence cost. Adopting an archived dependency would add supply-chain risk and a guaranteed future migration for no offsetting benefit.
To engineering: The capability we actually want — reliable browser/OS/device classification — should sit behind a single internal interface (UserAgentResolver) with one maintained implementation behind it. That contains the blast radius of any future swap to a one-file change, and it means this evaluation is a decision we make once rather than per feature. Do not take a direct dependency on this bundle in new code; if it exists in a legacy service, log it as tech debt with a target removal date rather than scheduling immediate removal.
Bottom line: low stakes, clear answer. Skip it, standardize on a maintained parser behind an internal abstraction, and reallocate the integration effort to the feature that needed the data in the first place.
How can I help you explore Laravel packages today?