Lesson. A constant cannot identify Chrome vs Firefox.
MDN rule. Do not rely on this as a real product name.
Example 3 — Prefer Feature Detection
Test the capability instead of reading legacy identity strings.
JavaScript
// ✗ brittle: if (navigator.product === "Gecko") { … }
// ✓ reliable: test the API
if ("serviceWorker" in navigator) {
console.log("Service Worker API available");
} else {
console.log("Service Worker API missing");
}
console.log("product (info only): " + navigator.product);
Service Worker API available
product (info only): Gecko
How It Works
Skip sniffing.product does not name the real engine.
Test the feature."serviceWorker" in navigator answers the real question.
Fallback path. Handle missing APIs without guessing the browser.
Optional log. Keep product for learning or diagnostics only.
Compatibility
Browser Support
navigator.product is Baseline Widely available (MDN: since July 2015). Support is excellent — the hard part is remembering it always returns "Gecko".
✓ Baseline · Widely available
Navigator.product
Read-only compatibility string fixed to "Gecko" in every browser. Useful for learning legacy Navigator identity fields — not for brand or engine sniffing.
100%Browser support
Google ChromeReturns "Gecko" · Desktop & Mobile
Full support
Mozilla FirefoxReturns "Gecko" · Desktop & Mobile
Full support
Apple SafariReturns "Gecko" · macOS & iOS
Full support
Microsoft EdgeReturns "Gecko" · Chromium
Full support
OperaReturns "Gecko" · Modern versions
Full support
Internet ExplorerSupported (legacy)
Full support
productUniversal
Bottom line: Available everywhere modern users are. Read it for demos; decide features with capability checks, not product strings.
Frequently Asked Questions
In every modern browser it returns the string "Gecko". The property exists only for historical compatibility with older scripts.
No. MDN marks it Baseline Widely available (since July 2015). It is not Deprecated, Experimental, or Non-standard — but MDN still warns not to use it as a real product name.
No. Chrome, Edge, Safari, Firefox, and others all report "Gecko". It does not identify the real engine or brand.
The HTML specification requires the product getter to return "Gecko" for compatibility, similar to how appCodeName always returns "Mozilla".
No. It is a read-only Navigator property. You read it; you do not assign a new value.
Prefer feature detection (for example "serviceWorker" in navigator) over reading product, appCodeName, appName, or brittle user-agent parses.