Reference / blueprint

Musher Blueprint Document

A composition of one or more components into a single deployable application.

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

blueprint document

A composition of one or more components into a single deployable application.

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 BLUEPRINT

Document kind discriminator. Must be BLUEPRINT.

metadata required

BlueprintMetadata

spec required

BlueprintSpec

specVersion required

string — one of v1

Version of the Musher specification this document is written against.

BlueprintBinding

Where one receiving input’s value comes from.

Used as a map value, keyed by inputName.

Authoring note

spec.md §4.2 / ADR 0031 §1. The key that is present says where the input’s value comes from: a parameter, another node’s output, or a literal value. Exactly one; node goes with output. Values from outside the documents enter only through parameters.

Forms

Exactly one of parameter, node with output, or value is present. The key present selects the form.

node requires output.

output requires node.

node optional

string

Node whose output supplies the value.

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

output optional

string

Output of that node.

maxLength 64 · pattern "^[a-z][a-zA-Z0-9]{0,63}$"

parameter optional

string

Installation parameter supplying the value.

maxLength 64 · pattern "^[a-z][a-zA-Z0-9]{0,63}$"

value optional

any value

Logical non-secret literal value.

BlueprintCompute

The compute a workload node runs on: a compute profile, and optional placement pins that narrow where it is placed. Required on a node whose component runs, forbidden on one whose component is EXTERNAL. See spec.md §4.3.

placement optional

BlueprintPlacement

Optional pins narrowing the eligible hosts. Absent and a block with no pin set mean the same thing.

profile required

string

Compute profile slug in family.tier.size form, for example general.standard.small. The profiles actually on offer are published at https://api.musher.dev/v1/reference/compute-profiles.

maxLength 64 · pattern "^(general|compute|memory|storage|gpu|accelerator)\\.(economy|standard|performance|premium)\\.(nano|small|medium|large|xlarge)$"

Authoring note

Lookahead-free, so it compiles under RE2 as well as ECMA-262. Only the grammar is here; membership is a capability check (spec.md §4.3).

BlueprintConnectionBinding

Used as a map value, keyed by requirementName.

parameter required

string

Parameter whose from names a connection, ${{ connections.<path> }}.

maxLength 64 · pattern "^[a-z][a-zA-Z0-9]{0,63}$"

BlueprintMetadata

Identity and description of a blueprint document. The blueprint carries the item’s revision; its sibling listing carries none. See spec.md §3.

description optional

string

What this application is, in one or two plain-text sentences. Required to publish.

minLength 1 · maxLength 280

Authoring note

spec.md §3 BP-ID-004. Plain text, never rendered as Markdown, bounded like a listing summary. It describes the deployable application to the people who install and operate it; the sibling listing’s summary remains the storefront copy. Structurally optional so a blueprint can be stored while it is being written; BP-ID-005 requires it of a published one.

revision required

integer

Item revision: the position of this release in the catalog item's lineage. Orders releases and nothing more.

minimum 1

slug required

string

Item slug, which must equal the item's directory name.

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

BlueprintNode

Used as a map value, keyed by nodeName.

Conditional rules

When componentRef matches ^\.{1,2}/, revision must not be present.

Otherwise, revision is required.

bindings optional

mapping, keyed by inputName matching ^[a-z][a-zA-Z0-9]{0,63}$, to BlueprintBinding

Explicit supplier for each receiving input, keyed by the component’s input name.

componentRef required

one of 2 forms: pattern ^(?:\./|(?:\.\./)+)(?:[A-Za-z0-9][A-Za-z0-9._-]*/)*[A-Za-z0-9][A-Za-z0-9._-]*\.ya?ml$, or pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

Reference to the component document this node deploys, in one of two forms. A repo-local reference begins ./ or ../ and ends .yaml or .yml, and resolves relative to the directory holding this blueprint document; its version is the referenced document's metadata.revision. A published reference is the component's UUID, which names the component across all its revisions, and requires revision to select the one deployed. The relative-path prefix is what tells the two apart: a bare slug is not distinguishable from a UUID.

maxLength 256

Authoring note

Both patterns are lookahead-free so they compile under RE2 as well as ECMA-262. A path segment must begin with a letter or digit, which is how . and .. are excluded as interior segments without a negative lookahead; that leaves one spelling per target and keeps the containment check in the semantic phase from having to normalise first.

compute optional

