This document describes the user agent string used in Firefox 4 and later and applications based on Gecko 2.0 and later. For a breakdown of changes to the string in Gecko 2.0, see Final User Agent string for Firefox 4 (blog post). See also this document on user agent sniffing and this Hacks blog post.
The UA string of Firefox itself is broken down into four components:
Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion
For other products based on Gecko, the string can take one of two forms, where the tokens have the same meaning except those noted below:
Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail appname/appversion
Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion appname/appversion
Firefox/firefoxversion is an optional compatibility token that some Gecko-based browsers may choose to incorporate, to achieve maximum compatibility with websites that expect Firefox. firefoxversion will generally represent the equivalent Firefox release corresponding to the given Gecko version. Some Gecko-based browsers may not opt into using this token; for this reason, sniffers should be looking for Gecko — not Firefox! Whether this token appears is controlled by the "general.useragent.compatMode.firefox" boolean pref.
The platform part of the UA string indicates if Firefox is running on a phone-sized or tablet device. When Firefox runs on a device that has the phone form factor, there is a Mobile; token in the platform part of the UA string. When Firefox runs on a tablet device, there is a Tablet; token in the platform part of the UA string instead. For example:
Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0 Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0
The preferred way to target content to a device form factor is to use CSS Media Queries. However, if you use UA sniffing to target content to a device form factor, please look for Mobi (to include Opera Mobile, which uses "Mobi") for the phone form factor and do not assume any correlation between "Android" and the device form factor. This way, your code will work if/when Firefox ships on other phone/tablet operating systems or Android is used for laptops. Also, please use touch detection to find touch devices rather than looking for "Mobi" or "Tablet", since there may be touch devices which are not tablets.
Windows user agents have the following variations, where x.y is the Windows NT version (for instance, Windows NT 6.1).
|Windows version||Gecko user agent string|
|Windows NT on x86||Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0|
|Windows NT, Win64 on x64||Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0|
|Windows NT, WOW64||Mozilla/5.0 (Windows NT x.y; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0|
Here, x.y is the version of Mac OS X (for instance, Mac OS X 10.6).
|Mac OS X version||Gecko user agent string|
|Mac OS X on Intel x86 or x86_64||Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0|
|Mac OS X on PowerPC||Mozilla/5.0 (Macintosh; PPC Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0|
Linux is a more diverse platform. A few common examples are given below.
|Linux version||Gecko user agent string|
|Linux desktop, i686||Mozilla/5.0 (X11; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0|
|Linux desktop, x86_64||Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0|
|Linux desktop, i686 running on x86_64||Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0) Gecko/20100101 Firefox/10.0|
|Nokia N900 Linux mobile, on the Fennec browser||Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0) Gecko/20100101 Firefox/10.0 Fennec/10.0|
|Form factor||Gecko user agent string|
|Phone||Mozilla/5.0 (Android; Mobile; rv:40.0) Gecko/40.0 Firefox/40.0|
|Tablet||Mozilla/5.0 (Android; Tablet; rv:40.0) Gecko/40.0 Firefox/40.0|
Beginning in version 41, Firefox for Android will contain the Android version as part of the platform token. For increased interoperability, if the browser is running on a version below 4 it will report 4.4. Android versions 4 and above will report the version accurately. Note that the same Gecko—with the same capabilities—is shipped to all version of Android.
|Form factor||Gecko user agent string|
|Phone||Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0|
|Tablet||Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0|
|Form factor||Gecko user agent string|
|Phone||Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0|
|Tablet||Mozilla/5.0 (Tablet; rv:26.0) Gecko/26.0 Firefox/26.0|
|TV||Mozilla/5.0 (TV; rv:44.0) Gecko/44.0 Firefox/44.0|
|Device-specific||Mozilla/5.0 (Mobile; nnnn; rv:26.0) Gecko/26.0 Firefox/26.0|
Although it is strongly discouraged by Mozilla, some handset manufacturers unfortunately include a token in their device's UA string that represents their device id. If this is the case, the Firefox OS UA string will look like the device-specific string in the table above, where nnnn; is the manufacturer's code for the device (see Guidelines). Some of them we have noticed are of the form "NexusOne;", "ZTEOpen;", or "Open C;" (note that putting space is also discouraged). We provide this information to assist with your UA detection logic, but Mozilla discourages the detection of a device id in UA strings.
i makes it case-insensitive, and
mobi matches all mobile browsers.
While the version number for Firefox OS is not included in the UA string, it is possible to infer version information from the Gecko version number present in the UA string.
|Firefox OS version number||Gecko version number|
It's easy to find the correspondences by looking at the Mercurial repository names: repositories starting by
mozilla-b2g are the release repositories for Firefox OS, and have both Firefox OS and Gecko versions in their names.
Firefox OS has a four-digit version number: X.X.X.Y. The first two digits are owned by the Mozilla product team and denote versions with new features (eg: v1.1, 1.2, etc). The third digit is incremented with regular version tags (about every 6 weeks) for security updates, and the fourth is owned by the OEM.
Firefox for iOS uses the default Mobile Safari UA string, with an additional FxiOS/<version> token, similar to how Chrome for iOS identifies itself.
|Form factor||Firefox for iOS user agent string|
|iPod||Mozilla/5.0 (iPod touch; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4|
|iPhone||Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4|
|iPad||Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4|
The Web Runtime uses the same user agent string as desktop Firefox.
These are some sample UA strings from other Gecko-based browsers on various platforms. Note that many of these have not yet been released on Gecko 2.0!
|Browser||Gecko user agent string|
|Firefox for Maemo (Nokia N900)||Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1|
|Camino on Mac||Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Camino/2.2.1|
|SeaMonkey on Windows||Mozilla/5.0 (Windows NT 5.2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1|
|SeaMonkey on Mac||Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1|
|SeaMonkey on Linux||Mozilla/5.0 (X11; Linux i686; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1|
Prior to Firefox 4 and Gecko 2.0, it was possible for extensions to add user agent parts through the
general.useragent.extra.identifier preferences, (see the obsolete User Agent Strings Reference). But that has not been possible since bug 581008.
In the past, specific plug-ins, add-ons or extensions added user agent parts to notify sites they were installed. The recommended way to do this, if it's absolutely necessary (remember that it slows down every request) is to set a custom HTTP header.
Comments to mozilla.dev.platform
© 2005–2017 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.