Skip to main content
The cheapest thing pikopod does needs no config file, no sandbox and no running process. It diffs two versions of a spec and fails your build on a breaking change.

Sources

Each side is a local file, an http(s) URL, or git:<ref>:<path>, which reads straight from git object storage with no checkout.
The git: prefix is required. origin/main:openapi.yaml without it is treated as a local file path and fails with cannot read watched spec file and exit 2.
Both sides are normalized to pikopod’s internal representation first, so OpenAPI 3.x, Swagger 2.0 and Postman collections all diff, even against each other. A spec split across files works when the source is a file or a git ref; see Multi-file specs.

Exit codes

--fail-on accepts ERR (default), WARN or INFO.

Output formats

--format accepts text (default), json, markdown and githubactions.
A summary line, one block per finding with the check ID and a stable fingerprint, and a trailer on stderr when the gate fails.

What a finding carries

Every finding has a check ID (endpoint-removed, response-required-property-removed, request-type-changed, and so on), a level, the method and path template, a human detail line, and a fingerprint fp_… that identifies the change stably across runs. Findings on the new document also carry a JSON pointer into the source so tools can point at the exact line. Severity is never hand-assigned per check. One function maps the shape of a change onto ERR, WARN or INFO. See Severity.

Examples of what moves the gate

From the same command in CI

Pin the version. CI should not float on latest. The full recipe, including posting a comment and the safe-directory fix for CI containers, is in CI integration.