Firefox user agent strings
The User-Agent the current Firefox (158) sends on Windows, macOS, Linux, Android and iPhone, how Firefox builds it, and what it leaves out. Firefox sends no Client Hints, so the string is all a server gets.
- Current release
- Firefox 158.0
- Extended Support Release
- Firefox ESR 153.5.0
- Firefox for iOS
- 158.1
From Mozilla's product-details feed and the App Store, checked every six hours.
Firefox 158 user agent on every platform
| Platform | User-Agent | Copy |
|---|---|---|
| Windows | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:158.0) Gecko/20100101 Firefox/158.0 | |
| macOSIntel and Apple silicon | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:158.0) Gecko/20100101 Firefox/158.0 | |
| Linux | Mozilla/5.0 (X11; Linux x86_64; rv:158.0) Gecko/20100101 Firefox/158.0 | |
| Linux (Ubuntu Snap) | Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:158.0) Gecko/20100101 Firefox/158.0 | |
| AndroidPhones and tablets; Android 16 shown | Mozilla/5.0 (Android 16; Mobile; rv:158.0) Gecko/158.0 Firefox/158.0 | |
| iPhoneFirefox for iOS 158.1 | Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/158.1 Mobile/15E148 Safari/604.1 | |
| ESR 153 (Windows)Extended Support Release 153.5.0 | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:153.0) Gecko/20100101 Firefox/153.0 |
None of these comes with Client Hints: Firefox sends the User-Agent header and nothing else about itself. The strings follow Gecko's own code (nsHttpHandler.cpp) and, for iOS, the Firefox for iOS app (UserAgent.swift).
How Firefox builds its user agent
Desktop Firefox has one template, Mozilla/5.0 (platform; rv:version) Gecko/20100101 Firefox/version, and fills it with as little as it can:
| Token | What it means |
|---|---|
| Windows NT 10.0; Win64; x64 | Hard-coded on Windows 10 and 11. 64-bit Windows, and ARM64 Windows 11, report x64; only 32-bit Windows (and ARM64 Windows 10) drop the Win64; x64 part. |
| Macintosh; Intel Mac OS X 10.15 | Every Mac since Firefox 87, whatever the macOS version or processor. Firefox writes 10.15 with a dot; Chrome and Safari write 10_15_7. |
| X11; Linux x86_64 | Every Linux; 32-bit x86 has reported x86_64 since Firefox 127. The Snap package on Ubuntu adds Ubuntu;. |
| rv:158.0 | The version again, as major.0. Firefox 110 to 119 wrote rv:109.0 instead. |
| Gecko/20100101 | A fixed date on desktop, the same in every version. On Android this is the version instead. |
| Firefox/158.0 | Major version only: a point release such as 158.0.1 still sends .0. |
Firefox for Android follows the same template with Android N; Mobile as the platform, the real Android major version (versions below 10 report 10), and Gecko/158.0. Mozilla's reference page still shows a Tablet token; the current Gecko source writes Mobile on tablets as well.
Firefox and Client Hints
Chrome, Edge and the other Chromium browsers moved most of the detail out of their user agent into Client Hints: Sec-CH-UA on every request, and the platform version, model and full version when a site asks. Firefox implements none of it. There is no navigator.userAgentData in the current Gecko source, and no Sec-CH-UA header is ever sent.
That cuts both ways for anyone checking a request. A Firefox user agent with Client Hints attached is not Firefox. And a script that relies on navigator.userAgentData must fall back to the string, which, as the table above shows, no longer says which Windows or macOS version the visitor runs.
How to tell Firefox apart
- Desktop:
Gecko/20100101together withFirefox/and noChrome/. Browsers built on Firefox (LibreWolf, Waterfox, Tor Browser and others) usually send the same string, sometimes an older version of it. - Android:
Android N; Mobile; rv:andGecko/followed by the version, not a date. - iPhone:
FxiOS/. The engine is WebKit, not Gecko, so it behaves like Safari, not like desktop Firefox; see iPhone user agents. - Beyond the string: the engine gives itself away. Gecko lacks Chromium-only APIs such as
navigator.userAgentData, answersMozillafor the WebGL vendor, and its TLS handshake differs from Chrome's (see the JA4 fingerprint checker). A Firefox string on a Chromium engine is easy to spot; the browser fingerprint test checks these pairs.
FAQ
What is the latest Firefox user agent?
Firefox 158 on Windows sends Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:158.0) Gecko/20100101 Firefox/158.0. On a Mac it is Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:158.0) Gecko/20100101 Firefox/158.0. Only the two version numbers change from one release to the next.
Does Firefox send Sec-CH-UA or other Client Hints?
No. Firefox does not implement User-Agent Client Hints: it sends no Sec-CH-UA, Sec-CH-UA-Mobile or Sec-CH-UA-Platform header, ignores Accept-CH for them, and has no navigator.userAgentData. A request that says Firefox and carries those headers did not come from Firefox.
Why does Firefox on my Apple silicon Mac say Intel Mac OS X 10.15?
Because Firefox writes that on every Mac. Since Firefox 87 the macOS version is capped at 10.15, and the processor always reads Intel, so a Mac on the newest macOS with an M-series chip sends the same string as an Intel Mac on Catalina.
Why does Firefox on Windows 11 say Windows NT 10.0?
Firefox hard-codes Windows NT 10.0 on Windows 10 and 11, so that a future change in the version Windows reports cannot break sites without Mozilla deciding to pass it on. A 64-bit Windows gets Win64; x64, also on ARM64 machines running Windows 11; the string cannot tell Windows 10 from 11.
Why does my Firefox say rv:109.0?
Firefox 110 to 119 kept rv:109.0 while the Firefox/ token moved on, because some sites looked for rv:11 to detect Internet Explorer 11 and would have mistaken Firefox 110 for it. Firefox 120 and later write their own version again. Firefox ESR 115, still updated for older systems, therefore sends Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0; the current ESR (153) is past the freeze.
What is the Firefox user agent on Android?
Mozilla/5.0 (Android 16; Mobile; rv:158.0) Gecko/158.0 Firefox/158.0 on Android 16. Unlike Chrome, Firefox writes the real Android version (anything below 10 is reported as 10), but no device model, and it says Mobile on tablets too.
What is the Firefox user agent on iPhone?
Firefox on iOS uses Apple's WebKit engine like every iOS browser, so its string is Safari's with FxiOS/ and the app version added. On an iPad it requests desktop sites by default and sends a Safari-like Mac string with no FxiOS token at all.
How do I change the user agent in Firefox?
Type about:config in the address bar, create a string preference general.useragent.override and set it to the string you want. It changes the header and navigator.userAgent, but not what the engine itself reveals; see how to change your user agent for what each method changes.
Related free tools
What is my user agent?
Your User-Agent and Client Hints, and whether they agree with each other.
Random user agent generator
Current Chrome, Edge and Firefox user agents, each with its Client Hints.
Chrome user agent strings
The latest Chrome user agents and Sec-CH-UA headers, and a generator for any version.
Safari user agent strings
Safari on Mac, iPhone and iPad, and the OS versions it no longer reports.
Edge user agent strings
Microsoft Edge on every platform, with its Sec-CH-UA brand list.
Android user agent strings
Chrome, Edge and Firefox on Android, and where the real model went.
Clearcote puts this into practice
An open-source Chromium with fingerprint control compiled into the engine. A drop-in for Playwright & Puppeteer.
Free for one browser with GitHub. No card.