{"id":22089849,"url":"https://github.com/speakeasy-api/openapi","last_synced_at":"2026-02-17T23:13:40.232Z","repository":{"id":257811072,"uuid":"845956085","full_name":"speakeasy-api/openapi","owner":"speakeasy-api","description":"A set of packages and tools for working with OpenAPI and Arazzo Specification documents.","archived":false,"fork":false,"pushed_at":"2025-06-30T05:10:58.000Z","size":347,"stargazers_count":19,"open_issues_count":1,"forks_count":2,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-07-22T02:04:00.575Z","etag":null,"topics":["arazzo","golang","openapi"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/speakeasy-api.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-08-22T08:59:55.000Z","updated_at":"2025-06-30T05:10:08.000Z","dependencies_parsed_at":"2024-10-05T06:54:31.658Z","dependency_job_id":"c8850ec7-18de-4890-80ad-0fe4b22901a5","html_url":"https://github.com/speakeasy-api/openapi","commit_stats":null,"previous_names":["speakeasy-api/openapi"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/speakeasy-api/openapi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/speakeasy-api%2Fopenapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/speakeasy-api%2Fopenapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/speakeasy-api%2Fopenapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/speakeasy-api%2Fopenapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/speakeasy-api","download_url":"https://codeload.github.com/speakeasy-api/openapi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/speakeasy-api%2Fopenapi/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266714402,"owners_count":23973112,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["arazzo","golang","openapi"],"created_at":"2024-12-01T02:14:28.791Z","updated_at":"2026-02-14T04:20:46.686Z","avatar_url":"https://github.com/speakeasy-api.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n \u003ca href=\"https://www.speakeasy.com/\" target=\"_blank\"\u003e\n  \u003cimg width=\"1500\" height=\"500\" alt=\"Speakeasy\" src=\"https://github.com/user-attachments/assets/0e56055b-02a3-4476-9130-4be299e5a39c\" /\u003e\n \u003c/a\u003e\n \u003cbr /\u003e\n \u003cbr /\u003e\n  \u003cdiv\u003e\n   \u003ca href=\"https://speakeasy.com/docs/create-client-sdks/\" target=\"_blank\"\u003e\u003cb\u003eDocs Quickstart\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u0026nbsp;//\u0026nbsp;\u0026nbsp;\u003ca href=\"https://go.speakeasy.com/slack\" target=\"_blank\"\u003e\u003cb\u003eJoin us on Slack\u003c/b\u003e\u003c/a\u003e\n  \u003c/div\u003e\n \u003cbr /\u003e\n\n\u003c/div\u003e\n\n\u003chr /\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cp align=\"center\"\u003e\n    \u003cimg  width=\"200px\" alt=\"OpenAPI\" src=\"https://github.com/user-attachments/assets/b9fa9c14-1c6f-4d8b-910f-15e5f962bab6\"\u003e\n\n  \u003c/p\u003e\n  \u003ch1 align=\"center\"\u003e\u003cb\u003eOpenAPI\u003c/b\u003e\u003c/h1\u003e\n  \u003cp align=\"center\"\u003eA set of packages and tools for working with \u003ca href=\"https://www.speakeasy.com/openapi\"\u003eOpenAPI Specification documents\u003c/a\u003e. \u003cbr /\u003e Used directly in Speakeasy's product to power our \u003ca href=\"https://www.speakeasy.com/product/sdk-generation\"\u003eSDK Generation\u003c/a\u003e and \u003ca href=\"https://www.speakeasy.com/product/gram\"\u003eGram\u003c/a\u003e products.\n\n\u003c/p\u003e\n  \u003cp align=\"center\"\u003e\n    \u003c!-- Badges --\u003e\n    \u003c!-- OpenAPI Hub Badge --\u003e\n    \u003ca href=\"https://www.speakeasy.com/openapi\"\u003e\u003cimg alt=\"OpenAPI Hub\" src=\"https://www.speakeasy.com/assets/badges/openapi-hub.svg\" /\u003e\u003c/a\u003e\n    \u003c!-- OpenAPI Support Badge --\u003e\n    \u003ca href=\"https://www.speakeasy.com/openapi\"\u003e\u003cimg alt=\"OpenAPI Support\" src=\"https://img.shields.io/badge/OpenAPI-3.0%20%7C%203.1%20%7C%203.2-85EA2D.svg?style=for-the-badge\u0026logo=openapiinitiative\"\u003e\u003c/a\u003e\n    \u003c!-- Overlay Support Badge --\u003e\n    \u003ca href=\"https://spec.openapis.org/overlay/latest.html\"\u003e\u003cimg alt=\"Overlay Support\" src=\"https://img.shields.io/badge/Overlay-1.0%20%7C%201.1-orange.svg?style=for-the-badge\u0026logo=openapiinitiative\"\u003e\u003c/a\u003e\n    \u003c!-- Swagger Support Badge --\u003e\n    \u003ca href=\"https://spec.openapis.org/oas/v2.0.html\"\u003e\u003cimg alt=\"Swagger Support\" src=\"https://img.shields.io/badge/Swagger-2.0-85EA2D.svg?style=for-the-badge\u0026logo=swagger\"\u003e\u003c/a\u003e\n    \u003c!-- Arazzo Support Badge --\u003e\n    \u003ca href=\"https://www.speakeasy.com/openapi/arazzo\"\u003e\u003cimg alt=\"Arazzo Support\" src=\"https://img.shields.io/badge/Arazzo-1.0-purple.svg?style=for-the-badge\"\u003e\u003c/a\u003e\n    \u003c!-- Line Break --\u003e\u003cbr/\u003e\n    \u003ca href=\"https://pkg.go.dev/github.com/speakeasy-api/openapi\"\u003e\u003cimg alt=\"Go Doc\" src=\"https://img.shields.io/badge/godoc-reference-blue.svg?style=for-the-badge\"\u003e\u003c/a\u003e\n    \u003c!-- Release Version Badge --\u003e\n    \u003ca href=\"https://github.com/speakeasy-api/openapi/releases/latest\"\u003e\u003cimg alt=\"Release\" src=\"https://img.shields.io/github/release/speakeasy-api/openapi.svg?style=for-the-badge\"\u003e\u003c/a\u003e\n    \u003c!-- Go Report Card Badge --\u003e\n    \u003ca href=\"https://goreportcard.com/report/github.com/speakeasy-api/openapi\"\u003e\u003cimg alt=\"Go Report Card\" src=\"https://goreportcard.com/badge/github.com/speakeasy-api/openapi?style=for-the-badge\"\u003e\u003c/a\u003e\n    \u003c!-- Security Badge --\u003e\n    \u003ca href=\"https://github.com/speakeasy-api/openapi/actions/workflows/ci.yaml\"\u003e\u003cimg alt=\"Security\" src=\"https://img.shields.io/badge/security-scanned-green.svg?style=for-the-badge\u0026logo=security\"\u003e\u003c/a\u003e\n    \u003c!-- CI Badge --\u003e\n    \u003ca href=\"https://github.com/speakeasy-api/openapi/actions/workflows/ci.yaml\"\u003e\u003cimg alt=\"GitHub Action: CI\" src=\"https://img.shields.io/github/actions/workflow/status/speakeasy-api/openapi/ci.yaml?style=for-the-badge\"\u003e\u003c/a\u003e\n    \u003c!-- Line Break --\u003e\u003cbr/\u003e\n    \u003c!-- Go Version Badge --\u003e\n    \u003ca href=\"https://golang.org/\"\u003e\u003cimg alt=\"Go Version\" src=\"https://img.shields.io/badge/go-1.24.3+-00ADD8.svg?style=for-the-badge\u0026logo=go\"\u003e\u003c/a\u003e\n    \u003c!-- Platform Support Badge --\u003e\n    \u003ca href=\"https://github.com/speakeasy-api/openapi/releases/latest\"\u003e\u003cimg alt=\"Platform Support\" src=\"https://img.shields.io/badge/platform-linux%20%7C%20macos%20%7C%20windows-lightgrey.svg?style=for-the-badge\"\u003e\u003c/a\u003e\n    \u003c!-- Stars Badge --\u003e\n    \u003ca href=\"https://github.com/speakeasy-api/openapi/stargazers\"\u003e\u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/speakeasy-api/openapi.svg?style=for-the-badge\u0026logo=github\"\u003e\u003c/a\u003e\n    \u003c!-- Line Break --\u003e\u003cbr/\u003e\n    \u003c!-- CLI Tool Badge --\u003e\n    \u003ca href=\"#cli-tool\"\u003e\u003cimg alt=\"CLI Tool\" src=\"https://img.shields.io/badge/CLI-Available-brightgreen.svg?style=for-the-badge\u0026logo=terminal\"\u003e\u003c/a\u003e\n    \u003c!-- Go Install Badge --\u003e\n    \u003ca href=\"#installation\"\u003e\u003cimg alt=\"Go Install\" src=\"https://img.shields.io/badge/go%20install-ready-00ADD8.svg?style=for-the-badge\u0026logo=go\"\u003e\u003c/a\u003e\n    \u003c!-- Line Break --\u003e\u003cbr/\u003e\n    \u003c!-- Built By Speakeasy Badge --\u003e\n    \u003ca href=\"https://speakeasy.com/\"\u003e\u003cimg alt=\"Built by Speakeasy\" src=\"https://www.speakeasy.com/assets/badges/built-by-speakeasy.svg\" /\u003e\u003c/a\u003e\n    \u003c!-- License Badge --\u003e\n    \u003ca href=\"/LICENSE\"\u003e\u003cimg alt=\"Software License\" src=\"https://img.shields.io/badge/license-MIT-blue.svg?style=for-the-badge\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n## Main Packages\n\n### [arazzo](./arazzo)\n\nThe `arazzo` package provides an API for working with Arazzo documents including reading, creating, mutating, walking and validating them.\n\n### [openapi](./openapi)\n\nThe `openapi` package provides an API for working with OpenAPI documents including reading, creating, mutating, walking, validating, upgrading, and linting them. Supports OpenAPI 3.0.x, 3.1.x, and 3.2.x specifications.\n\nThe [`openapi/linter`](./openapi/linter) subpackage provides a configurable linter with 60+ built-in rules covering style, security (OWASP), and semantic validation. Custom rules can be written in TypeScript/JavaScript using the [`@speakeasy-api/openapi-linter-types`](https://www.npmjs.com/package/@speakeasy-api/openapi-linter-types) package.\n\n### [swagger](./swagger)\n\nThe `swagger` package provides an API for working with Swagger 2.0 documents including reading, creating, mutating, walking, validating, and upgrading them to OpenAPI 3.0.\n\n### [overlay](./overlay)\n\nThe `overlay` package provides an API for working with OpenAPI Overlays including applying overlays to specifications, comparing specifications to generate overlays, and validating overlay documents.\n\n## CLI Tool\n\nThis repository also provides a comprehensive CLI tool for working with OpenAPI specifications, Arazzo workflows, and OpenAPI overlays.\n\n### Installation\n\n**Homebrew (macOS/Linux):**\n\n```bash\nbrew install openapi\n```\n\n**Go Install:**\n\n```bash\ngo install github.com/speakeasy-api/openapi/cmd/openapi@latest\n```\n\n**Script Installation:**\n\nLinux/macOS:\n```bash\ncurl -fsSL https://go.speakeasy.com/openapi.sh | bash\n```\n\nWindows (PowerShell):\n```powershell\niwr -useb https://go.speakeasy.com/openapi.ps1 | iex\n```\n\nFor manual installation, upgrade instructions, custom installation options, and troubleshooting, see the [detailed installation guide](./INSTALL.md).\n\n### Usage\n\nThe CLI provides four main command groups:\n\n- **`openapi spec`** - Commands for working with OpenAPI specifications ([documentation](./cmd/openapi/commands/openapi/README.md))\n  - `bootstrap` - Create a new OpenAPI document with best practice examples\n  - `bundle` - Bundle external references into components section\n  - `clean` - Remove unused components and unused top-level tags from an OpenAPI specification\n  - `explore` - Interactively explore an OpenAPI specification in the terminal\n  - `inline` - Inline all references in an OpenAPI specification\n  - `join` - Join multiple OpenAPI documents into a single document\n  - `lint` - Lint an OpenAPI specification for style, security, and best practices\n  - `localize` - Localize an OpenAPI specification by copying external references to a target directory\n  - `optimize` - Optimize an OpenAPI specification by deduplicating inline schemas\n  - `sanitize` - Remove unwanted elements from an OpenAPI specification\n  - `snip` - Remove selected operations from an OpenAPI specification (interactive or CLI)\n  - `upgrade` - Upgrade an OpenAPI specification to the latest supported version\n  - `validate` - Validate an OpenAPI specification document\n\n- **`openapi swagger`** - Commands for working with Swagger 2.0 documents ([documentation](./cmd/openapi/commands/swagger/README.md))\n  - `validate` - Validate a Swagger 2.0 specification document\n  - `upgrade` - Upgrade a Swagger 2.0 specification to OpenAPI 3.0\n\n- **`openapi arazzo`** - Commands for working with Arazzo workflow documents ([documentation](./cmd/openapi/commands/arazzo/README.md))\n  - `validate` - Validate an Arazzo workflow document\n\n- **`openapi overlay`** - Commands for working with OpenAPI overlays ([documentation](./cmd/openapi/commands/overlay/README.md))\n  - `apply` - Apply an overlay to an OpenAPI specification\n  - `compare` - Compare two specifications and generate an overlay describing differences\n  - `validate` - Validate an OpenAPI overlay document\n\n#### Quick Examples\n\n```bash\n# Validate an OpenAPI specification\nopenapi spec validate ./spec.yaml\n\n# Lint for style, security, and best practices\nopenapi spec lint ./spec.yaml\n\n# Lint with custom configuration\nopenapi spec lint --config lint.yaml ./spec.yaml\n\n# Bundle external references into components section\nopenapi spec bundle ./spec.yaml ./bundled-spec.yaml\n\n# Inline all references to create a self-contained document\nopenapi spec inline ./spec.yaml ./inlined-spec.yaml\n\n# Upgrade OpenAPI spec to latest version\nopenapi spec upgrade ./spec.yaml ./upgraded-spec.yaml\n\n# Apply an overlay to a specification\nopenapi overlay apply --overlay overlay.yaml --schema spec.yaml\n\n# Validate an Arazzo workflow document\nopenapi arazzo validate ./workflow.arazzo.yaml\n\n# Validate a Swagger 2.0 document\nopenapi swagger validate ./api.swagger.yaml\n\n# Upgrade Swagger 2.0 to OpenAPI 3.0\nopenapi swagger upgrade ./api.swagger.yaml ./openapi.yaml\n```\n\nFor detailed usage instructions for each command group, see the individual documentation linked above.\n\n## Sub Packages\n\nThis repository also contains a number of sub packages that are used by the main packages to provide the required functionality. The below packages may be moved into their own repository in the future, depending on future needs.\n\n### [json](./json)\n\nThe `json` package provides utilities for converting between JSON and YAML.\n\n### [jsonpointer](./jsonpointer)\n\nThe `jsonpointer` package provides an API for working with [RFC 6901](https://datatracker.ietf.org/doc/html/rfc6901) compliant JSON Pointers. Providing functionality for validating JSON Pointers, and extracting the target of a JSON Pointer for various Go types and structures.\n\n### [jsonschema](./jsonschema)\n\nThe `jsonschema` package provides various models for working with the different JSON Schema dialects.\n\n### [sequencedmap](./sequencedmap)\n\nThe `sequencedmap` package provides a map implementation that maintains the order of keys as they are added.\n\n## Contributing\n\nThis repository is maintained by Speakeasy, but we welcome and encourage contributions from the community to help improve its capabilities and stability.\n\n### How to Contribute\n\n1. **Discussions**: Have a feature request or want to discuss the roadmap? Use [GitHub Discussions](https://github.com/speakeasy-api/openapi/discussions) to share your ideas and engage with the community.\n\n2. **Issues**: Found a bug or technical issue? Open a [GitHub Issue](https://github.com/speakeasy-api/openapi/issues) to report it with details about the problem.\n\n3. **Pull Requests**: We welcome pull requests! If you'd like to contribute code:\n   - Fork the repository\n   - Create a new branch for your feature/fix\n   - Submit a PR with a clear description of the changes and any related issues\n\n4. **Feedback**: Share your experience using the packages or suggest improvements.\n\n**Getting Started**: Look for items tagged with \"good first issue\" in both [Discussions](https://github.com/speakeasy-api/openapi/discussions) and [Issues](https://github.com/speakeasy-api/openapi/issues) if you want to pick up something to work on.\n\nAll contributions, whether they're feature requests, bug reports, or code changes, help make this project better for everyone.\n\nPlease ensure your contributions adhere to our coding standards and include appropriate tests where applicable.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspeakeasy-api%2Fopenapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspeakeasy-api%2Fopenapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspeakeasy-api%2Fopenapi/lists"}