---
permalink: /
---
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Meshery Schemas</title>
    <meta
      name="description"
      content="Latest Meshery schema resource versions."
    >
    <style>
      /* Qanelas Soft is the Meshery brand typeface, vendored from meshery.io
         (assets/fonts/qanelas-soft). Only the weights used by this page are
         shipped to keep the payload small. */
      @font-face {
        font-family: "Qanelas Soft";
        src: url("{{ '/site/assets/fonts/qanelas-soft/QanelasSoftRegular.otf' | relative_url }}") format("opentype");
        font-weight: 400;
        font-display: swap;
      }

      @font-face {
        font-family: "Qanelas Soft";
        src: url("{{ '/site/assets/fonts/qanelas-soft/QanelasSoftMedium.otf' | relative_url }}") format("opentype");
        font-weight: 500;
        font-display: swap;
      }

      @font-face {
        font-family: "Qanelas Soft";
        src: url("{{ '/site/assets/fonts/qanelas-soft/QanelasSoftSemiBold.otf' | relative_url }}") format("opentype");
        font-weight: 600;
        font-display: swap;
      }

      @font-face {
        font-family: "Qanelas Soft";
        src: url("{{ '/site/assets/fonts/qanelas-soft/QanelasSoftBold.otf' | relative_url }}") format("opentype");
        font-weight: 700;
        font-display: swap;
      }

      :root {
        color-scheme: light dark;
        --surface-app-light: #fdfdfd;
        --surface-card-light: #ffffff;
        --surface-muted-light: #f6f8f8;
        --text-light: #000d12;
        --border-light: #eaedee;
        --primary: #00b39f;
        --primary-hover: #41ccb3;
        --secondary: #3c494f;
        --surface-app-dark: #000d12;
        --surface-card-dark: #121212;
        --surface-muted-dark: #15272f;
        --text-dark: #fdfdfd;
        --border-dark: #15272f;
      }

      body {
        margin: 0;
        padding: 24px 16px;
        background: var(--surface-muted-light);
        color: var(--text-light);
        font-family: "Qanelas Soft", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
        line-height: 1.5;
      }

      main {
        max-width: 56rem;
        margin: 0 auto;
        padding: 24px;
        background: var(--surface-app-light);
        border: 1px solid var(--border-light);
      }

      h1,
      h2,
      p {
        margin-top: 0;
      }

      h1 {
        display: flex;
        align-items: center;
        gap: 0.5rem;
        margin-bottom: 0.5rem;
        font-size: 2rem;
      }

      h2 {
        margin-bottom: 0.5rem;
        font-size: 1.25rem;
      }

      a {
        color: var(--primary);
      }

      a:hover,
      a:focus {
        color: var(--primary-hover);
      }

      .table-wrapper {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        margin: 1.5rem 0;
      }

      table {
        width: 100%;
        border-collapse: collapse;
        background: var(--surface-card-light);
      }

      th,
      td {
        padding: 0.5rem 0.75rem;
        text-align: left;
        border: 1px solid var(--border-light);
      }

      thead th {
        background: var(--surface-muted-light);
      }

      tbody th {
        font-weight: 400;
      }

      h1,
      h2 {
        font-weight: 700;
      }


      .classification {
        text-align: center;
      }

      .classification .yes {
        color: var(--primary);
        font-weight: 700;
      }

      .classification .no {
        color: var(--secondary);
      }

      .sr-only {
        position: absolute;
        width: 1px;
        height: 1px;
        margin: -1px;
        padding: 0;
        overflow: hidden;
        clip: rect(0, 0, 0, 0);
        white-space: nowrap;
        border: 0;
      }

      .docs-links ul {
        margin: 0.5rem 0 0;
        padding-left: 1.25rem;
      }

      .docs-links li + li {
        margin-top: 0.25rem;
      }

      @media (max-width: 36rem) {
        body {
          padding: 12px 8px;
        }

        main {
          padding: 16px;
        }

        h1 {
          font-size: 1.5rem;
        }

        table,
        thead,
        tbody,
        tr,
        th,
        td {
          display: block;
        }

        thead {
          position: absolute;
          width: 1px;
          height: 1px;
          padding: 0;
          margin: -1px;
          overflow: hidden;
          clip: rect(0, 0, 0, 0);
          white-space: nowrap;
          border: 0;
        }

        tbody tr {
          margin-bottom: 0.75rem;
          border: 1px solid var(--border-light);
          border-radius: 4px;
          overflow: hidden;
        }

        tbody th[scope="row"] {
          background: var(--surface-muted-light);
          font-weight: 600;
          border: none;
          border-bottom: 1px solid var(--border-light);
        }

        tbody td {
          display: flex;
          align-items: center;
          gap: 0.5rem;
          border: none;
          border-bottom: 1px solid var(--border-light);
          text-align: left;
        }

        tbody td:last-child {
          border-bottom: none;
        }

        tbody td::before {
          content: attr(data-label);
          font-weight: 600;
          font-size: 0.8rem;
          color: var(--secondary);
          min-width: 7.5rem;
          flex-shrink: 0;
        }

        .classification {
          text-align: left;
        }
      }

      @media (prefers-color-scheme: dark) {
        body {
          background: var(--surface-muted-dark);
          color: var(--text-dark);
        }

        main {
          background: var(--surface-app-dark);
          border-color: var(--border-dark);
        }

        table {
          background: var(--surface-card-dark);
        }

        th,
        td {
          border-color: var(--border-dark);
        }

        thead th {
          background: var(--surface-muted-dark);
        }
      }

      @media (max-width: 36rem) and (prefers-color-scheme: dark) {
        tbody tr {
          border-color: var(--border-dark);
        }

        tbody th[scope="row"] {
          background: var(--surface-muted-dark);
          border-color: var(--border-dark);
        }

        tbody td {
          border-color: var(--border-dark);
        }

        tbody td::before {
          color: var(--primary-hover);
        }
      }
    </style>
  </head>
  <body>
    <main>
      <h1><img src="{{ '/site/assets/images/meshery-logo.svg' | relative_url }}" alt="" aria-hidden="true" height="32"> Meshery Schemas</h1>
      <p>Latest schema version for each Meshery resource.</p>

      <p>
        Each resource is also tagged by where its API surfaces: <strong>Core</strong>
        resources are served by Meshery Server, and <strong>Extension</strong>
        resources are served by Meshery Cloud. A resource can be both.
      </p>

      <div class="table-wrapper">
        <table role="table" aria-label="Latest Meshery schema versions">
          <thead role="rowgroup">
            <tr role="row">
              <th scope="col" role="columnheader">Resource</th>
              <th scope="col" role="columnheader">Latest schema</th>
              <th scope="col" role="columnheader" class="classification">Core</th>
              <th scope="col" role="columnheader" class="classification">Extension</th>
            </tr>
          </thead>
          <tbody role="rowgroup">
            {% for schema in site.data.latest_schema_versions %}
            <tr role="row">
              <th scope="row" role="rowheader">{% if schema.docs_href %}<a href="{{ schema.docs_href }}" target="_blank" rel="noopener noreferrer">{{ schema.construct }}</a>{% else %}{{ schema.construct }}{% endif %}</th>
              <td role="cell" data-label="Latest schema"><a href="https://github.com/meshery/schemas/blob/master{{ schema.href }}" target="_blank" rel="noopener noreferrer">{{ schema.version }}</a></td>
              <td role="cell" class="classification" data-label="Core">
                {% if schema.core %}<span class="yes" aria-hidden="true">✓</span><span class="sr-only">Core</span>{% else %}<span class="no" aria-hidden="true">·</span><span class="sr-only">Not Core</span>{% endif %}
              </td>
              <td role="cell" class="classification" data-label="Extension">
                {% if schema.extension %}<span class="yes" aria-hidden="true">✓</span><span class="sr-only">Extension</span>{% else %}<span class="no" aria-hidden="true">·</span><span class="sr-only">Not Extension</span>{% endif %}
              </td>
            </tr>
            {% endfor %}
          </tbody>
        </table>
      </div>

      <section class="docs-links" aria-labelledby="contributor-guides-title">
        <h2 id="contributor-guides-title">Contributor guides</h2>
        <p>Contribution instructions live in Meshery Docs.</p>
        <ul>
          <li><a href="https://docs.meshery.io/reference/rest-apis">Meshery REST API reference</a></li>
          <li><a href="https://docs.meshery.io/project/contributing/contributing-schemas/">Schema-driven development guide</a></li>
          <li><a href="https://docs.meshery.io/project/contributing/contributing-ui-schemas/">UI schema guide</a></li>
        </ul>
      </section>
    </main>
  </body>
</html>
