Skip to main content

Events

Skydimo broadcasts real-time events as JSON-RPC 2.0 notifications. Events are pushed from the server without a request — they have no id field.

Event Format​

{
"jsonrpc": "2.0",
"method": "event",
"params": {
"event": "<event_name>",
"data": { ... }
}
}

Event Types​

devices-changed​

Fired when the device list or any device configuration changes (device connected/disconnected, settings updated, etc.).

{
"event": "devices-changed",
"data": {
"devices": [ ... ]
}
}

Triggers: device connect/disconnect, nickname change, effect change, brightness change, segment update, LED lock change.

tip

This is the primary event for keeping your UI in sync. When received, refresh the full device list.


device-led-update​

High-frequency event (~30 fps) containing the current LED colors for a device output.

{
"event": "device-led-update",
"data": {
"port": "COM3",
"outputId": "out1",
"colors": [255, 0, 0, 0, 255, 0, 0, 0, 255, ...]
}
}

The colors array contains RGB triples (R, G, B, R, G, B, ...) for each LED.

Performance

This event fires at high frequency. Use a Web Worker or throttle rendering to avoid blocking the UI thread.


notification​

A toast notification from Core or a plugin.

{
"event": "notification",
"data": {
"id": "notif_123",
"title": "Device Connected",
"description": "Skydimo LED Controller found on COM3",
"level": "info",
"persistent": false
}
}

Levels: "info", "warn", "error"

Persistent Updates: If persistent is true and the UI receives another notification event with the EXACT SAME id, the existing toast's title and description will be updated in-place instead of creating a new one. This is extremely useful for progress bars or real-time status updates (e.g. Scanning... 10/100).


notification-dismiss​

Dismisses a persistent notification.

{
"event": "notification-dismiss",
"data": {
"id": "notif_123"
}
}

led-locks-changed​

Fired when extension plugins lock or unlock LEDs.

{
"event": "led-locks-changed",
"data": { ... }
}

Query the full lock state via the get_led_locks command.


ext-page-message:{extId}​

Fired when an extension’s embedded HTML page sends a message to Core. The event name includes the extension ID.

{
"event": "ext-page-message:openrgb",
"data": { ... }
}

Lua extensions receive this via on_page_message(data). Native-c extensions receive the same payload through on_page_message_json.​

system.process.changed​

Version

Available since 3.0.0-dev.3. Currently only supported on Windows.

Fired when the list of running application processes changes (an application starts or stops). Extension plugins with the system:process permission receive this via the on_system_state_changed("process", data) callback.

{
"event": "system.process.changed",
"data": {
"supported": true,
"apps": [
{ "name": "chrome.exe", "instance_count": 3 },
{ "name": "code.exe", "instance_count": 1 }
],
"changes": [
{ "name": "notepad.exe", "previous_instance_count": 1, "current_instance_count": 0 }
]
}
}
FieldTypeDescription
supportedbooleanWhether process monitoring is supported on the current platform
appsarrayFull list of currently running applications
changesarrayApplications whose instance count changed in this update

system.focus.changed​

Version

Available since 3.0.0-dev.3. Currently only supported on Windows.

Fired when the foreground window focus changes (user switches to a different window, or the current window's title changes). Extension plugins with the system:window-focus permission receive this via the on_system_state_changed("window_focus", data) callback.

{
"event": "system.focus.changed",
"data": {
"supported": true,
"reason": "foreground_changed",
"current": {
"app_name": "code.exe",
"window_title": "extension-api.md - Light - Visual Studio Code"
},
"previous": {
"app_name": "chrome.exe",
"window_title": "GitHub"
}
}
}
FieldTypeDescription
supportedbooleanWhether window focus monitoring is supported on the current platform
reasonstring"snapshot", "foreground_changed", or "title_changed"
currentobject?Currently focused window (app_name, window_title), or null
previousobject?Previously focused window, or null

Subscribing to Events​

Since 3.0.0-dev.3, events are automatically pushed to all connected local WebSocket clients. No explicit subscription is required.