BlueprintCompute

Compute profile and placement for a node whose component runs. Omitted, and forbidden, where the component is EXTERNAL; that agreement is a semantic check against the component (spec.md §4.3).

connectionBindings optional

mapping, keyed by requirementName matching ^[a-z][a-zA-Z0-9]{0,63}$, to BlueprintConnectionBinding

The connection parameter that satisfies each of the component’s connection requirements, keyed by requirement name.

exposure optional

mapping, keyed by endpointName matching ^[a-z][a-z0-9]{0,19}$, to string — one of PUBLIC, PRIVATE

Exposure of each of the component’s endpoints, keyed by endpoint name; an endpoint left out is PRIVATE. A WORKER endpoint is never PUBLIC.

revision optional

integer

Lineage version pinned by a published reference. Required on a published reference and rejected on a repo-local one, where the referenced document's own metadata.revision supplies it.

minimum 1

volumes optional

mapping, keyed by volumeName matching ^[a-z][a-z0-9-]{0,61}[a-z0-9]$, to BlueprintVolumeAllocation

Storage allocated to each of the component’s volumes, keyed by the component’s volume name.

BlueprintParameter

Named installation value, bound explicitly by the nodes that consume it.

Used as a map value, keyed by parameterName.

Authoring note

spec.md §5 / ADR 0031 §4. A parameter is supplied in one way: submitted (with an optional default), generated, or read from outside the documents through from. At most one of default, generator and from.

Conditional rules

When generator is present, default must not be present.

When generator is present, from must not be present.

When from is present, default must not be present.

default optional

any value

Logical default, replaced by a submitted value. No interpolation.

from optional

string

One whole reference to a value outside the documents: ${{ variables. }} for an organization variable, or ${{ connections. }} for an atomic connection. Never submitted; a connection is replaced whole through acquisition instead.

minLength 1 · maxLength 512

generator optional

BlueprintParameterGenerator

Persisted credential generation; a submitted value is rejected.

ui optional

BlueprintParameterUi

Optional install-form presentation.

BlueprintParameterGenerator

byteLength optional

integer

Number of random bytes generated for the value.

minimum 16 · maximum 64 · documented default 32

encoding optional

string — one of HEX, BASE64, BASE64URL

Encoding applied to securely generated random bytes.

documented default "HEX"

BlueprintParameterUi

Presentation metadata for an install-form parameter.

Authoring note

spec.md §5.4. The control is derived from the logical schema of the inputs the parameter is bound to rather than declared, so this carries only what a derivation cannot supply.

enumLabels optional

mapping, keyed by enumMember, to string

Human-readable label for each enum member, keyed by the member it names. A member left unlabelled is offered as it is spelled.

examples optional

array of string

Example values illustrating the form a value takes. Never submitted; parameter.default supplies an omitted submission.

label required

string

Human-readable label shown on the install form.

order optional

integer

Relative position of the field within the form. Lower sorts first; a parameter declaring no order sorts after every parameter that declares one.

prominence optional

string — one of PRIMARY, SECONDARY

Standing of the field in the form: PRIMARY is offered directly, SECONDARY behind a disclosure the deploying user opens.

documented default "PRIMARY"

BlueprintPlacement

Optional pins that narrow the hosts eligible for the node’s compute profile. A pin never changes the compute the profile names. See spec.md §4.4.

Authoring note

Every term pin is a lowercase token rather than a member of a closed set: the grammar is fixed by this contract, the vocabularies are versioned catalog context, not part of this contract (spec.md §4.4). cpuDedication is the exception: two values are the whole concept.

acceleratorInterconnect optional

string

Required accelerator interconnect, such as nvlink or pcie. Omit to pin nothing. The permitted terms are not a vocabulary this contract defines; see spec.md §4.4.

maxLength 64 · pattern "^[a-z0-9][a-z0-9_-]*$"

acceleratorRuntimes optional

array of string

Required accelerator runtimes, such as cuda. An empty array pins nothing, and a term may not repeat. The permitted terms are not a vocabulary this contract defines; see spec.md §4.4.

uniqueItems true

acceleratorSKUClass optional

string

Exact accelerator SKU class to pin. Omit to pin nothing. The permitted terms are not a vocabulary this contract defines; see spec.md §4.4.

maxLength 64 · pattern "^[a-z0-9][a-z0-9_-]*$"

cpuArchitectures optional

