SpecProof compares your OpenAPI spec with your test suite.
Every documented response gets a verdict, and every verdict links to the test behind it.
total downloads
Three steps, one committed JSON report.
Finds your OpenAPI spec, scans your tests. No configuration.
Matches every documented response to the assertions that check it.
The report is one committed file.
CI fails when it goes stale.
Two things your repo already has. Nothing to annotate, no plugin, no runner integration.
SpecProof reads every operation, along with every response status.
openapi* or swagger* file in the repo.--spec when yours lives somewhere unusual.
SpecProof reads the operations it exercises, along with the statuses it asserts.
.test.ts, .test.tsx,
.test.js, and .test.jsx files.describe / it and
expect is supported.
In a file like tests/tasks.test.ts, two lines do the
work.
describe title that names the operation.Both are matched back to the spec.
describe("POST /tasks", () => { // the operation it("creates a task", async () => { expect(res.status).toBe(201); // the response it proves }); });
Install as a dev dependency and run it from your repo.
$ bun add -d specproof
$ npm install -D specproof
$ pnpm add -D specproof
$ yarn add -D specproof
$ bunx specproof dev
$ npx specproof dev
$ pnpm exec specproof dev
$ yarn specproof dev
Serves the report at localhost:3001. Pass --port to host it somewhere else.
Add .github/workflows/specproof.yml and commit the report next to your code.
name: specproof on: [pull_request] jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 - run: npm install - run: npx specproof generate --out specproof.json --check
One dev dependency, no configuration.