What Is My User Agent
See the user-agent string this browser sends, parsed into browser, OS and device — with screen, locale and Client Hints, read on this device.
Reading this browser — values fill in when the page's script runs.
User agent
- User-agent string
- —
- Browser
- —
- Layout engine
- —
- Operating system
- —
- Device type
- —
- Device model
- —
- CPU architecture
- —
Client Hints
Platform version, architecture, bitness, model and the full version list only arrive when you ask for them.
- Brands
- —
- Mobile
- —
- Platform
- —
- Platform version
- —
- Architecture
- —
- Bitness
- —
- Model
- —
- Full version list
- —
Screen & display
- Screen
- —
- Available screen
- —
- Viewport
- —
- Device pixel ratio
- —
- Colour depth
- —
- Max touch points
- —
- Orientation
- —
- Colour scheme
- —
- Reduced motion
- —
- Contrast
- —
Language & time
- Languages
- —
- Primary language
- —
- Time zone
- —
- Calendar
- —
- Hour cycle
- —
Feature probes
- Cookies
- —
- Whether this browser accepts cookies at all, from navigator.cookieEnabled.
- localStorage
- —
- Whether the localStorage object exists here — nothing is written to it.
- Service workers
- —
- Whether the service-worker API exists — none is registered by this page.
- WebAssembly
- —
- Whether the WebAssembly global exists — no module is compiled or run.
- WebGL 2
- —
- Whether a WebGL 2 context can be created on an off-screen canvas.
- Clipboard write
- —
- Whether the async clipboard write method exists — no clipboard is read.
Network
- IP address
- —
Waiting for the reading…
Notes about these readings
Waiting for the reading…
Do it offline:$ curl -v https://example.com
How to use it
- Wait for the grid to fill: each value lands in a slot already reserved, so nothing shifts.
- Press Show detailed hints for platform version, architecture, bitness and model — Chromium releases those only on request.
- Resize the window or rotate the device, then press Re-read and watch the viewport row follow; a system dark-mode change moves the colour-scheme row too.
- Press Copy report for the grid as text, or save it as JSON. Neither sends anything anywhere.
This page reads the browser you are using right now and prints what it found: the user-agent string it sends, resolved into browser, layout engine, operating system and device; the Client Hints it exposes; the screen resolution, viewport and pixel ratio; time zone and language list; six feature probes. Every reading the browser withheld says so in words, and nothing is saved.
How it works
Every request this browser makes carries a User-Agent header — product/version tokens with parenthesised comments, the grammar RFC 9110 §10.1.5 defines. Script reads the same value back as navigator.userAgent; the first group shows it whole, then the browser, layout engine, operating system and device its tokens name. A detail the string omits is marked unavailable.
Chromium froze most of that string: minor digits are sent as zeros, Android reports the model as K, and Windows 10 and 11 both send NT 10.0. The detail moved to User-Agent Client Hints — navigator.userAgentData carries brands, mobile and platform for nothing, while platform version, architecture, bitness, model and the full version list arrive only from getHighEntropyValues().
Firefox and Safari never implemented userAgentData, so their whole Client Hints group reads unavailable — a fact about the browser, not a failure of the page. The other groups come from APIs independent of it: screen and window, devicePixelRatio, matchMedia for the three preference rows, and Intl.DateTimeFormat().resolvedOptions() for time zone, calendar and hour cycle.
Examples
Chrome 138 on Windows, detailed hints grantedUser agent
User-agent string Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
Browser Chrome 138.0.0.0
Layout engine Blink 138.0.0.0
Operating system Windows 10
Device type UNAVAILABLE
Device model UNAVAILABLE
CPU architecture amd64
Client Hints
Brands Not/A)Brand 8, Chromium 138, Google Chrome 138
Mobile false
Platform Windows
Platform version 15.0.0
Architecture x86
Bitness 64
Model —
Full version list Not/A)Brand 8.0.0.0, Chromium 138.0.7204.101, Google Chrome 138.0.7204.101
Screen & display
Screen 2560×1440
Available screen 2560×1392
Viewport 1440×810
Device pixel ratio 1.5
Colour depth 24
Max touch points 0
Orientation landscape-primary
Colour scheme dark
Reduced motion no-preference
Contrast no-preference
Language & time
Languages en-GB, en, de
Primary language en-GB
Time zone Europe/London
Calendar gregory
Hour cycle h23
Feature probes
Cookies true
localStorage true
Service workers true
WebAssembly true
WebGL 2 true
Clipboard write true
Network
IP address UNAVAILABLEThe whole grid, as Copy report writes it. The operating-system row reads Windows 10 because the frozen NT 10.0 token cannot separate 10 from 11; the platform version hint, 15.0.0, can. Model is empty rather than unavailable: Chromium answered with no model.
Firefox 140 on macOS, no Client Hints at allUser agent
User-agent string Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0
Browser Firefox 140.0
Layout engine Gecko 140.0
Operating system Mac OS 10.15
Device type UNAVAILABLE
Device model Apple Macintosh
CPU architecture UNAVAILABLE
Client Hints
Brands UNAVAILABLE
Mobile UNAVAILABLE
Platform UNAVAILABLE
Platform version UNAVAILABLE
Architecture UNAVAILABLE
Bitness UNAVAILABLE
Model UNAVAILABLE
Full version list UNAVAILABLE
User-Agent Client Hints are unavailable — `navigator.userAgentData` does not exist in this browser (Firefox and Safari do not implement it), so these rows stay unavailable instead of being guessed from the user-agent string.Firefox exposes no userAgentData, so all eight hint rows keep their labels and read unavailable. None was filled from the Gecko tokens above.
Chrome 138 on Android, reduced user-agent stringUser agent
User-agent string Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36
Browser Chrome 138.0.0.0
Layout engine Blink 138.0.0.0
Operating system Android 10
Device type mobile
Device model K
CPU architecture UNAVAILABLE
Client Hints
Brands Not/A)Brand 8, Chromium 138, Google Chrome 138
Mobile true
Platform Android
Platform version 14.0.0
Architecture —
Bitness —
Model Pixel 8
Full version list Not/A)Brand 8.0.0.0, Chromium 138.0.7204.101, Google Chrome 138.0.7204.101
Browser version 138.0.0.0 is a reduced user-agent value — only the major version 138 is real; the minors are frozen at 0.
Device model `K` is the reduced user-agent placeholder — Chrome on Android hides the real model here; only Client Hints can name it.The string offers version 138.0.0.0 and model K; the two notes name both placeholders. Model says Pixel 8 only because the high-entropy hint answered.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
An iPad can call itself a Macintosh
In desktop-class mode iPadOS sends the string Safari sends on a Mac, so the operating-system row reads Mac OS while max touch points reads 5. The disagreement is shown, not settled.
A time zone of UTC can mean unknown
When resolvedOptions() hands back UTC, the note under Notes about these readings calls it unconfirmed: some engines report UTC when the real zone is unavailable. A zone that comes back empty gets its own wording.
A hardened profile answers with silence
When a feature probe throws — private windows do this — its row reads unavailable and a note lists which probes never reported. Not measured is not the same as not supported.
Limits are printed, never applied quietly
A user-agent past 4,096 characters is printed whole and left unresolved; brand lists stop at 16 entries and languages at 32. Each cap names the count that arrived.
Not/A)Brand is a deliberate decoy
Chromium puts one meaningless entry in the brand list — you will see something like Not/A)Brand 8 — so that code cannot hard-code the list. It is printed unfiltered.
Common errors
User-Agent Client Hints are unavailable — `navigator.userAgentData` does not exist in this browser (Firefox and Safari do not implement it), so these rows stay unavailable instead of being guessed from the user-agent string.- The most common reading here, and a fact about the browser rather than a fault. All eight rows keep their labels and their height.
The detailed Client Hints were not requested — platform version, architecture, bitness, model and full version list only arrive from an explicit `getHighEntropyValues()` call, so ask for them with the detailed-hints control.- High-entropy hints are a decision, so the page never takes it on load. Those five rows read not requested until the button is pressed — a different state from blocked.
The detailed Client Hints were refused — the browser rejected `getHighEntropyValues()`, which an insecure context or a permissions policy will do, so these rows stay blocked instead of being inferred.- Plain HTTP, or a restrictive permissions policy, gets a rejected promise instead of values. The rows carry the word blocked beside any colour.
This user-agent string is 4,502 characters — longer than the 4,096-character parse limit, so it is shown raw and the browser, OS and device fields are left unread.- The first number is the real length of what arrived. Nothing is shortened; only the resolution step is skipped.
Your IP address is not shown here — a page running only on this device cannot see it, and this tool will not ask a third-party service for it. Use a network tool you trust when you need that number.- That address is visible to the servers you contact, not to code running inside this page. Printing it would mean calling somebody else's service.
FAQ
What is my user agent, and what browser am I using?
The first is the User-Agent header string your browser sends, printed whole at the top of the grid; the rows under it answer the second. Browser info and device info are that same grid under other names. A proxy or an extension can rewrite the header in flight, so the raw value is shown rather than summarised.
Why do the Client Hints rows say UNAVAILABLE?
Because navigator.userAgentData does not exist in your browser — Firefox and Safari have not implemented User-Agent Client Hints. Those rows stay empty instead of being filled from the user-agent string, which would be a guess dressed as a reading.
Can this page show my IP address?
No. Code that runs only on your device cannot see the address your requests arrive from, and learning it would mean asking a third-party service. The Network group says so in place of a number.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Read this browser again.
- ⌘/Ctrl + C
- With nothing selected, copy the whole report.
- ⌘/Ctrl + Shift + C
- Copy the report even while text is selected.
- ⌘/Ctrl + S
- Save the report as a .json file.
- t
- Step to the next site theme.
- ? or ⌘/Ctrl + /
- Show the help card listing these bindings.
- Esc
- Dismiss the help card; focus returns to its opener.