Configuration reference
| Option | Default | Notes |
|---|---|---|
projectKey | required | Public project key |
ingestUrl | SaaS ingest | Self-hosted: your gateway /v1/ingest |
privacy.mode | strict | strict (privacy on) | permissive (privacy off) (details) |
privacy.allowUnmask | false | Honor data-backstory-unmask in strict mode |
consent.required | false | Capture nothing until Backstory.consent.grant() |
recording.memoryBudgetMB | 24 | In-memory buffer ceiling; auto-lowers to 8 on low-memory devices |
recording.batchMs / batchBytes | 1000 / 65536 | Chunk flush thresholds |
recording.pointerHz | 20 | Pointer sampling rate at HEALTHY |
recording.checkpointMinutes | 5 | Full snapshot interval |
recording.segmentHours | 4 | Segment rollover (1–24) |
network.captureMeta | true | Fetch/XHR/resource and WebSocket lifecycle/frame metadata; bodies and WebSocket message text are never captured by default |
release, environment | — | Attached to every session and filterable in the dashboard |
endUserId | — | Identify at init |
debug | false | Enables the debug state and console diagnostics |
workerUrl | inlined | Serve the Recorder Worker from your origin instead of a Blob URL |
Invalid values fall back to defaults with a single console.warn; init never throws.
Remote configuration from the dashboard (recording on/off, sampling, collectors, canvas, kill switch) is fetched at init and merged over these values; see Recording controls.