Skip to content

wacz-validator

Tells you whether a WACZ is actually valid — and why it is not.

A producer-independent validator for WACZ — the format that packages WARC data and its metadata into a ZIP file. Point it at an archive and it reports, rule by rule, what conforms and what does not.

Producer-independent means it makes no assumptions about which tool wrote the archive. It reads the ZIP as the spec describes it, so a WACZ from any recorder is judged the same way.

It does not replay archives — that is ReplayWeb.page’s job. And it does not produce them; when this site mentions BrowserHive, that is a separate project whose output wacz-validator happens to check.

flowchart LR
    tui["@wacz-validator/tui (bin: wacz-validator)"] ==>|"WS / JSON-RPC"| daemon["@wacz-validator/daemon"]
    browser(["browser (planned)"]) -.->|"WS"| daemon
    cli["@wacz-validator/validate-cli (bin: wacz-validator-validate)"] -->|validates with| core["@wacz-validator/core"]
    daemon -->|validates with| core
    tui -->|import| protocol["@wacz-validator/protocol"]
    daemon -->|import| protocol
    protocol -.->|"import type only"| core
    core -->|import| shared["@wacz-validator/contract"]
    protocol -->|import| shared

    classDef shared fill:#fff3cd,stroke:#d4a72c,color:#5c4500;
    classDef future fill:#eeeeee,stroke:#999999,color:#666666;
    class shared,protocol shared;
    class browser future;

The daemon is stateless, which is what lets a future browser frontend speak the same protocol as the terminal UI. See Architecture.

I want to… Page
validate an archive for the first time Quickstart
know what each rule checks Rules
understand --profile Profiles
consume the JSON output JSON report
see real failing archives Corpus
validate an s3:// archive Apple Container stack