v1.5.0 — Proxy Providers, Google Bot Detection, Tab Recycling
Camofox Browser v1.5.0
What's New
🔌 Proxy Provider Abstraction
- Proxy configuration is now provider-agnostic. Supports backconnect (sticky session rotation) and simple (single endpoint) strategies via environment variables — no more hardcoded provider assumptions.
- Per-context proxy rotation: new browser contexts get fresh proxy sessions without restarting the entire browser.
- New env vars:
PROXY_STRATEGY,PROXY_PROVIDER,PROXY_BACKCONNECT_HOST,PROXY_BACKCONNECT_PORT,PROXY_COUNTRY,PROXY_STATE.
🛡️ Google Bot Detection Fixes
- WebGL support: Added Mesa OpenGL/EGL libraries + Xvfb virtual display to Docker image. Firefox can now create WebGL contexts — a major bot detection signal that was previously missing.
- Self-healing Google search: blocked tabs are automatically retried with fresh proxy sessions instead of returning errors.
- Degraded mode: browser stays available for non-Google tasks even when all proxy sessions are Google-blocked.
♻️ Tab Recycling
- When the per-session tab limit is reached, the oldest/least-used tab is recycled instead of returning a hard 429 error. Long-running agent sessions no longer hit dead ends.
🚀 Fly.io Horizontal Scaling
- New
lib/fly.jshelpers:fly-replayheader routing for sticky tab sessions across multiple machines, concurrency-based autoscaling support.
🐳 Makefile for Local Builds (Thanks @mihado! #43)
make upauto-detects CPU architecture (x86_64/aarch64), pre-downloads Camoufox + yt-dlp outside the Docker build for faster rebuilds (~30s vs ~3min), and starts the container.make build,make down,make reset,make clean— full lifecycle management.
🐛 Bug Fixes
- YouTube transcript proxy: yt-dlp routed through residential proxy with lazy retry on startup failure.
- YouTube transcript session leak: phantom
__yt_transcript__session cleaned up after use. (Thanks @imtylervo! #39) - Slow page refs: Element references no longer go stale on pages that take a long time to settle. (#36)
- DELETE userId:
/tabs/:idDELETE endpoints now acceptuserIdfrom query string — no longer silently fails when HTTP clients strip request bodies. (Thanks @imtylervo! #39) - Scroll left/right: Horizontal scroll now works correctly instead of silently scrolling vertically. (Thanks @imtylervo! #39)
- Plugin orphan process: Server process is now killed on health check failure during startup instead of leaking. (Thanks @imtylervo! #39)
- Timer leak:
buildRefsinterval is cleared on tab close. (Thanks @imtylervo! #39) - Plugin stringify: Tool parameters are properly JSON-serialized. (#35)
📦 Dependency Bumps
- brace-expansion 1.1.13, qs 6.14.2, picomatch 2.3.2, path-to-regexp 0.1.13
Upgrading
Update your plugin to v1.5.0. If you use a proxy, the old PROXY_HOST/PROXY_PORT env vars still work for simple single-endpoint proxies. For rotating sticky sessions, set PROXY_STRATEGY=backconnect — see README for details.