User Agent Parser
It says Unknown when it does not know.
Runs locallyRuns entirely in your browser — open DevTools and check the Network tab
Nothing to parse yet. Your own user agent is loaded automatically when JavaScript runs; you can also paste somebody else's string from a server log.
Parsing happens in this page with about sixty regular expressions we wrote ourselves. We deliberately avoided the popular parsing library: from version 2 it is AGPL-3.0-or-later, which imposes source disclosure obligations on network services.
What each part of the string means
| Token | What it actually tells you |
|---|
Nothing to show yet — type or paste some text.
Read from this browser (not from the string above)
Your own user agent string is loaded automatically. Replace it with any string from a server log to see what can honestly be read from it, what cannot, and what each part of the string actually means.
The string is mostly historical fiction
Every modern browser begins its user agent with Mozilla/5.0, which has been meaningless since the 1990s and survives only because sites once checked for it. Chromium browsers report AppleWebKit/537.36 whatever their real engine version is. WebKit-based browsers announce themselves as "like Gecko", which is a compatibility claim rather than a fact. Chrome on Android sends Safari in its string, so testing for the word Safari matches Chrome too.
Edge is the clearest illustration of why parsing this is hard. It identifies itself as Edg without the trailing e, specifically so that old code sniffing for "Edge" would not misfire while old code sniffing for "Chrome" would still work — and because it also reports Chrome, any parser that checks for Chrome before Edg reports the wrong browser. This page checks in the order that produces the correct answer, and the token table shows you why the order matters.
What genuinely cannot be determined
Windows 11 sends exactly the same "Windows NT 10.0" as Windows 10. No parser can distinguish them from the string, and anything that claims to is guessing. Chrome now freezes the minor version parts, so a modern Chromium string reads 126.0.0.0 and the precise build is unavailable by design. The trailing build code in iOS strings changes between releases and is not a version number.
And the whole string is a request header, which means it is whatever the client chose to send. Browser extensions rewrite it, privacy tools randomise it, scrapers copy a real browser's string verbatim, and corporate proxies append their own tokens. Treat a parsed result as a claim, not as a measurement — that is the correct mental model for anything derived from a user agent.
Client Hints, the intended replacement
Browsers are deliberately reducing the information in the user agent string and moving it to User-Agent Client Hints, a set of separate headers that a server has to ask for explicitly. The low-entropy parts are sent by default; the high-entropy parts, including full version and platform version, require the server to opt in. That is what allows Windows 11 to be distinguished from Windows 10 when the browser cooperates.
Because these are read from the live browser rather than parsed from text, they appear in their own section below and only when your browser provides them. Safari and Firefox do not implement them, so an empty section is a valid answer rather than a fault, and any server-side feature that depends on Client Hints needs a fallback.
Bots, and why self-identification proves nothing
Well-behaved crawlers name themselves — Googlebot, Bingbot, GPTBot, ClaudeBot, PerplexityBot and the rest — which makes them easy to recognise and equally easy to impersonate. Anyone can send any string, so blocking or allowing traffic purely on a bot name in the user agent is a decision based on an unverified claim.
The standard verification is a reverse DNS lookup on the source address followed by a forward lookup on the resulting hostname, which the major crawler operators document and support. This tool tells you what a string claims; confirming the claim is a network operation, not a string operation, and we would rather draw that line clearly than imply the parse is proof.
Local, and no dependency with a licence problem
Parsing runs in this tab with about sixty regular expressions we wrote ourselves. We deliberately avoided the most popular parsing library: from version 2 it is licensed AGPL-3.0-or-later, which imposes source disclosure obligations on software offered over a network. Its version 1 series is MIT, but a page this size does not need a dependency at all.
Nothing about your browser is transmitted. User agent lookup pages are typically served by sites that log the visit, and a user agent string is one of the strongest fingerprinting inputs there is — which is a good reason for this particular tool to be one that cannot send anything.
Frequently asked questions
Can you tell whether I am on Windows 10 or Windows 11?
Not from the user agent string — both send Windows NT 10.0. If your browser provides User-Agent Client Hints with platform version, that section below can distinguish them.
Why does my Chrome version end in 0.0.0?
Chrome freezes the minor version components on purpose to reduce fingerprinting. The precise build number is no longer available in the string.
Why does every field say Unknown for my string?
Because it did not match any known pattern and we do not guess. Custom clients, unusual crawlers and deliberately spoofed agents are common in real logs, and a confident wrong answer is worse than Unknown.
Can I trust a bot name in a user agent?
No. Anyone can send any string. Verify a crawler with a reverse DNS lookup on the source IP address, then a forward lookup on the hostname.
Is my user agent sent to your server?
No. The parsing happens in your browser. Your browser does of course send its user agent in the ordinary HTTP request for this page, as it does to every website; nothing extra is collected here.