at.happyproto.plugin.v1
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"image": {
"description": "A presentation image. SVG is not accepted, because it can carry script and renders in an operator's dashboard.",
"properties": {
"alt": {
"description": "A description of the image for people who cannot see it.",
"maxGraphemes": 300,
"maxLength": 3000,
"type": "string"
},
"height": {
"minimum": 1,
"type": "integer"
},
"image": {
"accept": [
"image/png",
"image/jpeg",
"image/webp",
"image/gif",
"image/avif"
],
"maxSize": 1000000,
"type": "blob"
},
"width": {
"minimum": 1,
"type": "integer"
}
},
"required": [
"image",
"width",
"height"
],
"type": "object"
},
"main": {
"description": "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 a consent screen renders without downloading the module. Those facts are not trusted: the loader checks them against the module itself and refuses a plugin that misstates what it does. The registry refuses a manifest whose artifact breaks a rule stated here, including the ones a lexicon cannot express.",
"properties": {
"allowedHosts": {
"description": "Hosts the module's outbound requests may reach.",
"items": {
"maxLength": 256,
"type": "string"
},
"type": "array"
},
"apiVersion": {
"description": "The plugin API version the module targets. Its major version must be 2 or later.",
"maxLength": 16,
"type": "string"
},
"banner": {
"description": "A wide image shown at the top of the plugin's page.",
"ref": "#image",
"type": "ref"
},
"capabilities": {
"description": "What the module may do. The loader checks it against the module's imports, so a plugin cannot import what this does not cover.",
"items": {
"maxLength": 128,
"type": "string"
},
"type": "array"
},
"fileExtensions": {
"description": "Required for an interpreter: the file extensions of the scripts it runs, without the dot. Each is 1 to 16 lowercase letters or digits, none is `json`, and none repeats.",
"items": {
"maxLength": 16,
"minLength": 1,
"type": "string"
},
"maxLength": 8,
"minLength": 1,
"type": "array"
},
"languageId": {
"description": "Required for an interpreter: the script type it runs.",
"maxLength": 64,
"type": "string"
},
"license": {
"description": "An SPDX expression, or `proprietary`.",
"maxLength": 256,
"type": "string"
},
"manifest": {
"accept": [
"application/json"
],
"description": "The module's manifest.json. A module stored as a blob has no directory beside it to hold a sibling file, so this is what says how to load it.",
"maxSize": 1000000,
"type": "blob"
},
"namespace": {
"description": "Required for a library: the name scripts load it by, which is unique across a HappyView's installed plugins.",
"maxLength": 256,
"type": "string"
},
"package": {
"accept": [
"application/wasm"
],
"description": "The WASM module.",
"maxSize": 16777216,
"type": "blob"
},
"pluginType": {
"description": "What the plugin is. Any other value is refused.",
"knownValues": [
"auth",
"library",
"interpreter"
],
"type": "string"
},
"requires": {
"description": "Dependencies, as a map a lexicon cannot type. Each key is `env:<name>`, such as `env:happyview`, or the at-uri of a software.release.project; each value is a Cargo version requirement, such as `>=3.0.0` or `^1.0`, without `||`.",
"type": "unknown"
},
"screenshots": {
"items": {
"ref": "#image",
"type": "ref"
},
"maxLength": 8,
"type": "array"
},
"sections": {
"ref": "#sections",
"type": "ref"
}
},
"required": [
"package",
"manifest",
"pluginType",
"apiVersion",
"capabilities",
"license",
"sections"
],
"type": "object"
},
"sections": {
"description": "Long-form CommonMark shown on the plugin's page. It is rendered as untrusted input, with raw HTML stripped.",
"properties": {
"description": {
"maxGraphemes": 2000,
"maxLength": 20000,
"type": "string"
},
"installation": {
"maxGraphemes": 2000,
"maxLength": 20000,
"type": "string"
},
"security": {
"maxGraphemes": 2000,
"maxLength": 20000,
"type": "string"
}
},
"required": [
"description"
],
"type": "object"
}
},
"id": "at.happyproto.plugin.v1",
"lexicon": 1
}
Metadata
- DID
-
did:plc:mo7vq4jbioxwafy5zkcc3eux - CID
-
bafyreihxgmuzpuo4ldabzktjiqh2m7wgz52kzihxsp73evwpryehteobw4 - Indexed At
- 2026-10-26 21:34 UTC
- AT-URI
-
at://did:plc:mo7vq4jbioxwafy5zkcc3eux/com.atproto.lexicon.schema/at.happyproto.plugin.v1
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
The HappyView-specific half of a release, carried at extensions['at.happyproto.plugin.releaseExtension']. It is the plugin manifest, moved into the signed record so a consent screen renders without downloading the modul…
-
at.happyproto.plugin.release record
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.
-
at.happyproto.plugin.profile record
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.
-
Plugin package release record. EXPERIMENTAL: this NSID is part of the experimental phase of the EmDash plugin registry. The stable namespace target is com.emdashcms.package.release.
-
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…