Skip to content

2. One normalized BrowserEvent schema

Context

Chrome, Firefox, and Safari store the same conceptual artifacts — history, cookies, downloads — in different schemas, epochs, and file formats. A consumer that had to branch on the source browser for every field would carry that complexity through the entire downstream pipeline.

Decision

Every parser, across every browser and every artifact, emits the same BrowserEvent envelope: timestamp_ns (Unix nanoseconds, UTC), browser, artifact, source, description, and an open attrs map for artifact-specific fields. Timestamp normalization to Unix nanoseconds happens inside the parsers, so the envelope never leaks a browser-specific epoch.

Consequences

Downstream analysis, filtering, and export are browser-agnostic — the same jq pipeline works across Chromium, Firefox, and Safari output. Artifact-specific detail lives in attrs rather than a rigid columnar type, keeping the envelope stable as parsers gain fields. The trade-off is that attrs is loosely typed; consumers read keys defensively.

Status

Accepted.