User-Agent Parser
Decode a UA string into browser, engine, operating system and device. Your own is loaded by default — nothing is sent anywhere.
What a User-Agent string actually is
It is a single header line the client sends on every request, and it has no schema. There is no
registry, no required order and no validation — clients simply append tokens over time. That is
why the strings look like archaeology: Mozilla/5.0 is still there because in the
1990s servers sniffed for that exact word, and every browser since has kept it to avoid being
served a degraded page.
The practical consequence is that parsing is heuristics all the way down, and every parser — including this one — will be wrong sometimes. Treat the result as a strong hint, not a fact. Anything that must be correct needs feature detection at runtime.
Why Chrome reduced what it reports
A UA string is a fingerprinting surface. The more precise the version numbers, the easier it is
to single out one machine. Chrome therefore froze the minor and patch components — desktop
Chrome now always reports Chrome/<major>.0.0.0 — and the same happened to the
OS version on some platforms. The information moved to User-Agent Client Hints,
which are opt-in: the server has to ask via Sec-CH-UA and the browser decides what
to accept. Only Chromium browsers implement them, so they complement a UA string rather than
replace it.
Things a UA string will not tell you
- Which browser it really is. Brave, Vivaldi and dozens of others ship the Chrome token. If it says Chrome, it might be anything Chromium-based.
- Whether it is a real person. Any client can send any string — a scraper can claim to be Safari in one line of code.
- Screen size, locale or capabilities. None of that lives here.
- The OS version precisely. Since Windows 11 shipped,
Windows NT 10.0covers both 10 and 11.
FAQ
Should I use the UA string to decide what features to enable?
No — use feature detection (if ('clipboard' in navigator)). UA sniffing breaks the moment a new browser version ships, and it is how sites end up blocking browsers that would have worked fine.
Is UA-based blocking of bots effective?
Hardly. Anyone running a scraper sets the header they want. Rate limiting, behavioural signals and challenge pages do the real work; the UA is only a cheap first filter.
Why does HeadlessChrome appear in the detected client list?
Because automated browsers often say so. It is useful when it is true and meaningless when it is not — a script that omits it looks like an ordinary browser.
Is the string I paste sent to a server?
No. Parsing runs in this page with local JavaScript. The default value comes from your own browser's navigator.userAgent and never leaves the tab.