Skip to content

App Manifest

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

[app]
name = "my-app"
version = "0.1.0"
wasm = "my-app.wasm"
[capabilities]
stdio = true
filesystem = true
network = true
display = true
shell = true
mouse = true
watchdog_secs = 30
FieldTypeRequiredDescription
namestringyesApp identifier (must match directory name)
versionstringyesSemantic version
wasmstringyesWASM binary filename (relative to app dir)

All capabilities default to false (not wired up). Only declare what your app needs.

Type: bool

Wires up stdin, stdout, and stderr. Required for:

  • Console output (println!)
  • Receiving keyboard input via stdin
  • Using the VYOMA_DRAW display protocol (writes to stdout)
  • IPC messaging (writes @<target>: msg to stdout)

Type: bool

Mounts the persistent /data directory (9P virtio, backed by host data/ folder). Files written here survive VM reboots.

Type: bool

Enables WASI sockets support. App can bind TCP ports (default: 8080). Requires booting with make run-net or make run-gui-net.

Type: bool

Grants access to the framebuffer. App can use the VYOMA_DRAW: protocol to render graphics. The supervisor manages window chrome around the app’s drawing area.

Type: bool

Allows the app to issue @supervisor: IPC commands for process management (list, kill, restart, focus, etc.).

Type: bool

App receives VYOMA_INPUT:mouse: events when the cursor is within the app’s window region. Events include click, move, and drag with coordinates.

Type: integer

If set to a non-zero value, the supervisor kills the app if it produces no output for N seconds. Set to 0 or omit to disable.

The supervisor validates all manifests at startup. Invalid manifests produce clear error messages:

  • Unknown fields in [capabilities] → error with field name
  • Missing [app] section → parse error
  • Missing required fields → parse error
  • TOML syntax errors → line/column reported

Run make check-manifests to validate all app manifests without booting.

[app]
name = "hello-world"
version = "0.1.0"
wasm = "hello-world.wasm"
[capabilities]
stdio = true
[app]
name = "paint"
version = "0.1.0"
wasm = "paint.wasm"
[capabilities]
stdio = true
display = true
mouse = true
[app]
name = "file-manager"
version = "0.1.0"
wasm = "file-manager.wasm"
[capabilities]
stdio = true
filesystem = true
display = true
shell = true
mouse = true