External proxy & custom Chrome

Route Chrome through an upstream proxy and use a custom Chrome binary or launch flags.

Route a captured Chrome through an upstream proxy, point bmc at a custom Chrome binary, and pass arbitrary flags straight to Chrome.

When bmc launches Chrome

These options only apply when bmc launches Chrome itself (the default). Chrome's proxy is a launch-time flag — not settable at runtime — so a Chrome you started yourself with bmc attach can't be re-routed or re-flagged after the fact. If you've configured an external proxy or extra flags but bmc is attaching to an existing Chrome, it warns you that it can't apply them.

Route through an external proxy

The upstream proxy is per-device and set in the dashboard, not on the command line. Open Devices → your device → settings, and configure its external proxy.

When that device starts, bmc launches Chrome with --proxy-server pointed at your proxy. Because it's read from live settings:

  • Changing the proxy in the dashboard auto-restarts Chrome with the new route — no need to stop and re-run bmc.
  • Turning the proxy off restarts Chrome direct (no proxy).
[bmc] config changed → relaunching Chrome via proxy proxy.example.com:8080…

Authenticated proxies

Chrome can't carry credentials in --proxy-server, and we don't want it popping an auth dialog. So when your external proxy has a username and password, bmc starts a small local forwarder: Chrome is pointed at 127.0.0.1:<local-port>, and the forwarder relays to your real proxy while injecting the Proxy-Authorization header. No Chrome prompt, credentials never leave your machine.

[bmc] external proxy auth handled by local forwarder — no Chrome prompt.

The forwarder is re-created whenever the proxy config changes, and torn down when capture stops.

Custom Chrome binary

bmc auto-detects Chrome, and falls back to Edge, Brave, or Chromium. To choose a specific binary:

bash
bmc start "Dev" --chrome /path/to/chromium     # explicit binary
CDP_CHROME_BIN=/path/to/chromium bmc start      # via environment variable

Precedence is: --chrome <path> flag, then CDP_CHROME_BIN, then per-OS auto-detect. For named devices, pin the binary at creation time with bmc create "<name>" --chrome <path> or via bmc setup.

Heads up: If no Chrome can be found and you didn't pass one, bmc stops with guidance — pass --chrome <path>, set CDP_CHROME_BIN, or launch Chrome yourself and use bmc attach.

Pass flags straight to Chrome

Everything after a bare -- is forwarded verbatim to Chrome:

bash
bmc start "Dev" -- --lang=en-US --incognito --start-maximized

This is how you set window size, language, incognito mode, or any other Chrome flag. If you pass your own --user-data-dir here, bmc respects it instead of the default (the folder you ran in).

bash
bmc start "Dev" -- --user-data-dir=/tmp/custom-profile

Choosing the Chrome profile

The profile directory defaults to the folder you run bmc in, so it's local and persists per project. Override it three ways (in order of precedence):

  1. A pass-through -- --user-data-dir=… flag.
  2. The CDP_USER_DATA_DIR environment variable.
  3. The default — the current folder.
bash
CDP_USER_DATA_DIR=~/profiles/dev bmc start "Dev"

Next