cdpfleet Docs GitHub Dashboard

Compare / browsers

Chrome vs Brave

The same Chromium 155 underneath, two very different faces: Brave calls itself Chrome in the user agent but Brave in the client hints, randomises cores, screen and canvas, sends Sec-GPC, drops a TLS extension and switches off Google's Topics and Fenced Frames.

Google Chrome Brave

Brave and Chrome on the fleet are the same Chromium release — 155.0.8059.39 against .40, measured the same morning. What separates them is everything Brave adds on top: Shields (ad and tracker blocking, on by default), fingerprint "farbling", and a privacy stance that shows up in the headers. For a scraper that's a trade-off: fewer requests and a moving fingerprint, but a browser that announces itself as Brave to anyone reading client hints.

As a developer: driving them

Google ChromeBrave
Version on the fleetChrome 155 stable, with beta and dev channels and pinned previous majors.Brave 1.97 on Chromium 155 (the same build week as Chrome), with a beta channel (1.98); no dev channel, no pinned majors.
Playwright client, optionschromium 1.60; channel, version, cdp, live_view, screen_size.chromium 1.60; channel, cdp, live_view, screen_size.
Playwright featuresMain-world evaluate, console events, init scripts, routing, screenshots, PDF, device emulation, tracing — all work (measured).The same list, all working (measured).
Page weightLoads everything the page asks for.Shields (ad and tracker blocking) are on by default, but on a news front page (theguardian.com, two runs each) Brave made 65–70 requests against Chrome's 60–91 — within run-to-run noise. Don't count on traffic savings; block what you don't need with routing (bandwidth diet).
Web platformEverything in Chromium 155, including Google's Topics API, Fenced Frames and navigator.connection.Chromium 155 without the Topics API, Fenced Frames and navigator.connection (measured) — privacy features Brave removes. Code that relies on them behaves differently.

As a scraper: what the site sees

Google ChromeBrave
User agentChrome/155.0.0.0 on Linux.The identical string — Brave doesn't name itself in the user agent.
Client hintsBrands Google Chrome 155, Chromium 155; full version 155.0.8059.39.Brands Brave 155, Chromium 155; full versions reduced to 155.0.0.0. Anything reading Sec-CH-UA sees Brave, not Chrome.
HeadersChromium's order: … accept, sec-fetch-site, sec-fetch-mode …Adds sec-gpc: 1 (Global Privacy Control) before the fetch metadata — a header Chrome never sends.
TLSJA4 t13d1517h2_8daaf6152771_… — 19 extensions.JA4 t13d1516h2_8daaf6152771_… — 18 extensions; same ciphers, different full fingerprint.
HTTP/2Chromium's SETTINGS and WINDOW_UPDATE.Identical (measured).
Fingerprint valuesThe machine's own: 36 cores, a 1280×720 screen, one canvas hash for every site.Farbled: 8 cores, a 1280×800 screen and a different canvas hash — plausible values that change between sessions and sites, so a fingerprint taken today won't match tomorrow's.
Languages, pluginsnavigator.languages en-US, en; 5 plugins.en-US only; 7 plugins.
Bot checksbot.sannysoft.com: only "WebGL Renderer" flagged (SwiftShader on a GPU-less server).The same single flag (measured).

Which to pick

Measured on the fleet (2026-10-09)

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.

Google ChromeBrave
Launch body{"headless":false}{"headless":false}
Threads used2 (linux_headful)2 (linux_headful)
Browser version155.0.8059.39155.0.8059.40
Launch request → browser ready1.2 s1.5 s
Playwright connect0.1 s0.3 s
Load example.com2.9 s0.5 s
Load tls.peet.ws/api/all5.4 s1.5 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 ChromeBrave
HTTP versionh2h2
JA4t13d1517h2_8daaf6152771_cb7bf5808d99t13d1516h2_8daaf6152771_806a8c22fdea
Peetprint hashfc97c1cdfb1409c9a9326c1b726d1dee8f568b2a409b82d0ec24cb84bf3bc3fc
Akamai HTTP/2 fingerprint1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p
Cipher suites / extensions16 / 1916 / 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-modemethod, 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.

