{"id":35812075,"url":"https://github.com/jentic/jentic-openapi-tools","last_synced_at":"2026-04-10T09:01:04.341Z","repository":{"id":320001998,"uuid":"1054716167","full_name":"jentic/jentic-openapi-tools","owner":"jentic","description":"Jentic OpenAPI Tools","archived":false,"fork":false,"pushed_at":"2026-04-07T15:50:26.000Z","size":1849,"stargazers_count":9,"open_issues_count":11,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-07T17:31:15.256Z","etag":null,"topics":["bundler","datamodel","openapi","openapi3","openapi31","parser","python","python3","validators"],"latest_commit_sha":null,"homepage":"","language":"Python","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/jentic.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-11T08:28:42.000Z","updated_at":"2026-04-07T15:50:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jentic/jentic-openapi-tools","commit_stats":null,"previous_names":["jentic/jentic-openapi-tools"],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/jentic/jentic-openapi-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fjentic-openapi-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fjentic-openapi-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fjentic-openapi-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fjentic-openapi-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jentic","download_url":"https://codeload.github.com/jentic/jentic-openapi-tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fjentic-openapi-tools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31635969,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bundler","datamodel","openapi","openapi3","openapi31","parser","python","python3","validators"],"created_at":"2026-01-07T15:12:29.571Z","updated_at":"2026-04-10T09:01:04.331Z","avatar_url":"https://github.com/jentic.png","language":"Python","readme":"# Jentic OpenAPI Tools\n\nA comprehensive Python toolkit for parsing, validating, and transforming OpenAPI documents with pluggable backend\narchitecture.\n\n[![Discord](https://img.shields.io/badge/JOIN%20OUR%20DISCORD-COMMUNITY-7289DA?style=plastic\u0026logo=discord\u0026logoColor=white)](https://discord.gg/yrxmDZWMqB)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-3.0-40c463.svg)](https://github.com/jentic/jentic-openapi-tools/blob/HEAD/CODE_OF_CONDUCT.md)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/jentic/jentic-openapi-tools/blob/HEAD/LICENSE)\n[![PyPI version](https://badge.fury.io/py/jentic-openapi-tools.svg)](https://badge.fury.io/py/jentic-openapi-tools)\n[![Python](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)\n\n## Features\n\n- **Pluggable Backend Architecture** - Support for multiple parsing, validation, and transformation strategies via entry\n  points\n- **Type Safety** - Full type hints with comprehensive type checking throughout\n- **Multiple Input Formats** - Accept OpenAPI documents from file URIs, JSON/YAML strings, or Python dictionaries\n- **Flexible Output Types** - Return results as dictionaries, strings, or custom types\n- **Extensible Design** - Easy integration of third-party backends through standard Python entry points\n- **Path Security** - Built-in defense against path traversal attacks\n- **Production Ready** - Comprehensive test coverage and error handling\n\n## Installation\n\nThe recommended way to install is via the meta-package, which includes all packages and backends (parser, validator, transformer, plus the Spectral, Redocly, and SpecLynx backends):\n\n```bash\npip install jentic-openapi-tools\n```\n\nThis also installs the `jentic-openapi-tools` CLI. If you only need specific functionality, you can install individual packages instead:\n\n```bash\npip install jentic-openapi-validator                  # Core validator with default + openapi-spec backends\npip install jentic-openapi-validator-spectral          # Add Spectral backend\npip install jentic-openapi-validator-redocly           # Add Redocly backend\npip install jentic-openapi-parser                      # Parser only\npip install jentic-openapi-transformer[redocly]        # Transformer with Redocly bundler\n```\n\nNote that the CLI and Python API only have access to backends whose packages are installed. Installing the meta-package is the easiest way to get everything working, especially for CI pipelines and AI agents.\n\n**Prerequisites:**\n\n- Python 3.11 or higher\n- Node.js \u003e=20.19.0 and npm (required for Redocly and Spectral backends)\n\n## Quick Start\n\n### Parsing OpenAPI Documents\n\n```python\nfrom jentic.apitools.openapi.parser.core import OpenAPIParser\n\n# Create parser with default backend\nparser = OpenAPIParser()\n\n# Parse from file\ndoc = parser.parse(\"file:///path/to/openapi.yaml\")\nprint(doc[\"info\"][\"title\"])\n\n# Parse from YAML/JSON string\nyaml_doc = \"\"\"\nopenapi: 3.1.0\ninfo:\n  title: My API\n  version: 1.0.0\npaths: {}\n\"\"\"\ndoc = parser.parse(yaml_doc)\n```\n\n### Validating OpenAPI Documents\n\n```python\nfrom jentic.apitools.openapi.validator.core import OpenAPIValidator\n\n# Create validator\nvalidator = OpenAPIValidator()\n\n# Validate from file\nresult = validator.validate(\"file:///path/to/openapi.yaml\")\n\nif result.valid:\n    print(\"Document is valid!\")\nelse:\n    for diagnostic in result.diagnostics:\n        print(f\"Error: {diagnostic.message}\")\n```\n\n### Command-Line Interface\n\nThe `jentic-openapi-validator` package includes the `jentic-openapi-tools` CLI for validating OpenAPI documents directly from the terminal:\n\n```bash\n# Validate a local file\njentic-openapi-tools validate openapi.yaml\n\n# Use a specific backend and get JSON output\njentic-openapi-tools validate -b spectral -f json openapi.yaml\n\n# Validate a remote URL\njentic-openapi-tools validate https://petstore3.swagger.io/api/v3/openapi.json\n```\n\nThe CLI supports text, JSON, and GitHub Actions annotation output formats, stdin input, parallel multi-backend execution, and standard exit codes for CI integration. See the [jentic-openapi-validator README](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-validator) for the full CLI reference.\n\n### Transforming OpenAPI Documents\n\n```python\nfrom jentic.apitools.openapi.transformer.bundler.core import OpenAPIBundler\n\n# Bundle OpenAPI document with external reference resolution\nbundler = OpenAPIBundler(\"redocly\")\nresult = bundler.bundle(\"file:///path/to/openapi.yaml\", return_type=dict)\nprint(result[\"info\"][\"title\"])\n```\n\n## Packages\n\nThis monorepo contains the following packages:\n\n| Package                                                                                                                                        | Description                                         |\n|------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|\n| **[jentic-openapi-tools](https://github.com/jentic/jentic-openapi-tools/tree/HEAD)**                                                           | Meta-package that installs all workspace packages   |\n| **[jentic-openapi-common](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-common)**                           | Common utilities and shared functionality           |\n| **[jentic-openapi-datamodels](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-datamodels)**                   | OpenAPI data models and structures                  |\n| **[jentic-openapi-parser](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-parser)**                           | OpenAPI document parsing with pluggable backends    |\n| **[jentic-openapi-traverse](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-traverse)**                       | OpenAPI document traversal utilities                |\n| **[jentic-openapi-transformer](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-transformer)**                 | OpenAPI document transformation and bundling        |\n| **[jentic-openapi-transformer-redocly](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-transformer-redocly)** | Redocly-based transformation backend                |\n| **[jentic-openapi-validator](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-validator)**                     | OpenAPI document validation with pluggable backends |\n| **[jentic-openapi-validator-redocly](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-validator-redocly)**     | Redocly-based validation backend                    |\n| **[jentic-openapi-validator-spectral](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-validator-spectral)**   | Spectral-based validation backend                   |\n| **[jentic-openapi-validator-speclynx](https://github.com/jentic/jentic-openapi-tools/tree/HEAD/packages/jentic-openapi-validator-speclynx)**   | SpecLynx ApiDOM-based validation backend            |\n\nEach package has its own detailed README with comprehensive API documentation and examples.\n\n## Documentation\n\n- **[Development Guide](https://github.com/jentic/jentic-openapi-tools/blob/HEAD/DEVELOPMENT.md)** - Setup instructions,\n  testing, and development workflows\n- **[Contributing Guidelines](https://github.com/jentic/jentic-openapi-tools/blob/HEAD/CONTRIBUTING.md)** - How to\n  contribute to the project\n- **Package READMEs** - See individual package directories for detailed API documentation\n\n## Architecture\n\nThe Jentic OpenAPI Tools follow a modular architecture with a plugin-based backend system:\n\n- **Core Packages** - Provide base functionality and abstractions\n- **Backend Packages** - Implement specific parsing, validation, or transformation strategies\n- **Entry Points** - Backends register themselves via Python entry points for automatic discovery\n\nThis design allows you to:\n\n- Start with default backends and add advanced ones as needed\n- Implement custom backends for specific requirements\n- Use multiple backends simultaneously for comprehensive validation\n\n---\n\nBuilt and maintained by [Jentic](https://jentic.com)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjentic%2Fjentic-openapi-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjentic%2Fjentic-openapi-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjentic%2Fjentic-openapi-tools/lists"}