Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Agent Laravel Package

jenssegers/agent

User agent detection for PHP and Laravel based on Mobile Detect, with added desktop support. Quickly identify device type (mobile/tablet/desktop), platform, browser, and specific features via is() checks, magic isX methods, regex matching, and custom UA/header parsing.

View on GitHub
Deep Wiki
Context7

Getting Started

Install via Composer: composer require jenssegers/agent. In modern Laravel (>=5.5), it auto-registers — no manual service provider or facade configuration needed. Start using it immediately in controllers, middleware, or services:

use Jenssegers\Agent\Agent;

$agent = new Agent();
// Or in Laravel: Agent::isMobile(), Agent::device(), etc.

First common use case: conditionally render views or redirect in a controller based on Agent::isMobile() or Agent::isDesktop() (e.g., serve mobile-optimized layout for phones/tablets).

Implementation Patterns

  • Middleware-based device detection: Register middleware (e.g., DetectDevice) that detects device type, sets shared view variables (view()->share('isMobile', Agent::isMobile())), and makes context available across all views.
  • Conditional route logic: Use Agent::isRobot() in routes to serve sitemap.xml to crawlers, or Agent::isPhone() to route to lightweight endpoints (e.g., /mobile/profile).
  • Dependency injection: Inject Agent into services (e.g., AnalyticsService, ContentNegotiator) to enable unit testing and avoid static coupling.
  • Log analysis: Parse historical access logs offline using setUserAgent($ua) and setHttpHeaders($headers) to detect outdated devices or unknown bots.
  • Layout switching in Blade: Branch templates using @if(Agent::isMobile()) or @if(Agent::isTablet()) for minor UI tweaks (e.g., simplified navigation, larger touch targets).

Gotchas and Tips

  • Stale detection rules: Last commit/release was in 2020 — modern devices (e.g., iOS 17+, Samsung Fold 4) and browsers (e.g., Chrome 120+) may fail detection. Always test new releases and consider adding custom match() fallbacks (e.g., Agent::match('/.+(Mobile|Touch)/i') for ambiguous cases).
  • version() is unreliable: The Agent::version($browser) method is explicitly labeled beta; prefer platform/browser names over versions (e.g., avoid browser-specific CSS/JS patches based on version).
  • Singleton behavior in Laravel: The Facade uses a singleton — in long-running SAPIs (e.g., Laravel Octane, RoadRunner), manually new Agent() for per-request isolation or avoid calling setUserAgent() globally.
  • Case-sensitive checks: Method names like isAndroidOS() and isSafari() are case-sensitive; use IDE autocompletion or reference the original MobileDetect list to avoid silent failures.
  • Robot detection gaps: While isRobot() uses jaybizzle/crawler-detect, headless browsers (e.g., Puppeteer, Playwright) or SPA crawlers (e.g., Googlebot’s Chromium-based) may not trigger detection. Layer in match('/(?:Chrome|Headless)\/\d+/i') for stricter control.
  • Performance overkill?: Parsing is lightweight, but avoid repeated calls in loops. For high-traffic apps, store device type in session (session()->put('device', Agent::isMobile() ? 'mobile' : 'desktop')) to prevent re-parsing.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport