Actions
Create actions, build handler chains, and test automations in Stream Kit.
Actions
Actions are the main unit of automation in Stream Kit. Each action has a handler chain (sub-actions) and one or more triggers.
Actions page
Open Actions in the sidebar.
- Groups organize actions (drag to reorder).
- Enable/disable toggles whether triggers can run the action.
- Clone duplicates an action including handlers and triggers.
- Bulk edit assigns queue, group, or enabled state to multiple actions.
- Export / Import share actions as a JSON file.
Export and import
Use Export all (or Export selected when actions are selected) to download a JSON file of your actions. Import always creates new actions — existing ones are never replaced.
- Queue assignments are stored by queue name. On import, matching queues are linked; otherwise the default queue is used. Actions with No queue stay without a queue.
- Plugin-owned actions are not included in exports.
- Triggers or handlers from plugins that are not installed still import, but show as unavailable until those plugins are available.
Action editor
Click an action to open the editor.
| Area | Purpose |
|---|---|
| Handler chain | Sub-actions run top to bottom |
| Triggers panel | Events that start this action |
| Queue | Optional queue assignment |
| Test | Run the handler chain immediately (bypasses queue) |
Handler outline and settings
The handler chain is shown as an outline on the left and the settings of the selected handler on the right. On narrow windows the editor shows one of the two at a time; use Back to handlers to return to the outline.
- Click a handler to edit it. Use the arrow keys to move through the outline; Left and Right collapse or expand an If handler.
- Add Handler inserts the new handler directly after the selected one.
- Drag handlers by their grip to reorder them, or to move them into or out of an If branch. Empty branches accept drops too.
- A red dot marks handlers with missing or invalid settings. When saving fails, the first handler with an error is selected for you.
If handler
If runs its Then branch when its conditions pass and its Else branch otherwise. Each condition compares a value (usually a {variable}) with an operator such as equals or contains.
- Add more conditions and combine them with AND / OR, or group them with Add Group — for example
({role} equals mod OR {role} equals broadcaster) AND {message} contains !clip. This keeps chains flat instead of nesting several If handlers. - Not inverts a single condition.
- Add handlers to a branch with the + next to Then / Else in the outline, or from the branch overview in the If settings.
Actions saved before AND/OR support open with their single condition converted automatically.
Handler chain rules
- Handlers call
next()to continue; omittingnext()stops the chain (used by Delay on invalid input). - Thrown errors are logged; the chain continues unless the handler stops explicitly.
- Async handlers are awaited in order, unless they are non-blocking (see below).
Blocking and non-blocking handlers
The dot on the line between two handlers in the outline controls whether the next handler waits for the one above it. Click the dot to switch.
- Orange dot, solid line (default): blocking. The next handler starts only after this one has finished.
- Dark grey dot, dashed line: non-blocking. The next handler starts right away while this one keeps running, for example to play a sound and show an alert at the same time.
This works inside If branches too. A non-blocking If runs its whole branch in the background.
The action only counts as finished, for queues and the running state, when all of its handlers are done, including the non-blocking ones. A non-blocking handler cannot stop the chain by skipping next(), because the next handler has already started.
Browse handlers in the API Reference.
Triggers panel
Add triggers from the + menu or right-click. Configure conditions per trigger. Use Test trigger to fire with sample data.
See Triggers.
Queues
New actions use the default queue. Set No queue for parallel execution, or pick a named queue to serialize runs.
See Action queues.
Variables in handlers
Use \{variableName\} in text fields. Type { in any text, condition, key-value or JSON field to get suggestions for the variables available at that point: trigger fields, global variables, and variables set by handlers that run earlier.
See Variables.
Run script handler
Add Run script from Core handlers to run custom TypeScript in the chain. Scripts receive:
app— full Stream Kit API (toast, filesystem, plugins, actions, …)context— trigger payload(s) for the run, including mutableactionVariables
Return a plain object (for example return { greeting: 'hi' }) to expose values as {greeting} for later handlers. You can also mutate actionVariables or trigger data in place.
The editor uses Monaco with TypeScript IntelliSense. Trigger data is typed based on triggers configured on the action. Use Open in editor (after saving the action) to edit in Cursor or VS Code; changes sync back automatically.
See Run script API for examples and limits.