cdpfleet Sign up free

cdpfleet / Browsers / Camoufox

Firefox family · Based on Firefox source; not affiliated with Mozilla

Camoufox, one socket away.

Camoufox is an anti-detect browser based on Firefox source (not affiliated with Mozilla) that spoofs a complete, consistent fingerprint at the engine level. Set its identity with launch options (below) rather than with client-side newContext settings, which would fight the injected identity. Bring a proxy for real work (without one the free Community proxy is used), and by default the identity is matched to the proxy's location. POST /session is an alias for this browser.

  • /camoufox/sessionlaunch endpoint
  • 1.60Playwright client
  • 2threads (headful default)

Why Camoufox

  • An anti-detect browser based on Firefox source (not affiliated with Mozilla) that builds a complete, consistent fingerprint at the engine level.
  • Set the identity at launch — OS, locale, screen, fonts, WebGL, human-like cursor — and match it to the proxy's location by default. A proxy is required.
  • Pinned previous versions and persistent profiles that keep the same device between sessions.

Versions on the fleet now

stable156.0.1-beta.34pinned152.0.4pinned150

One build per release, updated on the fleet as new versions ship.

Pin a previous major with {"version": "…"} — the reference page lists the ones available now.

New majors are announced on /docs/updates.

Launch it

One HTTPS call to POST /camoufox/session returns a WebSocket URL; connect to it with Playwright's firefox.connect() (client 1.60). A headless session takes 1 thread, a headful one 2.

Camoufox: launch, open a page, print its title
// npm install [email protected]
// Browsers run on cdpfleet, so no `npx playwright install` is needed.
import { firefox } from 'playwright';

const KEY = process.env.CDPFLEET_API_KEY;

// 1. Launch the browser
const res = await fetch('https://starter.cdpfleet.com/camoufox/session', {
  method: 'POST',
  headers: { 'x-api-key': KEY, 'content-type': 'application/json' },
  body: JSON.stringify({
    proxy: 'http://user:[email protected]:8080',
    headless: false,
  }),
});
if (!res.ok) throw new Error(`launch failed: ${res.status} ${await res.text()}`);
const { wsUrl } = await res.json();

// 2. Connect and drive it
const browser = await firefox.connect(wsUrl, { headers: { 'x-api-key': KEY } });
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close(); // ends the session and stops billing

Launch options

OptionWhat it does
proxy_rulesSend specific destination hosts through specific proxies.
inactivity_timeoutEnd the session after this long with no traffic on its WebSocket.
overall_timeoutHard cap on the session's total lifetime, regardless of activity.
memoryGive the session 2, 3 or 4 times your plan's memory; it counts as that many times the threads.
downloadsKeep every file the browser downloads, to fetch after the session.
vpn_tunnelVPN Tunnel: UDP/WebRTC full support — all of the browser's traffic, UDP included, goes through the residential exit.
vpnOwn network (dedicated plans): send all of the browser's traffic through your own VPN instead of a proxy.
headlessRun without a display.
versionPin an older major version.
osOperating system of the generated fingerprint.
localeBrowser locale(s).
geoipMatch timezone, locale, geolocation and WebRTC IP to the proxy's exit IP.
humanizeHuman-like cursor movement.
block_imagesBlock all images.
block_webrtcDisable WebRTC entirely.
block_webglDisable WebGL.
disable_coopDisable Cross-Origin-Opener-Policy.
screenConstrain the fingerprint's screen size.
windowFixed outer window size.
fingerprintUse a complete BrowserForge fingerprint.
configOverride individual fingerprint properties.
fontsExtra font families to expose.
custom_fonts_onlyExpose only the fonts in fonts.
webgl_configForce a specific WebGL vendor/renderer pair.
ff_versionFirefox major version to claim in the fingerprint.
main_world_evalAllow scripts in the page's main world.
screencastStream the page to your code (Playwright page.screencast).
screen_sizeResolution of the session's own display (headful only).
keep_aliveKeep the session when your client disconnects (dedicated threads only).
start_urlOpen this page at launch so the session can be driven in live view with no client connected.
profileRestore a saved browser profile and save it again when the session ends.
recordOpt this session out of recording with false.

Every session also needs a proxy — yours, or the residential proxy.