cdpfleet Sign up free

cdpfleet / Browsers / Rebrowser

Chromium family · Stealth-patched Chromium

Rebrowser, one socket away.

Chromium launched with Rebrowser's anti-detection patches. Connect with Playwright 1.52 — this browser's server is pinned to 1.52 and newer clients time out on connect. The generated examples already use 1.52. keep_alive isn't available: the 1.52 server can't keep contexts across connections, so a launch with it returns 400. For the same reason start_url isn't offered: the page the server opens can't be handed to your code. page.setContent() never finishes on this browser (its patches replace the isolated world it runs in): use page.goto('data:text/html,…') or page.evaluate(() => document.write(…)) instead.

  • /rebrowser/sessionlaunch endpoint
  • 1.52Playwright client
  • 1thread headless

Why Rebrowser

  • Chromium with Rebrowser's anti-detection patches.
  • Connect with the Playwright 1.52 client — the code generator picks it for you.
  • No keep_alive: the 1.52 server can't keep contexts across connections.

Versions on the fleet now

release1.52.0

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

New majors are announced on /docs/updates.

Launch it

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

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

const KEY = process.env.CDPFLEET_API_KEY;

// 1. Launch the browser
const res = await fetch('https://starter.cdpfleet.com/rebrowser/session', {
  method: 'POST',
  headers: { 'x-api-key': KEY, 'content-type': 'application/json' },
  body: JSON.stringify({
    proxy: 'http://user:[email protected]:8080',
    headless: 'new',
  }),
});
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 chromium.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.
live_viewMake a headless session watchable and controllable from outside.
screen_sizeResolution of the session's own display (headful only).
recordOpt this session out of recording with false.

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