Why does Edge put “Safari” in its User-Agent?
The bizarre legacy left by the browser wars two decades ago
If you’ve ever dug into server logs, you’ve probably seen a string like this:
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/101.0.4951.64
Safari/537.36
Edg/101.0.1210.47
“Edge but Safari?” “Chrome but Mozilla?”
How can one browser pretend to be four at once? It’s not just a string joke—it’s a fossil from the fiercest browser war in web history, and its effects are still visible in server logs in 2025.
In this post we’ll cover:
- Why every browser still starts with
Mozilla/5.0 - Why Chromium‑based Edge deliberately embraces
Safari - How this mess is ultimately being phased out by standards
1. It all started with the Netscape vs. IE war
In the late 1990s the browser market was essentially a two‑player game:
- Netscape Navigator
- Internet Explorer
Netscape’s User‑Agent looked like this:
Mozilla/4.0 (compatible; ...)
Web developers began to think:
“If it’s a Mozilla browser, it must support the latest features. Anything else is legacy code.”
Thus, browser feature branching became User‑Agent string checking.
// 1990s‑style pseudocode
if (ua.includes("Mozilla")) {
// Modern browser code
} else {
// Legacy code
}
Other browsers were outraged:
“We’re also Netscape‑grade—why should we be discriminated against?”
So everyone started prefixing their UA with Mozilla. At that time, Mozilla was essentially a compatibility mark meaning:
“I’m Netscape‑grade. Don’t treat me as low‑end.”
The origin of the name “Mozilla”
- “Mosaic + Godzilla” → “Mozilla” is a common story.
- Emotionally, it’s a parody of a “giant, powerful browser” like Godzilla.
In practice it was just a marketing/historical label for “Netscape‑like or worthy of Netscape.”
That’s why today almost every browser starts its UA with Mozilla:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; ...)
It’s not because the browser is Mozilla, but because of the historical reason: I’m Netscape‑grade, so don’t dismiss me as old.
2. Engine wars: WebKit, Gecko, Trident… and the chaos that followed
In the early 2000s the engine landscape split like this:
- IE → Trident
- Firefox → Gecko
- Safari → WebKit
Developers again used UA strings to split browsers:
const ua = navigator.userAgent;
if (ua.includes("Safari")) {
// Safari / WebKit code
}
if (ua.includes("Gecko")) {
// Firefox code
}
if (ua.includes("Trident")) {
// IE‑only code (crying…)
}
Even at this point the pattern was already problematic. Mixing engine names with brand names made branching logic increasingly complex.
Chrome’s arrival → “Who are you?” crisis
When Chrome first appeared, the problem was simple:
Websites didn’t recognize Chrome, so UA checks sent it down the Safari code path.
Chrome’s strategy was:
“Let’s just pretend we’re Safari.”
So Chrome’s UA became:
Mozilla/5.0 (...)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/xx.xx.xx
Safari/537.36
The real meaning of this string is roughly:
Mozilla/5.0→ “I’m also Netscape‑grade.”AppleWebKit/537.36→ “My rendering engine is WebKit‑like.”(KHTML, like Gecko)→ “I can run like Gecko (Firefox).”Safari/537.36→ “I need to look like Safari for compatibility.”Chrome/xx→ “I’m actually Chrome.”
In short, Chrome became a four‑layered masquerade.
3. Edge’s arrival: a compromise between identity and survival
Now it’s Microsoft’s turn. The original Edge used its own EdgeHTML engine, but eventually switched to Chromium‑based Edge.
Microsoft knew this fact well:
“Websites already have tens of thousands of UA‑based branches.”
If Edge had simply used:
User-Agent: Edge/101.0.0.0
The reality would be:
- Many sites wouldn’t recognize the browser.
- Legacy
if (ua.includes("Chrome"))checks would fail. - Users would see “Unsupported browser” screens, broken layouts, and odd polyfills.
So Edge’s strategy was:
“I’m Edge, but I’ll look like Chrome + Safari.”
Resulting UA:
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/101.0.4951.64
Safari/537.36
Edg/101.0.1210.47
Interpretation:
Mozilla→ “I’m a modern browser.”AppleWebKit→ “I’ll render like WebKit.”Chrome→ “I’m Chromium‑based.”Safari→ “I’ll also look like Safari, so don’t block me.”Edg→ “But my brand is Edge.”
So this long string isn’t Edge’s self‑introduction; it’s a survival‑mode disguise to appease legacy code.
4. Decoding the User‑Agent string: 30 years of history in one line
Let’s break down the key tokens:
| Token | Real meaning (paraphrased) |
|---|---|
Mozilla/5.0 |
“I’m a Netscape‑grade modern browser. Don’t treat me as old.” |
AppleWebKit/537.36 |
“I render like WebKit (Safari).” |
KHTML, like Gecko |
“I can run like Gecko (Firefox).” |
Safari/537.36 |
“I’m not real Safari, but I’ll look like it.” |
Chrome/101.0... |
“My engine is Chromium (Chrome).” |
Edg/101.0... |
“My brand is Edge; the rest is a survival disguise.” |
In a single line we see:
- Netscape vs. IE war
- Gecko vs. WebKit vs. Trident engine war
- Chrome’s market domination
- Edge’s survival strategy and compromise
5. User‑Agent is becoming a “historical garbage dump”
The problem is that the UA system is essentially a broken design today:
- Browsers mimic each other → trust = 0
- Legacy code forces strings to grow
- Device/OS info is over‑exposed → privacy concerns
- Parsing UA to determine browser/feature is nearly impossible
Thus W3C and browser vendors are gradually phasing out UA strings in favor of User‑Agent Client Hints.
Client Hints: “Let’s be honest now”
In the future, headers like these will take center stage:
Sec-CH-UA
Sec-CH-UA-Platform
Sec-CH-UA-Mobile
How it works:
- Server asks for precise browser info via response headers.
- Browser sends only the requested data, structured and selective.
- No need to parse a long, deceptive string.
Benefits:
- Browsers no longer need to perform a triple‑ or quadruple‑layered disguise.
- Servers request only the data they need, reducing privacy exposure.
- Structured data simplifies code.
In short, standards are being redesigned so browsers can be honest.
6. Conclusion – a new perspective on the “strange line” in server logs
Look again at that first line:
Mozilla/5.0 ... Safari/537.36 ... Edg/101
It’s not just a string; it’s a compressed history of:
- Browser wars and power struggles
- Compromises with legacy code
- Market‑driven disguises and strategies
- The slow standardization that’s finally catching up
And the funny part is:
This historical storm’s remnants are still being captured in server logs every day in 2025.
So next time you see a weird combination like Mozilla/5.0 ... Safari ... Edg/... in your logs, you can smile and think, “Another fossil has passed by.” 🙂

There are no comments.