[Compare](https://cdpfleet.com/docs/compare) / versions

# Brave beta vs stable

Brave's beta channel next to stable on the fleet. Right now the beta is the older engine: Brave 1.100 beta is on Chromium 156, while 1.99 stable already moved to Chromium 157. TLS and HTTP/2 are identical, and five web APIs differ.

[Brave](https://cdpfleet.com/docs/browsers/brave)

On the fleet, [Brave](https://cdpfleet.com/docs/browsers/brave) runs as `stable` (1.99.55) and `beta` (1.100.44); there are no pinned versions. You'd expect the beta to be ahead, but today it is a major behind: stable 1.99.55 moved to **Chromium 157.0.8103.39** ([Brave 1.99 post](https://cdpfleet.com/docs/updates/brave-1-99)), while beta 1.100.44 still runs **Chromium 156.0.8078.74**, measured the same night. Brave doesn't expose its own version number to pages, so the 1.99/1.100 numbers come from our catalog; everything else below was measured from inside a page and on the wire. How Brave differs from Chrome and Edge is covered in [Chrome vs Brave](https://cdpfleet.com/docs/compare/chrome-vs-brave) and [Edge vs Brave](https://cdpfleet.com/docs/compare/edge-vs-brave).

## What differs, measured on the fleet

The rows highlighted in the table below. Every one of them follows from the Chromium base, not from Brave itself:

-   **Only on stable (Chromium 157):** CSS `text-decoration-inset`, `Element.prototype.streamAppendHTML`, `WebTransport.reliability` and the canvas `srgb-linear` colour space. These are the same four that Chrome 157 added ([Chrome 157 post](https://cdpfleet.com/docs/updates/chrome-157)).
-   **Only on beta (Chromium 156):** Protected Audience (`navigator.joinAdInterestGroup`). Chromium 157 removed it, so stable no longer has it.
-   **Present in both:** the Chromium 156 features (CSS `random()`, `scroll-snap-type: pair`, `rel=compression-dictionary`) and the 155 ones (`margin-trim`, `symbols()`, the `media-playback-while-not-visible` policy).
-   **Absent in both:** the Topics API, fenced frames, Shared Storage, Attribution Reporting, Private Aggregation, `requestStorageAccessFor` and `navigator.connection`.

## What a site sees

|  | Brave beta (1.100.44) | Brave stable (1.99.55) |
| --- | --- | --- |
| User agent | `Chrome/156.0.0.0 Safari/537.36`: no Brave token. | `Chrome/157.0.0.0 Safari/537.36`. |
| Client hints | Brands `Not:A-Brand 8`, `Chromium 156`, `Brave 156`; full versions reduced to `156.0.0.0`. | Brands `Not-A.Brand 99`, `Brave 157`, `Chromium 157`: a different placeholder brand, and Brave listed before Chromium. Full versions `157.0.0.0`. |
| TLS and HTTP/2 | JA4 `t13d1516h2_8daaf6152771_806a8c22fdea`, 16 ciphers / 18 extensions, the same peetprint, HTTP/2 SETTINGS and header order (with `sec-gpc`). JA3 differs between connections because of GREASE. | **Identical.** |
| Fingerprint | SwiftShader WebGL, 7 plugins, PDF viewer, `en-US`, UTC, `webdriver` false. | The same. |
| Bot checks | bot.sannysoft.com: 1 of 57 flagged ("WebGL Renderer"). | The same. |
| Plain HTTP | `http://ip-api.com/json` loaded over HTTP (200), no warning page. | The same. Chromium 157's HTTPS-First mode is switched off on every node for Brave. |
| Playwright | Main-world evaluate, console events, init scripts, routing, screenshots, PDF, device emulation and tracing all work. | The same. |

## For scraping and detection

-   **Don't assume the beta is newer.** Today `channel: "beta"` gives you an \*older\* engine than stable. If you want to test a site against the next Chromium, use Chrome's or Edge's beta channel (Chromium 158), not Brave's.
-   **The version is declared three ways, and they must match:** the reduced user agent, `sec-ch-ua` and `navigator.userAgentData`. Between 156 and 157 the placeholder brand and the brand order both change, so a brand list copied from one build looks wrong next to the other build's user agent.
-   **Five feature probes tell the two builds apart.** `CSS.supports("text-decoration-inset", "1px")` returns true only on stable, and `typeof navigator.joinAdInterestGroup === "function"` only on beta. A "Chrome/157" user agent that still has Protected Audience is running a 156 engine.
-   **Nothing changes on the wire.** JA4, peetprint, HTTP/2 and header order are the same on both channels, so network-level scoring treats them alike.
-   **Farbled values are not channel differences.** The canvas hash (`5644a34b` vs `904ca97a`) and `hardwareConcurrency` (36 vs 17) differ in the table below because Brave randomizes them for each session ([case 83](https://cdpfleet.com/docs/cases/brave-farbling)). Two sessions on the same channel would differ just as much. Both sides reported the same screen (1366×768) and 8 GB of memory.

## Configurable — by you, by us, by nobody

| Item | Who controls it | How |
| --- | --- | --- |
| Which build runs | You | `channel: "beta"` for 1.100, nothing for stable (1.99). Brave has no `version` pins on the fleet; the [Brave page](https://cdpfleet.com/docs/browsers/brave) lists the current channels. |
| Which Chromium each channel is on | Brave | Set by Brave's releases. The order can flip while a new release rolls out, as it has today. |
| Shields, `sec-gpc`, farbling | Nobody, per channel | The same on both channels. |
| Fingerprint surface (UA, client hints, screen) | You, per context | `newContext` options, as on stable. |
| CDP access | You | `cdp: true` works on both channels (see the [brave-cdp recipe](https://cdpfleet.com/docs/examples#brave-cdp)). |

## Measured on the fleet (2026-11-08)

One headful launch of each channel on the production fleet, through the same proxy, probed from inside a page and via tls.peet.ws. Timings are a single sample. Canvas, cores and memory are farbled by Brave and change on every session.

### Launch and cost

Single run; timings depend on the proxy and on fleet load.

|  | Brave beta | Brave stable |
| --- | --- | --- |
| Launch body | {"headless":false,"channel":"beta"} | {"headless":false} |
| Threads used | 2 (linux\_headful) | 2 (linux\_headful) |
| Browser version | 156.0.8078.74 | 157.0.8103.39 |
| Launch request → browser ready | 0.5 s | 0.7 s |
| Playwright connect | 0.1 s | 0.0 s |
| Load example.com | 1.5 s | 1.6 s |
| Load tls.peet.ws/api/all | 2.2 s | 1.7 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.

|  | Brave beta | Brave stable |
| --- | --- | --- |
| 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-gpc, sec-fetch-site | 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.

|  | Brave beta | Brave stable |
| --- | --- | --- |
| navigator.userAgent | Mozilla/5.0 (X11; Linux x86\_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 | Mozilla/5.0 (X11; Linux x86\_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/157.0.0.0 Safari/537.36 |
| UA-CH brands | Not:A-Brand 8 · Chromium 156 · Brave 156 | Not-A.Brand 99 · Brave 157 · Chromium 157 |
| UA-CH full version list | Not:A-Brand 8.0.0.0 · Chromium 156.0.0.0 · Brave 156.0.0.0 | Not-A.Brand 99.0.0.0 · Brave 157.0.0.0 · Chromium 157.0.0.0 |
| navigator.platform / vendor | Linux x86\_64 / Google Inc. | Linux x86\_64 / Google Inc. |
| Languages | en-US | en-US |
| Timezone / locale | UTC / en-US | UTC / en-US |
| Screen (w×h×availW×availH×depth) | 1366x768x1366x768x24 | 1366x768x1366x768x24 |
| Window outer / inner / DPR | 1281x722 / 1280x720 / 1 | 1281x723 / 1280x720 / 1 |
| hardwareConcurrency / deviceMemory | 36 / 8 | 17 / 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 | 5644a34b | 904ca97a |
| navigator.webdriver | no | no |
| window.chrome / navigator.connection | yes / no | yes / no |
| Plugins / PDF viewer | 7 / 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.

|  | Brave beta | Brave stable |
| --- | --- | --- |
| `Iterator.prototype.includes` (new in Chrome 154) | yes | yes |
| `FontFace.width` (new in Chrome 154) | yes | yes |
| CSS `text-decoration-inset` (Chrome 157) | no | yes |
| `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`) | no | no |
| Protected Audience (`navigator.joinAdInterestGroup`) | yes | no |
| 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) | no | no |
| CSS `corner` shorthand (listed for Chrome 160) | no | no |
| CSS `symbols()` (Chrome 155) | yes | yes |
| `Element.streamAppendHTML` (Chrome 157) | no | yes |
| `WebTransport.reliability` (on stable from Chrome 157; listed for 158) | no | yes |
| `window.maximize()` — Additional Windowing Controls (Chrome 155) | no | no |
| Canvas `srgb-linear` colour space (on stable from Chrome 157) | no | yes |
| Permission policy `media-playback-while-not-visible` (Chrome 155) | yes | yes |
| CSS `random()` (Chrome 156) | yes | yes |
| CSS `scroll-snap-type: pair` (Chrome 156) | yes | yes |
| Fenced frames (`window.fence`) | no | no |
| `rel=compression-dictionary` (Chrome 156 updates) | yes | yes |

### bot.sannysoft.com

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

|  | Brave beta | Brave stable |
| --- | --- | --- |
| 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?

|  | Brave beta | Brave stable |
| --- | --- | --- |
| 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.

|  | Brave beta | Brave stable |
| --- | --- | --- |
| 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 |
| PDF | 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-11-08T02:05:53.339Z",
  "sides": [
    {
      "label": "Brave beta",
      "engine": "brave",
      "body": {
        "headless": false,
        "channel": "beta"
      },
      "launch": {
        "browser": "brave",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 534,
        "connect_ms": 142,
        "example_ms": 1456,
        "peet_ms": 2207
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1516h2_8daaf6152771_806a8c22fdea",
        "ja3_hash": "bbf9378f3d72016dc812ca0b3a73d882",
        "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/156.0.0.0 Safari/537.36",
        "platform": "Linux x86_64",
        "vendor": "Google Inc.",
        "languages": [
          "en-US"
        ],
        "hardware_concurrency": 36,
        "device_memory": 8,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 7,
        "pdf_viewer": true,
        "ua_data": {
          "brands": [
            {
              "brand": "Not:A-Brand",
              "version": "8"
            },
            {
              "brand": "Chromium",
              "version": "156"
            },
            {
              "brand": "Brave",
              "version": "156"
            }
          ],
          "mobile": false,
          "platform": "Linux",
          "architecture": "x86",
          "bitness": "64",
          "formFactors": [
            "Desktop"
          ],
          "fullVersionList": [
            {
              "brand": "Not:A-Brand",
              "version": "8.0.0.0"
            },
            {
              "brand": "Chromium",
              "version": "156.0.0.0"
            },
            {
              "brand": "Brave",
              "version": "156.0.0.0"
            }
          ],
          "model": "",
          "platformVersion": "",
          "uaFullVersion": "156.0.0.0",
          "wow64": false
        },
        "screen": "1366x768x1366x768x24",
        "window": {
          "outer": "1281x722",
          "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": "5644a34b",
        "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": true,
          "css_scroll_snap_pair": true,
          "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": "156.0.8078.74"
    },
    {
      "label": "Brave stable",
      "engine": "brave",
      "body": {
        "headless": false
      },
      "launch": {
        "browser": "brave",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 691,
        "connect_ms": 19,
        "example_ms": 1600,
        "peet_ms": 1738
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1516h2_8daaf6152771_806a8c22fdea",
        "ja3_hash": "ac06e71a5304e5ff67d65517f739cda7",
        "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/157.0.0.0 Safari/537.36",
        "platform": "Linux x86_64",
        "vendor": "Google Inc.",
        "languages": [
          "en-US"
        ],
        "hardware_concurrency": 17,
        "device_memory": 8,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 7,
        "pdf_viewer": true,
        "ua_data": {
          "brands": [
            {
              "brand": "Not-A.Brand",
              "version": "99"
            },
            {
              "brand": "Brave",
              "version": "157"
            },
            {
              "brand": "Chromium",
              "version": "157"
            }
          ],
          "mobile": false,
          "platform": "Linux",
          "architecture": "x86",
          "bitness": "64",
          "formFactors": [
            "Desktop"
          ],
          "fullVersionList": [
            {
              "brand": "Not-A.Brand",
              "version": "99.0.0.0"
            },
            {
              "brand": "Brave",
              "version": "157.0.0.0"
            },
            {
              "brand": "Chromium",
              "version": "157.0.0.0"
            }
          ],
          "model": "",
          "platformVersion": "",
          "uaFullVersion": "157.0.0.0",
          "wow64": false
        },
        "screen": "1366x768x1366x768x24",
        "window": {
          "outer": "1281x723",
          "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": "904ca97a",
        "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": true,
          "css_scroll_axis_lock": false,
          "websocket_options_bag": null,
          "camera_element": true,
          "topics_api": false,
          "protected_audience": false,
          "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": true,
          "webtransport_reliability": true,
          "window_maximize": false,
          "canvas_srgb_linear": true,
          "policy_media_playback_while_not_visible": true,
          "css_random": true,
          "css_scroll_snap_pair": true,
          "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": "157.0.8103.39"
    }
  ]
}
```

## Bottom line

Brave's beta channel isn't a preview of the next engine right now: 1.100 beta is a Chromium major behind 1.99 stable. Its TLS and HTTP/2 fingerprint is the same as stable's, but it has an older Chromium's API surface. That puts it in a smaller group of visitors without giving you anything new to test.

For scraping, stay on stable. A script that works on one Brave channel needs no change on the other, unless it relies on one of the five APIs listed above.

---
Source: https://cdpfleet.com/docs/compare/brave-beta-vs-stable · Markdown: https://cdpfleet.com/docs/compare/brave-beta-vs-stable.md · All docs for AI tools: https://cdpfleet.com/llms.txt
