{"id":19622933,"url":"https://github.com/meshery/schemas","last_synced_at":"2026-05-28T06:11:14.200Z","repository":{"id":197490817,"uuid":"698739381","full_name":"meshery/schemas","owner":"meshery","description":"Logical object models for Meshery","archived":false,"fork":false,"pushed_at":"2026-05-26T15:06:18.000Z","size":166202,"stargazers_count":68,"open_issues_count":110,"forks_count":118,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-05-26T17:07:49.079Z","etag":null,"topics":["cloud-native","cloud-native-applications","cloud-native-architectures","cloud-native-management","cloud-native-manager","cncf","json-schemas","kubernetes","meshery","ontology","openapi"],"latest_commit_sha":null,"homepage":"https://schemas.meshery.io","language":"TypeScript","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/meshery.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":".github/security-insights.yml","support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS.md","copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2023-09-30T20:14:16.000Z","updated_at":"2026-05-24T09:57:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"25309dff-1ffc-4001-9b0c-92554a8ebbaa","html_url":"https://github.com/meshery/schemas","commit_stats":null,"previous_names":["meshery/schemas"],"tags_count":223,"template":false,"template_full_name":"meshery/meshery","purl":"pkg:github/meshery/schemas","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meshery%2Fschemas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meshery%2Fschemas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meshery%2Fschemas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meshery%2Fschemas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/meshery","download_url":"https://codeload.github.com/meshery/schemas/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meshery%2Fschemas/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33594851,"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-05-28T02:00:06.440Z","response_time":99,"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":["cloud-native","cloud-native-applications","cloud-native-architectures","cloud-native-management","cloud-native-manager","cncf","json-schemas","kubernetes","meshery","ontology","openapi"],"created_at":"2024-11-11T11:30:06.101Z","updated_at":"2026-05-28T06:11:14.194Z","avatar_url":"https://github.com/meshery.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp style=\"text-align:center;\" align=\"center\"\u003e\u003ca href=\"https://meshery.io\"\u003e\u003cpicture\u003e\n \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/meshery/meshery/master/.github/assets/images/readme/meshery-logo-light-text-side.svg\"\u003e\n \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/meshery/meshery/master/.github/assets/images/readme/meshery-logo-dark-text-side.svg\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/meshery/meshery/master/.github/assets/images/readme/meshery-logo-dark-text-side.svg\"\nalt=\"Meshery Logo\" width=\"70%\" /\u003e\u003c/picture\u003e\u003c/a\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://hub.docker.com/r/meshery/meshery\" alt=\"Docker pulls\"\u003e\n  \u003cimg src=\"https://img.shields.io/docker/pulls/meshery/meshery.svg\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/issues?q=is%3Aopen%20is%3Aissue%20archived%3Afalse%20(org%3Ameshery%20OR%20org%3Aservice-mesh-performance%20OR%20org%3Aservice-mesh-patterns%20OR%20org%3Ameshery-extensions)%20label%3A%22help%20wanted%22\" alt=\"GitHub issues by-label\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/issues/meshery/meshery/help%20wanted.svg?color=informational\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/meshery/meshery/blob/master/LICENSE\" alt=\"LICENSE\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/meshery/meshery?color=brightgreen\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://artifacthub.io/packages/helm/meshery/meshery\" alt=\"Artifact Hub Meshery\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?color=brightgreen\u0026label=Helm%20Chart\u0026style=plastic\u0026url=https%3A%2F%2Fartifacthub.io%2Fbadge%2Frepository%2Fartifact-hub\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://goreportcard.com/report/github.com/meshery/meshery\" alt=\"Go Report Card\"\u003e\n  \u003cimg src=\"https://goreportcard.com/badge/github.com/meshery/meshery\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/meshery/meshery/actions\" alt=\"Build Status\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/meshery/meshery/release-drafter.yml\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://bestpractices.coreinfrastructure.org/projects/3564\" alt=\"CLI Best Practices\"\u003e\n  \u003cimg src=\"https://bestpractices.coreinfrastructure.org/projects/3564/badge\" /\u003e\u003c/a\u003e\n\u003ca href=\"http://discuss.meshery.io\" alt=\"Discuss Users\"\u003e\n  \u003cimg src=\"https://img.shields.io/discourse/users?label=discuss\u0026logo=discourse\u0026server=https%3A%2F%2Fdiscuss.meshery.io\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://slack.meshery.io\" alt=\"Join Slack\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Slack-@meshery.svg?logo=slack\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://twitter.com/intent/follow?screen_name=mesheryio\" alt=\"Twitter Follow\"\u003e\n  \u003cimg src=\"https://img.shields.io/twitter/follow/mesheryio.svg?label=Follow+Meshery\u0026style=social\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/meshery/meshery/releases\" alt=\"Meshery Downloads\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/downloads/meshery/meshery/total\" /\u003e\u003c/a\u003e\n\u003c!-- \u003ca href=\"https://app.fossa.com/projects/git%2Bgithub.com%2Fmeshery%2Fmeshery?ref=badge_shield\" alt=\"License Scan Report\"\u003e\n  \u003cimg src=\"https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmeshery%2Fmeshery.svg?type=shield\"/\u003e\u003c/a\u003e\n  --\u003e\n\u003c/p\u003e\n\n\u003ch5\u003e\u003cp align=\"center\"\u003e\u003ci\u003eIf you’re using Meshery or if you like the project, please \u003ca href=\"https://github.com/meshery/meshery/stargazers\"\u003e★\u003c/a\u003e this repository to show your support! 🤩\u003c/i\u003e\u003c/p\u003e\u003c/h5\u003e\n\n# Meshery Schemas\n\nMeshery follows schema-driven development. As a project, Meshery has different types of schemas. Some schemas are external facing, and some internal to Meshery itself. This repository serves as a central location for storing schemas from which all Meshery components can take reference.\n\nMeshery schemas offer a powerful system designed for:\n\n- **Model-Driven Management:** Meshery uses explicit models for describing infrastructure and applications.\n- **Dynamic Discovery:** The ability to process different kinds of relationships and styles, enables a sophisticated system that can adapt to many configurations.\n- **Lifecycle Management:** The schema properties track status and lifecycle of resources.\n- **Extensibility:** Open-ended metadata and modular schema components enable expansion and customization.\n- **Visual Representation:** The properties for styling of edges and nodes is for creating a user friendly visual representation.\n- **Automated Operations:** The schemas can support validation and automated configuration of infrastructure and applications, and patching.\n\nFor an explanation of Meshery's terminology regarding schemas, definitions, declarations, and instances, please see [Contributor's Guide to Models](https://docs.meshery.io/project/contributing/contributing-models).\n\nFor identifier-naming rules (wire casing, DB tag separation, URL/path/query-param conventions, operationId form), see [`docs/identifier-naming-contributor-guide.md`](docs/identifier-naming-contributor-guide.md) — the canonical, reader-friendly directory for the camelCase-on-the-wire contract that this repository and every downstream consumer share.\n\n## Contributing\n--\u003e **For an explanation of the directory structure of this repository and how to contribute changes to Meshery's schemas, see [Contributor's Guide to Schema-Driven Development](https://docs.meshery.io/project/contributing/contributing-schemas).**\n\n\u003cp style=\"clear:both;\"\u003e\u0026nbsp;\u003c/p\u003e\n\n## Join the Meshery community!\n\n\u003ca name=\"contributing\"\u003e\u003c/a\u003e\u003ca name=\"community\"\u003e\u003c/a\u003e\nOur projects are community-built and welcome collaboration. 👍 Be sure to see the \u003ca href=\"https://docs.meshery.io/project/contributing#not-sure-where-to-start\"\u003eContributor Welcome Guide\u003c/a\u003e and \u003ca href=\"https://meshery.io/community#handbook\"\u003eCommunity Handbook\u003c/a\u003e for a tour of resources available to you. Jump into community \u003ca href=\"https://slack.meshery.io\"\u003eSlack\u003c/a\u003e or \u003ca href=\"https://meshery.io/community#discussion-forums\"\u003ediscussion forum\u003c/a\u003e to participate.\n\n\u003cp style=\"clear:both;\"\u003e\n\u003ch3\u003eFind your MeshMate\u003c/h3\u003e\n\n\u003cp\u003eMeshMates are experienced community members, who will help you learn your way around, discover live projects, and expand your community network. Connect with a Meshmate today!\u003c/p\u003e\n\nFind out more on the \u003ca href=\"https://meshery.io/community#meshmates\"\u003eMeshery community\u003c/a\u003e. \u003cbr /\u003e\n\n\u003c/p\u003e\n\u003cbr /\u003e\u003cbr /\u003e\n\u003cdiv style=\"display: flex; justify-content: center; align-items:center;\"\u003e\n\u003cdiv\u003e\n\u003ca href=\"https://meshery.io/community\"\u003e\u003cimg alt=\"Meshery Cloud Native Community\" src=\"https://raw.githubusercontent.com/meshery/meshery/master/.github/assets/images/readme/community.png\" width=\"140px\" style=\"margin-right:36px; margin-bottom:7px;\" width=\"140px\" align=\"left\"/\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv style=\"width:60%; padding-left: 16px; padding-right: 16px\"\u003e\n\u003cp\u003e\n✔️ \u003cem\u003e\u003cstrong\u003eJoin\u003c/strong\u003e\u003c/em\u003e any or all of the weekly meetings on \u003ca href=\"https://meshery.io/calendar\"\u003ecommunity calendar\u003c/a\u003e.\u003cbr /\u003e\n✔️ \u003cem\u003e\u003cstrong\u003eWatch\u003c/strong\u003e\u003c/em\u003e community \u003ca href=\"https://www.youtube.com/@mesheryio?sub_confirmation=1\"\u003emeeting recordings\u003c/a\u003e.\u003cbr /\u003e\n✔️ \u003cem\u003e\u003cstrong\u003eFill-in\u003c/strong\u003e\u003c/em\u003e a \u003ca href=\"https://meshery.io/newcomers\"\u003ecommunity member form\u003c/a\u003e to gain access to community resources.\n\u003cbr /\u003e\n✔️ \u003cem\u003e\u003cstrong\u003eDiscuss\u003c/strong\u003e\u003c/em\u003e in the \u003ca href=\"https://meshery.io/community#discussion-forums\"\u003eCommunity Forum\u003c/a\u003e.\u003cbr /\u003e\n✔️ \u003cem\u003e\u003cstrong\u003eExplore more\u003c/strong\u003e\u003c/em\u003e in the \u003ca href=\"https://meshery.io/community#handbook\"\u003eCommunity Handbook\u003c/a\u003e.\u003cbr /\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ci\u003eNot sure where to start?\u003c/i\u003e Grab an open issue with the \u003ca href=\"https://github.com/issues?q=is%3Aopen%20is%3Aissue%20archived%3Afalse%20(org%3Ameshery%20OR%20org%3Aservice-mesh-performance%20OR%20org%3Aservice-mesh-patterns%20OR%20org%3Ameshery-extensions)%20label%3A%22help%20wanted%22\"\u003ehelp-wanted label\u003c/a\u003e.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\u0026nbsp;\u003c/div\u003e\n\n## Contributing\n\nPlease do! We're a warm and welcoming community of open source contributors. All types of contributions are welcome. Please read:\n\n- [General Contributor Guide](https://docs.meshery.io/project/contributing) - Overview of contribution processes\n- [Schema Contributor Guide](./CONTRIBUTING.md) - Schema-specific development workflows and guidelines\n\n\u003cdiv\u003e\u0026nbsp;\u003c/div\u003e\n\n\n# 🧬 Schema-Driven Development Guide\n\nMeshery follows a **Schema-Driven Development (SDD)** approach. This means that the **structure of data** used throughout the system is centrally defined using **schemas**. These schemas power consistency, validation, and code generation across the Meshery platform.\n\n---\n\n## 🧾 Schema Definition in Meshery\n\nMeshery uses the **OpenAPI v3** specification to define and manage schemas. Given the complexity of the platform, Meshery adopts a **modular, versioned, and extensible** schema strategy:\n\n* ✅ **Versioned schemas** for backward compatibility.\n* 🧩 **Modular constructs** for maintainability and reuse.\n* 🧪 **Schemas are used** for validation, API documentation, and automatic code generation.\n\n\u003e 💡 **TIP**: When referencing models or other constructs in the schema, **always add `x-go-type` and `x-go-import-path`** to avoid generating redundant Go structs. Refer to existing patterns in the codebase.\n\n---\n\n## 📁 Schema Directory Structure\n\nAll schemas are located in the `schemas/` directory at the root of the Meshery repository:\n\n```\nschemas/\n  constructs/\n    \u003cschema-version\u003e/               # e.g., v1beta1\n      \u003cconstruct\u003e/                  # e.g., model, component\n        api.yml                     # Index file: references all subschemas + defines API endpoints\n        \u003cconstruct\u003e.yaml            # Subschema: data model definition for the construct\n        \u003cother_subschema\u003e.yaml      # Additional subschemas (optional)\n        templates/                  # Manually defined templates directory\n          \u003cconstruct\u003e_template.json # JSON template from schema\n          \u003cconstruct\u003e_template.yaml # YAML template from schema\n          \u003cvariant\u003e_template.json   # Additional variant templates (optional)\n  \n  typescript/                       # TypeScript source and generated files\n    index.ts                        # Manually maintained - public API surface\n    generated/                      # Auto-generated (do NOT commit)\n      \u003cschema-version\u003e/\n        \u003cconstruct\u003e/\n          \u003cConstruct\u003e.d.ts          # TypeScript type definitions\n          \u003cConstruct\u003eSchema.ts      # OpenAPI schema as JS object\n    rtk/                            # RTK Query client configurations\n      cloud.ts\n      meshery.ts\n  \n  dist/                             # Built distribution (do NOT commit)\n    index.js, index.d.ts\n    cloudApi.js, mesheryApi.js\n    constructs/                     # Built schema exports (renamed from 'generated')\n      \u003cschema-version\u003e/\u003cconstruct\u003e/\u003cConstruct\u003eSchema.js\n  \n  models/                           # Auto-generated Go code (do NOT commit)\n    \u003cschema-version\u003e/\n      \u003cconstruct\u003e/\n        \u003cconstruct\u003e.go\n```\n\n### 🧠 Explanation\n\n* **`constructs/`** – Holds schemas for various versions.\n  * **`\u003cschema-version\u003e/`** – Represents a version (e.g., `v1alpha2`, `v1beta1`).\n    * **`\u003cconstruct\u003e/`** – A directory to contain all files for any given construct like `pattern`, `component`, etc.\n      * **`api.yml`** – The **index file** for the construct. This file:\n        1. References all subschemas (via `$ref`) to bundle them together\n        2. Defines all **API endpoints** (REST operations: GET, POST, PUT, DELETE) for the construct\n        3. Serves as the entry point for code generation tools (oapi-codegen, openapi-typescript)\n      * **`\u003cconstruct\u003e.yaml`** – A **subschema** that defines the data model (noun) for the construct. Contains the schema properties, types, and validation rules.\n      * **Other `.yaml` files** – Additional subschemas can be defined in separate files (e.g., `model_core.yml`, `component_metadata.yml`) and referenced from `api.yml`.\n      * **`templates/`** – A subdirectory containing manually defined template files. You can add as many different templates here for different variants, use cases, or configurations. Templates are example instances of the schema with default or sample values.\n        * `\u003cconstruct\u003e_template.json` / `\u003cconstruct\u003e_template.yaml` – Default templates in JSON/YAML format.\n        * Additional variant templates can be added (e.g., `\u003cconstruct\u003e_minimal_template.json`, `\u003cconstruct\u003e_full_template.yaml`) for different use cases.\n\n---\n\n## Schema Design Principles: The Dual-Schema Pattern\n\nEvery persisted entity in Meshery follows a strict two-schema contract. Violating this contract causes generated Go structs and API clients to be incorrect.\n\n### Rule 1 — Entity schema = response schema only\n\nThe `\u003cconstruct\u003e.yaml` file represents the **full server-side object** as returned in API responses. It must:\n\n- Include **all** server-generated fields: `id`, `created_at`, `updated_at`, `deleted_at`\n- List server-generated required fields in `required` (they are always present in responses)\n- Have `additionalProperties: false` at the top level\n\n```yaml\n# keychain.yaml — response schema ✅\ntype: object\nadditionalProperties: false\nrequired:\n  - id\n  - name\n  - owner\n  - created_at\n  - updated_at\nproperties:\n  id:\n    $ref: ../../v1alpha1/core/api.yml#/components/schemas/uuid\n  name:\n    type: string\n  owner:\n    $ref: ../../v1alpha1/core/api.yml#/components/schemas/uuid\n  created_at:\n    $ref: ../../v1alpha1/core/api.yml#/components/schemas/created_at\n  updated_at:\n    $ref: ../../v1alpha1/core/api.yml#/components/schemas/updated_at\n  deleted_at:\n    $ref: ../../v1alpha1/core/api.yml#/components/schemas/nullTime\n```\n\n### Rule 2 — Write operations use a separate `*Payload` schema\n\nEvery entity that supports `POST` or `PUT` must define a dedicated `{Entity}Payload` schema in `api.yml`. The payload schema:\n\n- Contains **only client-settable fields** (no `created_at`, `updated_at`, `deleted_at`)\n- Makes `id` optional with `omitempty` for upsert patterns, or omits it entirely for create-only\n- Is referenced by `requestBody` in `POST`/`PUT` operations\n- Is **never** reused as a response body\n\n```yaml\n# In api.yml — write schema ✅\ncomponents:\n  schemas:\n    KeychainPayload:\n      type: object\n      description: Payload for creating or updating a keychain.\n      required:\n        - name\n      properties:\n        id:\n          $ref: ../../v1alpha1/core/api.yml#/components/schemas/uuid\n          description: Existing keychain ID for updates; omit on create.\n          x-oapi-codegen-extra-tags:\n            json: \"id,omitempty\"\n        name:\n          type: string\n          description: Name of the keychain.\n        owner:\n          $ref: ../../v1alpha1/core/api.yml#/components/schemas/uuid\n          description: Owner UUID; set server-side from auth context if omitted.\n          x-oapi-codegen-extra-tags:\n            json: \"owner,omitempty\"\n\npaths:\n  /api/auth/keychains:\n    post:\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema:\n              $ref: \"#/components/schemas/KeychainPayload\"   # ← Payload, not Keychain\n      responses:\n        \"200\":\n          content:\n            application/json:\n              schema:\n                $ref: \"#/components/schemas/Keychain\"        # ← Full entity in response\n```\n\n### Rule 3 — Never use the entity schema as a POST/PUT request body\n\nUsing the full entity schema as a `requestBody` forces clients to supply server-generated fields (`id`, `created_at`, `updated_at`) and produces incorrect generated client code.\n\n```yaml\n# ❌ Wrong — exposes server-generated required fields to clients\npost:\n  requestBody:\n    content:\n      application/json:\n        schema:\n          $ref: \"#/components/schemas/Keychain\"\n\n# ✅ Correct — separate payload type for writes\npost:\n  requestBody:\n    content:\n      application/json:\n        schema:\n          $ref: \"#/components/schemas/KeychainPayload\"\n```\n\n### Checklist when adding a new entity\n\n- [ ] `\u003cconstruct\u003e.yaml` has `additionalProperties: false`\n- [ ] `\u003cconstruct\u003e.yaml` lists all server-generated fields in `properties` and `required`\n- [ ] `api.yml` defines a `{Construct}Payload` schema with only client-settable fields\n- [ ] All `POST`/`PUT` `requestBody` entries reference `{Construct}Payload`, not `{Construct}`\n- [ ] `GET` responses reference the full `{Construct}` entity schema\n\n---\n\n## Naming Conventions\n\n\u003e This section is the inline authority; for the reader-friendly directory (26-row naming table with before/after and do/don't examples), see [`docs/identifier-naming-contributor-guide.md`](docs/identifier-naming-contributor-guide.md).\n\n- Property names\n  - Use camelCase for property fields (e.g., `schemaVersion`, `displayName`, `componentsCount`).\n  - Identifier fields use lowerCamelCase with \"Id\" suffix (e.g., `modelId`, `registrantId`, `categoryId`).\n  - Enums use lowercase words (e.g., `enabled`, `ignored`, `duplicate`).\n  - Use singular nouns for object names (e.g., `model`, `component`, `design`).\n\n- OpenAPI schema names\n  - PascalCase nouns under `components/schemas` (e.g., `Model`, `Component`).\n  - Files/folders are lowercase: `api.yml` (index), `\u003cconstruct\u003e.yaml` (subschemas), `templates/\u003cconstruct\u003e_template.(json|yaml)`.\n\n- Endpoints and operations\n  - Paths are under `/api` with kebab-case , plural nouns (e.g., `/api/workspaces`, `/api/environments`).\n  - Path params are camelCase  (e.g., `{subscriptionId}`, `{connectionId}`).\n  - Non-CRUD actions append a verb segment (e.g., `.../register`, `.../export`, `.../cancel`); legacy lowerCamelCase may appear (e.g., `.../upgradePreview`).\n  - `operationId` is camelCase VerbNoun (e.g., `registerMeshmodels`).\n\n- Versioning\n  - `schemaVersion` uses group/version (e.g., `models.meshery.io/v1beta1`, `components.meshery.io/v1beta1`).\n  - Version strings follow k8s-style (`v1`, `v1alpha1`, `v1beta1`); semver fields use standard SemVer.\n\n---\n\n## 🔧 Go Helper Files\n\nWhile Go structs are auto-generated from schemas, you often need to add **custom methods** to make these structs compatible with databases, implement interfaces, or add utility functions. This is done through manually created **helper files**.\n\n### When to Create Helper Files\n\nCreate a helper file (`*_helper.go` or `helpers.go`) in the generated package when you need:\n\n1. **SQL Driver Compatibility** - Implement `database/sql/driver.Scanner` and `driver.Valuer` interfaces\n2. **Entity Interface Implementation** - Implement the `entity.Entity` interface for database operations\n3. **GORM Table Names** - Define custom table names via `TableName()` method\n4. **Utility Methods** - Add helper functions for serialization, validation, or business logic\n5. **Type Conversions** - Add methods to convert between related types\n\n### Helper File Location\n\n```\nmodels/\n├── core/\n│   ├── core.go                    # Auto-generated (do NOT edit)\n│   ├── helpers.go                 # Manual: utility functions\n│   ├── datatype_map.go            # Manual: Map type with SQL driver methods\n│   └── datatype_null_time.go      # Manual: NullTime with SQL driver methods\n├── v1beta1/\n│   ├── model/\n│   │   ├── model.go               # Auto-generated (do NOT edit)\n│   │   └── model_helper.go        # Manual: Entity interface, TableName, etc.\n│   ├── component/\n│   │   ├── component.go           # Auto-generated (do NOT edit)\n│   │   └── component_helper.go    # Manual: Entity interface, TableName, etc.\n│   └── category/\n│       ├── category.go            # Auto-generated (do NOT edit)\n│       └── category_helper.go     # Manual: Entity interface, TableName, etc.\n```\n\n### SQL Driver Interface Implementation\n\nTo store complex types in SQL databases, implement `Scan` and `Value` methods:\n\n```go\n// helpers.go - This is NOT autogenerated\npackage mypackage\n\nimport (\n    \"database/sql/driver\"\n    \"encoding/json\"\n    \n    \"github.com/meshery/schemas/models/core\"\n)\n\n// Scan implements sql.Scanner interface for reading from database\nfunc (m *MyComplexType) Scan(value interface{}) error {\n    mapVal := core.Map{}\n    err := mapVal.Scan(value)\n    if err != nil {\n        return err\n    }\n    return core.MapToStruct(mapVal, m)\n}\n\n// Value implements driver.Valuer interface for writing to database\nfunc (m MyComplexType) Value() (driver.Value, error) {\n    mapVal, err := core.StructToMap(m)\n    if err != nil {\n        return nil, err\n    }\n    return core.Map(mapVal).Value()\n}\n```\n\n### Entity Interface Implementation\n\nFor structs that need database CRUD operations, implement the `entity.Entity` interface:\n\n```go\n// component_helper.go - This is NOT autogenerated\npackage component\n\nimport (\n    \"fmt\"\n    \n    \"github.com/gofrs/uuid\"\n    \"github.com/meshery/meshkit/database\"\n    \"github.com/meshery/meshkit/models/meshmodel/entity\"\n    \"gorm.io/gorm/clause\"\n)\n\n// TableName returns the database table name for GORM\nfunc (c ComponentDefinition) TableName() string {\n    return \"component_definition_dbs\"\n}\n\n// Type returns the entity type identifier\nfunc (c ComponentDefinition) Type() entity.EntityType {\n    return entity.ComponentDefinition\n}\n\n// GenerateID generates a new UUID for the entity\nfunc (c *ComponentDefinition) GenerateID() (uuid.UUID, error) {\n    return uuid.NewV4()\n}\n\n// GetID returns the entity's ID\nfunc (c ComponentDefinition) GetID() uuid.UUID {\n    return c.Id\n}\n\n// GetEntityDetail returns a human-readable description\nfunc (c *ComponentDefinition) GetEntityDetail() string {\n    return fmt.Sprintf(\"type: %s, name: %s, model: %s\", \n        c.Type(), c.DisplayName, c.Model.Name)\n}\n\n// Create inserts the entity into the database\nfunc (c *ComponentDefinition) Create(db *database.Handler, hostID uuid.UUID) (uuid.UUID, error) {\n    c.Id, _ = c.GenerateID()\n    err := db.Omit(clause.Associations).Create(\u0026c).Error\n    return c.Id, err\n}\n\n// UpdateStatus updates the entity's status in the database\nfunc (c *ComponentDefinition) UpdateStatus(db *database.Handler, status entity.EntityStatus) error {\n    return nil\n}\n```\n\n### Core Utility Types\n\nThe `models/core/` package provides reusable types with built-in SQL compatibility:\n\n| Type | Purpose | Use Case |\n|------|---------|----------|\n| `core.Map` | `map[string]any` with SQL support | Storing JSON objects in database |\n| `core.NullTime` | Nullable time with JSON/YAML support | Optional timestamp fields |\n| `core.Time` | Time wrapper with custom formatting | Required timestamp fields |\n\n### Example: Using Core Types\n\n```go\n// In your helper file\npackage mypackage\n\nimport \"github.com/meshery/schemas/models/core\"\n\n// For nullable timestamps (e.g., deleted_at)\ntype MyStruct struct {\n    DeletedAt core.NullTime `json:\"deleted_at\" gorm:\"column:deleted_at\"`\n}\n\n// For JSON metadata stored as blob\ntype MyStruct struct {\n    Metadata core.Map `json:\"metadata\" gorm:\"type:bytes;serializer:json\"`\n}\n```\n\n### Important Notes\n\n1. **File Header Comment**: Always add `// This is not autogenerated.` at the top of helper files\n2. **Same Package**: Helper files must be in the same package as the generated code\n3. **Do Commit Helper Files**: Unlike generated `.go` files, helper files ARE committed to the repository\n4. **Mutex for Creation**: Use sync.Mutex when implementing `Create()` to prevent race conditions\n\n---\n\n## ⚙️ Code Generation\n\nMeshery supports **automated code generation** from schemas for:\n\n* **Go**: Strongly-typed models for backend → `models/\u003cversion\u003e/\u003cpackage\u003e/`\n* **TypeScript Types**: Interfaces and type definitions → `typescript/generated/\u003cversion\u003e/\u003cpackage\u003e/\u003cPackage\u003e.d.ts`\n* **TypeScript Schemas**: OpenAPI schemas as const JS objects → `typescript/generated/\u003cversion\u003e/\u003cpackage\u003e/\u003cPackage\u003eSchema.ts`\n* **RTK Query**: Clients generated from OpenAPI for use with Redux → `typescript/rtk/`\n* **JSON/YAML**: Templates with defaults and resolved references.\n\n### TypeScript Schema Exports\n\nEach construct's OpenAPI schema is exported as a const JavaScript object for runtime use:\n\n```typescript\n// Import from main index\nimport {\n  ModelDefinitionV1Beta1OpenApiSchema,\n  ComponentDefinitionV1Beta1OpenApiSchema,\n  DesignDefinitionV1Beta1OpenApiSchema,\n} from \"@meshery/schemas\";\n\n// Or import individual schemas directly\nimport ModelSchema from \"@meshery/schemas/dist/constructs/v1beta1/model/ModelSchema\";\nimport ComponentSchema from \"@meshery/schemas/dist/constructs/v1beta1/component/ComponentSchema\";\n```\n\n### TypeScript Type Namespaces\n\nTypes are organized by version in namespaces:\n\n```typescript\nimport { v1beta1, v1alpha1 } from \"@meshery/schemas\";\n\nconst component: v1beta1.Component = { /* ... */ };\nconst model: v1beta1.Model = { /* ... */ };\nconst design: v1beta1.Design = { /* ... */ };\n```\n\n---\n\n## 🚀 Unified Build: One Command for Everything\n\nUse the following command to perform the **entire schema-driven generation workflow**:\n\n```bash\nmake build\nnpm run build  # Build TypeScript distribution with tsup\n```\n\n### 🔧 What `make build` does:\n\n1. **Bundles OpenAPI schemas** for:\n\n   * Meshery\n   * Remote Providers (e.g. Meshery Cloud)\n   * Combined (all constructs)\n   \n2. **Generates:**\n\n   * Golang structs → `models/`\n   * TypeScript type definitions (`.d.ts`) → `typescript/generated/`\n   * TypeScript schema exports (`*Schema.ts`) → `typescript/generated/`\n   * RTK Query clients → `typescript/rtk/`\n\n3. **After `npm run build`:**\n\n   * Builds distribution files → `dist/`\n   * Creates CJS and ESM bundles\n   * Generates declaration files\n\n\u003e ⚠️ This is the recommended way to stay in sync with schema changes.\n\n---\n\n## 🧱 Bundled Schema Outputs\n\nAfter running `make build`, three bundled schema files are created:\n\n| File                 | Purpose                                        |\n| -------------------- | ---------------------------------------------- |\n| `merged_schema.yml`  | All schemas combined (used by Meshery clients) |\n| `cloud_schema.yml`   | Cloud-specific APIs for Remote Providers (e.g. Meshery Cloud) |\n| `meshery_schema.yml` | Meshery-specific APIs                          |\n\n---\n\n## ✍️ Annotating OpenAPI Paths\n\nTo control which schema paths are included in each bundled output, use the `x-internal` annotation inside the OpenAPI operations (`get`, `post`, etc.). The annotation is **required on every operation** — `validate-schemas` (Rule 14) and the bundler both reject operations that omit it.\n\n### Example:\n\n```yaml\npaths:\n  /api/entitlement/plans:\n    get:\n      x-internal: [\"cloud\"]\n      operationId: getPlans\n      tags:\n        - Plans\n      summary: Get all plans supported by the system\n      responses:\n        \"200\":\n          description: Plans fetched successfully\n          content:\n            application/json:\n              schema:\n                type: array\n                items:\n                  $ref: \"#/components/schemas/Plan\"\n```\n\n* `x-internal: [\"cloud\"]` — included in the cloud bundle only.\n* `x-internal: [\"meshery\"]` — included in the meshery bundle only.\n* `x-internal: [\"cloud\", \"meshery\"]` — included in **both** bundles.\n\n---\n\n### `x-generate-db-helpers`\n\nUse `x-generate-db-helpers: true` as a **schema-level** annotation (not per-property) on a named component under `components/schemas` to instruct the Go generator to automatically produce SQL driver helper methods (`Scan` and `Value`) for that type.\n\n**When to use it**: The annotated schema type must satisfy both conditions:\n\n1. It has a **dedicated OpenAPI schema definition** (i.e., it is a named component with explicit properties, not a generic map).\n2. It is **persisted as a JSON blob** in a single database column — not spread across a dedicated table with one column per field.\n\n**When NOT to use it**: Do not annotate amorphous types that have no fixed schema definition (e.g., a generic `metadata` object). Those fields should use `x-go-type: \"core.Map\"` instead. Also do not annotate types that map to full database tables with individual columns for each property — those are handled by the normal DB tag generation.\n\n#### Example\n\n```yaml\ncomponents:\n  schemas:\n    Quiz:\n      x-generate-db-helpers: true   # ← schema-level; not on individual properties\n      type: object\n      required:\n        - id\n        - title\n      properties:\n        id:\n          $ref: \"../../v1alpha1/core/api.yml#/components/schemas/uuid\"\n        title:\n          type: string\n```\n\nThe generator produces `zz_generated.helpers.go` containing:\n\n```go\nfunc (value *Quiz) Scan(src interface{}) error {\n    if src == nil {\n        *value = Quiz{}\n        return nil\n    }\n    mapVal := core.Map{}\n    if err := mapVal.Scan(src); err != nil {\n        return err\n    }\n    return core.MapToStruct(mapVal, value)\n}\n\nfunc (value Quiz) Value() (driver.Value, error) {\n    mapVal, err := core.StructToMap(value)\n    if err != nil {\n        return nil, err\n    }\n    return core.Map(mapVal).Value()\n}\n```\n\nThese implement Go's `sql.Scanner` and `driver.Valuer` interfaces so the struct is transparently serialized as JSON when reading from or writing to a database column.\n\n**Counter-example — `metadata`**: A `metadata` field stored as JSON in the database is intentionally *not* annotated with `x-generate-db-helpers` because it is amorphous — it has no fixed property list. Use `x-go-type: \"core.Map\"` for those fields instead:\n\n```yaml\nmetadata:\n  type: object\n  additionalProperties: true\n  x-go-type: \"core.Map\"\n  x-go-type-skip-optional-pointer: true\n  x-oapi-codegen-extra-tags:\n    db: \"metadata\"\n```\n\n---\n\n## 🛠️ Advanced Usage (Optional)\n\n### 📌 Custom Generation in `generate.sh`\n\nMeshery uses a helper script (`generate.sh`) to map schema constructs to generated output:\n\n```bash\ngenerate_schema_models \u003cconstruct\u003e \u003cschema-version\u003e [\u003copenapi-file\u003e]\n\ngenerate_schema_models \"capability\" \"v1alpha1\"\ngenerate_schema_models \"category\" \"v1beta1\"\ngenerate_schema_models \"pattern\" \"v1beta1\" \"schemas/constructs/v1beta1/design/api.yml\"\n```\n\nThis maps to Go packages like:\n\n```\nmodels/v1alpha1/capability/capability.go\n```\n\n### 🧩 RTK Query Client Generation\n\nThe OpenAPI bundle is passed to a codegen tool to generate RTK Query clients. Include relevant paths using `x-internal` annotations and define request/response schemas appropriately.\n\nYou can build the OpenAPI bundles with:\n\n```bash\n# Build per-construct bundles, merge them, and emit cloud/meshery OpenAPI specs\nmake bundle-openapi\n```\n\n# Using Generated RTK Query Clients\n\n\n## Prerequisites\n\nBefore using the generated RTK clients, ensure you have:\n\n1. Installed the required dependencies:\n   - `@reduxjs/toolkit`\n   - `@meshery/schemas`\n\n2. Set up environment variables:\n   - `RTK_CLOUD_ENDPOINT_PREFIX`: Base URL for Cloud API endpoints\n   - `RTK_MESHERY_ENDPOINT_PREFIX`: Base URL for Meshery API endpoints\n\n## Store Configuration\n\n### Import API Slices Correctly\n\nTo avoid cyclical imports that can break your application, import API slices from their specific exports:\n\n```javascript\n// ✅ Correct: Import from specific API exports\nimport { cloudApi as cloudBaseApi } from \"@meshery/schemas/dist/cloudApi\";\nimport { mesheryApi } from \"@meshery/schemas/dist/mesheryApi\";\n\n// ❌ Incorrect: Do not import directly from generic API file\n// import { api } from \"@meshery/schemas/dist/api\"; // Can cause cyclical imports\n```\n\n### Configure Redux Store\n\nAdd the API reducers and middleware to your Redux store configuration:\n\n```javascript\nimport { combineReducers, configureStore } from \"@reduxjs/toolkit\";\nimport { cloudApi as cloudBaseApi } from \"@meshery/schemas/dist/cloudApi\";\nimport catalogReducer from \"./slices/catalog\";\nimport connectionReducer from \"./slices/connection\";\nimport organizationReducer from \"./slices/organization\";\nimport chartReducer from \"./slices/charts\";\nimport themeReducer from \"./slices/theme\";\n// Optional: If you have locally defined APIs\nimport { cloudApi } from \"../api\";\n\n// Combine reducers\nconst rootReducer = combineReducers({\n  catalog: catalogReducer,\n  charts: chartReducer,\n  organization: organizationReducer,\n  connection: connectionReducer,\n  theme: themeReducer,\n  // Add generated API reducers\n  [cloudBaseApi.reducerPath]: cloudBaseApi.reducer,\n  // Optional: Add locally defined API reducers\n  [cloudApi.reducerPath]: cloudApi.reducer\n});\n\n// Configure store with middleware\nexport const store = configureStore({\n  reducer: reduxPersist.createPersistEnhancedReducer(rootReducer),\n  middleware: getDefaultMiddleware =\u003e\n    getDefaultMiddleware()\n      // Add generated API middleware\n      .concat(cloudBaseApi.middleware)\n      // Optional: Add locally defined API middleware\n      .concat(cloudApi.middleware)\n      // Add persistence middleware if needed\n      .concat(reduxPersist.persistMiddleware)\n});\n\n// Set up listeners for RTK Query cache behaviors like refetchOnFocus/refetchOnReconnect\nsetupListeners(store.dispatch);\n```\n\n## Using API Hooks\n\nAfter configuring your store, you can import and use the generated hooks:\n\n### Cloud API Hooks\n\n```javascript\nimport {\n  useGetPlansQuery,\n  useCreateDesignMutation,\n  useGetDesignsQuery,\n  // Other cloud API hooks...\n} from \"@meshery/schemas/dist/cloudApi\";\n\nfunction MyComponent() {\n  // Use hooks directly in your components\n  const { data: plans, isLoading, error } = useGetPlansQuery();\n\n  // Handle loading states\n  if (isLoading) return \u003cdiv\u003eLoading plans...\u003c/div\u003e;\n\n  // Handle errors\n  if (error) return \u003cdiv\u003eError loading plans\u003c/div\u003e;\n\n  // Use data\n  return (\n    \u003cdiv\u003e\n      {plans.map(plan =\u003e (\n        \u003cdiv key={plan.id}\u003e{plan.name}\u003c/div\u003e\n      ))}\n    \u003c/div\u003e\n  );\n}\n```\n\n### Meshery API Hooks\n\n```javascript\nimport {\n  useGetMeshModelsQuery,\n  useSubmitMeshConfigMutation,\n  // Other Meshery API hooks...\n} from \"@meshery/schemas/dist/mesheryApi\";\n\nfunction MesheryComponent() {\n  const { data: meshModels } = useGetMeshModelsQuery();\n  // ...\n}\n```\n\n## Troubleshooting\n\n### Common Issues\n\n1. **Stuck Loading States**:\n   - Verify environment variables are correctly set\n   - Check for CORS issues\n   - Ensure proper authentication headers are included\n\n2. **Cyclical Imports**:\n   - Always import from specific API files (`cloudApi.ts`, `mesheryApi.ts`)\n   - Avoid importing from generic `api.ts` files\n\n3. **Multiple RTK Instances**:\n   - Ensure proper reducer and middleware registration\n   - Check for naming conflicts in reducerPaths\n\n### Redux DevTools\n\nFor better debugging, use Redux DevTools to monitor:\n- API request lifecycles\n- State changes\n- Caching behavior\n\n## Best Practices\n\n1. **Handle Loading States**:\n   ```javascript\n   const { data, isLoading, isFetching, error } = useGetDataQuery();\n   ```\n\n2. **Leverage Cache Options**:\n   ```javascript\n   const { data } = useGetDataQuery(null, {\n     pollingInterval: 30000, // Re-fetch every 30 seconds\n     refetchOnMountOrArgChange: true,\n     skip: !isReady // Skip query when not ready\n   });\n   ```\n\n3. **Use Transformations When Needed**:\n   ```javascript\n   const transformedData = data?.map(item =\u003e ({\n     ...item,\n     formattedValue: formatValue(item.value)\n   }));\n   ```\n\n## 🧪 Testing \u0026 Validating Schemas\n\nValidate your schema updates before committing by running:\n\n```bash\nmake build\n```\n\nFor repository validation checks:\n\n```bash\nmake validate-schemas\n```\n\n### Schema Validation Modes\n\nThe `validation/` Go package (invoked via `go run ./cmd/validate-schemas`) enforces 41 rules organized into four issue tiers. Different `make` targets control which tiers are visible and whether violations block the build.\n\n| Mode | Command | Blocking | Style | Design | Contract |\n| --- | --- | --- | --- | --- | --- |\n| Build default | `make validate-schemas` | Exit 1 | Silent | Silent | Silent |\n| Advisory audit | `make audit-schemas` | Exit 0 | Silent | Visible | Visible |\n| Full advisory backlog | `make audit-schemas-full` | Exit 0 | Silent | Visible | Visible |\n| Style debt report | `make audit-schemas-style-full` | Exit 0 | Visible | Visible | Visible |\n| Full debt report | `make audit-schemas-debt-full` | Exit 0 | Visible | Visible | Visible |\n| Strict CI gate | `make validate-schemas-strict` | Exit 1 | Error | Error | Error |\n\n- **Blocking** (Rules 1-2, 5, 11-22, 27, 32-33): Always enforced. Break code generation or violate structural contracts.\n- **Style** (Rules 3-4, 6-10, 19): Naming conventions. Silent by default; visible with `--style-debt`; blocking with `--strict-consistency`.\n- **Design** (Rules 23-26, 30-31): API design patterns. Visible as advisories in `--warn` mode.\n- **Contract** (Rules 28-29): Published API contract checks (response codes, duplicate schemas). Visible as advisories in `--warn` mode.\n\nRun unit tests for the validation logic:\n\n```bash\ngo test ./validation/...\n```\n\n### Build Pipeline\n\n`make build` runs 8 steps in sequence. Each step depends on the previous.\n\n```\nschemas/constructs/          (OpenAPI YAML source files)\n        |\n        v\n[1] validate-schemas         go run ./cmd/validate-schemas\n        |                    41 rules: casing, dual-schema, templates, pagination\n        v\n[2] bundle-openapi           node build/bundle-openapi.js\n        |                    Per-construct: in-repo dereference to merged-openapi.json\n        |                    Merge all: in-repo prefixing merge → merged_openapi.yml\n        |                    Filter: cloud_openapi.yml, meshery_openapi.yml\n        v\n[3] generate-golang          node build/generate-golang.js\n        |                    Per-package: oapi-codegen → models/\u003cver\u003e/\u003cpkg\u003e/\u003cpkg\u003e.go\n        |                    Post-processing pipeline (see below)\n        v\n[4] generate-rtk             node build/generate-rtk.js\n        |                    RTK Query clients from bundled OpenAPI specs\n        v\n[5] generate-ts              npm run generate:types\n        |                    openapi-typescript → typescript/generated/\u003cver\u003e/\u003cpkg\u003e/\n        v\n[6] generate-permissions     Go + TypeScript permission key generation\n        v\n[7] build-ts                 npm run build (tsup)\n        |                    Bundles TypeScript distribution → dist/\n        v\n[8] test-golang              go build ./... \u0026\u0026 go test ./...\n```\n\n### Go Generation Pipeline\n\n`build/generate-golang.js` runs a 10-stage pipeline per package. The pipeline generates, transforms, and validates Go structs.\n\n| Stage | Function | What it does |\n| --- | --- | --- |\n| 1 | `oapi-codegen` | Generates Go structs with `json` tags from schema property names (verbatim) |\n| 2 | `addYamlTags()` | Copies each `json` tag value to a `yaml` tag |\n| 3 | `removeSelfReferentialAliases()` | Strips `type X = X` aliases when manual definitions exist in same package |\n| 4 | `addSchemaExtraTags()` | Merges `db`, `gorm`, etc. from `x-oapi-codegen-extra-tags` into struct tags |\n| 5 | `rewriteExternalRefAliases()` | Normalizes import aliases from opaque names to readable ones |\n| 6 | `validateReadableImportAliases()` | Verifies no opaque import aliases remain |\n| 7 | `addCompatibilityParameterAliases()` | Adds backward-compatible parameter type aliases |\n| 8 | `ensureRequiredImports()` | Adds missing Go imports (e.g., `uuid`) when inlined `x-go-type` requires them |\n| 9 | `validateGeneratedDbTags()` | Verifies every `db:` tag declared in the schema is present in generated Go |\n| 10 | `validateGeneratedJsonTags()` | Verifies every `json:` tag in generated Go matches the schema property name |\n\nThe **property name is the single source of truth** for the json wire format. oapi-codegen reads it verbatim (stage 1), and `validateGeneratedJsonTags` confirms it survived the pipeline unchanged (stage 10).\n\n---\n\n## ✅ Summary\n\n| Task                         | Command                          |\n| ---------------------------- | -------------------------------- |\n| Generate everything          | `make build`                     |\n| Build TypeScript dist        | `npm run build`                  |\n| Generate Go code only        | `make golang-generate`           |\n| Generate TS types + schemas  | `make generate-ts`               |\n| Schema validation (blocking) | `make validate-schemas`          |\n| Schema audit (advisory)      | `make audit-schemas`             |\n| Full schema debt report      | `make audit-schemas-debt-full`   |\n| Validation unit tests        | `npm run test:validate-schemas`  |\n\n### Importing Schemas\n\n```typescript\n// Via namespaces (types)\nimport { v1beta1 } from \"@meshery/schemas\";\nconst model: v1beta1.Model = { /* ... */ };\n\n// Via schema exports (runtime)\nimport { ModelDefinitionV1Beta1OpenApiSchema } from \"@meshery/schemas\";\n\n// Direct schema import\nimport ModelSchema from \"@meshery/schemas/dist/constructs/v1beta1/model/ModelSchema\";\n```\n\n---\n\n### License\n\nThis repository and site are available as open-source under the terms of the [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0).\n\n\u003cp align=\"center\" \u003e\nMESHERY IS A CLOUD NATIVE COMPUTING FOUNDATION PROJECT\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeshery%2Fschemas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeshery%2Fschemas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeshery%2Fschemas/lists"}