at.happyproto.registry.project

happyproto.at

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "author": {
      "properties": {
        "email": {
          "maxLength": 320,
          "type": "string"
        },
        "name": {
          "maxGraphemes": 128,
          "maxLength": 1280,
          "type": "string"
        },
        "url": {
          "format": "uri",
          "maxLength": 2048,
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "contact": {
      "description": "A security contact. It must carry a url, an email, or both.",
      "properties": {
        "email": {
          "maxLength": 320,
          "type": "string"
        },
        "url": {
          "format": "uri",
          "maxLength": 2048,
          "type": "string"
        }
      },
      "type": "object"
    },
    "main": {
      "description": "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 while this record exists and is valid.",
      "key": "any",
      "record": {
        "properties": {
          "authors": {
            "items": {
              "ref": "#author",
              "type": "ref"
            },
            "maxLength": 20,
            "minLength": 1,
            "type": "array"
          },
          "keywords": {
            "items": {
              "maxGraphemes": 32,
              "maxLength": 320,
              "type": "string"
            },
            "maxLength": 20,
            "type": "array"
          },
          "pluginType": {
            "description": "What the plugin is. Every release must be of this type.",
            "knownValues": [
              "auth",
              "library",
              "interpreter"
            ],
            "type": "string"
          },
          "project": {
            "description": "The software.release.project this describes: the one in the same repo, under the same record key.",
            "format": "at-uri",
            "type": "string"
          },
          "publication": {
            "description": "The site.standard.publication that holds the plugin's display name, description and icon, in the same repo under the same record key. Pinned by CID, so a change to the publication takes effect only when this record is updated to point at it.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "security": {
            "description": "Where to report a vulnerability. At least one is required, because a plugin runs inside an operator's HappyView.",
            "items": {
              "ref": "#contact",
              "type": "ref"
            },
            "maxLength": 20,
            "minLength": 1,
            "type": "array"
          }
        },
        "required": [
          "project",
          "publication",
          "pluginType",
          "authors",
          "security"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "at.happyproto.registry.project",
  "lexicon": 1
}

Validate Record

Validate a record against at.happyproto.registry.project

Validation Options
Treat any remaining unresolved references as valid

Metadata

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

Similar Lexicons

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

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

  • Create or update a plugin project in the caller's repo. The first call writes the site.standard.publication, the at.happyproto.registry.project and the software.release.project, in that order, so each is indexed after w…

  • The version's changelog, from the registry's copy of its site.standard.document.

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

  • 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

@