array of string

Permitted CPU architectures, such as x86_64 or arm64. An empty array pins nothing, and a term may not repeat. The permitted terms are not a vocabulary this contract defines; see spec.md §4.4.

uniqueItems true

cpuDedication optional

string — one of shared, dedicated

Whether the node's vCPU must be dedicated rather than shared. Omit to pin nothing. This is the one pin whose vocabulary this contract closes; see spec.md §4.4.

minAcceleratorMemoryGiB optional

integer

Minimum accelerator VRAM in GiB. Omit to pin no floor.

minimum 1

networkClass optional

string

Required network class. Omit to pin nothing. The permitted terms are not a vocabulary this contract defines; see spec.md §4.4.

maxLength 64 · pattern "^[a-z0-9][a-z0-9_-]*$"

BlueprintResolutionRecord

blueprintDigest required

string

pattern "^[0-9a-f]{64}$"

components required

mapping, keyed by nodeName, to BlueprintResolvedComponent

minProperties 1

credentials required

mapping, keyed by parameterName, to BlueprintResolvedCredential

installationSnapshot required

BlueprintVersionedIdentity

Opaque identity and immutable version of the private installation snapshot; never a secret-derived hash.

specifications required

BlueprintResolvedSpecifications

variables required

mapping, keyed by variablePath, to BlueprintVersionedIdentity

Identity and version of each organization variable the installation read.

version required

always 1

BlueprintResolvedComponent

Conditional rules

When source is EXTERNAL, compute must not be present.

When source is EXTERNAL, gitCommit must not be present.

When source is EXTERNAL, imageDigest must not be present.

When source is EXTERNAL, exposure is required.

When source is EXTERNAL, volumes is required.

Otherwise, compute is required.

Otherwise, imageDigest is required.

When source is GIT, gitCommit is required.

Otherwise, gitCommit must not be present.

compute optional

BlueprintVersionedIdentity

digest required

string

pattern "^[0-9a-f]{64}$"

exposure required

mapping, keyed by endpointName, to one of PUBLIC, PRIVATE

gitCommit optional

string

pattern "^(?:[0-9a-f]{40}|[0-9a-f]{64})$"

identity required

string

minLength 1

imageDigest optional

string

pattern "^sha256:[0-9a-f]{64}$"

revision required

integer

minimum 1

source required

one of EXTERNAL, IMAGE, GIT

volumes required

mapping, keyed by volumeName, to BlueprintVolumeAllocation

BlueprintResolvedCredential

identity required

string

minLength 1

rotation required

integer

minimum 0

BlueprintResolvedSpecifications

blueprint required

string

pattern "^[0-9]+\\.[0-9]+\\.[0-9]+$"

component required

string

pattern "^[0-9]+\\.[0-9]+\\.[0-9]+$"

core required

string

pattern "^[0-9]+\\.[0-9]+\\.[0-9]+$"

listing optional

string

pattern "^[0-9]+\\.[0-9]+\\.[0-9]+$"

BlueprintSpec

Composition, explicit input suppliers, allocation and installation parameters.

components required

mapping, keyed by nodeName matching ^[a-z][a-z0-9-]{0,61}[a-z0-9]$, to BlueprintNode

Named component instances. At least one is required to publish.

Authoring note

spec.md §4 BP-GRAPH-001. Structurally it may be empty so a blueprint can be stored before its first node is chosen, or after its last one is removed; BP-GRAPH-001 requires at least one node of a published blueprint.

parameters optional

mapping, keyed by parameterName matching ^[a-z][a-zA-Z0-9]{0,63}$, to BlueprintParameter

Every value the installation takes from outside the documents: submitted, generated, organization variables and connections. Nothing binds by name.

BlueprintVersionedIdentity

An opaque identity and an immutable version.

identity required

string

minLength 1

version required

string

minLength 1

BlueprintVolumeAllocation

Used as a map value, keyed by volumeName.

minIOPS optional

integer

Minimum provisioned IOPS for this volume. Omit to pin no floor.

minimum 1

sizeGiB required

integer

Allocated size, at or above the component’s minSizeGiB.

minimum 1

storageClass optional

string

Required storage class for this volume, such as local-nvme. Omit to pin nothing. The permitted terms are not a vocabulary this contract defines; see spec.md §4.3.

maxLength 64 · pattern "^[a-z0-9][a-z0-9_-]*$"