at.happyproto.plugin.profile

happyproto.at

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "author": {
      "properties": {
        "email": {
          "maxLength": 320,
          "type": "string"
        },
        "name": {
          "maxGraphemes": 64,
          "maxLength": 640,
          "type": "string"
        },
        "url": {
          "format": "uri",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "contact": {
      "description": "A security contact. Either field satisfies it, but an entry with neither says nothing blorp.",
      "properties": {
        "email": {
          "maxLength": 320,
          "type": "string"
        },
        "url": {
          "format": "uri",
          "type": "string"
        }
      },
      "type": "object"
    },
    "main": {
      "description": "A HappyView plugin package, in its publisher's repo. The record key is the package slug, so the slug is immutable: changing it means a different package.",
      "key": "any",
      "record": {
        "properties": {
          "authors": {
            "items": {
              "ref": "#author",
              "type": "ref"
            },
            "minLength": 1,
            "type": "array"
          },
          "description": {
            "description": "One line, 140 graphemes or fewer recommended.",
            "maxGraphemes": 300,
            "maxLength": 3000,
            "type": "string"
          },
          "keywords": {
            "description": "Five or fewer recommended.",
            "items": {
              "maxGraphemes": 32,
              "maxLength": 320,
              "type": "string"
            },
            "maxLength": 20,
            "type": "array"
          },
          "lastUpdated": {
            "format": "datetime",
            "type": "string"
          },
          "license": {
            "description": "An SPDX expression, or the literal 'proprietary'.",
            "maxLength": 256,
            "type": "string"
          },
          "name": {
            "description": "Display name. The slug is used when absent.",
            "maxGraphemes": 64,
            "maxLength": 640,
            "type": "string"
          },
          "sections": {
            "ref": "#sections",
            "type": "ref"
          },
          "security": {
            "description": "Where to report a vulnerability. At least one, because a plugin runs as native code in an operator's process.",
            "items": {
              "ref": "#contact",
              "type": "ref"
            },
            "minLength": 1,
            "type": "array"
          },
          "type": {
            "const": "happyview-plugin",
            "description": "Names the ecosystem. A client that does not understand the value refuses the package rather than guessing.",
            "type": "string"
          }
        },
        "required": [
          "type",
          "license",
          "authors",
          "security"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "sections": {
      "description": "Long-form CommonMark, rendered as untrusted input with raw HTML stripped.",
      "properties": {
        "changelog": {
          "maxGraphemes": 2000,
          "maxLength": 20000,
          "type": "string"
        },
        "description": {
          "maxGraphemes": 2000,
          "maxLength": 20000,
          "type": "string"
        },
        "installation": {
          "maxGraphemes": 2000,
          "maxLength": 20000,
          "type": "string"
        },
        "security": {
          "maxGraphemes": 2000,
          "maxLength": 20000,
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "id": "at.happyproto.plugin.profile",
  "lexicon": 1
}

Validate Record

Validate a record against at.happyproto.plugin.profile

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:mo7vq4jbioxwafy5zkcc3eux
CID
bafyreicgjtqmf7z3tf5s4gy25iwabjiogwyqflcjgfm2vt5ak4gzc3dfmi
Indexed At
2026-10-19 18:31 UTC
AT-URI
at://did:plc:mo7vq4jbioxwafy5zkcc3eux/com.atproto.lexicon.schema/at.happyproto.plugin.profile

Version History (3 versions)

Similar Lexicons

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

  • com.emdashcms.experimental.package.profile recordnot from the namespace authority

    Plugin package profile record. EXPERIMENTAL: this NSID is part of the experimental phase of the EmDash plugin registry. The stable namespace target is com.emdashcms.package.profile.

  • 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…

  • A HappyView plugin, as one entry in a software.release.manifest's `artifacts`. It carries the module and its manifest.json as blobs, so they are verified by their CIDs, and the manifest's facts in the signed record, so …

  • com.emdashcms.experimental.publisher.profile recordnot from the namespace authority

    Identity-level metadata for a plugin publisher. One record per publisher DID, located at rkey `self`. Optional: a DID may publish packages without ever publishing a publisher.profile, in which case clients fall back to …

  • 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.

Lexicon Garden

@