Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

Balanov/equal

Developer Tools

Records real HTTP API traffic into a replayable local sandbox and generates an OpenAPI 3.1 document from it.

137
1
Go
MIT
1 day old

What it does

EQUAL sits between your application and a real HTTP API, captures the requests and responses, and turns them into three artifacts: a local replay server, a versionable JSONL cassette, and an OpenAPI 3.1 document. It targets development and CI scenarios where the upstream API is unavailable, rate-limited, billed per call, or unsafe to hit repeatedly. Any language or SDK works as long as the API base URL is configurable.

It ships as a single static Go binary for Linux, macOS, and Windows on amd64 and arm64 (the README states 7.4 MB) and is MIT licensed.

Quick start

Install via the Unix script or PowerShell script in the README, or build from source with Go 1.26+:

go install github.com/Balanov/equal/cmd/equal@latest
equal --version

Record real traffic through the local proxy:

equal record --target https://api.example.com --cassette account.jsonl

The recorder listens on 127.0.0.1:8080; point your app's base URL there and run its normal workflow. Stop with Ctrl+C, then inspect the cassette for secrets:

equal inspect --cassette account.jsonl

Replay offline without the provider:

equal replay --cassette account.jsonl

Export the observed traffic as OpenAPI:

equal export --cassette account.jsonl --out openapi.json --title 'Account API'

A synthetic cassette and its generated OpenAPI document are included as examples. For migration checks, equal verify --target http://127.0.0.1:9000 --cassette account.jsonl replays recorded requests against another implementation and reports status, header, JSON, and binary differences.

Constraints

  • It is a development and testing tool, not a production proxy, and it only proves the traffic it recorded.
  • Built-in redaction is a safeguard, not a privacy guarantee; review every cassette before sharing. The live caller still receives unredacted responses; only the stored copy is redacted.
  • Replay has no live passthrough: unrecorded requests return a 404. --strict enforces the global interaction sequence.
  • Matching uses method, escaped path, canonical query parameters, and request body; JSON key order and whitespace are normalized, but array order matters.
  • The exported OpenAPI is an example-driven, incomplete schema. Unobserved endpoints and fields are absent, JSON array item schemas follow the first observed item, and non-JSON request bodies are not described.
  • verify can trigger real side effects on the candidate, so use disposable test tenants.
  • Existing cassettes require explicit --overwrite; replay has a per-message body limit defaulting to 16 MiB.
  • Release binaries are not code-signed yet; SHA-256 checksums are published with each release.

HotRepo's take

The repository entered HotRepo's new-project list on 2026-11-04, reporting 114 stars gained in a roughly four-hour observation window starting that afternoon, with 114 stars and 0 forks overall. No daily all-language rank was recorded, and there are no Hacker News threads to cross-reference, so the signal is a single short burst on a brand-new repository rather than a sustained trend. The README does back its claims with a bundled end-to-end proof script and published benchmark methodology against Hoverfly, which gives readers a concrete reproduction path instead of performance claims alone.

Written by AI from the project's README, updated . The project's own docs are the source of truth.