com.emdashcms.experimental.package.release

emdashcms.com

Documentation

A specific versioned release of a plugin package. The record key encodes both the parent package's slug and the version, separated by ':'. A release's AT URI looks like at://did:plc:abc123/com.emdashcms.experimental.package.release/gallery-plugin:1.2.0. A release at a given version cannot be modified or replaced once published.

main record

A specific versioned release of a plugin package. The record key encodes both the parent package's slug and the version, separated by ':'. A release's AT URI looks like at://did:plc:abc123/com.emdashcms.experimental.package.release/gallery-plugin:1.2.0. A release at a given version cannot be modified or replaced once published.

Record Key any Any valid record key

Properties

artifacts ref #artifacts Required

Map of artifact type to artifact object. MUST have at least one entry. The 'package' entry (installable bundle) is required.

auth union Optional

Authentication requirements for gated artifacts. No authentication variants are currently defined.

extensions unknown Optional

Open-union container for extension data, keyed by NSID. Each value is an embedded record carrying its own $type discriminator. Releases of type emdash-plugin MUST include a com.emdashcms.experimental.package.releaseExtension entry here.

package string Required

Slug of the parent package profile in the same repository. MUST match the rkey of an existing package profile record. Combined with the publisher DID, the parent profile's AT URI is at://<publisher-did>/com.emdashcms.experimental.package.profile/<package>. Aggregators MUST reject release records whose package field does not resolve to a profile in the same repository.

maxLength: 64 bytesminLength: 1 bytes
provides unknown Optional

Capabilities the package provides. Map of capability type to string or list of strings.

repo string uri Optional

AT URI or HTTPS URL of the source repository for this release.

maxLength: 1024 bytes
requires unknown Optional

Dependencies. Map of 'env:*' keys (extension-defined environment requirements) or package DIDs to version constraint strings. EmDash uses 'env:emdash' and 'env:astro'.

sbom ref #sbom Optional

Software bill of materials reference.

suggests unknown Optional

Optional packages that may be installed alongside. Same shape as requires.

version string Required

Version, conforming to a subset of semver 2.0 (build metadata '+...' is disallowed because atproto record keys cannot represent it). MUST equal the post-':' portion of the rkey byte-for-byte. Composed only of characters allowed in atproto record keys: ASCII letters, digits, '.', and '-'. Note that while atproto rkeys also permit '_' and '~', semver disallows them in version strings, so they MUST NOT appear here.

maxLength: 64 bytesminLength: 1 bytes
View raw schema
{
  "description": "A specific versioned release of a plugin package. The record key encodes both the parent package's slug and the version, separated by ':'. A release's AT URI looks like at://did:plc:abc123/com.emdashcms.experimental.package.release/gallery-plugin:1.2.0. A release at a given version cannot be modified or replaced once published.",
  "key": "any",
  "record": {
    "properties": {
      "artifacts": {
        "description": "Map of artifact type to artifact object. MUST have at least one entry. The 'package' entry (installable bundle) is required.",
        "ref": "#artifacts",
        "type": "ref"
      },
      "auth": {
        "closed": false,
        "description": "Authentication requirements for gated artifacts. No authentication variants are currently defined.",
        "refs": [],
        "type": "union"
      },
      "extensions": {
        "description": "Open-union container for extension data, keyed by NSID. Each value is an embedded record carrying its own $type discriminator. Releases of type emdash-plugin MUST include a com.emdashcms.experimental.package.releaseExtension entry here.",
        "type": "unknown"
      },
      "package": {
        "description": "Slug of the parent package profile in the same repository. MUST match the rkey of an existing package profile record. Combined with the publisher DID, the parent profile's AT URI is at://<publisher-did>/com.emdashcms.experimental.package.profile/<package>. Aggregators MUST reject release records whose package field does not resolve to a profile in the same repository.",
        "maxLength": 64,
        "minLength": 1,
        "type": "string"
      },
      "provides": {
        "description": "Capabilities the package provides. Map of capability type to string or list of strings.",
        "type": "unknown"
      },
      "repo": {
        "description": "AT URI or HTTPS URL of the source repository for this release.",
        "format": "uri",
        "maxLength": 1024,
        "type": "string"
      },
      "requires": {
        "description": "Dependencies. Map of 'env:*' keys (extension-defined environment requirements) or package DIDs to version constraint strings. EmDash uses 'env:emdash' and 'env:astro'.",
        "type": "unknown"
      },
      "sbom": {
        "description": "Software bill of materials reference.",
        "ref": "#sbom",
        "type": "ref"
      },
      "suggests": {
        "description": "Optional packages that may be installed alongside. Same shape as requires.",
        "type": "unknown"
      },
      "version": {
        "description": "Version, conforming to a subset of semver 2.0 (build metadata '+...' is disallowed because atproto record keys cannot represent it). MUST equal the post-':' portion of the rkey byte-for-byte. Composed only of characters allowed in atproto record keys: ASCII letters, digits, '.', and '-'. Note that while atproto rkeys also permit '_' and '~', semver disallows them in version strings, so they MUST NOT appear here.",
        "maxLength": 64,
        "minLength": 1,
        "type": "string"
      }
    },
    "required": [
      "package",
      "version",
      "artifacts"
    ],
    "type": "object"
  },
  "type": "record"
}
artifact object

