{"id":26136266,"url":"https://github.com/oasdiff/oasdiff","last_synced_at":"2026-06-13T22:01:31.976Z","repository":{"id":37014639,"uuid":"337689065","full_name":"oasdiff/oasdiff","owner":"oasdiff","description":"OpenAPI Diff and Breaking Changes","archived":false,"fork":false,"pushed_at":"2026-06-10T20:06:53.000Z","size":4771,"stargazers_count":1233,"open_issues_count":34,"forks_count":97,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-06-10T22:06:16.227Z","etag":null,"topics":["breaking-changes","changelog","diff","github-actions","go","golang","openapi","openapi-spec","openapi-specification","openapi-validation","openapi-validator","openapi3","openapi30","openapi31","rest-api","side-by-side","swagger"],"latest_commit_sha":null,"homepage":"https://www.oasdiff.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oasdiff.png","metadata":{"files":{"readme":"docs/README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-02-10T10:28:36.000Z","updated_at":"2026-06-10T21:58:15.000Z","dependencies_parsed_at":"2023-09-28T20:46:12.129Z","dependency_job_id":"76cabe23-cf3a-408f-b9a6-7e3e7aee22a1","html_url":"https://github.com/oasdiff/oasdiff","commit_stats":{"total_commits":1156,"total_committers":25,"mean_commits":46.24,"dds":"0.28460207612456745","last_synced_commit":"75b8e87b6f2b09b6b4fd8cebf69059b1ad56e673"},"previous_names":["oasdiff/oasdiff","tufin/oasdiff"],"tags_count":296,"template":false,"template_full_name":null,"purl":"pkg:github/oasdiff/oasdiff","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasdiff%2Foasdiff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasdiff%2Foasdiff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasdiff%2Foasdiff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasdiff%2Foasdiff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oasdiff","download_url":"https://codeload.github.com/oasdiff/oasdiff/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasdiff%2Foasdiff/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34301732,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["breaking-changes","changelog","diff","github-actions","go","golang","openapi","openapi-spec","openapi-specification","openapi-validation","openapi-validator","openapi3","openapi30","openapi31","rest-api","side-by-side","swagger"],"created_at":"2025-03-11T00:57:04.213Z","updated_at":"2026-06-13T22:01:31.964Z","avatar_url":"https://github.com/oasdiff.png","language":"Go","funding_links":[],"categories":["Go","Projects"],"sub_categories":["API Design"],"readme":"\n[![CI](https://github.com/oasdiff/oasdiff/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/oasdiff/oasdiff/actions)\n[![codecov](https://codecov.io/gh/oasdiff/oasdiff/branch/main/graph/badge.svg?token=Y8BM6X77JY)](https://codecov.io/gh/oasdiff/oasdiff)\n[![Go Report Card](https://goreportcard.com/badge/github.com/oasdiff/oasdiff)](https://goreportcard.com/report/github.com/oasdiff/oasdiff)\n[![GoDoc](https://godoc.org/github.com/oasdiff/oasdiff?status.svg)](https://godoc.org/github.com/oasdiff/oasdiff)\n[![Docker Image Version](https://img.shields.io/docker/v/tufin/oasdiff?sort=semver)](https://hub.docker.com/r/tufin/oasdiff/tags)\n\n![oasdiff banner](https://github.com/yonatanmgr/oasdiff/assets/31913495/ac9b154e-72d1-4969-bc3b-f527bbe7751d)\n\n\nCommand-line tool to compare and detect breaking changes in OpenAPI specs.\n\nRun it locally, in CI via the [GitHub Action](https://github.com/oasdiff/oasdiff-action), or use the hosted PR review workflow at [oasdiff.com](https://www.oasdiff.com) to approve or reject each change with a CI commit status.\n\n## Get started in 30 seconds\n\nNo install needed — try it with Docker against two sample specs:\n\n```bash\ndocker run --rm -t tufin/oasdiff changelog \\\n  https://raw.githubusercontent.com/oasdiff/oasdiff/main/data/openapi-test1.yaml \\\n  https://raw.githubusercontent.com/oasdiff/oasdiff/main/data/openapi-test5.yaml\n```\n\nThat prints a human-readable changelog of every significant change between the two specs. Swap `changelog` for `breaking` to see only breaking changes, or `diff` for the full machine-readable diff.\n\n## Installation\n\n### Install with Go\n```bash\ngo install github.com/oasdiff/oasdiff@latest\n```\n\n### Install on macOS with Brew\n```bash\nbrew install oasdiff\n```\n\n### Install on macOS and Linux using curl\n\nThe [install.sh](../install.sh) script downloads the latest oasdiff binary into `/usr/local/bin`:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/oasdiff/oasdiff/main/install.sh | sh\n```\n\nTo pin a specific version, set the `version` env var:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/oasdiff/oasdiff/main/install.sh | version=1.11.7 sh\n```\n\n### Install with asdf\n\nhttps://github.com/oasdiff/asdf-oasdiff\n\n### Download a binary\nPre-built binaries for macOS, Linux, and Windows (both x86_64 and arm64) are on the [releases page](https://github.com/oasdiff/oasdiff/releases/).\n\n## Documentation\n\nGrouped by what you're trying to do. New to oasdiff? Start with **Commands**.\n\n### Commands\nThe top-level subcommands.\n\n- [`diff`](DIFF.md) — full diff between two OpenAPI specs (output: html, json, markdown, markup, text, or yaml — default yaml)\n- [`summary`](DIFF.md) — high-level count of changes between two specs (built on the diff engine; same shared options)\n- [`breaking`](BREAKING-CHANGES.md) — only breaking changes\n- [`changelog`](BREAKING-CHANGES.md) — every significant change, breaking or not, in human-readable form\n- [`flatten`](ALLOF.md) — replace `allOf` schemas with a merged equivalent\n- [`upgrade`](OPENAPI-31.md#converting-a-spec-with-oasdiff-upgrade) — canonicalize an OpenAPI 3.0 spec to the latest 3.x\n- [`validate`](VALIDATE.md) — check a single spec for per-RFC violations (invalid types, missing required fields, bad regex, unresolved `$ref`s)\n- [`checks`](CHECKS.md) — list the rules oasdiff uses to classify changes ([customize them](CUSTOMIZING-CHECKS.md))\n- [`git-diff-driver`](GIT-DIFF-DRIVER.md) — run as a git external diff driver so `git log --patch` renders an OpenAPI changelog inline\n\n### Inputs\nWhere specs come from.\n\n- [Git revisions](GIT-REVISION.md) — compare against a branch, tag, or commit\n- Local files, http/s URLs, YAML or JSON — all handled transparently\n\n### Comparison\nHow oasdiff pairs up base and revision and what counts as a difference.\n\n- [Endpoint matching](MATCHING-ENDPOINTS.md) — handles renamed path parameters and [duplicate endpoints](MATCHING-ENDPOINTS.md#duplicate-endpoints)\n- [Compare APIs split across multiple files](COMPOSED.md) — e.g. an API gateway with one spec per service\n- [Filter endpoints](FILTERING-ENDPOINTS.md) — narrow the diff to a subset of endpoints\n\n### Normalization\nAlign each spec before diffing so equivalent things line up.\n\n- [Merge `allOf` schemas](ALLOF.md)\n- [Merge common (path-level) parameters](COMMON-PARAMS.md)\n- [Path prefix modification](PATH-PREFIX.md) — strip or add a prefix so a moved API still matches\n- [Case-insensitive header comparison](HEADER-DIFF.md) — treat `Content-Type` and `content-type` as the same header\n\n### API lifecycle\nCommunicate intent across versions.\n\n- [Deprecate APIs and parameters](DEPRECATION.md)\n- [API stability levels](STABILITY.md) (draft / alpha / beta / stable)\n\n### Filtering changes\nChoose which kinds of differences are reported.\n\n- [Exclude certain kinds of changes](DIFF.md#excluding-specific-kinds-of-changes) — e.g. ignore description-only edits\n- [Track OpenAPI extensions](DIFF.md#openapi-extensions) — opt in to reporting changes in `x-*` fields\n- [Exclude specific extension names](DIFF.md#excluding-specific-extension-names) — when extensions are tracked, skip ones you don't care about\n\n### Output\nShape and enrich the report.\n\n- [Customize HTML and Markdown changelog templates](CHANGELOG-TEMPLATE.md)\n- [Add OpenAPI-extension attributes to changelog entries](ATTRIBUTES.md)\n- [Source location tracking](SOURCE-LOCATOR.md)\n- [Change fingerprints](FINGERPRINT.md) — stable IDs across commits\n- [Error reporting](ERRORS.md)\n- Localization: en, ru, pt-br, es\n\n### How to run\n- [Docker](DOCKER.md)\n- [Configuration file](CONFIG-FILES.md)\n- [Embed in a Go program](GO.md)\n- [GitHub Action](https://github.com/oasdiff/oasdiff-action) for CI — and [oasdiff.com](https://www.oasdiff.com) for teams, which adds a per-change PR comment with approve/reject and commit-status checks\n\n### Reference\n- [OpenAPI 3.1 support](OPENAPI-31.md) — what's supported\n- [Security: control external `$ref` loading to prevent SSRF](SECURITY.md)\n- [Usage examples](USAGE_EXAMPLES.md) — recipes for common scenarios\n- [Contributing](CONTRIB.md)\n\n## Demo\n\u003cimg src=\"./demo.svg\"\u003e\n\n## Credits\nThis project relies on the excellent implementation of OpenAPI 3.0 and 3.1 for Go: [kin-openapi](https://github.com/getkin/kin-openapi).\n\n## Feedback\nWe welcome your feedback.  \nIf you have ideas for improvement or additional needs around APIs, please [let us know](https://github.com/oasdiff/oasdiff/discussions/new?category=ideas).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foasdiff%2Foasdiff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foasdiff%2Foasdiff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foasdiff%2Foasdiff/lists"}