at.happyproto.registry.defs

happyproto.at

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "bannerView": {
      "properties": {
        "alt": {
          "type": "string"
        },
        "cid": {
          "description": "The CID of the image, which getArtifact serves once the registry has copied it.",
          "format": "cid",
          "type": "string"
        },
        "height": {
          "minimum": 1,
          "type": "integer"
        },
        "width": {
          "minimum": 1,
          "type": "integer"
        }
      },
      "required": [
        "cid",
        "width",
        "height"
      ],
      "type": "object"
    },
    "changelogView": {
      "description": "The version's changelog, from the registry's copy of its site.standard.document.",
      "properties": {
        "fetchedAt": {
          "format": "datetime",
          "type": "string"
        },
        "markdown": {
          "description": "CommonMark written by the publisher. Render it as untrusted input, with raw HTML stripped.",
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "uri": {
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "title",
        "markdown",
        "fetchedAt"
      ],
      "type": "object"
    },
    "channelRef": {
      "description": "The version a channel points at.",
      "properties": {
        "availability": {
          "knownValues": [
            "pending",
            "available",
            "deletedAtSource"
          ],
          "type": "string"
        },
        "cid": {
          "format": "cid",
          "type": "string"
        },
        "state": {
          "description": "The version's lifecycle state.",
          "knownValues": [
            "active",
            "deprecated",
            "unavailable",
            "retired"
          ],
          "type": "string"
        },
        "uri": {
          "description": "The software.release.version record.",
          "format": "at-uri",
          "type": "string"
        },
        "version": {
          "maxLength": 64,
          "type": "string"
        }
      },
      "required": [
        "version",
        "uri",
        "cid",
        "state",
        "availability"
      ],
      "type": "object"
    },
    "lifecycle": {
      "description": "A lifecycle state derived from the publisher's software.release.status records. The last status that has not been withdrawn decides it: none means `active`; `endOfDevelopment`, `endOfSupport` or `supersededBy` mean `deprecated`; `endOfDistribution` means `unavailable`; `endOfLife` means `retired`.",
      "properties": {
        "events": {
          "description": "Every status about the subject, oldest first, including withdrawn ones.",
          "items": {
            "ref": "#lifecycleEvent",
            "type": "ref"
          },
          "type": "array"
        },
        "installable": {
          "description": "True when the state is `active` or `deprecated`.",
          "type": "boolean"
        },
        "kind": {
          "description": "The deciding status's kind, such as `security`.",
          "type": "string"
        },
        "reason": {
          "description": "The deciding status's reason.",
          "type": "string"
        },
        "state": {
          "knownValues": [
            "active",
            "deprecated",
            "unavailable",
            "retired"
          ],
          "type": "string"
        },
        "supersededBy": {
          "description": "The version to use instead, when the deciding status is `supersededBy`.",
          "type": "string"
        }
      },
      "required": [
        "state"
      ],
      "type": "object"
    },
    "lifecycleEvent": {
      "description": "One software.release.status record.",
      "properties": {
        "kind": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        },
        "status": {
          "description": "The event type, such as `endOfSupport`.",
          "type": "string"
        },
        "supersededBy": {
          "type": "string"
        },
        "uri": {
          "format": "at-uri",
          "type": "string"
        },
        "withdrawnBy": {
          "description": "The status that withdrew this one. A withdrawn status no longer counts toward the state.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "status"
      ],
      "type": "object"
    },
    "projectView": {
      "description": "An indexed plugin: its software.release.project with the registry's view of everything around it.",
      "properties": {
        "authors": {
          "items": {
            "ref": "at.happyproto.registry.project#author",
            "type": "ref"
          },
          "type": "array"
        },
        "banner": {
          "description": "The banner of the version the `latest` channel points at, when it has one.",
          "ref": "#bannerView",
          "type": "ref"
        },
        "channels": {
          "description": "A map from channel name, such as `latest`, to the #channelRef it points at. Empty when no channel is indexed.",
          "type": "unknown"
        },
        "cid": {
          "format": "cid",
          "type": "string"
        },
        "did": {
          "format": "did",
          "type": "string"
        },
        "handle": {
          "description": "The publisher's handle, when the registry can resolve one. Its absence says nothing about who owns the project.",
          "format": "handle",
          "type": "string"
        },
        "indexedAt": {
          "format": "datetime",
          "type": "string"
        },
        "keywords": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "lifecycle": {
          "description": "The project's own lifecycle. Only `state` is set.",
          "ref": "#lifecycle",
          "type": "ref"
        },
        "name": {
          "description": "The project's name, which is its record key.",
          "maxLength": 64,
          "type": "string"
        },
        "pluginType": {
          "knownValues": [
            "auth",
            "library",
            "interpreter"
          ],
          "type": "string"
        },
        "publication": {
          "ref": "#publicationView",
          "type": "ref"
        },
        "security": {
          "items": {
            "ref": "at.happyproto.registry.project#contact",
            "type": "ref"
          },
          "type": "array"
        },
        "sidecar": {
          "ref": "#sidecarRef",
          "type": "ref"
        },
        "uri": {
          "description": "The software.release.project record.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "did",
        "name",
        "sidecar",
        "publication",
        "pluginType",
        "keywords",
        "authors",
        "security",
        "channels",
        "lifecycle",
        "indexedAt"
      ],
      "type": "object"
    },
    "publicationView": {
      "description": "The project's site.standard.publication, at the CID its at.happyproto.registry.project record pins.",
      "properties": {
        "cid": {
          "format": "cid",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "icon": {
          "description": "The CID of the icon, which getArtifact serves once the registry has copied it.",
          "format": "cid",
          "type": "string"
        },
        "name": {
          "description": "The plugin's display name.",
          "type": "string"
        },
        "uri": {
          "format": "at-uri",
          "type": "string"
        },
        "url": {
          "format": "uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "cid",
        "name",
        "url"
      ],
      "type": "object"
    },
    "ref": {
      "description": "A record, by at-uri and the CID of the version meant.",
      "properties": {
        "cid": {
          "format": "cid",
          "type": "string"
        },
        "uri": {
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "cid"
      ],
      "type": "object"
    },
    "sidecarRef": {
      "description": "The project's at.happyproto.registry.project record.",
      "properties": {
        "cid": {
          "format": "cid",
          "type": "string"
        },
        "uri": {
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri"
      ],
      "type": "object"
    },
    "versionView": {
      "description": "An indexed version of a plugin, with the artifact its manifest carries.",
      "properties": {
        "artifact": {
          "description": "The plugin artifact from the manifest, as published.",
          "ref": "at.happyproto.plugin.v1",
          "type": "ref"
        },
        "availability": {
          "description": "`available` means the registry holds the package and manifest bytes and serves them from getArtifact. `pending` means it has not copied them yet. `deletedAtSource` means the publisher deleted the version; the registry keeps serving what it already holds.",
          "knownValues": [
            "pending",
            "available",
            "deletedAtSource"
          ],
          "type": "string"
        },
        "changelog": {
          "ref": "#changelogView",
          "type": "ref"
        },
        "cid": {
          "format": "cid",
          "type": "string"
        },
        "did": {
          "format": "did",
          "type": "string"
        },
        "indexedAt": {
          "format": "datetime",
          "type": "string"
        },
        "lifecycle": {
          "description": "The version's lifecycle, combined with the project's: the worse state of the two applies. `installable` and `events` are always set.",
          "ref": "#lifecycle",
          "type": "ref"
        },
        "manifest": {
          "description": "The software.release.manifest the version points at.",
          "ref": "#ref",
          "type": "ref"
        },
        "name": {
          "maxLength": 64,
          "type": "string"
        },
        "suspect": {
          "description": "True when the publisher changed the version or its manifest after publishing it. Versions are immutable, so the registry keeps the first record it saw and flags this one.",
          "type": "boolean"
        },
        "uri": {
          "description": "The software.release.version record.",
          "format": "at-uri",
          "type": "string"
        },
        "version": {
          "maxLength": 64,
          "type": "string"
        }
      },
      "required": [
        "uri",
        "cid",
        "did",
        "name",
        "version",
        "manifest",
        "artifact",
        "availability",
        "suspect",
        "lifecycle",
        "indexedAt"
      ],
      "type": "object"
    }
  },
  "id": "at.happyproto.registry.defs",
  "lexicon": 1
}

Validate Record

Validate a record against at.happyproto.registry.defs

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:mo7vq4jbioxwafy5zkcc3eux
CID
bafyreidztqpx2ri3c5of6mhx6lv76xs2ufgtz7f3janbi7f3vty6j2txsm
Indexed At
2026-10-26 21:34 UTC
AT-URI
at://did:plc:mo7vq4jbioxwafy5zkcc3eux/com.atproto.lexicon.schema/at.happyproto.registry.defs

Version History (2 versions)

Referenced Schemas (3)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • One version of a package. The record key is '<slug>:<version>'. A release at a given version is never modified: a registry that later sees a different CID at this key keeps the first and flags the conflict.

  • The HappyView facts about a software.release.project that make it a plugin. The record key is the project's name, and the record lives in the same repo as the project. The registry indexes a project's releases only whil…

  • com.emdashcms.experimental.aggregator.defs not from the namespace authority

    Shared definitions for the EmDash plugin registry aggregator XRPC endpoints. EXPERIMENTAL: shape may change before stabilisation.

  • A plugin's versions, most recently indexed first, whatever their lifecycle state.

Lexicon Garden

@