The installable plugin bundle artifact.

Properties

blob blob Optional

Artifact bytes stored as a blob in the publisher's PDS.

maxSize: 262.1 KB
checksum string Required

Lowercase base32 multibase-encoded sha2-256 multihash of the artifact bytes (multihash code 0x12). EmDash clients reject unsupported hash functions rather than skipping verification.

maxLength: 256 bytes
contentType string Optional

MIME type of the artifact, per RFC6838.

maxLength: 256 bytes
height integer Optional

Pixel height, for image artifacts.

minimum: 1maximum: 8192
id string Optional

Unique ID within the artifact type.

maxLength: 128 bytes
lang string language Optional

BCP 47 language tag for localised artifacts (icon, screenshot).

releaseAsset boolean Optional

Whether the URL points to a platform release asset rather than a directly-served file. When true, clients MUST send 'Accept: application/octet-stream' when downloading.

requiresAuth boolean Optional

Whether the artifact requires authentication to access.

signature string Optional

Optional cryptographic signature of the artifact. EmDash clients do not require it because integrity is proven through the atproto MST signature over the record's checksum.

maxLength: 1024 bytes
url string uri Optional

URL where the artifact can be downloaded.

maxLength: 2048 bytes
width integer Optional

Pixel width, for image artifacts (icon, screenshot, banner).

