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

# Camoufox 152 vs Camoufox 150

Both claim Firefox 152 and send the same TLS fingerprint — but on 152 Playwright's evaluate and init scripts run in an isolated world the page can't see, while on 150 they run in the page's own world.

[Camoufox](https://cdpfleet.com/docs/browsers/camoufox)

The fleet runs [Camoufox](https://cdpfleet.com/docs/browsers/camoufox) 152 by default (152.0.4-beta.30 today) and keeps 150 (150.0.2-beta.25) as a pinned version — `{"version": "150"}` — for reproducible personas. Both were launched headless with a Windows persona and `main_world_eval` through the same rotating proxy for this page. Camoufox generates a new persona on every launch — screen, GPU, canvas — and matches locale and timezone to the exit IP, so those differ between any two launches and aren't listed as version changes below. For Camoufox against Mozilla's own build, see [Firefox vs Camoufox](https://cdpfleet.com/docs/compare/firefox-vs-camoufox).

## What changed for your scripts

-   **Playwright's code is hidden from the page on 152.** On 152, a global set with `page.evaluate()` or `context.addInitScript()` was invisible to the page's own scripts; on 150 the page saw both. 152 keeps Playwright in an isolated world, so a site can't find your probe's globals — but an init script meant to change what the page sees (a stub, a polyfill, a patched API) no longer reaches it.
-   **Reaching the page's world on 152:** launch with `"main_world_eval": true` and prefix the script with `"mw:"` — `page.evaluate("mw:window.app.state")`. The values read in both worlds matched on both versions here (timezone, languages, screen, WebGL).
-   **Everything else in our Playwright probe behaved the same:** console events, request routing, screenshots and tracing work on both; `page.pdf()` and mobile emulation are Chromium-only on both.

## What a site sees

|  | Camoufox 152 | Camoufox 150 |
| --- | --- | --- |
| User agent | `Firefox/152.0` (`rv:152.0`), Windows. | **Also `Firefox/152.0`** — the pinned 150 build presents itself as 152 by default. |
| TLS and HTTP/2 | JA4 `t13d1617h2_86a278354501_3cbfd9057e0d`. | Identical JA4 and HTTP/2 fingerprint. |
| Web platform features | The 28 features in our probe are the same on both — none gives the older engine away. | The same. |
| Persona | Generated per launch: here a 2560×1440 screen and an Intel HD Graphics renderer. | Here a 1920×1080 screen and Intel HD Graphics 400 — a different persona, not a different version. |
| Bot checks | bot.sannysoft.com flagged only the "Chrome (New)" test, which expects Chrome. | The same. |

## Which one to use

-   **152 (the default)** if your scripts only read and click: Playwright stays invisible to the page.
-   **Pin 150** while an init script that changes the page's own world is part of your flow, and move it to `mw:` evaluate calls before 150 rotates out.
-   **Either way, keep one persona per identity:** the persona changes on every launch, so use a [persistent profile](https://cdpfleet.com/docs/profiles) when a site must see the same device again.

## Measured on the fleet (2026-10-15)

One headless launch of each with a Windows persona and main\_world\_eval, through the same rotating proxy, probed from inside a page (isolated and main world) and via tls.peet.ws. Locale, timezone and exit IP follow the proxy exit of each launch.

### Launch and cost

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

|  | Camoufox 152 | Camoufox 150 |
| --- | --- | --- |
| Launch body | {"headless":true,"os":"windows","main\_world\_eval":true} | {"headless":true,"os":"windows","main\_world\_eval":true,"version":"150"} |
| Threads used | 1 (linux\_headless) | 1 (linux\_headless) |
| Browser version | 152.0.4-beta.30 | 150.0.2-beta.25 |
| Launch request → browser ready | 1.4 s | 2.9 s |
| Playwright connect | 0.0 s | 0.1 s |
| Load example.com | 7.2 s | 1.9 s |
| Load tls.peet.ws/api/all | 1.0 s | 1.1 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.

|  | Camoufox 152 | Camoufox 150 |
| --- | --- | --- |
| HTTP version | h2 | h2 |
| JA4 | t13d1617h2\_86a278354501\_3cbfd9057e0d | t13d1617h2\_86a278354501\_3cbfd9057e0d |
| Peetprint hash | fd4547eeb41f073156b7bc8125a79a3c | fd4547eeb41f073156b7bc8125a79a3c |
| Akamai HTTP/2 fingerprint | 1:65536;2:0;4:131072;5:16384|12517377|0|m,p,a,s | 1:65536;2:0;4:131072;5:16384|12517377|0|m,p,a,s |
| Cipher suites / extensions | 16 / 17 | 16 / 17 |
| Header order (first 12) | method, path, authority, scheme, user-agent, accept, accept-language, accept-encoding, upgrade-insecure-requests, sec-fetch-dest, sec-fetch-mode, sec-fetch-site | method, path, authority, scheme, user-agent, accept, accept-language, accept-encoding, upgrade-insecure-requests, sec-fetch-dest, sec-fetch-mode, 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.

|  | Camoufox 152 | Camoufox 150 |
| --- | --- | --- |
| navigator.userAgent | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0 | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0 |
| navigator.platform / vendor | Win32 / "" | Win32 / "" |
| Languages | pt-BR, pt | en-US, en |
| Timezone / locale | America/Sao\_Paulo / pt | America/New\_York / en-US |
| Screen (w×h×availW×availH×depth) | 2560x1440x2560x1440x24 | 1920x1080x1920x1032x24 |
| Window outer / inner / DPR | 2121x1191 / 1280x720 / 1 | 1936x1048 / 1280x720 / 1 |
| hardwareConcurrency / deviceMemory | 16 / — | 16 / — |
| WebGL vendor | Google Inc. (Intel) | Google Inc. (Intel) |
| WebGL renderer | ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs\_5\_0 ps\_5\_0), or similar | ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs\_5\_0 ps\_5\_0), or similar |
| WebGL version | WebGL 2.0 | WebGL 2.0 |
| WebGPU (navigator.gpu) | no | no |
| Canvas hash | 2decd802 | f8270103 |
| navigator.webdriver | no | no |
| window.chrome / navigator.connection | no / no | no / no |
| 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.

|  | Camoufox 152 | Camoufox 150 |
| --- | --- | --- |
| `Iterator.prototype.includes` (new in Chrome 154) | no | no |
| `FontFace.width` (new in Chrome 154) | no | no |
| CSS `text-decoration-inset` (Chrome 157) | yes | yes |
| `Iterator.prototype.join` (Chrome 153) | no | no |
| `Iterator.zip` (Chrome 153) | yes | yes |
| CSS `scroll-axis-lock` (Chrome 153) | no | no |
| `<camera>` element (Chrome 153) | no | no |
| `document.requestStorageAccessFor` (deprecated in 153) | no | no |
| Topics API (`document.browsingTopics`) | no | no |
| Protected Audience (`navigator.joinAdInterestGroup`) | no | no |
| Shared Storage (`window.sharedStorage`) | no | no |
| Attribution Reporting (`window.attributionReporting`) | no | no |
| Private Aggregation | no | no |
| WebHID (`navigator.hid`) | no | no |
| CSS `margin-trim` (Chrome 155) | no | no |
| 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 | no |
| `WebTransport.reliability` (on stable from Chrome 157; listed for 158) | yes | yes |
| `window.maximize()` — Additional Windowing Controls (Chrome 155) | no | no |
| Canvas `srgb-linear` colour space (on stable from Chrome 157) | 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`) | no | no |
| `rel=compression-dictionary` (Chrome 156 updates) | no | no |

### bot.sannysoft.com

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

|  | Camoufox 152 | Camoufox 150 |
| --- | --- | --- |
| Checks / failed | 57 / 1 | 57 / 1 |
| Failed checks | Chrome (New) | Chrome (New) |

### A plain-HTTP URL (http://ip-api.com/json)

Chrome 154 warns before loading insecure HTTP by default — does that reach an automated session?

|  | Camoufox 152 | Camoufox 150 |
| --- | --- | --- |
| Final URL | http://ip-api.com/json/?fields=status | Error: page.goto: Navigation to "http://ip-api.com/json/?fields=status" is interrupted by another navigation to "http://ip-api.com/json/?fields=status" |
| HTTP status | 200 | — |
| Content loaded / warning page first | yes / no | — / — |

### Playwright over the remote connection

Which client features work on this side.

|  | Camoufox 152 | Camoufox 150 |
| --- | --- | --- |
| page.evaluate runs in the page's own world | no | yes |
| `main_world_eval` option (`mw:` prefix) | yes | yes |
| addInitScript visible to page scripts | no | yes |
| Console events | yes | yes |
| Request interception (page.route) | yes | yes |
| Screenshot | yes | yes |
| PDF | no — Error: page.pdf: PDF generation is only supported for Headless Chromium | no — Error: page.pdf: PDF generation is only supported for Headless Chromium |
| Mobile device emulation | no — Error: browser.newContext: options.isMobile is not supported in Firefox | no — Error: browser.newContext: options.isMobile is not supported in Firefox |
| 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-15T01:19:44.832Z",
  "sides": [
    {
      "label": "Camoufox 152",
      "engine": "camoufox",
      "body": {
        "headless": true,
        "os": "windows",
        "main_world_eval": true
      },
      "launch": {
        "browser": "camoufox",
        "resource_class": "linux_headless",
        "weight": 1,
        "launch_ms": 1439,
        "connect_ms": 38,
        "example_ms": 7239,
        "peet_ms": 980
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1617h2_86a278354501_3cbfd9057e0d",
        "ja3_hash": "6447ab086255d194909d4013b1a89e87",
        "peetprint_hash": "fd4547eeb41f073156b7bc8125a79a3c",
        "ciphers": 16,
        "extensions": 17,
        "akamai_h2": "1:65536;2:0;4:131072;5:16384|12517377|0|m,p,a,s",
        "akamai_h2_hash": "6ea73faa8fc5aac76bded7bd238f6433",
        "header_order": [
          "method",
          "path",
          "authority",
          "scheme",
          "user-agent",
          "accept",
          "accept-language",
          "accept-encoding",
          "upgrade-insecure-requests",
          "sec-fetch-dest",
          "sec-fetch-mode",
          "sec-fetch-site"
        ]
      },
      "page": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0",
        "platform": "Win32",
        "vendor": "",
        "languages": [
          "pt-BR",
          "pt"
        ],
        "hardware_concurrency": 16,
        "device_memory": null,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 5,
        "pdf_viewer": true,
        "ua_data": null,
        "screen": "2560x1440x2560x1440x24",
        "window": {
          "outer": "2121x1191",
          "inner": "1280x720",
          "dpr": 1
        },
        "timezone": "America/Sao_Paulo",
        "locale": "pt",
        "webgl": {
          "vendor": "Google Inc. (Intel)",
          "renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0), or similar",
          "version": "WebGL 2.0"
        },
        "canvas_hash": "2decd802",
        "webgpu": false,
        "chrome_object": false,
        "chrome_runtime": false,
        "notification_permission": "default",
        "notification_query": "prompt",
        "has_focus": true,
        "connection_api": false,
        "stack_read_by_debugger": false,
        "features": {
          "iterator_includes": false,
          "iterator_join": false,
          "iterator_zip": true,
          "fontface_width": false,
          "css_text_decoration_inset": true,
          "css_scroll_axis_lock": false,
          "websocket_options_bag": null,
          "camera_element": false,
          "topics_api": false,
          "protected_audience": false,
          "shared_storage": false,
          "attribution_reporting": false,
          "request_storage_access_for": false,
          "webhid": false,
          "private_aggregation": false,
          "css_margin_trim": false,
          "css_text_decoration_skip_spaces": false,
          "css_corner_shorthand": false,
          "css_symbols": true,
          "stream_append_html": false,
          "webtransport_reliability": true,
          "window_maximize": false,
          "canvas_srgb_linear": false,
          "policy_media_playback_while_not_visible": false,
          "css_random": false,
          "css_scroll_snap_pair": false,
          "fenced_frames": false,
          "compression_dictionary": false
        }
      },
      "page_main_world": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0",
        "platform": "Win32",
        "vendor": "",
        "languages": [
          "pt-BR",
          "pt"
        ],
        "hardware_concurrency": 16,
        "device_memory": null,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 5,
        "pdf_viewer": true,
        "ua_data": null,
        "screen": "2560x1440x2560x1440x24",
        "window": {
          "outer": "2121x1191",
          "inner": "1280x720",
          "dpr": 1
        },
        "timezone": "America/Sao_Paulo",
        "locale": "pt",
        "webgl": {
          "vendor": "Google Inc. (Intel)",
          "renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0), or similar",
          "version": "WebGL 2.0"
        },
        "canvas_hash": "2decd802",
        "webgpu": false,
        "chrome_object": false,
        "chrome_runtime": false,
        "notification_permission": "default",
        "notification_query": "prompt",
        "has_focus": true,
        "connection_api": false,
        "stack_read_by_debugger": false,
        "features": {
          "iterator_includes": false,
          "iterator_join": false,
          "iterator_zip": true,
          "fontface_width": false,
          "css_text_decoration_inset": true,
          "css_scroll_axis_lock": false,
          "websocket_options_bag": null,
          "camera_element": false,
          "topics_api": false,
          "protected_audience": false,
          "shared_storage": false,
          "attribution_reporting": false,
          "request_storage_access_for": false,
          "webhid": false,
          "private_aggregation": false,
          "css_margin_trim": false,
          "css_text_decoration_skip_spaces": false,
          "css_corner_shorthand": false,
          "css_symbols": true,
          "stream_append_html": false,
          "webtransport_reliability": true,
          "window_maximize": false,
          "canvas_srgb_linear": false,
          "policy_media_playback_while_not_visible": false,
          "css_random": false,
          "css_scroll_snap_pair": false,
          "fenced_frames": false,
          "compression_dictionary": false
        }
      },
      "sannysoft": {
        "checks": 57,
        "failed": 1,
        "failed_names": [
          "Chrome (New)"
        ],
        "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": false,
        "console_events": true,
        "init_script": false,
        "route": true,
        "screenshot": true,
        "pdf": false,
        "pdf_error": "Error: page.pdf: PDF generation is only supported for Headless Chromium",
        "mobile_emulation": false,
        "mobile_emulation_error": "Error: browser.newContext: options.isMobile is not supported in Firefox",
        "tracing": true,
        "main_world_eval_option": true
      },
      "browser_version": "152.0.4-beta.30"
    },
    {
      "label": "Camoufox 150",
      "engine": "camoufox",
      "body": {
        "headless": true,
        "os": "windows",
        "main_world_eval": true,
        "version": "150"
      },
      "launch": {
        "browser": "camoufox",
        "resource_class": "linux_headless",
        "weight": 1,
        "launch_ms": 2941,
        "connect_ms": 103,
        "example_ms": 1932,
        "peet_ms": 1134
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1617h2_86a278354501_3cbfd9057e0d",
        "ja3_hash": "6447ab086255d194909d4013b1a89e87",
        "peetprint_hash": "fd4547eeb41f073156b7bc8125a79a3c",
        "ciphers": 16,
        "extensions": 17,
        "akamai_h2": "1:65536;2:0;4:131072;5:16384|12517377|0|m,p,a,s",
        "akamai_h2_hash": "6ea73faa8fc5aac76bded7bd238f6433",
        "header_order": [
          "method",
          "path",
          "authority",
          "scheme",
          "user-agent",
          "accept",
          "accept-language",
          "accept-encoding",
          "upgrade-insecure-requests",
          "sec-fetch-dest",
          "sec-fetch-mode",
          "sec-fetch-site"
        ]
      },
      "page": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0",
        "platform": "Win32",
        "vendor": "",
        "languages": [
          "en-US",
          "en"
        ],
        "hardware_concurrency": 16,
        "device_memory": null,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 5,
        "pdf_viewer": true,
        "ua_data": null,
        "screen": "1920x1080x1920x1032x24",
        "window": {
          "outer": "1936x1048",
          "inner": "1280x720",
          "dpr": 1
        },
        "timezone": "America/New_York",
        "locale": "en-US",
        "webgl": {
          "vendor": "Google Inc. (Intel)",
          "renderer": "ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0), or similar",
          "version": "WebGL 2.0"
        },
        "canvas_hash": "f8270103",
        "webgpu": false,
        "chrome_object": false,
        "chrome_runtime": false,
        "notification_permission": "default",
        "notification_query": "prompt",
        "has_focus": true,
        "connection_api": false,
        "stack_read_by_debugger": false,
        "features": {
          "iterator_includes": false,
          "iterator_join": false,
          "iterator_zip": true,
          "fontface_width": false,
          "css_text_decoration_inset": true,
          "css_scroll_axis_lock": false,
          "websocket_options_bag": null,
          "camera_element": false,
          "topics_api": false,
          "protected_audience": false,
          "shared_storage": false,
          "attribution_reporting": false,
          "request_storage_access_for": false,
          "webhid": false,
          "private_aggregation": false,
          "css_margin_trim": false,
          "css_text_decoration_skip_spaces": false,
          "css_corner_shorthand": false,
          "css_symbols": true,
          "stream_append_html": false,
          "webtransport_reliability": true,
          "window_maximize": false,
          "canvas_srgb_linear": false,
          "policy_media_playback_while_not_visible": false,
          "css_random": false,
          "css_scroll_snap_pair": false,
          "fenced_frames": false,
          "compression_dictionary": false
        }
      },
      "page_main_world": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0",
        "platform": "Win32",
        "vendor": "",
        "languages": [
          "en-US",
          "en"
        ],
        "hardware_concurrency": 16,
        "device_memory": null,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 5,
        "pdf_viewer": true,
        "ua_data": null,
        "screen": "1920x1080x1920x1032x24",
        "window": {
          "outer": "1936x1048",
          "inner": "1280x720",
          "dpr": 1
        },
        "timezone": "America/New_York",
        "locale": "en-US",
        "webgl": {
          "vendor": "Google Inc. (Intel)",
          "renderer": "ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0), or similar",
          "version": "WebGL 2.0"
        },
        "canvas_hash": "f8270103",
        "webgpu": false,
        "chrome_object": false,
        "chrome_runtime": false,
        "notification_permission": "default",
        "notification_query": "prompt",
        "has_focus": true,
        "connection_api": false,
        "stack_read_by_debugger": false,
        "features": {
          "iterator_includes": false,
          "iterator_join": false,
          "iterator_zip": true,
          "fontface_width": false,
          "css_text_decoration_inset": true,
          "css_scroll_axis_lock": false,
          "websocket_options_bag": null,
          "camera_element": false,
          "topics_api": false,
          "protected_audience": false,
          "shared_storage": false,
          "attribution_reporting": false,
          "request_storage_access_for": false,
          "webhid": false,
          "private_aggregation": false,
          "css_margin_trim": false,
          "css_text_decoration_skip_spaces": false,
          "css_corner_shorthand": false,
          "css_symbols": true,
          "stream_append_html": false,
          "webtransport_reliability": true,
          "window_maximize": false,
          "canvas_srgb_linear": false,
          "policy_media_playback_while_not_visible": false,
          "css_random": false,
          "css_scroll_snap_pair": false,
          "fenced_frames": false,
          "compression_dictionary": false
        }
      },
      "sannysoft": {
        "checks": 57,
        "failed": 1,
        "failed_names": [
          "Chrome (New)"
        ],
        "passed": 30
      },
      "plain_http": {
        "error": "Error: page.goto: Navigation to \"http://ip-api.com/json/?fields=status\" is interrupted by another navigation to \"http://ip-api.com/json/?fields=status\""
      },
      "playwright": {
        "evaluate_in_main_world": true,
        "console_events": true,
        "init_script": true,
        "route": true,
        "screenshot": true,
        "pdf": false,
        "pdf_error": "Error: page.pdf: PDF generation is only supported for Headless Chromium",
        "mobile_emulation": false,
        "mobile_emulation_error": "Error: browser.newContext: options.isMobile is not supported in Firefox",
        "tracing": true,
        "main_world_eval_option": true
      },
      "browser_version": "150.0.2-beta.25"
    }
  ]
}
```

## Bottom line

For scraping, Camoufox 152 and 150 look the same on the wire and claim the same Firefox version; the change that matters is inside Playwright — on 152 your code runs out of the page's sight.

---
Source: https://cdpfleet.com/docs/compare/camoufox-152-vs-150 · Markdown: https://cdpfleet.com/docs/compare/camoufox-152-vs-150.md · All docs for AI tools: https://cdpfleet.com/llms.txt
