🧭User Agent Parser

Parse browser and OS from a user agent

How to use the User-Agent parser

A User-Agent line in a server log mixes browser name, rendering engine, operating system and device hints into one long string. Paste it here and the parser separates the browser and its version, the operating system, the device type and the engine. A button also drops in the UA your current browser is sending, if you want to see your own.

Parsing is awkward because browsers were built to imitate each other. Chrome carries Safari and Mozilla in its UA, Edge carries Chrome, and Samsung Internet carries both Chrome and Safari. This parser therefore checks the most specific token first: markers that belong to one browser only, such as Edg, OPR, SamsungBrowser and Whale, and it falls back to Chrome and then Safari only when nothing else matched.

Whatever is uncertain is reported as uncertain. Windows 10 and Windows 11 both send Windows NT 10.0, so they are shown together rather than guessed apart. macOS freezes the version it reports at 10_15_7, and the result says so. On iOS and iPadOS every browser renders with the system WebKit, so the engine is reported as WebKit. Anything outside the detection list is left as unknown instead of being invented.

Above all, a User-Agent is a value anyone can change, so no parser can be completely accurate. Recent Chromium browsers freeze the UA, send zeros in the minor version and move the detail into Sec-CH-UA client hints. When you need to know whether a feature exists, test for the feature itself rather than reading the UA.

Frequently asked questions

Why does the Chrome UA contain Safari?

Early browsers inherited each other's tokens to gain compatibility, and the habit stuck. That is why the most specific token has to be checked first.

Can it tell Windows 10 from Windows 11?

No. Both versions send Windows NT 10.0, so this tool reports them together rather than guessing which one you are on.

Can I trust the detected values?

Treat them as a hint. A UA can be rewritten by a setting or an extension, so test for the feature you care about instead of trusting the string.