From navigator.platform property
The navigator.platform property is a string that identifies the platform (operating system and CPU architecture) on which the browser is running. This identifier reveals:
navigator.platform is deprecated and being replaced by the User-Agent Client Hints API. However, it's still widely used and supported by all browsers.
The navigator.platform property dates back to early web browsers (Netscape Navigator era) when websites needed to detect the user's operating system to provide platform-specific downloads, instructions, or features.
The platform string has several problems:
The navigator.userAgentData.platform API provides more accurate and privacy-friendly platform detection.
Win32Meaning: 32-bit Windows or 64-bit Windows (confusing, but both report as "Win32")
Browsers: All browsers on Windows
Common: Most desktop users (~75% of desktop market)
MacIntelMeaning: macOS on Intel CPUs (also used for ARM Macs to avoid fingerprinting!)
Browsers: Safari, Chrome, Firefox on macOS
Note: Even Apple Silicon (M1/M2) Macs report "MacIntel" for privacy
MacPPCMeaning: macOS on PowerPC CPUs (ancient, pre-2006)
Status: Essentially extinct
Linux x86_64Meaning: 64-bit Linux
Common: Most Linux desktop users
Linux i686Meaning: 32-bit Linux
Status: Increasingly rare
Linux armv7l or Linux aarch64Meaning: ARM-based Linux (Raspberry Pi, ARM servers, etc.)
iPhone / iPad / iPodMeaning: iOS devices
Browsers: Safari, Chrome (WebKit), Firefox (WebKit) on iOS
Linux armv8l (Android)Meaning: Android devices
Note: Android reports Linux because it's based on Linux kernel
| Value | Meaning | Status |
|---|---|---|
Win16 |
16-bit Windows (3.1, 95, 98) | Extinct |
WinCE |
Windows CE (mobile) | Extinct |
FreeBSD |
FreeBSD Unix | Very rare |
SunOS |
Solaris/SunOS | Very rare |
Use case: Show the correct download link for user's OS
const platform = navigator.platform.toLowerCase();
if (platform.includes('win')) {
showDownloadLink('app-windows.exe');
} else if (platform.includes('mac')) {
showDownloadLink('app-macos.dmg');
} else if (platform.includes('linux')) {
showDownloadLink('app-linux.tar.gz');
}Use case: Show Cmd for Mac, Ctrl for Windows/Linux
const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
const modifierKey = isMac ? '⌘' : 'Ctrl';
document.getElementById('shortcut').textContent =
`Press ${modifierKey}+S to save`;Use case: Optimize UI for mobile vs desktop
// Simple (but imperfect) mobile detection
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.platform);
if (isMobile) {
enableTouchGestures();
} else {
enableMouseInteractions();
}Use case: Check if platform-specific features are available
Use case: Understanding user demographics
Both 32-bit and 64-bit Windows report navigator.platform = "Win32" for backward compatibility. You cannot distinguish 32-bit from 64-bit Windows using this property.
Apple's ARM-based M1, M2, M3 chips report as "MacIntel" (suggesting Intel CPU) to prevent fingerprinting. You cannot detect Apple Silicon vs Intel Macs via navigator.platform.
Android devices typically report as Linux armv8l or similar, not "Android". You need to check the User-Agent string to confirm it's Android.
| OS | Chrome | Firefox | Safari |
|---|---|---|---|
| Windows 10/11 | Win32 | Win32 | N/A |
| macOS (Intel) | MacIntel | MacIntel | MacIntel |
| macOS (M1/M2) | MacIntel | MacIntel | MacIntel |
| Linux 64-bit | Linux x86_64 | Linux x86_64 | N/A |
| iOS | iPhone | iPhone | iPhone |
Platform is a significant fingerprinting component that narrows down your identity considerably when combined with other data.
Platform is combined with other attributes for identification:
// High entropy combination
Platform: "Linux x86_64" (5% of users)
+ Browser: "Firefox" (3% of users)
+ Timezone: "America/Denver" (2% of US users)
= Very rare combination (~0.003% of users)Trackers use platform as part of fingerprint persistence:
Even if you spoof navigator.platform, websites can detect inconsistencies:
Most browsers don't offer built-in ways to change navigator.platform. However:
You can override the platform string:
about:configgeneral.platform.overrideExtensions can spoof platform:
If you report "Win32" but you're on Mac, sites might show Windows-specific instructions or downloads that won't work for you.
Strategy: All users report "Win32" regardless of actual OS
Effect: Perfect uniformity—impossible to distinguish users by platform
Strategy: Reports real platform but randomizes other fingerprinting vectors
Effect: Platform is accurate but less useful for tracking
The privacy paradox: Using the most common platform makes you less unique:
Instead of navigator.platform, modern sites should use:
// New API (not all browsers support yet)
navigator.userAgentData.platform
// Returns: "Windows", "macOS", "Linux", "Android", "iOS"
// More granular data requires permission:
navigator.userAgentData.getHighEntropyValues(['platformVersion'])