WebSocket Events

The Runtime API broadcasts lifecycle events to all connected WebSocket clients via the existing WebSocket server. Events use the RuntimeEvent message type with a structured JSON payload.

Message format:

{
  "Type": "RuntimeEvent",
  "Content": "{\"event\":\"reload_completed\",\"state\":\"Running\",\"projectName\":\"MyProject.prj\",\"reloadDurationSeconds\":2.34,\"timestamp\":\"2026-04-18T12:15:30.000Z\"}"
}

Events:

Event Fired when Extra fields
state_changed Any RuntimeState transition previousState, reason
project_started Project start (initial or reload) succeeds projectName, projectFileName, totalProjectsStarted
reload_completed Reload completes successfully projectName, reloadDurationSeconds, reason
load_failed Load or reload fails projectFileName, reason
project_stopped Project stopped, runtime now idle projectName, reason
first_frame First frame rendered after start/reload projectName, timeToFirstFrameSeconds
runtime_exit Runtime shutting down uptimeSeconds, totalProjectsStarted, totalReloads, totalErrors, totalWarnings
video_worker_crash Video worker exited unexpectedly projectName, severity ("critical")

All events include event, state, and timestamp fields. Events are fire-and-forget — if no WebSocket clients are connected, broadcasts are silently skipped.