# Configuration

> For the complete documentation index, see [llms.txt](/llms.txt)

Configuration lives in `unotest.config.{js,mjs,ts}` at your project root, auto-discovered by the CLI and MCP server.

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `baseUrl` | `string (URL)` | `—` | Base for relative goto() paths. If unset, scenarios use absolute URLs. |
| `browsers` | `("chromium" / "firefox" / "webkit")[]` | `["chromium"]` | Browser families to run. Single in dev; CI can run all three. |
| `channel` | `"chrome" / "msedge" / "chrome-beta" / null` | `null` | For chromium: use a system browser (zero download) or bundled Chromium (null). |
| `viewport` | `{ width, height }` | `{ 1280, 720 }` | Browser viewport size. |
| `retry.count` | `int 0–10` | `0` | Retries for transient failures. Off in dev; 1+ in CI. |
| `retry.on` | `("transient" / "network" / "crash")[]` | `["transient"]` | Which failure classes retry. Assertion failures never retry. |
| `failureBundle.tier1` | `true (locked)` | `true` | Always on: error + console + semantic DOM snapshot + DSL trace. |
| `failureBundle.tier2` | `boolean` | `true` | Screenshots (viewport + element-focused). |
| `failureBundle.tier3` | `{ network, video }` | `{ false, false }` | HAR + video. Not wired yet — leave off. |
| `failureBundle.retention` | `{ runs, days }` | `{ 20, 7 }` | Keep N recent runs; delete older than D days. |
| `failureBundle.storageDir` | `string` | `.unotest/failures` | Where failure bundles are written. |
| `dialogPolicy` | `"accept" / "dismiss" / "manual"` | `"accept"` | How native dialogs (alert/confirm) are handled. |
| `storageState` | `string (path)` | `—` | Playwright storageState.json for cached login. |
| `defaultTimeoutMs` | `int` | `3000` | Action / locator-resolution timeout. Override per call. |
| `defaultNavigationTimeoutMs` | `int` | `15000` | Navigation timeout (goto/reload/waitForUrl). |
| `testDir` | `string` | `unotest/e2e` | Scenario directory. |
| `helpersDir` | `string` | `unotest/e2e/_helpers` | Helper functions directory. |
| `sandbox.shellCwd` | `string` | `cwd` | Working directory for shell(). |
| `sandbox.database` | `string (URL)` | `—` | Connection string for dbQuery/dbExec (postgres://, mysql://, sqlite:). |
| `sandbox.apiBaseUrl` | `string (URL)` | `—` | Base URL for apiCall(method, path). |
| `linter.enabled` | `boolean` | `true` | Enable the scenario linter. |
| `mcp.transport` | `"stdio"` | `"stdio"` | MCP server transport (stdio in the current release). |
