Reference / listing

Musher Listing Document

The catalog storefront entry for a blueprint or component.

JSON Schema · Specification · Examples · Source

This reference is generated from the schema bundle and is informative. Where it differs from the specification, the specification governs. A documented default is an annotation: no validator inserts it.

Structural and type validation only — cross-document reference resolution, slug/directory agreement, and platform capability checks are separate validation layers. See spec.md.

Contents

listing document

The catalog storefront entry for a blueprint or component.

Authoring note

Structural and type validation only — cross-document reference resolution, slug/directory agreement, and platform capability checks are separate validation layers. See spec.md.

kind required

string — always LISTING

Document kind discriminator. Must be LISTING.

metadata required

ListingMetadata

spec required

ListingSpec

specVersion required

string — one of v1

Version of the Musher specification this document is written against.

ListingMetadata

Identity block of a listing document. A listing names the item it presents and carries no revision of its own; the item's revision is the blueprint's. See spec.md §3.

slug required

string

Item slug — must equal the item's directory name.

maxLength 63 · pattern "^[a-z][a-z0-9-]{0,61}[a-z0-9]$"

ListingScreenshot

One storefront screenshot declared as a relative media path.

caption optional

string

Accessible caption shown beneath the screenshot. Omitted when none.

maxLength 280

file required

string

Path of the screenshot asset under the item's media/ directory, relative to the item root. Must be a .png, .jpg, .jpeg or .webp below media/.

minLength 1 · maxLength 512 · pattern "^media/(?:[A-Za-z0-9][A-Za-z0-9._-]*/)*[A-Za-z0-9][A-Za-z0-9._-]*\\.(?:[Pp][Nn][Gg]|[Jj][Pp][Gg]|[Jj][Pp][Ee][Gg]|[Ww][Ee][Bb][Pp])$"

Authoring note

Lookahead-free so it compiles under RE2 as well as ECMA-262. A segment must begin with a letter or digit, which is how . and .. are excluded without a negative lookahead; the extension alternation is spelled in character classes because a JSON Schema pattern carries no case-insensitive flag. See spec.md §5.

ListingSpec

The spec block of a listing document — how the item is presented, categorised, and discovered on the storefront.

Identity lives in metadata, not here. icon and screenshots[].file are media paths, resolved inside the item root and required to begin with media/.

category required

string — one of MEDIA, PRODUCTIVITY, AI_ML, AGENTS, DEVELOPER_TOOLS, INFRASTRUCTURE, COMMUNICATION, AUTOMATION, NETWORKING, STORAGE, SECURITY, GAMING

Storefront category the listing is browsed under.

description optional

string

Long-form Markdown storefront description. Omitted when none.

maxLength 20000

displayName required

string

Storefront title shown to prospective installers.

minLength 1 · maxLength 200

homepageURL optional

string

Project homepage URL. Omitted when none. Must use the https, http, or mailto scheme, in any case.

maxLength 2048 · pattern "^(?:[Hh][Tt][Tt][Pp][Ss]?://|[Mm][Aa][Ii][Ll][Tt][Oo]:)[^\\s]+$"

Authoring note

Anchored and lookahead-free, so it compiles under RE2 as well as ECMA-262 and cannot be driven to backtrack. The scheme set is spec.md §4.1's, applied to a field that carries a URL directly rather than inside Markdown. The scheme alternation is spelled in character classes because a JSON Schema pattern carries no case-insensitive flag, and RFC 3986 §3.1 makes the scheme case-insensitive — the same reason the media path alternation is spelled that way. Without it this pattern would reject an upper-case scheme the description half of the same rule accepts.

icon optional

string

Path of the listing's icon under the item's media/ directory (e.g. media/icon.png), relative to the item root. Omitted for no icon.

maxLength 512 · pattern "^media/(?:[A-Za-z0-9][A-Za-z0-9._-]*/)*[A-Za-z0-9][A-Za-z0-9._-]*\\.(?:[Pp][Nn][Gg]|[Jj][Pp][Gg]|[Jj][Pp][Ee][Gg]|[Ww][Ee][Bb][Pp])$"

Authoring note

The same grammar ListingScreenshot.file carries; see the note there.

itemType required

string — one of BLUEPRINT, COMPONENT

Shape of the catalog item this listing presents: BLUEPRINT (a composition) or COMPONENT (a single building block).

Authoring note

spec.md §3. BLUEPRINT if and only if the item root holds blueprint.yaml — a semantic rule, because it reads the item root rather than the document.

license optional

string

SPDX licence expression for the listed software, such as MIT or Apache-2.0 WITH LLVM-exception. Omitted when unspecified.

maxLength 256 · pattern "^[A-Za-z0-9.+-]{1,64}(?: (?:WITH|AND|OR) [A-Za-z0-9.+-]{1,64}){0,8}$"

Authoring note

spec.md §4 / ADR 0003 §2 and §4. The shape is this contract's and the membership is SPDX's, published at https://spdx.org/licenses/ and deliberately not restated. Flat: a parenthesised expression is outside this grammar, which spec.md §9 records. Anchored and lookahead-free, so it compiles under RE2 as well as ECMA-262.

lifecycleStage required

string — one of STABLE, BETA, EXPERIMENTAL, SUNSET

Maturity stage shown on the storefront: STABLE, BETA, EXPERIMENTAL, or SUNSET.

screenshots optional

array of ListingScreenshot

Storefront screenshots in display order, declared as media paths. At most twelve.

maxItems 12

sourceRepoURL optional

string

Source repository URL. Omitted when none. Must use the https, http, or mailto scheme, in any case.

maxLength 2048 · pattern "^(?:[Hh][Tt][Tt][Pp][Ss]?://|[Mm][Aa][Ii][Ll][Tt][Oo]:)[^\\s]+$"

Authoring note

The same grammar homepageURL carries; see the note there.

summary required

string

One-line storefront tagline summarising the listing.

minLength 1 · maxLength 280

supportURL optional

string

Support or documentation URL. Omitted when none. Must use the https, http, or mailto scheme, in any case.

maxLength 2048 · pattern "^(?:[Hh][Tt][Tt][Pp][Ss]?://|[Mm][Aa][Ii][Ll][Tt][Oo]:)[^\\s]+$"

Authoring note

The same grammar homepageURL carries; see the note there. mailto: is in the set for this field in particular — a support address is a plausible value.

tags optional

array of string

Free-form discovery tags applied to the listing. At most sixteen, and a tag may not repeat.

maxItems 16 · uniqueItems true