com.emdashcms.experimental.package.profile

emdashcms.com

Documentation

A plugin package profile, identifying the package and carrying metadata that does not change between releases. Each release belongs to exactly one profile in the same publisher's repo. The record key is the package slug.

main record

A plugin package profile, identifying the package and carrying metadata that does not change between releases. Each release belongs to exactly one profile in the same publisher's repo. The record key is the package slug.

Record Key any Any valid record key

Properties

authors array of ref #author Required

At least one author. Vendors SHOULD specify at least one of url or email per author.

maxLength: 32 itemsminLength: 1 items
description string Optional

Short description of the package. SHOULD NOT exceed 140 characters per FAIR convention.

maxLength: 1024 bytesmaxGraphemes: 140 graphemes
extensions unknown Optional

Opaque extension container keyed by NSID. The base profile Lexicon does not validate entries; consumers dispatch known entries to their embedded extension schemas. EmDash delegated-release policy uses com.emdashcms.experimental.package.profileExtension here.

id string at-uri Required

Canonical AT URI of this profile record. Derived from the record's location at publish time; not authored by the publisher. Aggregators MUST reject records whose id does not match the AT URI they were fetched from. Mirrors FAIR's id-must-match-the-resolved-identifier rule.

keywords array of string Optional

Search keywords. SHOULD NOT exceed 5 items per FAIR convention.

maxLength: 5 items
lastUpdated string datetime Optional

ISO 8601 datetime for the package's last update.

license string Required

SPDX license expression, or the literal 'proprietary'. Clients SHOULD refuse to install packages without a valid license.

maxLength: 256 bytes
name string Optional

Human-readable name for the package, displayed in directory listings.

maxLength: 1024 bytesmaxGraphemes: 100 graphemes
sections ref #sections Optional

Map of human-readable text sections (description, installation, faq, changelog, security). CommonMark Markdown. Each value capped at 20000 bytes / 2000 graphemes.

security array of ref #contact Required

At least one security contact. Vendors SHOULD specify at least one of url or email per contact. Clients SHOULD refuse to install packages without at least one valid security contact.

maxLength: 8 itemsminLength: 1 items
slug string Optional

URL-safe slug. ASCII letter followed by ASCII letters, digits, '-', or '_'. If present, MUST equal the record key. If absent, clients use the rkey as the display slug. Aggregators MUST reject records where slug is present and disagrees with the rkey.

maxLength: 64 bytesminLength: 1 bytes
type string Required

Package type from FAIR's type registry. EmDash plugins use 'emdash-plugin'. Custom types use the 'x-' prefix.

maxLength: 64 bytes
Known values: emdash-plugin
View raw schema
{
  "description": "A plugin package profile, identifying the package and carrying metadata that does not change between releases. Each release belongs to exactly one profile in the same publisher's repo. The record key is the package slug.",
  "key": "any",
  "record": {
    "properties": {
      "authors": {
        "description": "At least one author. Vendors SHOULD specify at least one of url or email per author.",
        "items": {
          "ref": "#author",
          "type": "ref"
        },
        "maxLength": 32,
        "minLength": 1,
        "type": "array"
      },
      "description": {
        "description": "Short description of the package. SHOULD NOT exceed 140 characters per FAIR convention.",
        "maxGraphemes": 140,
        "maxLength": 1024,
        "type": "string"
      },
      "extensions": {
        "description": "Opaque extension container keyed by NSID. The base profile Lexicon does not validate entries; consumers dispatch known entries to their embedded extension schemas. EmDash delegated-release policy uses com.emdashcms.experimental.package.profileExtension here.",
        "type": "unknown"
      },
      "id": {
        "description": "Canonical AT URI of this profile record. Derived from the record's location at publish time; not authored by the publisher. Aggregators MUST reject records whose id does not match the AT URI they were fetched from. Mirrors FAIR's id-must-match-the-resolved-identifier rule.",
        "format": "at-uri",
        "type": "string"
      },
      "keywords": {
        "description": "Search keywords. SHOULD NOT exceed 5 items per FAIR convention.",
        "items": {
          "maxGraphemes": 64,
          "maxLength": 128,
          "type": "string"
        },
        "maxLength": 5,
        "type": "array"
      },
      "lastUpdated": {
        "description": "ISO 8601 datetime for the package's last update.",
        "format": "datetime",
        "type": "string"
      },
      "license": {
        "description": "SPDX license expression, or the literal 'proprietary'. Clients SHOULD refuse to install packages without a valid license.",
        "maxLength": 256,
        "type": "string"
      },
      "name": {
        "description": "Human-readable name for the package, displayed in directory listings.",
        "maxGraphemes": 100,
        "maxLength": 1024,
        "type": "string"
      },
      "sections": {
        "description": "Map of human-readable text sections (description, installation, faq, changelog, security). CommonMark Markdown. Each value capped at 20000 bytes / 2000 graphemes.",
        "ref": "#sections",
        "type": "ref"
      },
      "security": {
        "description": "At least one security contact. Vendors SHOULD specify at least one of url or email per contact. Clients SHOULD refuse to install packages without at least one valid security contact.",
        "items": {
          "ref": "#contact",
          "type": "ref"
        },
        "maxLength": 8,
        "minLength": 1,
        "type": "array"
      },
      "slug": {
        "description": "URL-safe slug. ASCII letter followed by ASCII letters, digits, '-', or '_'. If present, MUST equal the record key. If absent, clients use the rkey as the display slug. Aggregators MUST reject records where slug is present and disagrees with the rkey.",
        "maxLength": 64,
        "minLength": 1,
        "type": "string"
      },
      "type": {
        "description": "Package type from FAIR's type registry. EmDash plugins use 'emdash-plugin'. Custom types use the 'x-' prefix.",
        "knownValues": [
          "emdash-plugin"
        ],
        "maxLength": 64,
        "type": "string"
      }
    },
    "required": [
      "id",
      "type",
      "license",
      "authors",
      "security"
    ],
    "type": "object"
  },
  "type": "record"
}
author object

