Manifest Reference (vyoma.toml)

Every VyomaOS app requires a vyoma.toml manifest that declares its identity and capabilities.

Structure

[app]
name = "my-app"
version = "0.1.0"
wasm = "my-app.wasm"

[capabilities]
stdio = true
filesystem = false
network = false
display = false
shell = false
mouse = false
watchdog_secs = 0

[window]
title = "My App"
x = 0
y = 20
width = 480
height = 360

[app] section

FieldTypeRequiredDescription
namestringyesApplication identifier (must match binary name)
versionstringyesSemantic version
wasmstringyesWASM binary filename

[capabilities] section

FieldTypeDefaultDescription
stdioboolfalseApp inherits supervisor stdin/stdout
filesystemboolfalseApp mounts /data (9P persistent storage)
networkboolfalseApp gets WASI sockets support
displayboolfalseApp can use VYOMA_DRAW protocol
shellboolfalseApp can issue @supervisor: commands
mouseboolfalseApp receives mouse events
watchdog_secsint0Kill app if silent for N seconds (0 = disabled)

Peripheral capabilities (embedded/robotics)

[capabilities]
touch = true

[capabilities.gpio]
pins = [4, 17]
direction = "output"

[capabilities.i2c]
bus = 1

[capabilities.spi]
bus = 0

[capabilities.uart]
port = 0

[capabilities.adc]
channel = 0
FieldTypeDescription
touchboolReceive VYOMA_INPUT:touch: events
gpio.pins[u8]Exclusive access to GPIO pins
gpio.directionstring"input" or "output"
i2c.busu8I2C bus number
spi.busu8SPI bus number
uart.portu8UART port number
adc.channelu8ADC channel number

[window] section (optional)

FieldTypeDefaultDescription
titlestringapp nameWindow title bar text
xint0Initial X position
yint20Initial Y position
widthint480Window width in pixels
heightint360Window height in pixels

Restart policies

Apps declare restart behavior in [app]:

[app]
restart = "always"   # Restart on exit (default for services)
# restart = "never"  # One-shot execution (default for tools)

Validation

The supervisor validates manifests at startup. Invalid manifests produce errors:

[manifest] ERROR: unknown field "nework" in capabilities for app "my-app"
[manifest] ERROR: missing required field "name" in [app] for "my-app"

Run validation manually:

make check-manifests