{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "EditorStack library record",
  "description": "Field definitions for the EditorStack dataset. Null means unverified, never zero: we leave a fact empty rather than estimate it.",
  "type": "object",
  "required": [
    "slug",
    "name",
    "type",
    "one_liner",
    "pricing",
    "tech",
    "capabilities",
    "metrics",
    "last_verified",
    "sources"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Stable identifier, also the URL segment."
    },
    "name": {
      "type": "string"
    },
    "type": {
      "enum": [
        "library",
        "sdk",
        "platform",
        "cms"
      ]
    },
    "one_liner": {
      "type": "string",
      "description": "One self-contained sentence naming the entity."
    },
    "license": {
      "type": [
        "string",
        "null"
      ],
      "description": "SPDX identifier where one exists; null means proprietary or unverified."
    },
    "tech.bundle_size_min_gzip_kb": {
      "type": [
        "number",
        "null"
      ],
      "description": "Measured by EditorStack with esbuild and gzip -9, CSS excluded. Null when the product cannot be bundled locally."
    },
    "metrics.status": {
      "enum": [
        "measured",
        "pending",
        "not-applicable"
      ],
      "description": "pending means the automated sync has not filled these numbers yet."
    },
    "last_verified": {
      "type": "string",
      "format": "date"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url",
          "title",
          "accessed"
        ]
      }
    }
  }
}
