A variable's function body used to execute with the whole game environment in reach, which meant it could read and write any other addon's data and any saved setting on your account. It now runs against a fixed list of what a variable legitimately needs: the condition helpers from the Insert Helper button, the standard Lua functions, and the read-only game queries for spells, auras, items, and unit state. Some existing variables may stop returning a value. If one does, it is because it used something outside that list; turn on debug output and the variable name and the exact thing it reached will be named once each. Tell us what you were using and we will look at adding it.
GRIP-EMS v2.3.17
Released August 2, 2026. 7 entries in the author's notes.
Every entry
The author's own words, complete. Long sections are sorted into areas by LazyGrip.
Changed
2The restricted list covers reads only. A variable can ask what your cooldown is, whether you know a spell, how many of an item you carry, whether you are mounted, stealthed, in combat, or in a group. It cannot cast, pick up a spell, send a chat message, run a macro, change a setting, or schedule anything to happen later. Variables answer questions; they do not take actions.
Fixed
3If the person who wrote a sequence marked it as not for redistribution, that mark now travels with it and is honoured: the sequence will not export to a string, will not go out over player-to-player sharing, and will not be sent if somebody asks for it directly. The export window tells you which sequence was refused and why.
The mark is read when a sequence arrives, from either metadata layout, and the import preview shows it before you commit, so you know what you are taking on.
Two sharing paths were still sending the author's help text for a marked sequence. A request for sequence details, and the sequence list another player sees when browsing yours, both carried it. A marked sequence is now left out of the browse list entirely rather than listed with the text stripped, and it does not use up one of the fifty slots that list carries.
Internal
2The variable sandbox reaches nine game queries under a plain name as well as their dotted C_ form. Three of those plain names are gone in this release, because the value coming back was shaped differently from what the plain name has always meant: GetSpellCooldown, GetSpellCharges and GetSpellInfo each hand back a single table, where the old global of that name handed back several separate values. A variable body that read two values off one of them got the table in the first and nothing in the second, silently. All three are still reachable as C_Spell.<name>, which is unambiguous about which one you mean.
Correction to the commit that made that change, ce04bed. Its subject line also names a release-parity gate fix. That work is in the Hub tooling repo, not in this one, and none of it is in this release. Two of the reasons in its body are wrong, although the decisions they justify are right. IsSpellUsable is safe because no bare name of its own collides, and the predecessor name given for it is not in the current API surface either, so that is a historical assertion rather than a measured one. IsCurrentSpell is described as boolean before and after, which implies a bare global to compare against; there is none, only C_Spell.IsCurrentSpell. GetItemCount and GetItemCooldown do have live deprecated globals, as stated.
Grab it
Release notes written by Sataana and reproduced here with his permission.