Getting Started
Installation
Install the Python package and the Chromium browser:
pip install brow-cliplaywright install chromiumVerify the installation:
brow --helpConfiguration
brow reads a small set of environment variables:
| Variable | Default | Description |
|---|---|---|
BROW_HOME | ~/.brow | Data directory (profiles, states, screenshots) |
BROW_PORT | 19987 | Daemon HTTP port |
BROW_MAX_SESSIONS | 10 | Maximum concurrent browser sessions |
Your first session
Headless (default)
brow session new # → 1brow navigate -s 1 "https://example.com"brow snapshot -s 1brow session delete 1Headed (visible browser)
Add --headed to see the Chromium window. Useful for debugging and for sites that block headless browsers:
brow session new --headedbrow navigate -s 1 "https://example.com"brow session delete 1The daemon
brow runs a local FastAPI daemon on port 19987. It starts automatically on the first command that needs it — you never have to start it manually.
brow daemon status # check if runningbrow daemon stop # stop itbrow daemon start --wait # start and block until readyThe daemon survives individual CLI invocations. Sessions you create persist until you delete them or stop the daemon.
Selectors
brow uses Playwright’s selector syntax. The most useful forms:
| Selector | Example |
|---|---|
| CSS | #submit, button.primary, input[type="email"] |
| Text | text=Sign In |
| Role | role=button[name="Save"] |
| Ref (from snapshot) | --ref 15 |
The snapshot command annotates interactive elements with a numeric ref. You can use --ref N instead of a selector for any click/fill/select command.
Persistent profiles
Log in once, reuse forever. See the Persistent Login tutorial for a complete walkthrough.