You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+9Lines changed: 9 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,6 +3,15 @@
3
3
> **Research scope:** Entries in this changelog describe features evaluated in authorized labs and defensive benchmarking programs. Follow the [Legal Disclaimer](DISCLAIMER.md) and [Responsible Use Guidelines](RESPONSIBLE_USE.md). We work with security vendors to investigate any misuse, so report concerns to [support@botbrowser.io](mailto:support@botbrowser.io).
4
4
5
5
6
+
## [2026-05-15]
7
+
### Major
8
+
-**Chromium Core → 148.0.7778.168**: Updated to Chrome 148 stable (148.0.7778.168). Web Platform consistency, rendering accuracy, and security patches stay aligned with upstream Chrome.
9
+
10
+
### Improvements
11
+
-**Per-Context Proxy Stability**: `setBrowserContextFlags` now preserves the context proxy route when a later call only supplies `--proxy-ip`. Existing proxies configured via `Target.createBrowserContext` stay active, and explicit `--proxy-server` overrides still replace the route for new targets.
12
+
-**Canvas Fingerprint Replay**: Full WebGPU canvas recording and kernel-side replay are now production-ready. Canvas operations across 2D, WebGL, and WebGPU are recorded, matched by operation hash at runtime, and returned from profile data rather than live GPU execution.
13
+
14
+
6
15
## [2026-05-09]
7
16
### Major
8
17
-**Chromium Core → 148.0.7778.120**: Updated to Chrome 148 stable (148.0.7778.120). Web Platform consistency, rendering accuracy, and security patches stay aligned with upstream Chrome.
Copy file name to clipboardExpand all lines: CLI_FLAGS.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -106,7 +106,7 @@ This skips per-page IP lookups and speeds up navigation.
106
106
107
107
⚠️ Important:
108
108
- Browser-level proxy: use `--proxy-server` for protected geo-detection across contexts
109
-
-[Per-context proxy](PER_CONTEXT_FINGERPRINT.md) (ENT Tier1): set different proxies via `createBrowserContext({ proxy })`; BotBrowser auto-derives geo info in both cases. Guide: [Per-Context Proxy](https://botbrowser.io/docs/network/per-context-proxy/)
109
+
-[Per-context proxy](PER_CONTEXT_FINGERPRINT.md) (ENT Tier1): set different proxies via `createBrowserContext({ proxyServer })` or `BotBrowser.setBrowserContextFlags` with `--proxy-server`; BotBrowser auto-derives geo info in both cases. Guide: [Per-Context Proxy](https://botbrowser.io/docs/network/per-context-proxy/)
110
110
- Avoid: framework-specific options like `page.authenticate()` that disable BotBrowser's geo-detection, which may leak location information
Copy file name to clipboardExpand all lines: PER_CONTEXT_FINGERPRINT.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -204,7 +204,7 @@ await Promise.all([
204
204
205
205
Pass the proxy via context creation options, and set `--proxy-ip` via CDP to skip IP lookups.
206
206
207
-
> **Note**: Puppeteer uses `proxyServer`, Playwright uses `proxy: { server }`. See [examples/](examples/) for framework-specific syntax.
207
+
> **Note**: Puppeteer uses `proxyServer`, Playwright uses `proxy: { server }`. See [examples/](examples/) for framework-specific syntax.`--proxy-ip` only updates the exit IP for geo-detection. When calling `setBrowserContextFlags` with only `--proxy-ip` (no `--proxy-server`), the proxy routing set via `createBrowserContext({ proxyServer })` is preserved.
208
208
209
209
```javascript
210
210
// Puppeteer example
@@ -339,6 +339,8 @@ See [CLI_FLAGS.md](CLI_FLAGS.md) for the complete flag reference.
339
339
340
340
⚠️ Each context can load a completely different profile (`--bot-profile`), or use `--bot-config-*` flags to override specific settings from the browser's base profile.
341
341
342
+
⚠️ Proxy merge semantics are explicit: `--proxy-server` in `botbrowserFlags` sets or replaces the context proxy route, while `--proxy-ip` only supplies the exit IP for geo-detection. If a context was created with `createBrowserContext({ proxyServer })`, a later `setBrowserContextFlags` call with only `--proxy-ip` preserves that proxy route.
343
+
342
344
## High-Concurrency Tuning
343
345
344
346
When running many per-context fingerprints under one browser instance (for example, 20+ concurrent BrowserContexts), launch with [`--bot-gpu-emulation=priority`](CLI_FLAGS.md#--bot-gpu-emulation) to prioritize GPU and WebGPU command-buffer scheduling across sibling contexts. Default behavior is unchanged; this is an opt-in mode for high-concurrency workloads. See [`--bot-gpu-emulation` modes](docs/guides/deployment/LINUX_GPU_BACKEND.md#gpu-emulation-modes).
Copy file name to clipboardExpand all lines: docs/guides/getting-started/CANVASLAB.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# CanvasLab: Canvas Forensics and Tracking Analysis
2
2
3
-
> Record Canvas 2D, WebGL, and WebGL2 API calls to study tracking techniques and verify fingerprint protection.
3
+
> Record Canvas 2D, WebGL, WebGL2, and WebGPU API calls to study tracking techniques and verify fingerprint protection.
4
4
5
5
---
6
6
@@ -27,15 +27,15 @@ chromium-browser \
27
27
"https://example.com"
28
28
```
29
29
30
-
After the session, `/tmp/canvaslab.jsonl` contains every Canvas 2D, WebGL, and WebGL2 API call the page made. Open it in the [Replay Viewer](https://botswin.github.io/BotBrowser/tools/canvaslab/canvas_replay_viewer.html) to inspect calls interactively.
30
+
After the session, `/tmp/canvaslab.jsonl` contains every Canvas 2D, WebGL, WebGL2, and WebGPU API call the page made. Open it in the [Replay Viewer](https://botswin.github.io/BotBrowser/tools/canvaslab/canvas_replay_viewer.html) to inspect calls interactively.
31
31
32
32
---
33
33
34
34
<aid="how-it-works"></a>
35
35
36
36
## How It Works
37
37
38
-
When `--bot-canvas-record-file` is set, BotBrowser intercepts every Canvas API call at the browser engine level and writes it to a JSONL file. Each line is a JSON object representing one API call, including:
38
+
When `--bot-canvas-record-file` is set, BotBrowser intercepts every Canvas API call at the browser engine level and writes it to a JSONL file. This covers Canvas 2D, WebGL, WebGL2, and WebGPU. Each line is a JSON object representing one API call, including:
When you know the exit IP for each proxy, pass it via `--proxy-ip` to skip the auto-detection step. This eliminates the one-time IP lookup overhead per context:
123
+
When you know the exit IP for each proxy, pass it via `--proxy-ip` to skip the auto-detection step. This eliminates the one-time IP lookup overhead per context. The proxy routing set via `createBrowserContext({ proxyServer })` is preserved:
> **Note**: `--proxy-ip` only updates the exit IP used for geo-detection. Omitting `--proxy-server` in `setBrowserContextFlags` does not clear proxy routing already set via `createBrowserContext({ proxyServer })`. If the context was created without `proxyServer`, pass `--proxy-server` in `botbrowserFlags` to set the per-context proxy route.
| Geo signals identical across contexts | Each context needs a different proxy. Verify proxies resolve to different IPs. |
223
227
|`setBrowserContextFlags` not found | Send CDP commands to the browser-level session, not a page-level session. |
224
228
| Flags not taking effect | Call `setBrowserContextFlags` before creating any page in the context. |
229
+
| Proxy seems lost after calling `setBrowserContextFlags` with `--proxy-ip`| Passing only `--proxy-ip` does not clear the proxy set via `createBrowserContext`. If no proxy was set during context creation, pass `--proxy-server` in `botbrowserFlags`; if the proxy still disappears, ensure you are on a current binary. |
225
230
| Need to change proxy after context creation | Use `BotBrowser.setBrowserContextProxy` (ENT Tier3) for runtime switching. See [Dynamic Proxy Switching](DYNAMIC_PROXY_SWITCHING.md). |
Go to the website you want to study. Let it load normally. CanvasLab will record every Canvas 2D, WebGL, and WebGL2 API call the tracking code makes.
55
+
Go to the website you want to study. Let it load normally. CanvasLab will record every Canvas 2D, WebGL, WebGL2, and WebGPU API call the tracking code makes.
57
56
58
57
**Step 3: Look at what was recorded**
59
-
Close BotBrowser. Your recording is saved to `/tmp/canvaslab.jsonl`. You can now see exactly what Canvasand WebGL calls the tracking code tried to make.
58
+
Close BotBrowser. Your recording is saved to `/tmp/canvaslab.jsonl`. You can now see exactly what Canvas, WebGL, and WebGPU calls the tracking code tried to make.
60
59
61
60
---
62
61
@@ -131,14 +130,11 @@ Close BotBrowser. Your recording is saved to `/tmp/canvaslab.jsonl`. You can now
131
130
132
131
---
133
132
134
-
## What's Next
133
+
## Canvas Fingerprint Replay
135
134
136
-
### Canvas 2D Browser Replay (In Development)
137
-
Load your JSONL recordings back into BotBrowser to test privacy protections:
138
-
-**Verify privacy protection** - replay tracking code's Canvas calls and check if BotBrowser handles them correctly
139
-
-**Cross-platform testing** - check that privacy works the same on Windows, macOS, and Linux
140
-
-**Ongoing validation** - make sure each BotBrowser update keeps privacy protections working
135
+
BotBrowser supports exact canvas fingerprint replay: when a profile contains canvas data for a specific site, BotBrowser returns those recorded values at runtime instead of performing live GPU/CPU rendering. This makes canvas fingerprints deterministic and site-specific.
141
136
137
+
Canvas data is embedded in the profile, not controlled by a CLI flag. To get a profile with replay support for a specific site or antibot system, contact us at [support@botbrowser.io](mailto:support@botbrowser.io). We analyze the target's canvas fingerprinting approach and provide a profile with the corresponding canvas data.
0 commit comments