Google ChromeBrave
navigator.userAgentMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36
UA-CH brandsGoogle Chrome 155 · Chromium 155 · Not(A:Brand 24Brave 155 · Chromium 155 · Not(A:Brand 24
UA-CH full version listGoogle Chrome 155.0.8059.39 · Chromium 155.0.8059.39 · Not(A:Brand 24.0.0.0Brave 155.0.0.0 · Chromium 155.0.0.0 · Not(A:Brand 24.0.0.0
navigator.platform / vendorLinux x86_64 / Google Inc.Linux x86_64 / Google Inc.
Languagesen-US, enen-US
Timezone / localeUTC / en-USUTC / en-US
Screen (w×h×availW×availH×depth)1280x720x1280x720x241280x800x1280x800x24
Window outer / inner / DPR1288x805 / 1280x720 / 11280x727 / 1280x720 / 1
hardwareConcurrency / deviceMemory36 / 328 / 32
WebGL vendorGoogle Inc. (Google)Google Inc. (Google)
WebGL rendererANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)
WebGL versionWebGL 2.0 (OpenGL ES 3.0 Chromium)WebGL 2.0 (OpenGL ES 3.0 Chromium)
WebGPU (navigator.gpu)yesyes
Canvas hashf5a946242025530b
navigator.webdrivernono
window.chrome / navigator.connectionyes / yesyes / no
Plugins / PDF viewer5 / yes7 / yes
Notification.permission / permissions.querydefault / promptdefault / prompt

Web platform features

Presence probes; a user agent that claims one version while exposing another's features is a detectable inconsistency.

Google ChromeBrave
Iterator.prototype.includes (new in Chrome 154)yesyes
FontFace.width (new in Chrome 154)yesyes
CSS text-decoration-inset (new in Chrome 154)nono
Iterator.prototype.join (Chrome 153)yesyes
Iterator.zip (Chrome 153)yesyes
CSS scroll-axis-lock (Chrome 153)nono
<camera> element (Chrome 153)yesyes
document.requestStorageAccessFor (deprecated in 153)nono
Topics API (document.browsingTopics)yesno
Protected Audience (navigator.joinAdInterestGroup)yesyes
Shared Storage (window.sharedStorage)nono
Attribution Reporting (window.attributionReporting)nono
Private Aggregationnono
WebHID (navigator.hid)yesyes
CSS margin-trim (Chrome 155)yesyes
CSS text-decoration-skip-spaces (Chrome 155)nono
CSS corner shorthand (Chrome 155)nono
CSS symbols() (Chrome 155)yesyes
Element.streamAppendHTML (Chrome 155)nono
WebTransport.reliability (Chrome 155)nono
window.maximize() — Additional Windowing Controls (Chrome 155)nono
Canvas srgb-linear colour space (Chrome 155)nono
Permission policy media-playback-while-not-visible (Chrome 155)yesyes
CSS random() (Chrome 156)nono
CSS scroll-snap-type: pair (Chrome 156)nono
Fenced frames (window.fence) — removal starts in 157yesno
rel=compression-dictionary (Chrome 156 updates)yesyes

bot.sannysoft.com

The classic headless-detection test page; what it marks red.

Google ChromeBrave
Checks / failed57 / 157 / 1
Failed checksWebGL RendererWebGL 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 ChromeBrave
Final URLhttp://ip-api.com/json/?fields=statushttp://ip-api.com/json/?fields=status
HTTP status200200
Content loaded / warning page firstyes / noyes / no

Playwright over the remote connection

Which client features work on this side.

Google ChromeBrave
page.evaluate runs in the page's own worldyesyes
addInitScript visible to page scriptsyesyes
Console eventsyesyes
Request interception (page.route)yesyes
Screenshotyesyes
PDFyesyes
Mobile device emulationyesyes
Tracingyesyes

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-09T01:48:56.848Z",
  "sides": [
    {
      "label": "Google Chrome",
      "engine": "chrome",
      "body": {
        "headless": false
      },
      "launch": {
        "browser": "chrome",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 1240,
        "connect_ms": 132,
        "example_ms": 2891,
        "peet_ms": 5401
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1517h2_8daaf6152771_cb7bf5808d99",
        "ja3_hash": "84b0f69cba23976c531c60f56f17aeea",
        "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/155.0.0.0 Safari/537.36",
        "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": "Google Chrome",
              "version": "155"
            },
            {
              "brand": "Chromium",
              "version": "155"
            },
            {
              "brand": "Not(A:Brand",
              "version": "24"
            }
          ],
          "mobile": false,
          "platform": "Linux",
          "architecture": "x86",
          "bitness": "64",
          "formFactors": [
            "Desktop"
          ],
          "fullVersionList": [
            {
              "brand": "Google Chrome",
              "version": "155.0.8059.39"
            },
            {
              "brand": "Chromium",
              "version": "155.0.8059.39"
            },
            {
              "brand": "Not(A:Brand",
              "version": "24.0.0.0"
            }
          ],
          "model": "",
          "platformVersion": "",
          "uaFullVersion": "155.0.8059.39",
          "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": false,
          "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.8059.39"
    },
    {
      "label": "Brave",
      "engine": "brave",
      "body": {
        "headless": false
      },
      "launch": {
        "browser": "brave",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 1542,
        "connect_ms": 286,
        "example_ms": 504,
        "peet_ms": 1463
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1516h2_8daaf6152771_806a8c22fdea",
        "ja3_hash": "38839c09cb2e2b08b44c991a1b255c5f",
        "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": 8,
        "device_memory": 32,
        "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": "1280x800x1280x800x24",
        "window": {
          "outer": "1280x727",
          "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": "2025530b",
        "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": false,
          "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": 29
      },
      "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

Brave is Chrome's engine with Brave's opinions: the same rendering and Playwright support, but its own name in the client hints, a privacy header, one TLS extension fewer and fingerprint values that refuse to hold still.

Both cost the same thread on the fleet; choose by what the site should believe about its visitor.