navigator.platform is a JavaScript property that tells any website your operating system β silently, instantly, and without asking. It is a small but persistent piece of the browser fingerprinting puzzle that every device running a modern browser exposes. You can see your own value right now on whatsmy.fyi.
TL;DR
navigator.platform is a read-only JavaScript property that returns a string identifying your operating system β values like "Win32", "MacIntel", or "Linux x86_64". It requires no permission, fires no network request, and is readable by every script on every page you visit. On its own it carries low entropy (~2β4 bits), but fingerprinting systems combine it with 30+ other signals to uniquely identify your device. It is also factually wrong on hundreds of millions of Apple Silicon Macs, which still report "MacIntel". The modern replacement is navigator.userAgentData.platform, which separates low-entropy from high-entropy data under an opt-in model.
What Is navigator.platform Fingerprinting?
navigator.platform is part of the Navigator API, a set of browser properties that JavaScript has been able to read since the mid-1990s. Unlike canvas rendering or WebGL output β which require complex GPU operations to extract a fingerprint β navigator.platform is trivial to read:
console.log(navigator.platform);
// "Win32" β Windows (both 32-bit and 64-bit)
// "MacIntel" β macOS Intel AND Apple Silicon
// "Linux x86_64" β Linux on 64-bit x86
// "iPhone" β iOS on iPhone
// "iPad" β iPadOS (older iPads; see below)
The value is available to every script on every page, with no permission prompt, no opt-in dialog, and no network round-trip. When a tracking or fraud-detection script collects it, you receive no notification whatsoever.
navigator.platform fingerprinting refers to the inclusion of this value as one signal in a larger device fingerprint. No legitimate fingerprinting system relies on navigator.platform alone β the entropy is too low. Its power comes from two roles: contributing a small piece of entropy to a combined fingerprint, and acting as an anchor signal that fraud detection systems use to catch inconsistencies in other spoofed values.
The Electronic Frontier Foundation's Cover Your Tracks tool explicitly tests "system platform" as one of its measured signals. The EFF's original 2010 Panopticlick research across 470,161 browsers found that 84% of browsers were fully uniquely identifiable by fingerprint alone β a number that rises to 94% for browsers with Flash or Java installed.
How Does navigator.platform Work?
The property is set by the browser at startup based on the underlying operating system. The WHATWG HTML specification leaves the exact format entirely up to the browser implementation β there is no standardised list of values. Browsers have converged on a set of strings through historical convention rather than specification.
Reading the Value
A fingerprinting script reads navigator.platform in a single synchronous call with no side effects:
// Reading navigator.platform β zero cost, zero visibility to user
function getPlatformSignal() {
return {
platform: navigator.platform,
// Often combined immediately with other navigator properties
hardwareConcurrency: navigator.hardwareConcurrency,
deviceMemory: navigator.deviceMemory,
language: navigator.language,
languages: navigator.languages,
maxTouchPoints: navigator.maxTouchPoints,
};
}
// Example output on a MacBook Pro (Apple Silicon):
// {
// platform: "MacIntel", β factually wrong β it's ARM, not Intel
// hardwareConcurrency: 10, β 10 CPU cores
// deviceMemory: 8, β 8 GB RAM
// language: "en-US",
// languages: ["en-US", "en"],
// maxTouchPoints: 0, β no touch screen
// }
Consistency Validation β The Real Fingerprinting Power
Fraud detection systems treat navigator.platform as a truth anchor. If a browser sends User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) but navigator.platform returns "Linux x86_64", the contradiction is a near-certain signal of spoofing, automation, or a misconfigured headless browser. The expected correlations:
"Win32"β User-Agent must containWindows"MacIntel"β User-Agent must containMac OS X"Linux x86_64"β User-Agent must containLinux"iPhone"β User-Agent must containiPhoneand touch events must fire
A common automation mistake is setting a custom User-Agent string via command-line flags β to impersonate a Mac or iPhone β without also overriding navigator.platform. The mismatch is detected immediately.
Platform String Values in the Wild
The strings your browser may return, and what they actually mean:
| Platform String | Meaning | Desktop OS Share |
|---|---|---|
"Win32" | Windows β both 32-bit and 64-bit (Chrome, Edge, and modern Firefox all return this on 64-bit Windows) | ~72% |
"MacIntel" | macOS on Intel β and also all Apple Silicon M1/M2/M3/M4 Macs, which still return this string for backward compatibility | ~16% |
"Linux x86_64" | Linux on 64-bit x86 (most Linux desktop users) | ~4.7% |
"Linux armv7l" | Linux on ARM β Raspberry Pi, Chromebooks, some Android in desktop mode | <1% |
"iPhone" | iOS on iPhone | Mobile: ~28% of mobile OS |
"iPad" | iPadOS β but iPadOS 13+ with "Request Desktop Website" enabled now returns "MacIntel" instead | Mobile: shrinking |
"Win64" | Older Firefox on 64-bit Windows (Firefox 63+ changed this to "Win32" for consistency) | Legacy |
The Apple Silicon and iPad Paradoxes
Two documented quirks make navigator.platform actively misleading rather than just imprecise.
Apple Silicon Returns "MacIntel"
Every Mac with an M1, M2, M3, or M4 chip β ARM-based processors introduced in late 2020 β still reports navigator.platform === "MacIntel". Apple and browser vendors chose backward compatibility over accuracy: changing the string to something like "MacARM" would break legacy code that checks for "MacIntel" to apply macOS-specific behaviour. As a result, hundreds of millions of Apple Silicon devices have been misidentifying themselves for over four years. The only API that correctly identifies Apple Silicon is navigator.userAgentData.getHighEntropyValues(["architecture"]), which returns "arm" rather than "x86".
iPadOS 13+ Reports as Mac
When Apple introduced iPadOS 13, it enabled "Request Desktop Website" by default, causing Safari to report a desktop User-Agent and "MacIntel" as the platform β even on an iPad. Fingerprinting libraries such as FingerprintJS include correction logic: if navigator.platform returns "MacIntel" but the device fires touch events as a mobile device, the library overrides the classification back to iPad or iPhone. Without this correction, every modern iPad appears to be a MacBook in fingerprinting data.
Who Uses navigator.platform in the Real World?
Advertising Networks and Tracking
Behavioural advertising platforms use browser fingerprinting β with navigator.platform as one component β to maintain persistent device identifiers after third-party cookies are blocked. Platform contributes to OS-level segmentation (Windows users receive different ads than macOS users) and to cross-session identifier stability.
Fraud Detection Platforms
Services such as Fingerprint (formerly FingerprintJS), Stripe Radar, and Sift Science use navigator.platform primarily as a consistency check. If a device claiming to be a Windows machine shows a Linux platform value, or if the platform value changes between authenticated sessions for the same user account, it triggers a risk signal. The legitimate-use argument under GDPR typically invokes the "fraud prevention" legitimate interest basis.
Headless Browser Detection
Automated scrapers and bot frameworks commonly fail to set a realistic navigator.platform value that matches their spoofed User-Agent. Anti-bot platforms like Cloudflare Bot Management and Akamai Bot Manager check this alignment as one signal in their bot scoring models. An absent, empty, or mismatched platform string is a reliable indicator of automation.
A/B Testing and Analytics
Analytics dashboards use navigator.platform for OS segmentation in user experience reporting. This is a non-tracking use case β the platform value is aggregated, not used to build persistent identifiers. It is, however, processed client-side using the same API call that fingerprinting scripts use.
navigator.platform vs navigator.userAgentData β The Modern Replacement
The User-Agent Client Hints API (navigator.userAgentData) was introduced in Chrome 89 (2021) as part of Google's User-Agent Reduction initiative β a plan to freeze the legacy User-Agent string to reduce passive fingerprinting surface. The new API separates data into low-entropy (always available) and high-entropy (must be explicitly requested):
// Low-entropy: always available, returns a clean enum value
navigator.userAgentData.platform;
// "macOS", "Windows", "Linux", "Android", "iOS"
// β no more "MacIntel", "Win32", "Linux x86_64"
// High-entropy: must explicitly request; website must justify need
navigator.userAgentData
.getHighEntropyValues(["platform", "platformVersion", "architecture", "bitness"])
.then(data => {
console.log(data.platform); // "macOS"
console.log(data.platformVersion); // "14.5.0" (internal version, not "Sonoma")
console.log(data.architecture); // "arm" β finally correctly identifies Apple Silicon
console.log(data.bitness); // "64"
});
// Fallback for browsers without userAgentData support (Firefox):
const platform = navigator?.userAgentData?.platform || navigator?.platform;
The key architectural shift: high-entropy values like architecture and platformVersion require an explicit asynchronous call, giving browsers an opportunity to apply noise or prompt the user. Firefox has limited support for this API as of early 2026, partly due to concerns that it provides a more structured β and therefore easier to fingerprint β OS description than the legacy string approach.
How to Protect Yourself
Preventing navigator.platform from leaking is harder than it sounds, because naive spoofing often makes you more identifiable rather than less. Here are the options ranked from most effective to most practical:
- Tor Browser (strongest protection): Tor standardises
navigator.platformacross all users on the same OS category β all Windows users report the same value, all macOS users report the same value. The goal is a large anonymity set where every Tor user looks identical. The trade-off is slower browsing through the Tor relay network. - Firefox with
privacy.resistFingerprinting: Enabling this flag inabout:configcauses Firefox to spoofnavigator.platformalongside multiple other navigator properties simultaneously. However, only ~0.48% of Firefox users have this enabled β the setting itself becomes a fingerprint that distinguishes you from the 99.52% of Firefox users who do not have it. You may stand out more, not less. - Brave Browser (recommended for daily use): Brave's Farbling approach randomises high-entropy fingerprinting signals per session and per site. For
navigator.platformspecifically, Brave aligns the reported value with the real platform (to avoid obvious inconsistencies) while disrupting higher-entropy signals like canvas and WebGL that do most of the fingerprinting work. - Do not spoof navigator.platform in isolation: Changing only
navigator.platformwithout also updating the User-Agent string, WebGL GPU strings, and canvas output creates a signal contradiction that fraud detection systems will catch immediately. Incomplete spoofing is worse than no spoofing β it marks you as an automation or deliberate evader. - Use a consistent browser profile: Rather than spoofing, some privacy researchers recommend using a common browser configuration (Chrome on Windows, the most common platform combination) to blend into the majority pool. A device reporting
"Win32"has ~72% of desktop browsers sharing that value β a much larger anonymity set than an unusual Linux or BSD configuration. - Understand VPN limitations: A VPN changes your visible IP address but has zero effect on
navigator.platformor any other browser property. It removes one tracking vector while leaving all fingerprinting surfaces intact. Check your full exposure on whatsmy.fyi.
Is navigator.platform Deprecated?
The answer is deliberately ambiguous. The WHATWG HTML specification still includes navigator.platform β it is not formally deprecated. MDN marks it as "not recommended" and "unreliable" but stops short of deprecated. GitHub issues in both the mdn/content and whatwg/html repositories debated this status without resolution.
The practical conclusion: navigator.platform will remain in browsers indefinitely for backward compatibility, exactly as navigator.appName (which has returned "Netscape" from every browser since the 1990s) still does. It will never be removed because too many legacy scripts depend on it. But web developers should migrate any legitimate OS detection to navigator.userAgentData.platform β the one valid documented use case MDN acknowledges for navigator.platform is determining which modifier key symbol to show users (β vs Ctrl), and the new API does this more reliably.
Frequently Asked Questions
What does navigator.platform return on Apple Silicon Macs?
It returns "MacIntel" β the same value as Intel Macs. Apple and browser vendors preserved backward compatibility at the cost of accuracy. Every M1, M2, M3, and M4 Mac has been reporting the wrong CPU architecture since 2020. The only way to detect Apple Silicon from the browser is through the newer navigator.userAgentData.getHighEntropyValues(["architecture"]), which correctly returns "arm".
Can websites detect my OS without navigator.platform?
Yes, through multiple complementary channels: the User-Agent request header (sent with every HTTP request, visible to servers before any JavaScript runs), WebGL GPU strings (which typically name OS-specific GPU drivers), canvas rendering differences (macOS Core Text vs Windows ClearType vs Linux FreeType produce measurably different pixel output), and CSS -webkit- prefix support patterns. Blocking navigator.platform alone would not prevent OS detection.
Does clearing cookies reset my navigator.platform?
No. navigator.platform is derived from your operating system at browser startup β it is not stored in cookies, local storage, or any browser data that can be cleared. It is the same value in incognito mode, in a fresh browser profile, and after a complete cache wipe. The only way to change it is to use a different operating system or a browser that actively spoofs it.
What is the difference between navigator.platform and navigator.userAgent?
navigator.platform is a short, structured OS identifier. The navigator.userAgent string is a much longer, composite string that includes browser name, version, OS name, OS version, rendering engine, and historical compatibility tokens β all in a single unstructured string. User-Agent contains more entropy (10β15 bits) but is also more variable between browser versions. navigator.platform is more stable across versions, which gives it a complementary role in fingerprinting: the platform value rarely changes even as the user-agent string evolves with browser updates.
Why does iPad sometimes show "MacIntel" as its platform?
iPadOS 13 (released 2019) introduced a "Request Desktop Website" feature that was enabled by default. This caused Safari on iPad to report a desktop User-Agent and "MacIntel" as its platform, rather than "iPad". The intent was to make websites deliver desktop-optimised content to the larger iPad screen. The side effect is that fingerprinting systems must detect iPads through indirect signals β touch event support, screen aspect ratio, and WebKit APIs β rather than trusting the platform string directly.
How many bits of entropy does navigator.platform contribute?
Approximately 2β4 bits in isolation, because the number of distinct values in real-world traffic is small (Win32 covers ~72% of desktop browsers; MacIntel covers ~16%; Linux variants split the rest). Entropy is higher for unusual values β a user reporting "Linux armv7l" is in a tiny minority with a much smaller anonymity set. When combined with canvas hash, WebGL renderer, screen resolution, timezone, and hardware concurrency, the total combined fingerprint routinely exceeds 20 bits β enough to narrow your identity to one in a million browsers.
Does Firefox privacy.resistFingerprinting spoof navigator.platform?
Yes. When enabled in about:config, Firefox spoofs navigator.platform as part of a coordinated set of property overrides that also affect navigator.userAgent, navigator.appVersion, navigator.oscpu, and navigator.buildID. The spoofed values vary by platform β Firefox reports a plausible fake Windows 10 value on Windows, and a plausible fake macOS value on Mac β rather than a universal fake, to avoid breaking keyboard shortcut behaviour. The downside: only ~0.48% of Firefox users have this setting enabled, making those users distinctly identifiable by their anomalous flag alone.
Related Articles
- What Is Browser Fingerprinting? How Sites Track You Without Cookies β the complete guide to all fingerprinting signals and how they combine
- What Is Canvas Fingerprinting? How Websites Track You Without Cookies β how GPU and OS rendering differences create a unique pixel-level identifier
- What Is WebGL Fingerprinting? How Your GPU Identifies Your Browser β how the 3D graphics API exposes your GPU vendor, model, and driver version
- What Is Screen Fingerprinting? How Screen Size Tracks You Online β how screen dimensions and pixel density contribute to your device profile
- What Is CPU Fingerprinting? How Websites Detect Your Hardware Specs β how navigator.hardwareConcurrency and device memory expose your hardware



