{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "EntityMeta",
  "description": "Metadata fields common to all versions/kinds of entity.",
  "examples": [
    {
      "uid": "e01199ab-08cc-44c2-8e19-5c29ded82521",
      "etag": "lsndfkjsndfkjnsdfkjnsd==",
      "generation": 13,
      "name": "my-component-yay",
      "namespace": "the-namespace",
      "labels": {
        "backstage.io/custom": "ValueStuff"
      },
      "annotations": {
        "example.com/bindings": "are-secret"
      },
      "tags": ["java", "data"]
    }
  ],
  "type": "object",
  "required": ["name"],
  "additionalProperties": true,
  "properties": {
    "uid": {
      "type": "string",
      "description": "A globally unique ID for the entity. This field can not be set by the user at creation time, and the server will reject an attempt to do so. The field will be populated in read operations. The field can (optionally) be specified when performing update or delete operations, but the server is free to reject requests that do so in such a way that it breaks semantics.",
      "examples": ["e01199ab-08cc-44c2-8e19-5c29ded82521"],
      "minLength": 1
    },
    "etag": {
      "type": "string",
      "description": "An opaque string that changes for each update operation to any part of the entity, including metadata. This field can not be set by the user at creation time, and the server will reject an attempt to do so. The field will be populated in read operations. The field can (optionally) be specified when performing update or delete operations, and the server will then reject the operation if it does not match the current stored value.",
      "examples": ["lsndfkjsndfkjnsdfkjnsd=="],
      "minLength": 1
    },
    "generation": {
      "type": "integer",
      "description": "A positive nonzero number that indicates the current generation of data for this entity; the value is incremented each time the spec changes. This field can not be set by the user at creation time, and the server will reject an attempt to do so. The field will be populated in read operations.",
      "examples": [1],
      "minimum": 1
    },
    "name": {
      "type": "string",
      "description": "The name of the entity. Must be unique within the catalog at any given point in time, for any given namespace + kind pair.",
      "examples": ["metadata-proxy"],
      "minLength": 1
    },
    "namespace": {
      "type": "string",
      "description": "The namespace that the entity belongs to.",
      "default": "default",
      "examples": ["default", "admin"],
      "minLength": 1
    },
    "title": {
      "type": "string",
      "description": "A display name of the entity, to be presented in user interfaces instead of the name property, when available.",
      "examples": ["React SSR Template"],
      "minLength": 1
    },
    "description": {
      "type": "string",
      "description": "A short (typically relatively few words, on one line) description of the entity."
    },
    "labels": {
      "type": "object",
      "description": "Key/value pairs of identifying information attached to the entity.",
      "additionalProperties": true,
      "patternProperties": {
        "^.+$": {
          "type": "string"
        }
      }
    },
    "annotations": {
      "type": "object",
      "description": "Key/value pairs of non-identifying auxiliary information attached to the entity.",
      "additionalProperties": true,
      "patternProperties": {
        "^.+$": {
          "type": "string"
        }
      }
    },
    "tags": {
      "type": "array",
      "description": "A list of single-valued strings, to for example classify catalog entities in various ways.",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "links": {
      "type": "array",
      "description": "A list of external hyperlinks related to the entity. Links can provide additional contextual information that may be located outside of Backstage itself. For example, an admin dashboard or external CMS page.",
      "items": {
        "type": "object",
        "required": ["url"],
        "properties": {
          "url": {
            "type": "string",
            "description": "A url in a standard uri format.",
            "examples": ["https://admin.example-org.com"],
            "minLength": 1
          },
          "title": {
            "type": "string",
            "description": "A user friendly display name for the link.",
            "examples": ["Admin Dashboard"],
            "minLength": 1
          },
          "icon": {
            "type": "string",
            "description": "A key representing a visual icon to be displayed in the UI.",
            "examples": ["dashboard"],
            "minLength": 1
          }
        }
      }
    }
  }
}