FAIR Metadata Document authors[] item. Authors SHOULD include at least one of url or email so users can identify the publisher behind the package; clients render absent contact information as 'unknown'.

Properties

email string Optional

No description available.

maxLength: 256 bytes
name string Required

No description available.

maxLength: 256 bytesmaxGraphemes: 64 graphemes
url string uri Optional

A valid URI.

maxLength: 1024 bytes
View raw schema
{
  "description": "FAIR Metadata Document authors[] item. Authors SHOULD include at least one of url or email so users can identify the publisher behind the package; clients render absent contact information as 'unknown'.",
  "properties": {
    "email": {
      "maxLength": 256,
      "type": "string"
    },
    "name": {
      "maxGraphemes": 64,
      "maxLength": 256,
      "type": "string"
    },
    "url": {
      "format": "uri",
      "maxLength": 1024,
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "type": "object"
}
contact object

FAIR Metadata Document security[] item. At least one of url or email MUST be present; Lexicon cannot express required-one-of, so aggregators MUST validate this and reject records carrying a contact with neither field.

Properties

email string Optional

No description available.

maxLength: 256 bytes
url string uri Optional

A valid URI.

maxLength: 1024 bytes
View raw schema
{
  "description": "FAIR Metadata Document security[] item. At least one of url or email MUST be present; Lexicon cannot express required-one-of, so aggregators MUST validate this and reject records carrying a contact with neither field.",
  "properties": {
    "email": {
      "maxLength": 256,
      "type": "string"
    },
    "url": {
      "format": "uri",
      "maxLength": 1024,
      "type": "string"
    }
  },
  "type": "object"
}
sections object

Free-form map keyed by section name (FAIR-recognised: description, installation, faq, changelog, security). Each value is CommonMark Markdown capped at 20000 bytes / 2000 graphemes. Clients sanitise rendered output. Lexicon cannot type arbitrary keys; unrecognised sections pass through verbatim and renderers display them with the section key as heading.

Properties

changelog string Optional

No description available.

maxLength: 20000 bytesmaxGraphemes: 2000 graphemes
description string Optional

No description available.

maxLength: 20000 bytesmaxGraphemes: 2000 graphemes
faq string Optional

No description available.

maxLength: 20000 bytesmaxGraphemes: 2000 graphemes
installation string Optional

No description available.

maxLength: 20000 bytesmaxGraphemes: 2000 graphemes
security string Optional

No description available.

maxLength: 20000 bytesmaxGraphemes: 2000 graphemes
View raw schema
{
  "description": "Free-form map keyed by section name (FAIR-recognised: description, installation, faq, changelog, security). Each value is CommonMark Markdown capped at 20000 bytes / 2000 graphemes. Clients sanitise rendered output. Lexicon cannot type arbitrary keys; unrecognised sections pass through verbatim and renderers display them with the section key as heading.",
  "properties": {
    "changelog": {
      "maxGraphemes": 2000,
      "maxLength": 20000,
      "type": "string"
    },
    "description": {
      "maxGraphemes": 2000,
      "maxLength": 20000,
      "type": "string"
    },
    "faq": {
      "maxGraphemes": 2000,
      "maxLength": 20000,
      "type": "string"
    },
    "installation": {
      "maxGraphemes": 2000,
      "maxLength": 20000,
      "type": "string"
    },
    "security": {
      "maxGraphemes": 2000,
      "maxLength": 20000,
      "type": "string"
    }
  },
  "type": "object"
}

Lexicon Garden

@