Event catalog¶
These are the events you can subscribe to with API:On. On rejects any name not on this list. Your handler receives the payload arguments shown — the event name is not passed — and any table argument is a deep-copied, read-only snapshot.
The Fires column tells you what emits today. Everything here fires from a real site in EMS, with one wrinkle: GEMS_UI_NAV_CHANGED only fires when a layout provider drives SetActiveView, since classic has no nav region of its own.
Sequence and plugin lifecycle¶
| Event | Payload | Fires | Meaning |
|---|---|---|---|
SEQUENCE_CREATED |
(name, data) |
yes | a sequence was created; data is a read-only copy of its sequence table |
SEQUENCE_DELETED |
(name) |
yes | a sequence was removed |
SEQUENCE_IMPORTED |
(results) |
yes | an import finished; results is a table summarizing what was imported |
SEQUENCE_STEP_ADVANCED |
(seqName, step, numSteps) |
yes | a sequence advanced a step during execution |
SETTING_CHANGED |
(key, value) |
yes | a setting changed; fires for every changed key/value |
PLUGIN_REGISTERED |
(name, version) |
yes | a plugin registered through the sequence registry |
PLUGIN_SEQUENCES_LOADED |
none | yes | plugin sequences finished loading into the engine |
For SEQUENCE_CREATED, prefer GetSequenceInfo(name) for documented per-field metadata rather than reading the raw data copy.
Core change signals¶
These fire from the engine on a real change. They were internal in v1; v2 makes them public.
| Event | Payload | Fires | Meaning |
|---|---|---|---|
SEQUENCE_UPDATED |
(name, data) |
yes | a sequence was saved; data is a read-only copy of its table |
KEYBIND_CHANGED |
(seqName, key) |
yes | a sequence keybind changed; both args may be nil on a bulk or clear change |
CONTEXT_CHANGED |
(newContext, oldContext) |
yes | the detected content context changed |
LOADOUT_CHANGED |
(newID, newName, oldID, oldName) |
yes | the active talent loadout changed |
UI and preview¶
| Event | Payload | Fires | Meaning |
|---|---|---|---|
GEMS_UI_READY |
none | yes | the window and its host frames are built and initialized |
GEMS_UI_LAYOUT_APPLY |
none | yes | a layout pass ran (after OnApplyLayout) |
GEMS_PREVIEW_MODE_CHANGED |
(mode) |
yes | preview mode changed to "icons", "text", or "compiled" |
GEMS_PREVIEW_UPDATE |
none | yes | the preview re-rendered |
GEMS_UI_NAV_CHANGED |
(viewId) |
yes | fires from SetActiveView; only a layout provider driving its own nav emits it |
GEMS_EDITOR_TAB_CHANGED |
(tabName) |
yes | the editor switched sub-tabs |
GEMS_SEQUENCE_SELECTED |
(name) |
yes | a sequence was selected in the list |
GEMS_UI_READY is the signal to do your UI setup — host frames don't exist before it.
Not on the public bus¶
EMS fires other events internally that aren't part of the public contract — On won't accept them. The catalog above is the full public set. If you need an internal signal exposed publicly, open an issue; the core change signals above were internal until they were added this way.