Skip to main content

Breakproof — merge without fear.

Your PR deleted an endpoint someone still calls. Breakproof tells you before your users do. No OpenAPI spec, no config novel, no noise. Removed contracts fail. Everything else passes.

pipx install breakproof
breakproof scan ./app --out base.json
breakproof diff --base base.json --head-dir ./pr-branch
# verdict=fail, exit 1, and a Markdown receipt of exactly what vanished

Install

pipx install breakproof   # CLI, isolated. The good default.
pip install breakproof    # library + CLI in your venv.
uvx breakproof --help     # no install at all, just vibes.

Python 3.10+. Zero dependencies. No network, no telemetry, no account. It works on a plane.

CLI

# Freeze a directory into a contract
breakproof scan ./app --out contract.json
breakproof scan ./app --service payments --out contract.json

# Diff two frozen contracts
breakproof diff --base base.json --head head.json

# Diff two directories directly (the 10-second demo)
breakproof diff --base-dir ./main --head-dir ./pr

# Save the receipts instead of printing them
breakproof diff --base base.json --head head.json \
  --out-gate gate.json --markdown gate.md --radar-markdown radar.md

Exit codes: 0 pass, 1 fail (something vanished), 2 you invoked it wrong.

Contract JSON looks like this. You can hand-write it, generate it, or freeze it in CI — Breakproof doesn't care where it came from:

{
  "endpoints": [
    {"method": "GET", "path": "/users", "protocol": "http",
     "service": "api", "handler": "", "file": "app.py", "line": 12}
  ],
  "edges": []
}

Library (yes, it's importable)

Same gate your CI runs, inside your own Python:

from breakproof.extract import scan_path
from breakproof.prgate import build_gate, render_gate_markdown

base = scan_path("./main")
head = scan_path("./pr")
gate = build_gate(base, head, base_ref="main", head_ref="pr")

print(gate["verdict"])  # "pass" | "fail"
print(render_gate_markdown(gate))  # paste it into a PR comment

Lower level, if you already have contracts:

from breakproof.radar import build_api_diff

diff = build_api_diff(base, head)
print(diff["summary"])  # {"removed": 1, "added": 0, ..., "breaking": 1}

CI

- uses: auditscan-sh/breakproof@v1
  with:
    base-dir: ./base
    head-dir: .

Posts the verdict to the run summary. Set fail-on-breaking: "false" for advisory mode (comments, never red).

Why not a spec diff?

Spec tools need an openapi.yaml you have to write and keep honest, then flag everything including stuff nobody calls. Breakproof reads your code, freezes what it serves, and fails only on removals — plus new CVEs or secret sites if you hand it those lists as JSON. Nothing to maintain, nothing to triage, nothing to argue about in review.

Honest limits

v0.1 recognizes common Flask, FastAPI, Express, Fiber, Go net/http, and Gin route patterns. Anything exotic reports zero endpoints instead of inventing some — run breakproof scan and eyeball the count before you gate on it. Standalone caller lists read none observed; pair it with a scanner that knows your consumers to name names.

Safety

Read-only by design. It never deletes, moves, edits, or executes your code — it reads the directories you point it at and writes exactly the files you name with --out / --markdown. Symlinks skipped, files over 1 MB skipped, scans cap at 50k files / 20k endpoints.

License

MIT. Break things responsibly.

Built by AuditScan.

Metadata

Release files for breakproof 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for breakproof 0.1.1
File Size Uploaded
breakproof-0.1.1.tar.gz 15.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for breakproof 0.1.1
File Interpreter ABI Platform
breakproof-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 30.0 kB

Release files / breakproof-0.1.1.tar.gz

Download URL breakproof-0.1.1.tar.gz
Size 15.5 kB
Tags Source
SHA-256 checksum
How to use checksums
03040360b43622bda27a2cf26e7dc9c388c4a067390ae9640a1474c6ce79709c
BLAKE2b-256 checksum
How to use checksums
a44bf12d832fc06d2fe63a6080475466425f24f25c560a48236703f2766a732d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release files / breakproof-0.1.1-py3-none-any.whl

Download URL breakproof-0.1.1-py3-none-any.whl
Size 14.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7242a36bb59b37a89cfc0e272c8cf3f5eb30da4a559b536aebc3cb6089840c1e
BLAKE2b-256 checksum
How to use checksums
b035a1f2d3ed1a151541fb31d0013540928313944490d8af7c5341f41fa68451
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page