Compare / browsers
Edge vs Brave
Two Chromium 155 forks with the same TLS and HTTP/2 fingerprint: Edge names itself in the user agent and reports its real machine; Brave hides in the user agent but not the client hints, farbles cores, memory and screen, and drops Topics and Fenced Frames.
Edge and Brave are the two Chromium forks people reach for when "not Chrome" matters — Edge because it's the second most common desktop browser, Brave for its privacy defaults. On the fleet both run Chromium 155.0.8059.40, measured the same night. Underneath, a server sees the same network fingerprint; the differences are in how each one names itself and how honest it is about the machine it runs on. For each against Google Chrome, see Chrome vs Edge and Chrome vs Brave.
As a developer: driving them
| Microsoft Edge | Brave | |
|---|---|---|
| Version on the fleet | Edge 155.0.4283.45 on Chromium 155.0.8059.40; channel beta (156) and dev (157). | Brave on Chromium 155.0.8059.40; channel beta. No dev channel. |
| Playwright client, options | chromium 1.60; channel, cdp, live_view, screen_size, keep_alive, profile, start_url. | The same list. |
| Playwright features | Main-world evaluate, console events, init scripts, routing, screenshots, PDF, device emulation, tracing — all work (measured). | All the same, all working (measured). |
| Web platform | Chromium 155 including Google's Topics API, Fenced Frames and navigator.connection (measured). | Chromium 155 without Topics, Fenced Frames and navigator.connection (measured) — Brave removes them. |
| Threads | 2 headful, 1 headless. | Same. |
As a scraper: what the site sees
| Microsoft Edge | Brave | |
|---|---|---|
| User agent | … Chrome/155.0.0.0 Safari/537.36 Edg/155.0.0.0 — names itself. | … Chrome/155.0.0.0 Safari/537.36 — the plain Chrome string. |
| Client hints | Brands Microsoft Edge 155, Chromium 155; full versions 155.0.4283.45 and 155.0.8059.40. | Brands Brave 155, Chromium 155; full versions reduced to 155.0.0.0. Hiding in the user agent doesn't help against Sec-CH-UA. |
| Headers | Chromium's order: … accept, sec-fetch-site, sec-fetch-mode … | Adds sec-gpc: 1 (Global Privacy Control) before the fetch metadata. |
| TLS | JA4 t13d1516h2_8daaf6152771_806a8c22fdea — 16 ciphers, 18 extensions. | The same JA4 and the same peetprint (measured). The JA3 hash differs between any two runs (extension order is randomised), so don't compare JA3. |
| HTTP/2 | SETTINGS 1:65536;2:0;4:6291456;6:262144, WINDOW_UPDATE 15663105. | Identical (measured). |
| Machine it reports | The server's own: 36 cores, 32 GB, a 1280×720 screen, one canvas hash. | Farbled: 51 cores, 8 GB, a 1366×768 screen and a different canvas hash — values that change between sessions and sites. |
| Languages, plugins | en-US, en; 5 plugins. | en-US only; 7 plugins. |
| Bot checks | bot.sannysoft.com: only "WebGL Renderer" flagged (SwiftShader on a GPU-less server). | The same single flag (measured). |
Which to pick
- Edge when the site should see a mainstream, consistent browser that isn't Chrome: a real brand in both the user agent and client hints, full version numbers, no extra headers and a machine that stays the same from visit to visit.
- Brave when a fingerprint that won't hold still is worth more than blending in — cross-session device tracking gets new cores, memory, screen and canvas each time.
- Neither differs on the wire: the TLS and HTTP/2 fingerprints are the same, so a block based on JA4 or HTTP/2 settings treats them alike. The difference is everything the page can read.
- Brave's farbling can be implausible: 51 cores is an odd number for a desktop. If a site scores consistency, Edge's honest values may look more normal.
Measured on the fleet (2026-10-14)
One headful launch of each through the same proxy, probed from inside a page and via tls.peet.ws.
Launch and cost
Single run; timings depend on the proxy and on fleet load.
| Microsoft Edge | Brave | |
|---|---|---|
| Launch body | {"headless":false} | {"headless":false} |
| Threads used | 2 (linux_headful) | 2 (linux_headful) |
| Browser version | 155.0.4283.45 | 155.0.8059.40 |
| Launch request → browser ready | 0.8 s | 0.7 s |
| Playwright connect | 0.2 s | 0.1 s |
| Load example.com | 1.7 s | 2.1 s |
| Load tls.peet.ws/api/all | 2.1 s | 1.0 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.
| Microsoft Edge | Brave | |
|---|---|---|
| HTTP version | h2 | h2 |
| JA4 | t13d1516h2_8daaf6152771_806a8c22fdea | t13d1516h2_8daaf6152771_806a8c22fdea |
| Peetprint hash | 8f568b2a409b82d0ec24cb84bf3bc3fc | 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 / 18 | 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-gpc, sec-fetch-site |
What page scripts see
Read with page.evaluate on example.com. Cores and memory are the server's and vary between fleet nodes.
| Microsoft Edge | Brave | |
|---|---|---|
| navigator.userAgent | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36 Edg/155.0.0.0 | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36 |
| UA-CH brands | Microsoft Edge 155 · Chromium 155 · Not(A:Brand 24 | Brave 155 · Chromium 155 · Not(A:Brand 24 |
| UA-CH full version list | Microsoft Edge 155.0.4283.45 · Chromium 155.0.8059.40 · Not(A:Brand 24.0.0.0 | Brave 155.0.0.0 · Chromium 155.0.0.0 · Not(A:Brand 24.0.0.0 |
| navigator.platform / vendor | Linux x86_64 / Google Inc. | Linux x86_64 / Google Inc. |
| Languages | en-US, en | en-US |
| Timezone / locale | UTC / en-US | UTC / en-US |
| Screen (w×h×availW×availH×depth) | 1280x720x1280x720x24 | 1366x768x1366x768x24 |
| Window outer / inner / DPR | 1288x805 / 1280x720 / 1 | 1281x728 / 1280x720 / 1 |
| hardwareConcurrency / deviceMemory | 36 / 32 | 51 / 8 |
| 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 | ef65046d |
| navigator.webdriver | no | no |
| window.chrome / navigator.connection | yes / yes | yes / no |
| Plugins / PDF viewer | 5 / yes | 7 / 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.
| Microsoft Edge | Brave | |
|---|---|---|
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 | no |
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) | yes | yes |
CSS text-decoration-skip-spaces (Chrome 155) | yes | yes |
CSS corner shorthand (Chrome 155) | no | no |
CSS symbols() (Chrome 155) | yes | yes |
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) | yes | yes |
CSS random() (Chrome 156) | no | no |
CSS scroll-snap-type: pair (Chrome 156) | no | no |
Fenced frames (window.fence) — removal starts in 157 | yes | no |
rel=compression-dictionary (Chrome 156 updates) | yes | yes |
bot.sannysoft.com
The classic headless-detection test page; what it marks red.
| Microsoft Edge | Brave | |
|---|---|---|
| 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?
| Microsoft Edge | Brave | |
|---|---|---|
| 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.
| Microsoft Edge | Brave | |
|---|---|---|
| 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-14T01:03:27.779Z",
"sides": [
{
"label": "Microsoft Edge",
"engine": "edge",
"body": {
"headless": false
},
"launch": {
"browser": "edge",
"resource_class": "linux_headful",
"weight": 2,
"launch_ms": 775,
"connect_ms": 168,
"example_ms": 1745,
"peet_ms": 2146
},
"network": {
"http_version": "h2",
"ja4": "t13d1516h2_8daaf6152771_806a8c22fdea",
"ja3_hash": "f709b91e2bb14e39812c5d41586fcb8f",
"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/155.0.0.0 Safari/537.36 Edg/155.0.0.0",
"platform": "Linux x86_64",
"vendor": "Google Inc.",
"languages": [
"en-US",
"en"
],
"hardware_concurrency": 36,
"device_memory": 32,
"max_touch_points": 0,
"webdriver": false,
"plugins": 5,
"pdf_viewer": true,
"ua_data": {
"brands": [
{
"brand": "Microsoft Edge",
"version": "155"
},
{
"brand": "Chromium",
"version": "155"
},
{
"brand": "Not(A:Brand",
"version": "24"
}
],
"mobile": false,
"platform": "Linux",
"architecture": "x86",
"bitness": "64",
"formFactors": [
"Desktop"
],
"fullVersionList": [
{
"brand": "Microsoft Edge",
"version": "155.0.4283.45"
},
{
"brand": "Chromium",
"version": "155.0.8059.40"
},
{
"brand": "Not(A:Brand",
"version": "24.0.0.0"
}
],
"model": "",
"platformVersion": "",
"uaFullVersion": "155.0.4283.45",
"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": true,
"css_text_decoration_skip_spaces": true,
"css_corner_shorthand": false,
"css_symbols": true,
"stream_append_html": false,
"webtransport_reliability": false,
"window_maximize": false,
"canvas_srgb_linear": false,
"policy_media_playback_while_not_visible": true,
"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": "155.0.4283.45"
},
{
"label": "Brave",
"engine": "brave",
"body": {
"headless": false
},
"launch": {
"browser": "brave",
"resource_class": "linux_headful",
"weight": 2,
"launch_ms": 729,
"connect_ms": 147,
"example_ms": 2101,
"peet_ms": 961
},
"network": {
"http_version": "h2",
"ja4": "t13d1516h2_8daaf6152771_806a8c22fdea",
"ja3_hash": "a3b43ebad9f99b892408610b61c00a75",
"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-gpc",
"sec-fetch-site"
]
},
"page": {
"user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36",
"platform": "Linux x86_64",
"vendor": "Google Inc.",
"languages": [
"en-US"
],
"hardware_concurrency": 51,
"device_memory": 8,
"max_touch_points": 0,
"webdriver": false,
"plugins": 7,
"pdf_viewer": true,
"ua_data": {
"brands": [
{
"brand": "Brave",
"version": "155"
},
{
"brand": "Chromium",
"version": "155"
},
{
"brand": "Not(A:Brand",
"version": "24"
}
],
"mobile": false,
"platform": "Linux",
"architecture": "x86",
"bitness": "64",
"formFactors": [
"Desktop"
],
"fullVersionList": [
{
"brand": "Brave",
"version": "155.0.0.0"
},
{
"brand": "Chromium",
"version": "155.0.0.0"
},
{
"brand": "Not(A:Brand",
"version": "24.0.0.0"
}
],
"model": "",
"platformVersion": "",
"uaFullVersion": "155.0.0.0",
"wow64": false
},
"screen": "1366x768x1366x768x24",
"window": {
"outer": "1281x728",
"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": "ef65046d",
"webgpu": true,
"chrome_object": true,
"chrome_runtime": false,
"notification_permission": "default",
"notification_query": "prompt",
"has_focus": true,
"connection_api": false,
"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": false,
"protected_audience": true,
"shared_storage": false,
"attribution_reporting": false,
"request_storage_access_for": false,
"webhid": true,
"private_aggregation": false,
"css_margin_trim": true,
"css_text_decoration_skip_spaces": true,
"css_corner_shorthand": false,
"css_symbols": true,
"stream_append_html": false,
"webtransport_reliability": false,
"window_maximize": false,
"canvas_srgb_linear": false,
"policy_media_playback_while_not_visible": true,
"css_random": false,
"css_scroll_snap_pair": false,
"fenced_frames": false,
"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": "155.0.8059.40"
}
]
}Bottom line
Edge and Brave are the same Chromium 155 on the wire. Edge tells the page the truth about itself and its machine; Brave tells the user agent a white lie, the client hints the truth, and makes up the machine.
Both cost the same thread on the fleet.