Compare / browsers
Chrome vs Edge
Two real Chromium browsers on the fleet, measured side by side: identical engine, identical HTTP/2 and header order, and exactly three things a site can tell apart — the user-agent token, the client-hint brand and one TLS extension.
Chrome and Edge on the fleet are the official Google and Microsoft builds for Linux, both on Chromium 154 at the time of measurement, both driven with the Playwright chromium client. Edge is Chromium with Microsoft's services and UI on top; for automation almost none of that UI exists. The interesting question is what is left that a server can see — and the answer is short enough to list.
As a developer: driving them
| Google Chrome | Microsoft Edge | |
|---|---|---|
| Build and versions | Official Google build. channel: stable (154), beta (156), dev (157); version pins previous majors (153, 152 today). | Official Microsoft build. channel: stable (154), beta (155), dev (156). No pinned previous majors. |
| Playwright client, options | chromium 1.60. The common options plus channel and version. | chromium 1.60. The common options plus channel. |
| Rendering, codecs, PDF, device emulation | Chromium 154 with proprietary codecs (H.264, AAC) and Widevine, unlike Playwright's open-source Chromium. PDF in headless; mobile emulation works. | The same Chromium 154 and the same proprietary codecs; PDF and emulation the same (measured: every Playwright feature probe identical). |
| What Edge adds for a user | — | Collections, vertical tabs, the sidebar, Copilot, Microsoft account sync — browser UI that is not part of a page and not reachable through Playwright. For a script, Edge is Chrome with a different name. |
| Threads, speed | 2 headful, 1 headless. Timings in the table are proxy noise. | Same. |
As a scraper: what the site sees
| Google Chrome | Microsoft Edge | |
|---|---|---|
| User agent | … Chrome/154.0.0.0 Safari/537.36 | … Chrome/154.0.0.0 Safari/537.36 Edg/154.0.0.0 — the only difference in the string. |
Client hints (sec-ch-ua, navigator.userAgentData) | Brands Chromium 154, Google Chrome 154, plus the GREASE token. | Brands Chromium 154, Microsoft Edge 154, plus the GREASE token; fullVersionList carries Edge's own build (154.0.4258.62) next to Chromium's. |
| TLS | JA4 t13d1517h2_8daaf6152771_… — 19 extensions. | JA4 t13d1516h2_8daaf6152771_… — 18 extensions: Edge's ClientHello omits one extension Chrome sends. Same cipher suites (the middle hash matches), different full JA4 and peetprint. |
| HTTP/2 and headers | Akamai fingerprint 1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p; header order :method :authority :scheme :path sec-ch-ua …. | Identical — same SETTINGS, same WINDOW_UPDATE, same pseudo-header and header order (measured). |
| JavaScript surface | Chromium 154: same plugins (5), same WebGL (SwiftShader on the fleet), same canvas hash, same feature set, webdriver false. | Identical on every probe except the UA-derived values (measured). |
| Who runs it | About two thirds of desktop users; on Linux, the dominant browser. | A few percent of desktop users, mostly on Windows; Edge on Linux (X11; Linux x86_64 … Edg/) is a small cohort — a consistent one, since it is a real build, but small. |
| bot.sannysoft.com | 1 of 57 red: "WebGL Renderer" (the SwiftShader string). | The same single red. |
Which to pick
- Chrome by default: the largest cohort, the most versions and channels (including pinned majors for reproducing a site's behaviour on an older release), and the browser most sites are tested against.
- Edge when the target treats Edge differently — Microsoft properties and sites that gate features on the
Edg/token or theMicrosoft Edgebrand — or when you want a second genuine Chromium identity (different UA, brand and JA4) without leaving real browsers. Keep the platform plausible: an Edge user agent on Linux is rare; use it where it fits. - Not for diversity at scale: alternating Chrome and Edge changes three fields and nothing else — same HTTP/2, same canvas, same GPU string. For identities that differ at the device level, see Camoufox.
Measured on the fleet (2026-10-06)
One headful launch of each through the same proxy; both official Linux builds on Chromium 154. The TLS difference is stable per build; the timing difference is one slow proxy exit during Chrome's run.
Launch and cost
Single run; timings depend on the proxy and on fleet load.
| Google Chrome | Microsoft Edge | |
|---|---|---|
| Launch body | {"headless":false} | {"headless":false} |
| Threads used | 2 (linux_headful) | 2 (linux_headful) |
| Browser version | 154.0.8037.97 | 154.0.4258.62 |
| Launch request → browser ready | 0.7 s | 0.6 s |
| Playwright connect | 0.3 s | 0.1 s |
| Load example.com | 5.5 s | 0.4 s |
| Load tls.peet.ws/api/all | 1.4 s | 1.6 s |
What the network sees
From tls.peet.ws/api/all, requested by the browser itself. JA3 hashes change between runs of the same build (GREASE), so compare JA4 and the HTTP/2 fingerprint.
| Google Chrome | Microsoft Edge | |
|---|---|---|
| HTTP version | h2 | h2 |
| JA4 | t13d1517h2_8daaf6152771_cb7bf5808d99 | t13d1516h2_8daaf6152771_806a8c22fdea |
| Peetprint hash | fc97c1cdfb1409c9a9326c1b726d1dee | 8f568b2a409b82d0ec24cb84bf3bc3fc |
| Akamai HTTP/2 fingerprint | 1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p | 1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p |
| Cipher suites / extensions | 16 / 19 | 16 / 18 |
| Header order (first 12) | method, authority, scheme, path, sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform, upgrade-insecure-requests, user-agent, accept, sec-fetch-site, sec-fetch-mode | method, authority, scheme, path, sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform, upgrade-insecure-requests, user-agent, accept, sec-fetch-site, sec-fetch-mode |
What page scripts see
Read with page.evaluate on example.com. Cores and memory are the server's and vary between fleet nodes.
| Google Chrome | Microsoft Edge | |
|---|---|---|
| navigator.userAgent | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36 | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36 Edg/154.0.0.0 |
| UA-CH brands | Chromium 154 · Google Chrome 154 · Not A(Brand 99 | Chromium 154 · Microsoft Edge 154 · Not A(Brand 99 |
| UA-CH full version list | Chromium 154.0.8037.97 · Google Chrome 154.0.8037.97 · Not A(Brand 99.0.0.0 | Chromium 154.0.8037.98 · Microsoft Edge 154.0.4258.62 · Not A(Brand 99.0.0.0 |
| navigator.platform / vendor | Linux x86_64 / Google Inc. | Linux x86_64 / Google Inc. |
| Languages | en-US, en | en-US, en |
| Timezone / locale | UTC / en-US | UTC / en-US |
| Screen (w×h×availW×availH×depth) | 1280x720x1280x720x24 | 1280x720x1280x720x24 |
| Window outer / inner / DPR | 1288x805 / 1280x720 / 1 | 1288x805 / 1280x720 / 1 |
| hardwareConcurrency / deviceMemory | 24 / 32 | 12 / 32 |
| WebGL vendor | Google Inc. (Google) | Google Inc. (Google) |
| WebGL renderer | ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver) | ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver) |
| WebGL version | WebGL 2.0 (OpenGL ES 3.0 Chromium) | WebGL 2.0 (OpenGL ES 3.0 Chromium) |
| WebGPU (navigator.gpu) | yes | yes |
| Canvas hash | f5a94624 | f5a94624 |
| navigator.webdriver | no | no |
| window.chrome / navigator.connection | yes / yes | yes / yes |
| Plugins / PDF viewer | 5 / yes | 5 / yes |
| Notification.permission / permissions.query | default / prompt | default / prompt |
Web platform features
Presence probes; a user agent that claims one version while exposing another's features is a detectable inconsistency.
| Google Chrome | Microsoft Edge | |
|---|---|---|
Iterator.prototype.includes (new in Chrome 154) | yes | yes |
FontFace.width (new in Chrome 154) | yes | yes |
CSS text-decoration-inset (new in Chrome 154) | no | no |
Iterator.prototype.join (Chrome 153) | yes | yes |
Iterator.zip (Chrome 153) | yes | yes |
CSS scroll-axis-lock (Chrome 153) | no | no |
<camera> element (Chrome 153) | yes | yes |
document.requestStorageAccessFor (deprecated in 153) | no | no |
Topics API (document.browsingTopics) | yes | yes |
Protected Audience (navigator.joinAdInterestGroup) | yes | yes |
Shared Storage (window.sharedStorage) | no | no |
Attribution Reporting (window.attributionReporting) | no | no |
| Private Aggregation | no | no |
WebHID (navigator.hid) | yes | yes |
CSS margin-trim (Chrome 155) | no | no |
CSS text-decoration-skip-spaces (Chrome 155) | no | no |
CSS corner shorthand (Chrome 155) | no | no |
CSS symbols() (Chrome 155) | no | no |
Element.streamAppendHTML (Chrome 155) | no | no |
WebTransport.reliability (Chrome 155) | no | no |
window.maximize() — Additional Windowing Controls (Chrome 155) | no | no |
Canvas srgb-linear colour space (Chrome 155) | no | no |
Permission policy media-playback-while-not-visible (Chrome 155) | no | no |
CSS random() (Chrome 156) | no | no |
CSS scroll-snap-type: pair (Chrome 156) | no | no |
Fenced frames (window.fence) — removal starts in 157 | yes | yes |
rel=compression-dictionary (Chrome 156 updates) | yes | yes |
bot.sannysoft.com
The classic headless-detection test page; what it marks red.
| Google Chrome | Microsoft Edge | |
|---|---|---|
| Checks / failed | 57 / 1 | 57 / 1 |
| Failed checks | WebGL Renderer | WebGL Renderer |
A plain-HTTP URL (http://ip-api.com/json)
Chrome 154 warns before loading insecure HTTP by default — does that reach an automated session?
| Google Chrome | Microsoft Edge | |
|---|---|---|
| Final URL | http://ip-api.com/json/?fields=status | http://ip-api.com/json/?fields=status |
| HTTP status | 200 | 200 |
| Content loaded / warning page first | yes / no | yes / no |
Playwright over the remote connection
Which client features work on this side.
| Google Chrome | Microsoft Edge | |
|---|---|---|
| page.evaluate runs in the page's own world | yes | yes |
| addInitScript visible to page scripts | yes | yes |
| Console events | yes | yes |
| Request interception (page.route) | yes | yes |
| Screenshot | yes | yes |
| yes | yes | |
| Mobile device emulation | yes | yes |
| Tracing | yes | yes |
Rows where the two sides differ are highlighted. IP addresses are replaced with placeholders (203.0.113.x). The probe is compare/probe.mjs in our repository; the raw result is below.
Raw output
{
"ran_at": "2026-10-06T20:09:31.775Z",
"sides": [
{
"label": "Google Chrome",
"engine": "chrome",
"body": {
"headless": false
},
"launch": {
"browser": "chrome",
"resource_class": "linux_headful",
"weight": 2,
"launch_ms": 728,
"connect_ms": 270,
"example_ms": 5463,
"peet_ms": 1363
},
"network": {
"http_version": "h2",
"ja4": "t13d1517h2_8daaf6152771_cb7bf5808d99",
"ja3_hash": "534a3aac02ce995cde620f05ac154405",
"peetprint_hash": "fc97c1cdfb1409c9a9326c1b726d1dee",
"ciphers": 16,
"extensions": 19,
"akamai_h2": "1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p",
"akamai_h2_hash": "52d84b11737d980aef856699f885ca86",
"header_order": [
"method",
"authority",
"scheme",
"path",
"sec-ch-ua",
"sec-ch-ua-mobile",
"sec-ch-ua-platform",
"upgrade-insecure-requests",
"user-agent",
"accept",
"sec-fetch-site",
"sec-fetch-mode"
]
},
"page": {
"user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36",
"platform": "Linux x86_64",
"vendor": "Google Inc.",
"languages": [
"en-US",
"en"
],
"hardware_concurrency": 24,
"device_memory": 32,
"max_touch_points": 0,
"webdriver": false,
"plugins": 5,
"pdf_viewer": true,
"ua_data": {
"brands": [
{
"brand": "Chromium",
"version": "154"
},
{
"brand": "Google Chrome",
"version": "154"
},
{
"brand": "Not A(Brand",
"version": "99"
}
],
"mobile": false,
"platform": "Linux",
"architecture": "x86",
"bitness": "64",
"formFactors": [
"Desktop"
],
"fullVersionList": [
{
"brand": "Chromium",
"version": "154.0.8037.97"
},
{
"brand": "Google Chrome",
"version": "154.0.8037.97"
},
{
"brand": "Not A(Brand",
"version": "99.0.0.0"
}
],
"model": "",
"platformVersion": "",
"uaFullVersion": "154.0.8037.97",
"wow64": false
},
"screen": "1280x720x1280x720x24",
"window": {
"outer": "1288x805",
"inner": "1280x720",
"dpr": 1
},
"timezone": "UTC",
"locale": "en-US",
"webgl": {
"vendor": "Google Inc. (Google)",
"renderer": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)",
"version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
},
"canvas_hash": "f5a94624",
"webgpu": true,
"chrome_object": true,
"chrome_runtime": false,
"notification_permission": "default",
"notification_query": "prompt",
"has_focus": true,
"connection_api": true,
"stack_read_by_debugger": false,
"features": {
"iterator_includes": true,
"iterator_join": true,
"iterator_zip": true,
"fontface_width": true,
"css_text_decoration_inset": false,
"css_scroll_axis_lock": false,
"websocket_options_bag": null,
"camera_element": true,
"topics_api": true,
"protected_audience": true,
"shared_storage": false,
"attribution_reporting": false,
"request_storage_access_for": false,
"webhid": true,
"private_aggregation": false,
"css_margin_trim": false,
"css_text_decoration_skip_spaces": false,
"css_corner_shorthand": false,
"css_symbols": false,
"stream_append_html": false,
"webtransport_reliability": false,
"window_maximize": false,
"canvas_srgb_linear": false,
"policy_media_playback_while_not_visible": false,
"css_random": false,
"css_scroll_snap_pair": false,
"fenced_frames": true,
"compression_dictionary": true
}
},
"page_main_world": null,
"sannysoft": {
"checks": 57,
"failed": 1,
"failed_names": [
"WebGL Renderer"
],
"passed": 30
},
"plain_http": {
"final_url": "http://ip-api.com/json/?fields=status",
"status": 200,
"title": "",
"loaded": true,
"warning_page": false,
"page_text": "{\"status\":\"success\"}"
},
"playwright": {
"evaluate_in_main_world": true,
"console_events": true,
"init_script": true,
"route": true,
"screenshot": true,
"pdf": true,
"mobile_emulation": true,
"tracing": true
},
"browser_version": "154.0.8037.97"
},
{
"label": "Microsoft Edge",
"engine": "edge",
"body": {
"headless": false
},
"launch": {
"browser": "edge",
"resource_class": "linux_headful",
"weight": 2,
"launch_ms": 613,
"connect_ms": 63,
"example_ms": 411,
"peet_ms": 1644
},
"network": {
"http_version": "h2",
"ja4": "t13d1516h2_8daaf6152771_806a8c22fdea",
"ja3_hash": "7b846403a2362a1618a29e1eea96ba9b",
"peetprint_hash": "8f568b2a409b82d0ec24cb84bf3bc3fc",
"ciphers": 16,
"extensions": 18,
"akamai_h2": "1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p",
"akamai_h2_hash": "52d84b11737d980aef856699f885ca86",
"header_order": [
"method",
"authority",
"scheme",
"path",
"sec-ch-ua",
"sec-ch-ua-mobile",
"sec-ch-ua-platform",
"upgrade-insecure-requests",
"user-agent",
"accept",
"sec-fetch-site",
"sec-fetch-mode"
]
},
"page": {
"user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36 Edg/154.0.0.0",
"platform": "Linux x86_64",
"vendor": "Google Inc.",
"languages": [
"en-US",
"en"
],
"hardware_concurrency": 12,
"device_memory": 32,
"max_touch_points": 0,
"webdriver": false,
"plugins": 5,
"pdf_viewer": true,
"ua_data": {
"brands": [
{
"brand": "Chromium",
"version": "154"
},
{
"brand": "Microsoft Edge",
"version": "154"
},
{
"brand": "Not A(Brand",
"version": "99"
}
],
"mobile": false,
"platform": "Linux",
"architecture": "x86",
"bitness": "64",
"formFactors": [
"Desktop"
],
"fullVersionList": [
{
"brand": "Chromium",
"version": "154.0.8037.98"
},
{
"brand": "Microsoft Edge",
"version": "154.0.4258.62"
},
{
"brand": "Not A(Brand",
"version": "99.0.0.0"
}
],
"model": "",
"platformVersion": "",
"uaFullVersion": "154.0.4258.62",
"wow64": false
},
"screen": "1280x720x1280x720x24",
"window": {
"outer": "1288x805",
"inner": "1280x720",
"dpr": 1
},
"timezone": "UTC",
"locale": "en-US",
"webgl": {
"vendor": "Google Inc. (Google)",
"renderer": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)",
"version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
},
"canvas_hash": "f5a94624",
"webgpu": true,
"chrome_object": true,
"chrome_runtime": false,
"notification_permission": "default",
"notification_query": "prompt",
"has_focus": true,
"connection_api": true,
"stack_read_by_debugger": false,
"features": {
"iterator_includes": true,
"iterator_join": true,
"iterator_zip": true,
"fontface_width": true,
"css_text_decoration_inset": false,
"css_scroll_axis_lock": false,
"websocket_options_bag": null,
"camera_element": true,
"topics_api": true,
"protected_audience": true,
"shared_storage": false,
"attribution_reporting": false,
"request_storage_access_for": false,
"webhid": true,
"private_aggregation": false,
"css_margin_trim": false,
"css_text_decoration_skip_spaces": false,
"css_corner_shorthand": false,
"css_symbols": false,
"stream_append_html": false,
"webtransport_reliability": false,
"window_maximize": false,
"canvas_srgb_linear": false,
"policy_media_playback_while_not_visible": false,
"css_random": false,
"css_scroll_snap_pair": false,
"fenced_frames": true,
"compression_dictionary": true
}
},
"page_main_world": null,
"sannysoft": {
"checks": 57,
"failed": 1,
"failed_names": [
"WebGL Renderer"
],
"passed": 30
},
"plain_http": {
"final_url": "http://ip-api.com/json/?fields=status",
"status": 200,
"title": "",
"loaded": true,
"warning_page": false,
"page_text": "{\"status\":\"success\"}"
},
"playwright": {
"evaluate_in_main_world": true,
"console_events": true,
"init_script": true,
"route": true,
"screenshot": true,
"pdf": true,
"mobile_emulation": true,
"tracing": true
},
"browser_version": "154.0.4258.62"
}
]
}Bottom line
For a page, Chrome and Edge are the same machine wearing two badges: Edg/ in the user agent, Microsoft Edge in the client hints, and one TLS extension. Everything an anti-bot system reads beyond that — HTTP/2, header order, canvas, WebGL, feature set — is byte-for-byte Chromium 154.
That makes Edge a safe, cheap second identity when a site cares which badge it sees, and a pointless one when it doesn't.