minimum: 1maximum: 8192
View raw schema
{
  "description": "The installable plugin bundle artifact.",
  "properties": {
    "blob": {
      "accept": [
        "application/gzip"
      ],
      "description": "Artifact bytes stored as a blob in the publisher's PDS.",
      "maxSize": 262144,
      "type": "blob"
    },
    "checksum": {
      "description": "Lowercase base32 multibase-encoded sha2-256 multihash of the artifact bytes (multihash code 0x12). EmDash clients reject unsupported hash functions rather than skipping verification.",
      "maxLength": 256,
      "type": "string"
    },
    "contentType": {
      "description": "MIME type of the artifact, per RFC6838.",
      "maxLength": 256,
      "type": "string"
    },
    "height": {
      "description": "Pixel height, for image artifacts.",
      "maximum": 8192,
      "minimum": 1,
      "type": "integer"
    },
    "id": {
      "description": "Unique ID within the artifact type.",
      "maxLength": 128,
      "type": "string"
    },
    "lang": {
      "description": "BCP 47 language tag for localised artifacts (icon, screenshot).",
      "format": "language",
      "type": "string"
    },
    "releaseAsset": {
      "description": "Whether the URL points to a platform release asset rather than a directly-served file. When true, clients MUST send 'Accept: application/octet-stream' when downloading.",
      "type": "boolean"
    },
    "requiresAuth": {
      "description": "Whether the artifact requires authentication to access.",
      "type": "boolean"
    },
    "signature": {
      "description": "Optional cryptographic signature of the artifact. EmDash clients do not require it because integrity is proven through the atproto MST signature over the record's checksum.",
      "maxLength": 1024,
      "type": "string"
    },
    "url": {
      "description": "URL where the artifact can be downloaded.",
      "format": "uri",
      "maxLength": 2048,
      "type": "string"
    },
    "width": {
      "description": "Pixel width, for image artifacts (icon, screenshot, banner).",
      "maximum": 8192,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "checksum"
  ],
  "type": "object"
}
artifacts object

Map of artifact-type-name to artifact. Common artifact-type keys are 'package' (the installable bundle, REQUIRED), 'icon', 'screenshots' (a list), and 'banner'. Custom types use an 'x-' prefix and pass through as unrecognised fields.

Properties

package ref #artifact Required

The installable plugin bundle.

screenshots array of ref#imageArtifact Optional

Ordered screenshot gallery for the plugin's detail page.

maxLength: 8 items
View raw schema
{
  "description": "Map of artifact-type-name to artifact. Common artifact-type keys are 'package' (the installable bundle, REQUIRED), 'icon', 'screenshots' (a list), and 'banner'. Custom types use an 'x-' prefix and pass through as unrecognised fields.",
  "properties": {
    "banner": {
      "ref": "#imageArtifact",
      "type": "ref"
    },
    "icon": {
      "ref": "#imageArtifact",
      "type": "ref"
    },
    "package": {
      "description": "The installable plugin bundle.",
      "ref": "#artifact",
      "type": "ref"
    },
    "screenshots": {
      "description": "Ordered screenshot gallery for the plugin's detail page.",
      "items": {
        "ref": "#imageArtifact",
        "type": "ref"
      },
      "maxLength": 8,
      "type": "array"
    }
  },
  "required": [
    "package"
  ],
  "type": "object"
}
imageArtifact object

A raster image artifact for a plugin listing.

Properties

blob blob Optional

Image bytes stored as a blob in the publisher's PDS.

maxSize: 1.0 MB
checksum string Required

Lowercase base32 multibase-encoded sha2-256 multihash of the artifact bytes (multihash code 0x12). EmDash clients reject unsupported hash functions rather than skipping verification.

maxLength: 256 bytes
contentType string Optional

MIME type of the artifact, per RFC6838.

maxLength: 256 bytes
height integer Optional

Pixel height.

minimum: 1maximum: 8192
id string Optional

Unique ID within the artifact type.

maxLength: 128 bytes
lang string language Optional

BCP 47 language tag for a localised artifact.

releaseAsset boolean Optional

Whether the URL points to a platform release asset rather than a directly-served file. When true, clients MUST send 'Accept: application/octet-stream' when downloading.

requiresAuth boolean Optional

Whether the artifact requires authentication to access.

signature string Optional

Optional cryptographic signature of the artifact. EmDash clients do not require it because integrity is proven through the atproto MST signature over the record's checksum.

maxLength: 1024 bytes
url string uri Optional

URL where the artifact can be downloaded.

maxLength: 2048 bytes
width integer Optional

Pixel width.

minimum: 1maximum: 8192
View raw schema
{
  "description": "A raster image artifact for a plugin listing.",
  "properties": {
    "blob": {
      "accept": [
        "image/png",
        "image/jpeg",
        "image/webp"
      ],
      "description": "Image bytes stored as a blob in the publisher's PDS.",
      "maxSize": 1048576,
      "type": "blob"
    },
    "checksum": {
      "description": "Lowercase base32 multibase-encoded sha2-256 multihash of the artifact bytes (multihash code 0x12). EmDash clients reject unsupported hash functions rather than skipping verification.",
      "maxLength": 256,
      "type": "string"
    },
    "contentType": {
      "description": "MIME type of the artifact, per RFC6838.",
      "maxLength": 256,
      "type": "string"
    },
    "height": {
      "description": "Pixel height.",
      "maximum": 8192,
      "minimum": 1,
      "type": "integer"
    },
    "id": {
      "description": "Unique ID within the artifact type.",
      "maxLength": 128,
      "type": "string"
    },
    "lang": {
      "description": "BCP 47 language tag for a localised artifact.",
      "format": "language",
      "type": "string"
    },
    "releaseAsset": {
      "description": "Whether the URL points to a platform release asset rather than a directly-served file. When true, clients MUST send 'Accept: application/octet-stream' when downloading.",
      "type": "boolean"
    },
    "requiresAuth": {
      "description": "Whether the artifact requires authentication to access.",
      "type": "boolean"
    },
    "signature": {
      "description": "Optional cryptographic signature of the artifact. EmDash clients do not require it because integrity is proven through the atproto MST signature over the record's checksum.",
      "maxLength": 1024,
      "type": "string"
    },
    "url": {
      "description": "URL where the artifact can be downloaded.",
      "format": "uri",
      "maxLength": 2048,
      "type": "string"
    },
    "width": {
      "description": "Pixel width.",
      "maximum": 8192,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "checksum"
  ],
  "type": "object"
}
sbom object

Software bill of materials reference. EmDash plugins SHOULD include sbom for CRA-readiness; clients MUST NOT refuse install solely because sbom is absent.

Properties

checksum string Optional

Multibase-encoded multihash of the SBOM document, in the same format as artifact checksums.

maxLength: 256 bytes
format string Optional

SBOM format identifier.

maxLength: 32 bytes
Known values: cyclonedx, spdx
url string uri Optional

URL where the SBOM document can be fetched.

maxLength: 2048 bytes
View raw schema
{
  "description": "Software bill of materials reference. EmDash plugins SHOULD include sbom for CRA-readiness; clients MUST NOT refuse install solely because sbom is absent.",
  "properties": {
    "checksum": {
      "description": "Multibase-encoded multihash of the SBOM document, in the same format as artifact checksums.",
      "maxLength": 256,
      "type": "string"
    },
    "format": {
      "description": "SBOM format identifier.",
      "knownValues": [
        "cyclonedx",
        "spdx"
      ],
      "maxLength": 32,
      "type": "string"
    },
    "url": {
      "description": "URL where the SBOM document can be fetched.",
      "format": "uri",
      "maxLength": 2048,
      "type": "string"
    }
  },
  "type": "object"
}

Lexicon Garden

@