A trigger isn't firing
Work through the items below in order. Each covers a distinct reason a trigger can fail to fire even when the matching event is visible in the Dashboard’s Live feed.
1. Trigger is disabled
Section titled “1. Trigger is disabled”Check: Open the trigger. If the Enabled toggle is off, it’s skipped entirely — no conditions are evaluated for it.
Fix: Turn Enabled on and save. It takes effect within a few seconds — no need to restart anything.
2. Conditions do not match
Section titled “2. Conditions do not match”Open the trigger’s Conditions panel and compare each condition against the actual event field values shown in the Dashboard’s Live feed.
Case sensitivity
Section titled “Case sensitivity”| Operator | Case sensitive? |
|---|---|
equals ($eq) |
Yes — Admin ≠ admin |
not equals ($ne) |
Yes |
contains ($contains) |
No — comparison is lowercased on both sides |
not contains ($ncontains) |
No |
regex ($regex) |
No — compiled with the iu flags (case-insensitive, unicode) |
If you are using equals to match a player name or chat channel, make sure the value matches
the exact casing that Squad writes to the log.
Wrong field name
Section titled “Wrong field name”Event fields come directly from the parsed log line. The field names are fixed per event type.
A condition on a field that does not exist for that event type evaluates as an empty string,
which causes $eq, $contains, and $regex conditions to fail.
Fix: Check the field names for the event type in Trigger conditions.
OR group behavior
Section titled “OR group behavior”Conditions at the top level are combined with AND — every condition must match. If you need “A or B”, put both as leaves inside a single OR group. A mix of top-level conditions and an OR group means all top-level conditions AND at least one leaf in the OR group must match.
Regex not compiling
Section titled “Regex not compiling”Patterns longer than 256 characters or containing nested unbounded quantifiers (e.g. (a+)+)
are rejected as unsafe and treated as non-matching — they do not throw an error.
Fix: Simplify the pattern. See Trigger conditions.
3. Rate limit is holding the trigger back
Section titled “3. Rate limit is holding the trigger back”Check the trigger’s Rate limit section. It combines two settings, both of which can hold a trigger back even when its conditions match:
- Cooldown — “at most once every N seconds”: the trigger won’t fire again until N seconds have passed since the last time it fired.
- Threshold — “only after N times in M seconds”: the trigger fires only once the matching event has happened N times inside a rolling M-second window. Matches older than the window are dropped from the count.
- Scope — set to either Whole trigger (one shared counter for everyone) or Per player (a separate counter per player identity — EOS ID when the player has one, Steam ID otherwise).
A cooldown of 0 seconds with a threshold of 1 means no rate limit at all — if you set that and the trigger still isn’t firing, the rate limit isn’t your problem.
Fix: Increase the cooldown, reduce the threshold, or wait out the current window. See Rate limit reference.
4. Wrong surface — trigger not scoped to this server
Section titled “4. Wrong surface — trigger not scoped to this server”Triggers can be scoped to specific servers. An event on server A will not fire a trigger that is scoped only to server B.
Check: Open the trigger and verify the Servers selection includes the server where the event occurred.
Fix: Add the server to the trigger’s scope, or set scope to all servers.
5. Manual trigger: member is missing the run permission
Section titled “5. Manual trigger: member is missing the run permission”Every manual trigger (the kind with a Run button) gets its own permission key,
trigger:exec:<id>, shown in Organization → Roles once the trigger exists. Owners and
admins can run any manual trigger implicitly; a member on a custom role needs that specific
key added to their role.
Symptom: The Run button is absent for that member, or clicking it returns an error.
Fix: In Organization → Roles, add the trigger’s trigger:exec:<id> key to the member’s
role. See Roles and permission keys.
6. Manual trigger: wrong kind or disabled
Section titled “6. Manual trigger: wrong kind or disabled”Running a trigger that isn’t a Manual trigger returns Trigger is not runnable. The same
error appears if a manual trigger’s own Enabled toggle is off.
Fix: Confirm the trigger’s kind is Manual and that it’s enabled.
7. An action inside the trigger is failing quietly
Section titled “7. An action inside the trigger is failing quietly”For event and scheduled triggers, if one action in the list fails partway through — an RCON command with no live RCON connection, a webhook that times out — heliana doesn’t stop the rest of the trigger’s actions and doesn’t show an error in the app for it. The trigger still counts as having fired.
Fix: Check each action’s prerequisites yourself. For RCON actions, check the server’s RCON status on the Servers page. For webhook actions, confirm the URL is correct and that the endpoint returns a success response.