Skip to content

run.yaml reference

run.yaml supplies runtime settings to space run. It selects a composition and configures partition memory, service placement, frame routing, and the local ground endpoint.

space run --runtime run.yaml boots the image the file names, and space run classifier:test --runtime run.yaml overrides it with the image on the command line. The image field is still required when the command overrides it. --dry-run validates and prints the resolved configuration without starting the workload, which is the session below.

Example

schema: space.run
version: "1"
image: classifier:dev
partitions:
bus-relay:
memory: 128
apids: [0x001, 0x00F]
payload:
memory: 256
apids: [0x010, 0x01F]
services:
- name: eo-classifier
isolation: runc
cpus: [0, 1]
bridges: [payload-net]
- name: sdls-downlink
isolation: hvt
relay:
from: bus-relay
to: [payload, ground]
ground:
port: 8080
socket: /tmp/spaceos/ground.sock
Terminal window
$ space run --runtime run.yaml --dry-run
Local target: ...
Boot image: not validated (not in the local store: linuxkit/kernel:6.6.13); build first
image: classifier:dev
partitions:
bus-relay 128 MB apids 0x001, 0x00f
payload 256 MB apids 0x010, 0x01f
services:
eo-classifier runc cpus 0, 1
sdls-downlink hvt
relay: bus-relay -> payload, ground (sdls)
ground: port 8080 socket /tmp/spaceos/ground.sock
2 partitions, 384 MB total
Dry run complete; no workload started.

Boot image: not validated means the referenced composition is not in the local store. Build or pull it before starting the workload.

Top-level fields

FieldTypeRequiredDescription
schemastringyesMust be space.run.
versionstringyesMust be "1".
imagestringyesLocal path, tag, or OCI reference. A positional IMAGE argument to space run overrides it.
partitionsmapyesRuntime settings keyed by the partition names from build.yaml. At least one partition is required.
relaymapnoFrame route, queue limits, and authentication settings.
groundmapnoLocal ground-service endpoint.
bindingsmapnoWIP What this run supplies for each accelerator the application requires, under bindings.accelerators, keyed by the role the app declared: a content-addressed model or bitstream, and requested_limits. The decoder takes it and checks it against the app’s requirements; realizing the flow through to the device is next-release work.
acquisitionmapnoThe imagery this run wants, and when: area as west, south, east and north in degrees, from as an RFC 3339 instant, and hours of window (default 24). A run on the local engine ignores it; a run bought from an operator that owns spacecraft is where it is read. space deploy --area, --from and --hours override it.
outputstringnoDirectory the run writes its results into. Naming it empty is refused; omit it instead.

Unknown fields are rejected.

Partition fields

Each key under partitions must match a partition in build.yaml.

FieldTypeRequiredDescription
partitions.<name>.memoryintno; default 256Memory in MB.
partitions.<name>.apidstwo-item int listno; default []Inclusive CCSDS APID range, from 0x000 to 0x7FF. Example: [0x010, 0x01F].
partitions.<name>.serviceslistno; default []Per-service runtime overrides.

Service fields

Each item under partitions.<name>.services has these fields:

FieldTypeRequiredDescription
namestringyesService name from the same partition in build.yaml.
isolationenumno; default autoOne of auto, runc, spt, hvt, qemu, host, or firecracker.
cpuslist of intno; default []CPU IDs. An empty list uses the build default.
bridgeslist of stringno; default []IP bridge names. An empty list uses the build default.

Relay fields

If relay is omitted, from is the first partition and to contains the remaining partitions plus ground.

FieldTypeRequiredDescription
relay.fromstringnoSource partition. ground is not valid here.
relay.tolist of stringnoDestination partitions and/or ground. A name may appear once. Telecommands use the reverse route.
relay.limits.rateintno; default 1000Frames admitted per second. 0 disables the rate limit.
relay.limits.burstintno; default 64Maximum burst above the configured rate.
relay.limits.queue_depthintno; default 256Frames held in each egress queue.
relay.limits.drop_policyenumno; default drop-oldestOne of block, drop-new, or drop-oldest.

Relay security fields

These fields are under relay.security. Key material is provisioned at runtime and is not stored in run.yaml.

FieldTypeRequiredDescription
spiintno; default 1SDLS Security Parameter Index, from 0 to 65535.
scidintno; default 0Spacecraft ID.
vcidintno; default 0Virtual channel ID.
acsstringno; default aes-256-cmacAuthentication cipher suite: one of aes-256-cmac, hmac-sha-256, hmac-sha-384 or hmac-sha-512. Any other name is refused.
sn_lenintno; default 4Sequence-number length in bytes.
arsnwintno; default 128Anti-replay window size.
authenticationenumno; default sdlssdls is the only posture, and the relay authenticates every frame. The plaintext link is gone: it existed to avoid an association key, and that key is now drawn per run and typed by nobody.

Ground fields

The ground block only configures local execution. space deploy uses the ground service from the active context.

FieldTypeRequiredDescription
ground.portintno; default 8080Local ground-service TCP port.
ground.socketstringno; default /tmp/spaceos/ground.sockLocal ground-service Unix socket. The path is bound as written, so it must be absolute.

Isolation backends

ValueUse
autoSelect a backend compatible with the service runtime.
runcRun an OCI container.
sptRun a Solo5 unikernel with seccomp. KVM is not required.
hvtRun a Solo5 unikernel with KVM.
qemuRun a unikernel under the QEMU system emulator. The runner executes qemu-system-x86_64, so an Unikraft package built for that target runs here on any host arch.
firecrackerRun a unikernel in a Firecracker micro-VM.
hostRun a development fixture on the host.

Backend availability depends on the host and target profile. Validation rejects an incompatible service runtime and isolation backend.

Validation rules

  • Partition and service names must match build.yaml.
  • ground is reserved and cannot be used as a partition name.
  • relay is the only place to define the frame route.
  • partitions.<name>.send_to is not a valid field.
  • Per-service frame permissions are defined by the frame_bus interface in build.yaml.