GRIP - Enhanced Macro Sequencer

The free macro sequencer for World of Warcraft. No paywalls. Every feature included.

v2.4.16

New in v2.4.16

A repair reports what it did NEW

Pressing Fix in the repair panel said the sequence had been repaired whether or not anything changed, so a repair that found nothing left to do read exactly like one that rewrote a step. A fix that changes nothing says so now, and a fix that has to wait for you to leave combat says it is queued rather than reporting itself finished.

💡

Every Fix button explains itself NEW

Rows across the repair panel left the Fix button blank, so hovering the button showed no text. Hovering it now says what pressing Fix will do, and on a row whose button is greyed out it says what to do by hand instead.

🔄

The login repair pass finishes the list NEW

A damaged sequence stopped the repair pass that runs when you log in. The pass halted at the first stored sequence it could not read, and everything stored after that one was left as it was. It passes over what it cannot read now, so the sequences after a damaged one are still repaired.

New in v2.4.15

📥

Imported sequences cast again NEW

Every import on v2.4.14 stored its spells as the raw {spell:186289} form the transport uses instead of as spell names. The sequence showed up in your list, the keybind lit up, and nothing was cast, and deleting it and importing it again gave you the same result. What kept it hidden is that each damaged copy was stamped as already being in your language, so the repair panel read that stamp and reported the sequence clean, and the check that runs when you log in read the same stamp and passed over it every time. Imports store spell names again, a sequence already damaged on your character is listed in the repair panel as an error with a Fix button, and the login check repairs it whether or not an earlier repair had cleared its stored spell tags.

🔧

A linked sequence is repaired in one pass NEW

The repair rebuilt each sequence as it finished with it, so where one sequence used another as one of its steps and both were damaged, the first could be rebuilt from the second before the second had been repaired and came back holding the broken text again. That took a second login to settle. Every sequence is repaired first and rebuilt afterwards now, so one pass is enough whichever order they come up in. The message EMS prints afterwards no longer says a locale change was detected on a client whose language never changed.

New in v2.4.14

Your spell names survive a talent change NEW

v2.4.13 stopped a save from touching versions you had not opened, and that turned out not to be where the problem was: the version you did have open was still worked out again from whatever the game reported at that moment. On a Mistweaver with Rushing Wind Kick talented over Rising Sun Kick, a step you had typed as Rising Sun Kick came back as Rushing Wind Kick and stayed that way in your saved file. The spell recorded alongside your text is now the one your words name rather than the one your talents currently serve, your step text is left exactly as you typed it when there is no other language to bring it across from, and a version you wrote for a different loadout shows the names you gave it instead of the replacement live on your character right now.

👁

Hold While Channeling shows for every character NEW

The control only appeared if your character had an empowered spell, and the hold mode has nothing to do with empowered spells: it acts on any channel from any source. So a Demon Hunter channelling Void Ray could not reach the setting at all, because the only other way to see it was to already have it switched on. Release at max, the third option in that dropdown, is the only empower-specific one, and on a character with no empowered spell it behaves exactly like Hold cursor, because the hold still applies and only the release half has nothing to act on.

New in v2.4.13

📝

Editing one version no longer rewrites the others NEW

Every save, and every quick change that persists on its own such as ticking a reset box, typing in the KeyPress or KeyRelease field, moving the reset timer or picking a step function, read back all of a sequence's versions and worked their step names out again from whatever the game reported those names as at that moment. On a character whose talents replace one spell with another, that rewrote versions you had not opened: a version holding Rising Sun Kick came back holding the replacement. Only the version you are editing is worked out again now, and it stays that way a second later when the sequence is re-signed in the background.

The keybind panel checks modified keys too NEW

A sequence is bound on one key, and the keybind conflict panel only ever looked at that key, so a sequence whose steps or keypress text branch on shift, control or alt was reported clear while the modified key was held by something else and the branch never ran. Those combinations are read out of the sequence's own text now and checked beside the plain key, in the panel and in /gems keys, and each one another addon or a game binding holds is listed under the sequence it belongs to. A modified key nothing holds is not listed, and neither is one held by the sequence's own variant button.

👤

Your own sequences are treated as your own NEW

A new sequence is marked as your own work the moment it is created, and the check deciding whether a sequence came from elsewhere read that mark as a sign that it had. Saving one for the first time skipped the step that records you as its author, so you were asked to confirm authorship before sending, exporting or answering another player's request for your own work, and the author name you picked in the editor was dropped instead of being kept.

New in v2.4.12

🏷

A damaged version no longer breaks the version display NEW

If a sequence held a version stored in a shape EMS did not expect, nothing on screen would tell you which of its versions was live: no LIVE badge in the editor, no marker beside the version in its menu, no tag on the sequence list row, and no number on the tracker, on a sequence that had a live version the whole time. The tracker also disagreed with itself, printing a number in one place and a blank in another for the same sequence, and the list and the editor disagreed the same way. Where two versions happened to hold the same value, the badge picked the wrong one and named it live. Every part of the addon works the live version out the same way now.

🔄

Context and talent changes no longer queue an endless reload NEW

A sequence with context overrides queued a reload of itself on every context change and every talent loadout change, then queued another on the next one, and never stopped, because what EMS had written down about the live version and what it read back never matched. They match now, so a reload is queued only when something has actually changed. The v2.4.11 guards that stopped a badly stored sequence taking the rest of the addon with it also sit at the one place they all read from now, so the reads that were left over are covered too.

New in v2.4.11

📦

Collections that imported as empty now import NEW

Some exports store each sequence in a collection as a two part package, the name followed by the sequence, instead of the sequence on its own. EMS unpacked that package when a sequence arrived still encoded and not when it arrived as plain data, and that gap sat in every route it has: the preview, the import itself, and the older migration path. A collection built the second way reported no macro versions found for every sequence in it. The preview named the sequences it had just read and then showed nothing, which is the confusing part: it had reached them, it just could not see inside. Nothing was wrong with those strings and nothing you already had was changed. Every route unpacks it now, so the versions and their steps come through.

🛡

One badly stored sequence no longer takes the rest of the addon with it NEW

If a sequence ended up saved in a shape EMS did not expect, whether from an old import or a hand edited file, reading it could stop whatever was asking: activating it, saving it in the editor, the step count and step text on the tracker, and another addon asking about the sequence through the plugin interface, which could also be handed a step count that was plainly wrong. One of these sequences could also quietly empty itself, because rebuilding it read the steps back out of a shape that could not be read and wrote the empty result over the ones you had, leaving no steps and nothing on screen to say so. Those reads check the shape first now, so a sequence EMS cannot use is passed over and the steps it does have are left alone.

🔍

A malformed import says what it could not read NEW

An import holding a version in a shape EMS did not expect could stop the preview, or get past the preview and then stop when you pressed Import. Both points check the shape before reading it now. The preview lists what it could not read in the Not imported section with the reason and offers you the rest; a sequence still unreadable when you press Import is set aside whole, with the reason printed in chat, and the other sequences in the same paste import as normal. Separately, a legacy sequence whose keypress was stored as a list no longer stops the preview when you paste a copy of one you already have.

New in v2.4.10

🎯

The tracker button shows the right spell on Priority sequences NEW

On Priority, on Reverse Priority, and on any step order added by a plugin, the tracker button showed the first spell in your keypress box whichever step was actually running. If your keypress opened with something like a shift-modified stun, that stun is what the button showed the whole way through. The v2.4.5 fix that stopped the tracker painting a keypress spell onto every row only ever reached sequences set to Sequential. Casting was never affected and your stored steps were never wrong; only the button was. Every step order now reports the step's own spell.

New in v2.4.9

📌

Macro buttons no longer swap contents after a delete or rename NEW

Deleting any macro moves every macro below it up one place. EMS remembered its own macros by position and corrected only the one it had just deleted, so from that point every other macro it owned was recorded one place too high. The next change to one of those sequences wrote into the wrong macro and left that macro's name alone, leaving a button labelled for one sequence that runs a different one, and handing the sequence whose name was taken a fresh macro on every reload. Renaming a sequence deletes a macro as part of the rename, which is why renaming imported sequences set this off, and deleting a macro yourself in the macro window did it too. EMS now finds its macros by what they contain and looks each one up at the moment it writes. Sequences whose long names shorten to the same macro name no longer end up sharing one either, because EMS checks the macro names you actually have, including macros you made yourself.

🔍

The import window tells you why something was left out NEW

Paste an import the addon cannot take, say a collection whose sequences are all stored in a form EMS will not read, and the preview came up completely blank: no list, no summary, and no explanation anywhere on the screen. The reasons existed the whole time, but you only saw them after pressing Import, which nothing on that empty screen gave you any reason to press. The preview now opens with a Not imported section listing one plain line for each thing that was turned away, above whatever it did manage to read. Those lines wrap onto as many rows as they need, and nothing in that section can be ticked or counted towards what you import. An import with nothing wrong with it looks exactly as it did before.

📋

Import tick boxes stop coming unticked on their own NEW

In a preview long enough to scroll, ticking or unticking one sequence could leave a different row further up looking unticked when it was still going to be imported, or put a gold auto tag on a row that had no business carrying one. The count on the Import button was right the whole time and so was what actually got imported; only the row you were looking at was wrong. Rows are reused as you scroll, and one row was still following the settings of whatever had previously been in its place.

New in v2.4.8

🔒

EMS asks before a sequence you did not write leaves your client NEW

Sending a sequence to another player, answering someone's request for one, or exporting one to a string now raises a confirmation naming the author, and nothing is sent or produced until you agree. The name shown is the person the content came from, followed back through however many times it has been copied, so a copy of someone else's work names them rather than you. For a batch you are asked once, and the prompt names every author in it. Sequences you wrote yourself are unaffected: they still send, export and answer requests with no prompt. If a request arrives while you are in combat, nothing is sent and nothing pops up; you get one line in chat telling you a request went unanswered.

👤

Editing or receiving someone else's sequence no longer makes it yours NEW

Several routes quietly transferred authorship. Opening an older sequence written by another player and pressing Save re-signed it under your name; a sequence arriving with no author at all was treated as new work created here; a sequence arriving from another player could claim you as its original author; and a duplicate of another player's sequence was read as your own work. An arriving sequence is now recorded as having come from elsewhere whatever it does or does not carry, and what the addon asks about follows the content rather than the signature, so a copy of a copy is still checked. EMS also stops answering other clients' requests for your sequence list or for a sequence's details with anything you did not write.

🚫

The do-not-share mark survives duplicating, saving, renaming and a Raw tab edit NEW

A sequence whose author marked it do-not-share lost that mark when it was copied, and separately when it was saved, saved from a popup editor window, or renamed, so the one restriction the addon will not let you share around quietly lifted the first time you touched the sequence. All of those paths keep it now, and every sharing route refuses the copy exactly as it refuses the original. The mark and the attestation that goes with it are also fixed in the Raw tab, alongside the author name, the signature and the origin, so retyping the text cannot remove them. A sequence converted from another sequencer can no longer be duplicated at all, because a duplicate is stamped as yours and would have prompted for nothing.

New in v2.4.7

📋

The guide's release list no longer skips v2.3.1 NEW

The New in list stepped from v2.3.0 straight to v2.3.2, so three things that shipped in v2.3.1 had no entry: export strings carrying the build they were made on, the per-sequence changelog field, and the verified badge on signed macro steps. v2.3.1 has its own section now.

New in v2.4.6

Undo after switching version no longer changes the wrong version NEW

Undo remembers a step by its position. Switching version in the popup editor swapped the working copy but kept the undo history, so pressing Ctrl+Z after a switch removed a step from the version you had just moved to, at the position it held in the version you left, and armed Save on top of it. Between two flat versions nothing stopped that reaching your saved sequence, so a version you never edited could be written back a step short. The undo history is now cleared on the switch, the same as it already was when you open a sequence or close the editor.

🔒

Step rows on a tree-driven version no longer accept edits that get thrown away NEW

If a version's steps come from its action tree, the popup editor let you type into the step rows and press Save, and the save discarded what you typed. It rebuilds the steps from the tree on the way through, so the edit was overwritten inside the same save that was supposed to store it. Those rows and their spell pickers are now switched off for that version, with a line above the list saying the tree is driving the steps. Change them in the structured editor, which compiles the tree instead of fighting it.

New in v2.4.5

🎯

The tracker no longer shows a keypress spell on every step NEW

A Brewmaster Monk had a shift-modifier Leg Sweep at the top of his keypress box, and every row of the step visualizer read Leg Sweep while the casts fired correctly the whole time. Your keypress box gets attached to the front of each step so it can fire on every press, and the part that decides which spell to show was reading that combined text. It prefers the last cast with no condition on it, and when every line carries a condition, as all of his did, it falls back to the first cast in the string instead. That is the top line of the keypress box, on every step. The display now reads each step's own text, and what fires is unchanged.

New in v2.4.4

🔮

A temporary spell swap is no longer saved into your step text NEW

A Blood Death Knight running San'layn found a Heart Strike step rewritten to Vampiric Strike, which is not a name the game will cast. A Guardian Druid found Maul and Ravage doing nothing at all. Demon Hunters and Monks saw Cull, Eradicate and Rushing Wind Kick left sitting in the step list. It is all one cause. The addon kept your step text current by asking the game which spell is active right now and saving the answer, and the game answers that question the same way for a talent you chose as for a form you are standing in, a channel you are part way through, or a buff that happens to be up. The swapped name is not written anywhere now. Your steps keep the ordinary base name, which is the name the game wants, since casting Maul casts whatever Maul currently turns into.

🔍

The step list shows the spell you would cast right now NEW

Because the swapped name is no longer saved, the step list works it out as it draws each row instead, so a step written as Maul reads as Ravage while Ravage is the version your talents give you, and reads as Maul again on its own once it is not. A row you are part way through editing shows what you typed rather than the worked out name, so nothing paints over you while you are typing. Getting this wrong now shows the wrong label for a moment and corrects itself, and it can no longer leave a macro that does nothing. Step text that was already saved wrong is repaired for you, once, the first time the addon reads your spellbook after you update.

New in v2.4.3

🔒

Imports no longer overwrite a macro you wrote yourself NEW

If an import carried a macro with the same name as one already in your macro list, the addon replaced your macro's body with the imported one and started treating it as its own, with no prompt and no undo. Sequences already handled a name clash by renaming; macros did not. Now a name that belongs to a macro the addon did not create is left alone, and you get a line in chat naming it, so you can rename either side and import again. That macro is also counted as skipped in the import summary rather than reported as imported. If you import while in combat the summary is written before the work runs, so it still counts the macro as imported until combat ends and the chat line arrives.

New in v2.4.2

🔄

Step text stops sticking on a spell you cannot cast NEW

On a Demon Hunter, Reap becomes Cull in Void Meta form and Eradicate after a Void Ray channel. Leaving combat and opening /gems could leave one of those names sitting in the step list while the spell was not available, and it stayed there until you went back into combat. Monks reported the same thing with Rising Sun Kick and Rushing Wind Kick. The addon rewrites step spell names whenever the game reports that your spells changed, and the game answers the same way for a talent you picked as for a form you are standing in, so a rewrite landing mid-fight wrote the temporary name in and nothing ran again once the form dropped. The rewrite is skipped during combat now, and it runs when you leave combat, when your form changes, and when the game swaps your action bar.

New in v2.4.1

🔑

Sequence keybinds survive a loading screen NEW

Your sequence keybind kept showing correctly in /gems after a /reload or after zoning into a delve or a dungeon, but pressing it did nothing, and opening the Keybind tab and setting it to the same key again was the only way to bring it back until the next loading screen. The addon re-applies sequence keybinds at runtime rather than storing them in the game's own binding list, and a loading screen drops the live binding. The code that puts it back had been grouped with the once-per-login startup work and gated behind the same flag, so on a zone change it never ran at all. It runs on every world load now, and runs a second time shortly after the loading screen ends.

New in v2.4.0

Hold While Channeling and Keybind Conflicts NEW

Hold While Channeling is a setting on each sequence version. With Hold cursor on, a press that lands while you are channeling casts nothing and leaves the step counter where it is, so you stop clipping your own channel and stop spending steps on it. A third option, Hold + release at max, ends an empowered spell the moment it reaches maximum rank instead of letting the rest of the hold window run down. The hold works for any channel from any source; release at max needs an empowered spell. Known issue on release at max: on at least one tester's client the empower ends at the first rank instead of at maximum, on every press, with nothing on screen to say so; it does not reproduce on the development client and the cause is still open, so if your empowered casts are ending early, set that version back to Hold cursor. The other new thing is a keybind conflict panel, reached from the Check Conflicts button on the Keybind tab or with /gems keys. It takes every key bound to a sequence on your current spec, plus the vehicle bar and pet battle slots, and reports what your saved key bindings have on that key, what the keypress actually reaches, whether a modifier on it redirects your casts, and whether a click binding holds it. Where the addon behind a binding can be named, it names it and the file and line it came from. Two kinds of conflict can be cleared from the panel itself, Fix All does the whole list after telling you the count first, and Undo puts back the last binding it changed and refuses if something else has claimed that key since.

New in v2.3.19

🛠

Patch 12.1 Support NEW

Support for game patch 12.1. Midnight removed the option to load an out-of-date addon, so an addon that does not name the new patch does not load at all. This release names it. Also in this release: importing a collection with protected content inside it tells you why it was refused, where the import used to say only that it failed to decode, and the six nested places that read a collection now give the same explanation the top-level paste has always given. A linked copy of protected content no longer imports as an empty sequence or variable; that shape holds a reference to content kept by the source sequencer plus a list of changes, not the content itself, so reading it produced a sequence or variable with the right name and nothing inside it. Theme links from a connected realm keep working on 12.1, where the check deciding whether a link came from one of your connected realms called a game function that 12.1 removes and now calls the replacement instead.

New in v2.3.18

👥

Sequences From Your Other Characters NEW

The sequence list can show what your alts have saved. Tick the Other characters box above the list and every sequence from another character appears alongside your own, sorted and filtered together. Those rows are read-only, greyed, and carry the owner's name, and clicking one prints a note instead of loading it. Sequences are still stored per character and nothing about that changed, so a character appears only once it has logged in with this release. To move one, right-click it and pick Copy to character: the copy is handed over the next time that character logs in, and a name collision renames the incoming sequence instead of overwriting what is already there. Also in this release: the step counter, the tracker icon and the action bar overlay repaint when a sequence resets, where all three used to keep showing the step from before the reset while the engine sat correctly at step 1. The Copy button under the rotation preview opens the export window instead of an edit box positioned off screen where you could not see it. The CVar Health dashboard grows to 284 settings across 14 sections.

New in v2.3.17

🔒

Variables Get a Sandbox NEW

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 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. The list covers reads only, so 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, but it cannot cast, send a chat message, run a macro, change a setting or schedule anything for later. Some existing variables may stop returning a value; if one does, turn on debug output and the variable name and the exact thing it reached are named once each. Separately, a sequence marked do-not-share is honoured now: the mark travels with the sequence, so it 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 says which sequence was refused and why, the import preview shows the mark before you commit, and a marked sequence is left out of the list other players browse rather than listed with the author's help text stripped.

New in v2.3.16

Imported Sequences Keep Their Author NEW

Saving an imported sequence used to put your name on it. A sequence in the older signature format upgraded itself the first time you saved, and that upgrade wrote your identity into the original-author field. When the import arrived with no signature at all there was nothing to upgrade, but the upgrade ran regardless, so your byline landed on someone else's sequence and was then signed as yours. An unsigned import stays unsigned now, in both the main editor and the popup editor. A related fix: an import arriving with no provenance field at all used to show the amber "Damaged" badge, because all three import paths defaulted that field to a value the verifier does not recognise. It reads "Provenance unknown" now, which is what it is. The provenance badge also explains itself: hover it and the verification state is spelled out in a sentence for all six states, Verified, Modified, Tampered, Damaged, Forked and Provenance unknown, text that shipped translated in every locale and had never once been displayed.

New in v2.3.15

🛡

The Importer Survives Broken Data NEW

A sequence whose stored data went bad (an import cut short, a hand-edited SavedVariables file, an export from a buggy tool) used to raise a Lua error in whatever touched it first: the import preview, the importer, the exporter, the repair scan at login, or a template copy. Those paths now report the broken entry and carry on. The repair analyzer picked up thirteen guards of its own, and its "Empty steps array" fix applies cleanly to a corrupt sequence instead of raising. A Forge export can also carry a native GRIP-EMS sequence inside its envelope now, read directly with the source labelled in the import preview, and the in-game test suite grew the fixtures that prove each new guard live.

New in v2.3.14

Key Down Casting Turns Itself On NEW

The macro engine only steps forward when the game is set to cast on key press. That is the ActionButtonUseKeyDown setting, and while it sits at 0 a sequence looks like it does nothing at all. Nearly every report of the addon doing nothing came down to that one value. EMS now sets it on at every login, so a fresh install just works and you don't have to go hunting through the game settings first. Its row is gone from the CVar Health dashboard, since a setting the addon requires and keeps on for you isn't a recommendation.

New in v2.3.13

🔍

The Dashboard Gets Sliders and Search NEW

The CVar Health dashboard has a search box: type part of a CVar name or label and the tree jumps to the row. A show-only-issues filter hides the green rows, and the section counts are coloured so a section with a bad row reads red before you expand it. Numeric CVars are sliders you drag instead of dropdowns, fifty of them, and on/off CVars are tickboxes; the fix control spans the full row width. The graphics dropdowns read their tier names from the game's own strings, so shadow quality, SSAO, liquid detail, outline mode and texture resolution match WoW's System menu. The registry grows to 255 game variables across 14 sections, up from 212: a new Combat Audio section, nameplate content toggles, accessibility motion and vision rows, raid graphics mirrors, and dragonriding comfort toggles.

New in v2.3.12

Delves Get a Profile NEW

Delves ran the General CVar baseline. The context system detected Delves, DelvesLow and DelvesHigh, but no built-in profile was mapped to them. The fifth built-in profile turns enemy minion nameplates on, raises the nameplate ranges to 41 yards, and widens the soft-target interact arc, with all three delve contexts routed to it. If you mapped your own profile to the base Delves context before this release, the built-in tier entries resolve first now; map DelvesLow and DelvesHigh yourself to keep your setup. Your own mapping on a tiered key still wins. The SQW Optimizer's latency ring also draws a trend line in the CVar health subpanel: the last 10 samples with the newest highlighted, plus the session low and high.

New in v2.3.11

📈

The Dashboard Keeps Score NEW

The CVar Health score keeps history: one snapshot per login, another whenever the score moves, and a trend line under the header score with the range beside it. The Raiding section gains a Raid Spell Density row. With raid-specific graphics settings on, the RAID-prefixed mirror governs spell density in raids, so you could raid at the default density while every row showed green; the new row recommends 1 and joins the score and auto-fix. The raid and PvP profiles apply nameplate stacking masks, the header computes its category and CVar counts from the registry instead of a hard-coded string that had drifted, garbled Korean text reads as Korean again, and the Disable button no longer opens rename mode when clicked at its left edge.

New in v2.3.10

Rows That Render NEW

The Spell Cache Viewer's Spells tab painted every row blank, and so did the Remote Browser (/gems browse). Rows in both are plain buttons that arrive without backdrop methods, and the row setup called one of those methods before it existed, which killed the rest of the row before the icon, name and spell id landed. The Spells tab had not painted a row since v1.7.0-Beta. With the rows up, the spell rename behind them works: renames and Clear Overrides apply to the live cache instead of waiting for a reload, a renamed spell re-sorts into its new alphabetical slot, and renaming a spell onto another spell's exact name no longer leaves that second spell unfindable by name after you clear the override. Also in this release: the Set Keybind button no longer stays greyed out for good after you create a sequence in combat, and /gems test no longer burns your first-open tutorial or leaves the window oversized afterwards.

New in v2.3.9

Clear Means Clear NEW

Keybind fixes for per-loadout mode. Clear now removes a bind made before per-loadout keybinds were switched on, instead of claiming there was no keybinding and leaving the key alive. Suppressing a key in the active loadout used to hide it only in the live driver. It is now hidden in the Current Keybind box, the sequence list, the step tooltip, and the tracker as well. Clearing a per-spec key sweeps its suppress markers so a later rebind of the same key is not silently hidden, and the conflict warning on key capture reads the merged view, so it sees loadout binds and stays quiet about suppressed keys. The in-game test runner now flags a category filter that matches nothing instead of printing a green zero-test summary.

New in v2.3.8

🔔

No Silent Interleave NEW

An interleave action set to fire every N steps used to compile to nothing when N was larger than its block, so it never fired and said nothing about it. The editor and validation now warn when an interval overruns its block, name the action, give the block's step count, and suggest the Repeat count that would make it fit. Lowering the interval below the block's step count or raising the block's Repeat both clear it.

New in v2.3.7

🎯

Right Icon, Right Count NEW

A Priority or Reverse Priority sequence repeats its early steps as it runs, so four steps you wrote actually run as ten. EMS was reading the step icon off the four you wrote while the sequence sat on one of the ten it runs, so the macro stub and the action bar showed the wrong spell on most presses, the tracker rendered "7/4", and the spoken step announcement called out the wrong step name against the wrong total. Icon, step counter and speech all count the steps that actually run now, and hand-advancing a sequence wraps in the right place. Sequential and Random sequences were never affected.

🔌

Authored Step Order for Plugins NEW

A new API:GetAuthoredSteps(name) returns a sequence's steps in the order they were written, before loops unroll and interleave copies are inserted. It pairs with API:GetSequenceSteps, which is the order they run in. SEQUENCE_STEP_ADVANCED and API:GetSequenceList now ship a step index and a step count in the same domain, so mapping one onto the other no longer yields the wrong spell.

New in v2.3.6

🛠

Sturdier Editing, Truer Imports NEW

The Source tab no longer drops your frame rate on a large sequence or throws a validation error, and a sequence that contains a loop now saves instead of failing on the word repeat. Disabled steps inside a Loop or IF node stay out of the compiled macro, and a corrupted sequence entry is skipped and reported instead of crashing the editor, the compiler, or the repair scan at login. Imported sequences track their source more closely: a Priority loop keeps its weighted pattern, an interval-less edge repeat compiles in place, and an empty cast-sequence line is dropped with a warning. The CVar Dashboard gains a NamePlate Stacking recommendation, and spell validation waits until you leave combat before it pings.

New in v2.3.5

📋

Multi-Select Steps NEW

The flat step list now takes more than one step at once. Ctrl-click toggles a step, shift-click grabs the range from your last pick, and a plain click goes back to one. With a group selected, Duplicate copies the whole block and Delete clears it, each as a single undo, and the right-click menu carries the same bulk actions. Outline and action-tree sequences keep single-select for now.

New in v2.3.4

🔑

Rename Keeps Everything NEW

Renaming a sequence no longer wipes its identity. The verification badge, fork history, privacy mode, macro dependencies, sound cues, and (from the list) its Conditions assignments carry through a rename, and its hold-mode keybind follows it. A rename never changes a sequence's signature, so a verified sequence stays verified. Plugin-created sequences can no longer be renamed by hand, so a plugin keeps control of what it owns.

🌱

Talent Strings Stick NEW

An imported talent loadout string now shows in the metadata editor and survives saving, renaming, and duplicating. The plugin API's GetSequenceInfo reports the talent string plus four more fields.

🧹

Conditions Cleanup NEW

Setting up Conditions no longer leaves the step list stacked over the other tabs. It stays hidden until you return to the Steps tab. The All button confirms once and lists every version it will change, and the All, None, and Default Version controls gained tooltips. Fixed: the metadata panel no longer runs its dependency list into the changelog row, and a German typo in the Conditions conflict message.

New in v2.3.3

📩

Exports That Tell the Whole Story NEW

Every export string now carries when it was made, the addon and game version, author, class and spec, talents, spells used, and what the sequence depends on. Sharing sites can fill in a post straight from the paste string. Exporter identity follows your privacy mode.

🛡

Collections Carry Everything NEW

Sequences inside a collection export travel with the same details as single exports, and sending a sequence to another player bundles the macros it needs. Fixed: sequences imported from a collection keep their verification badge and fork history.

New in v2.3.2

📦

Load-on-Demand Locale Bundle NEW

The spell-name translations behind cross-language sharing now live in a companion addon, GRIP-EMS_LocaleNames. It ships in the same download and loads only when a sequence needs a name from another class or language, so the base addon loads about a megabyte less at login. Leave GRIP-EMS_LocaleNames enabled.

🏷

GRIP Category NEW

The AddOns list groups the whole GRIP family under a GRIP category, with the locale bundle nested under EMS. The cursor overlay is also built on first enable instead of at every login.

New in v2.3.1

📑

Export Build Context NEW

The class, spec and talent loadout a sequence was made for travel with the export, so an imported sequence shows what it was built around. The talent string itself stays author-only.

📝

Per-Sequence Changelog NEW

Note what changed between revisions in the editor. The field exports and imports with the sequence.

🛡

Verified Badge Covers the Macro Steps NEW

Editing a sequence's steps used to leave its signature unchanged, so the badge could not tell modified content from the original. It signs the full content now, a tampered sequence reads as tampered, and the same sequence imported on a different-language client no longer false-flags.

New in v2.3.0

📌

Live-Version Quick-Swap NEW

Pin a sequence's version to lock it as the live one until you clear the pin, regardless of what your context or talents would otherwise pick. Badges show which version is live.

🔍

Spell Picker Inserts at Your Cursor NEW

Picking a spell drops it where your cursor is and replaces a highlighted selection, instead of appending at the end of the box.

🎯

Plugin Action Bars (API v3) NEW

Addon authors can put a sequence on an action bar, read its per-step spell data, create and pick up its macro, and register a /gems subcommand. Nothing changes unless you run a plugin that uses it.

New in v2.2.0

🔌

Plugin Support NEW

Other addons can extend GRIP-EMS through a public API. A plugin can add import and export formats, settings and a settings panel, variables, conditions, and step functions, and mount its own panel in the editor. A plugin's export format appears in the export window's format picker. If you do not run a plugin that uses it, nothing changes.

🔧

Context-Switch Self-Heal NEW

Sequences recover their loop and branch grouping after a context switch, not just a reload, so swapping versions when you enter a dungeon or arena keeps the structure.

New in v2.1.28

🔁

Drag a Step Into a Loop NEW

Drop a step onto a loop's row in the step list, or drag it into a loop open in the detail pane, and the step moves inside the loop. Undo puts it back, and a drop that would nest too deep is refused with a hint.

🔄

Macro Steps Refresh Themselves NEW

A step you built from one of your macros can update after you edit that macro, so you do not have to open the step and click Refresh. Off by default; turn it on in Settings.

New in v2.1.27

📋

Last-Updated Sort Fixed NEW

Sorting your sequences by Last Updated could error out when an older sequence stored its timestamp as text. Every timestamp now reads the same way, so the list sorts cleanly no matter how old the sequence is.

🔍

All Classes List Refreshed NEW

The cross-class spell list the conditional picker browses is rebuilt against the current 12.0.7 client, so spells from every class match today's game data.

Installation

Addon Manager (recommended)

Search for GRIP - Enhanced Macro Sequencer or GRIP-EMS in any of these addon managers:

Manual Install

  1. Download the latest release from CurseForge or Wago.
  2. Extract the GRIP-EMS folder into:
    World of Warcraft/_retail_/Interface/AddOns/GRIP-EMS/
  3. Restart WoW or type /reload in chat.

Requirements

Quick Start

Get your first rotation running in five steps:

1

Open the editor

Type /gems in chat to open the sequence editor.

2

Create a sequence

Click New and give your sequence a name.

3

Add your spells

Type one spell per step. Press Tab for spell autocomplete from your spellbook.

4

Save and bind

Click Save , switch to the Keybind tab, and press your desired key.

5

Play

Find a target and start pressing your keybind. Your rotation fires automatically, one spell per press.

Tip: Switching from another sequencer? Jump to Migration instead.

Migration

GRIP-EMS imports sequences from other macro sequencer addons. Everything transfers: sequences, variables, step functions, metadata, multi-version data, and context overrides.

In-Game Migration

If your old addon is still installed:

  1. Open GRIP-EMS with /gems
  2. Click Migrate in the sequence list
  3. Everything transfers automatically with a report in chat

Clipboard Import

  1. Export a sequence from your old addon to clipboard
  2. In GRIP-EMS, run /gems import
  3. Paste the string into the import window
  4. Pick which sequences to import. Conflicts are colour-coded with skip, replace, and rename options per item.
Tip: GRIP-EMS auto-detects the format. GRIP1 (native), legacy serialised, and raw macrotext (/cast lines) are all supported.

Core Concepts

Sequence

A sequence is an ordered list of macro steps. Each step is a line of WoW macro text (up to 255 characters). When you press the keybind, the addon fires the current step and advances to the next one.

Step Function

The step function controls the order in which steps execute:

Reset Conditions

Reset conditions send the sequencer back to step 1. You can combine them:

Example: target/combat/5 resets on target change, combat end, or 5 seconds idle.

Macro Stub

Each sequence creates a SecureActionButton (macro stub) at load time. This is the button that WoW fires when you press the keybind. The addon updates its macro text each keypress to point to the current step.

Variables

Account-wide ~varname~ substitution in macro text. Variables can be plain text or Lua functions that re-evaluate on events. Use them to share common fragments across sequences.

The Editor

Open the editor with /gems. The editor supports up to 4 simultaneous windows so you can compare and edit multiple sequences side by side.

Editor Tabs

The Steps tab is where you build your rotation. Each line is one macro step.

  • Type a spell name and press Tab for autocomplete from your spellbook
  • Drag steps to reorder using the handle on the left
  • Right-click a step (nested steps under If and Loop nodes too) to disable or re-enable it: a disabled step keeps its slot, shows greyed, and is skipped at run time
  • Each step shows a live character count (green under 200, yellow 200-240, red 241-255)
  • The interleave spinner appears on Action nodes: set an interval to weave that spell every N steps
  • KeyPress/KeyRelease editor for per-step prefix/suffix macrotext
  • Working-copy editing: Save or Discard when you are ready

Assign a keybind to this sequence. Binds are stored per-spec and per talent loadout within the spec. They auto-switch on spec or loadout change.

  • Press the key you want to bind
  • Vehicle and pet battle keybind slots available (12 + 6)
  • Gamepad support with ConsolePort detection

View the generated macro text for each step. Useful for debugging why a step might not fire correctly.

  • Shows the final 255-char macro per step
  • Rotation preview: icon strip or text list
  • Copy to clipboard from text mode

Manage variables used in this sequence. Variables use ~varname~ syntax and get substituted at runtime.

  • Plain text variables for shared macro fragments
  • Lua function variables with event-driven re-evaluation
  • Full WoW macro syntax support

Configure which contexts (raid, dungeon, PvP, etc.) activate this sequence version. See the Context System section for the full list of 53 context types.

  • Collapsible groups with Select All / Clear All
  • Per-context variable overrides
  • Visual fallback chain indicator

View and edit the raw serialised data for this sequence. For advanced users who want to inspect or manually tweak the underlying data structure.

Hierarchical Actions

Beyond simple linear step lists, GRIP-EMS supports a hierarchical action tree with nesting. The visual node editor lets you build control flow structures.

Node Types

If / Else Conditional Branching

An If node compiles a True branch and a False branch into a single chunk of WoW macro conditional text. The macro engine evaluates the condition you typed in the Cond box at runtime and runs whichever branch matches. EMS v2.1.0 fixed multi-action branches and automatic DeMorgan negation; earlier versions silently dropped all but the first action of each branch.

Out-of-combat examples

Mount toggle. Shift held casts the utility spell, otherwise summon a mount.

/cast [mod:shift] Aspect of the Cheetah; Reins of the Crimson Deathcharger

Indoor fallback. One-sided If with no True branch. The compiler emits an explicitly negated condition so the mount only fires outdoors.

/cast [noindoors] Reins of the Crimson Deathcharger

Profession dailies. Different commands per branch, so the compiler splits into two lines.

/dismount [mounted]
/cast [nomounted] Mining

In-combat examples

Modifier burst. Shift swaps the filler for a cooldown.

/cast [mod:shift] Bestial Wrath; Cobra Shot

Target-aware cast. Damage on hostile targets, heal on friendly.

/cast [harm] Cobra Shot; Mend Pet

Pet-aware Hunter. The production sequence shipped in v2.0.x and now under regression coverage.

/cast [nopet] 982; 217200

Condition cheat sheet

Conditionals players reach for first. The spec doc has the full catalogue.

mod:shift
True while shift is held. Variants for ctrl, alt, and L/R sided forms.
combat
True while in combat.
nocombat
True while out of combat.
harm
True when the current target is hostile.
help
True when the current target is friendly.
mounted
True while mounted.
indoors
True while inside a building or cave.
advflyable
True in zones where Skyriding is allowed (added 10.0.7).
stealth
True while in stealth (Rogue, Feral Druid, etc.).
nopet
True when no pet is active. Hunters and Warlocks use this for revive/summon fallbacks.
spec:N
True when current spec index matches N. Use slash for OR groups, e.g. spec:1/3.
pvpcombat
True while in PvP combat with another player. Counts PvP-flagged combat NPCs in arenas and battlegrounds. Does not trigger on NPC combat in war-mode open world.

Full list with patch history at the WoW conditional reference.

DeMorgan negation

If the True branch is empty, the compiler emits an explicitly negated condition for the False branch instead of an empty first clause with a semicolon fall-through. The shorter form [noindoors] mount compiles to a single bracket with the negated condition; the alternative [indoors] ; mount would compile to a two-clause macro with an empty first clause, which is harder to read and provides no behavioural advantage. The full DeMorgan rule set lives in spec section 5.

Path indicator

The editor shows a small badge next to the Cond box label. The label tells you which compile path the node took: Single line, Two-line split, Per-step, or Optimised fall-through. The Compiled Output preview pane shows the literal macrotext the engine will see. If you set a multi-action True branch and the badge reads Per-step, that is the expected path.

Interleave / Weave

Set an interval (2-50) on any Action node to weave it every N steps. For example, if you set a trinket use to interval 5, the compiler inserts it every 5th step.

The compiler works in two phases:

  1. Flatten expands Loop, Repeat, and Conditional nodes into a linear step list
  2. Interleave inserts weaved actions at their configured intervals

Interleave works inside Loop blocks. The editor shows an [IL:N] indicator on interleaved rows in the step list.

Tip: Use Interleave for maintenance buffs, trinket procs, or cooldowns that you want fired at regular intervals without disrupting the main rotation flow.

The ActionCompiler walks the tree depth-first. Each leaf Action node becomes a step. Loop and Repeat nodes multiply their children. Conditional and If/Else nodes evaluate at compile time if the condition is static, or produce a conditional macro line otherwise.

After flattening, the interleave pass scans for nodes with an Interval property and inserts them at the specified positions. The final output is a standard step list that the sequencing engine processes normally.

Sequencing Engine

Execution Flow

  1. You press the keybind
  2. The engine reads the current step from the active sequence
  3. The step function decides which step to fire (Sequential, Priority, etc.)
  4. The macro stub text is updated with the chosen step
  5. WoW fires the SecureActionButton, casting the spell
  6. The engine advances to the next step (or resets based on reset conditions)

Icon Resolution

The engine resolves spell icons through a pipeline:

  1. Check for a user-defined icon override in the sequence metadata
  2. Parse the current step for a /cast or /use command
  3. Look up the spell ID in the spell cache
  4. Query GetSpellTexture for the icon path
  5. Fall back to the default question-mark icon if all else fails

Macro Generation

Each step is a WoW macro line with a 255-character hard limit (enforced by Blizzard). The engine handles:

Warning: If a step exceeds 255 characters after variable substitution, the macro will be truncated by WoW and may not cast correctly. Watch the character counter in the editor.

Hold to Freeze

Hold a modifier to pause the active sequence on its current step. The engine stops advancing while the modifier is down and continues from the same step when you let go. Enable it and pick the modifier (Shift, Control, or Alt) under /gems settings -> Hold to Freeze. Useful for sitting on a proc or saving a cooldown for a burst window.

Variant Indicators

Sequences that branch on modifier keys or combat state show a coloured indicator on the action button, so the live variant is visible without opening the editor. The indicator follows whichever variant is currently active.

Tempo Advisor

The Tempo Advisor analyses your sequence to recommend an optimal click rate (milliseconds between keypresses). It starts with a theoretical estimate and gets more accurate as it learns from your actual play data.

4-Phase System

1 Phase 1: Spell Classification

The advisor categorises every spell in your sequence into one of 7 timing categories: OFF_GCD (instant, no cooldown trigger), ON_GCD_INSTANT (triggers the GCD but casts instantly), ON_GCD_CAST (has a cast time on the GCD), LONG_CAST (cast time longer than the GCD), CHANNEL (channelled spell), PAUSE_CLICKS (wait step), UNKNOWN (spell data not yet cached).

2 Phase 2: Theoretical Analysis

Using the spell categories, the advisor builds a transition graph between steps. It calculates the expected time between keypresses by simulating each step transition and summing GCD durations, cast times, and off-GCD windows.

3 Phase 3: Empirical Learning

After 30 play samples from the ExecutionTracer, the advisor blends real data into the recommendation. The mix is 70% theoretical / 30% empirical. Stale CLEU data is detected and discarded automatically.

4 Phase 4: Stored Recommendations

Each sequence stores its own recommendation (recommended MS, sample count, blend ratio). Recommendations update adaptively as you play, and persist across sessions.

Faster/Slower Overlay

A movable dark-themed widget that shows:

The overlay is draggable. Reposition it wherever works best for your UI.

Audio Alerts

When enabled, the advisor plays a subtle sound if your click rate drifts too far from the recommendation. This is opt-in via Settings.

Slash Commands

Command Description
/gems fs Show current Tempo Advisor status
/gems fs on Enable the Faster/Slower overlay
/gems fs off Disable the overlay
/gems fs reset Clear stored data and start fresh

The advisor builds an NxN matrix where N is the number of steps. Each cell represents the expected time (in ms) transitioning from step i to step j. For Sequential step function, only the diagonal+1 cells matter. For Priority, the entire first row is weighted heavily since step 1 is always attempted first.

Off-GCD spells get a near-zero transition time. Channelled spells use their full channel duration. The final recommendation is the weighted average across all likely transitions, plus a configurable buffer.

Setting Description Default
Mode Off / Overlay / Auto-Set Overlay
Buffer Extra MS padding on the recommendation 10
Sparkline Show CPS sparkline on the overlay On
Audio Alerts Sound on tempo mismatch Off
Hold Mode CVar Let the advisor manage Hold to Cast Off

Context System

GRIP-EMS detects 53 context types across 7 groups. When you enter a raid, dungeon, arena, battleground, or delve, the addon automatically switches to the matching sequence version if one exists.

Context Types

Content

Raid Normal Raid Heroic Raid Mythic Dungeon Normal Dungeon Heroic Dungeon Mythic M+ Low M+ Mid M+ High Delve T1-T3 Delve T4-T6 Delve T7-T8 Delve T9+ Timewalking Solo World Content

Rated PvP

Arena 2v2 Arena 3v3 Rated BG Solo Shuffle

Arena Maps

Nagrand Arena Blade's Edge Dalaran Sewers Ruins of Lordaeron Ashamane's Fall Black Rook Hold Arena Empyrean Domain Enigma Crucible Hook Point Mugambala Nokhudon Proving Grounds Robodrome Tiger's Peak Tol Viron Arena

Battleground Maps

Alterac Valley Warsong Gulch Arathi Basin Eye of the Storm Strand of the Ancients Isle of Conquest Twin Peaks Battle for Gilneas Silvershard Mines Temple of Kotmogu Deepwind Gorge Seething Shore Ashran

Auto-Detection

The detection system reads instance info, map data, difficulty IDs, and keystone level to determine the current context. It checks on zone change, difficulty change, and group roster update.

Per-Context Variable Overrides

In the Context tab of the editor, you can override variables for specific contexts. For example, you might swap a trinket-use variable for a different trinket in M+ vs raid.

Fallback Chains

If no exact context match exists, the system falls back through a priority chain. For example, M+ High falls back to M+ Mid, then M+ Low, then Dungeon Mythic, then the default version. The editor shows a visual fallback chain indicator.

Import and Export

Clipboard Import

  1. Run /gems import to open the import window
  2. Paste your sequence string (GRIP1, legacy, or raw macrotext)
  3. GRIP-EMS auto-detects the format
  4. A preview shows each sequence with metadata (author, spec, icon)

Import Preview

The preview window shows:

Collection Import

A single import string can contain multiple sequences and their dependent variables. GRIP-EMS resolves transitive variable dependencies so nothing gets left behind.

Spell Names Across Languages and Classes

Imported and shared sequences cast correctly on any game-client language. Spell steps are stored language-neutral and render in your client's language, so a sequence written on an English client works on a German one without hand-translating each line.

Sequences from another class resolve too: a built-in cross-class spell catalogue turns the other class's spell names into castable lines. Hero-talent override abilities keep their names when an override cannot be resolved yet, and pet abilities imported as raw numbers are recovered back to their names automatically.

Export

Text Export

A human-readable format for forum and Discord posts. Shows metadata, numbered steps, KeyPress/KeyRelease lines, and variables with event names. Paste it anywhere text works.

Raw Macrotext Import

Paste plain /cast lines and GRIP-EMS auto-parses them into steps. No need to wrap them in any special format.

P2P Sharing

Share sequences directly with other players in-game.

Sending

Receiving

Block List

Security

Shared sequences are data only. They contain spell names, step functions, and metadata. No executable Lua code is transmitted or accepted. The import system validates all data before storing it.

Tracker HUD

A movable icon overlay showing your active sequences during gameplay.

Visibility Modes

Cycle through modes with /gems tracker.

Features

Positioning

Drag the tracker to any screen position. Lock it in place with /gems tracker lock. Unlock with the same command.

Macro Recorder

Capture your spell casts and build a sequence automatically.

How to Record

  1. Type /gems record to start recording
  2. Play your rotation normally; each spell you cast is captured as a step
  3. Type /gems record again to stop
  4. The recorded sequence appears in your editor, ready to save and bind

What Gets Captured

Good Uses

Tip: Record on a target dummy for the cleanest result. Real combat introduces procs and situational casts that muddy the recording.

Remote Browser

Browse sequences shared by other players in your group.

How to Use

  1. Type /gems browse to open the browser window
  2. See sequences from party and raid members who also run GRIP-EMS
  3. Click a sequence to preview its steps, metadata, and step function
  4. Click Import to add it to your library

Bandwidth

The browser uses metadata-only sync by default. Only sequence names, authors, and spec info are sent over the addon channel. Full sequence data is fetched on-demand when you click to preview, keeping the bandwidth footprint minimal.

Availability

Only players in your current party or raid who also run GRIP-EMS are visible. The list refreshes automatically when group composition changes.

Keybindings

Per-Spec Storage

Keybinds are stored per-spec. When you switch specs, your binds switch automatically. Your Protection Paladin binds stay separate from your Retribution binds.

Per-Loadout Keybinds

Within a spec, each talent loadout can hold its own keybind for the same sequence. Swap loadouts and the keybind set swaps with it, the same way spec binds do on spec change.

Slash Commands

Command Description
/gems bind <name> <key> Bind a key to a sequence
/gems unbind <name> Remove the keybind
/gems binds List all keybinds for the current spec

Vehicle and Pet Battle Binds

GRIP-EMS provides 12 vehicle/override bar keybind slots and 6 pet battle action buttons (abilities, swap, pass, forfeit). These are separate from your normal rotation binds and activate automatically when you enter a vehicle or pet battle.

Skyriding

Sequence keys stay live on a skyriding mount when the game's Auto Dismount in Flight option is on. Press a bound key with an attackable living target and you dismount and cast that step in one press. With no target, or a friendly one, the press falls through to whatever that key drives on the skyriding bar, so steering and mount abilities keep working. With Auto Dismount in Flight off, keys suspend while mounted instead.

Druids get the same behaviour in skyriding Travel Form when Auto Unshift is also on: the keypress cancels the form and casts.

Dismount signals are not fully reliable. The game occasionally skips the bar-change event, which used to leave a key dead on foot until a reload. An out-of-combat watchdog now reconciles the keybind layers against what is actually true (mounted, gliding, in a vehicle, in a pet battle) and restores your binds automatically. Vehicle keybinds also work under action bar addons like ElvUI and Bartender.

Gamepad Support

Controller and gamepad keybinds are supported with ConsolePort detection. If you use a gamepad, GRIP-EMS detects ConsolePort and maps binds to controller buttons.

How Macro Stubs Work

When you bind a key, GRIP-EMS creates a SecureActionButton (macro stub) and assigns it to that key. The binding is a temporary override. It never touches your saved WoW keybinds. In vehicles and pet battles the overrides suspend automatically; while skyriding, keys stay live for dismount-to-cast when Auto Dismount in Flight is on (see Skyriding above).

Accessibility

GRIP-EMS aims to be usable for players who rely on screen readers, play one-handed, play with tremor, play with low vision, or avoid motion in the UI. Settings live under the Accessibility subpanel at /gems settings -> Accessibility. Design vocabulary follows AbleGamers APX (Accessible Player Experiences). The in-game panel is modelled on Elder Scrolls Online's Accessibility Mode: one place, grouped by population.

This page lists features that ship in v2.0.0. Things the WoW addon API does not expose are called out separately under What EMS cannot do.

One-click Accessibility Mode

A single toggle in the Accessibility subpanel turns on speech, reduce-motion, the High-Contrast palette, editor scale 1.25x, large-target density, the cursor overlay, and Simplified Mode together. Toggling it off restores your prior state, not the defaults; EMS snapshots whatever you had set before the preset turned things on.

On the first login after installation, EMS reads Blizzard's accessibility CVars (colorblindMode, cameraBobbing, gamepad-detected) and pre-applies matching EMS settings. This is one-shot. If your Blizzard settings change later, you can re-run the mirror from the Accessibility subpanel.

Vision

Motion and vestibular

The reduce-motion toggle disables the two animation sites in the addon: the Tempo overlay alert pulse, and the Tracker fade-in on sequence change.

Motor

Cognitive, new players, ESL

Audio

Sound cues for validation errors, validation success, import-related info, and step advance. Four semantic cues routed through LibSharedMedia, so any sound installed by SharedMedia, WeakAuras, ElvUI, or similar is pickable per cue. Channel selection (Master / SFX / Ambience / Dialog). Opt-in, off by default.

A visual-flash complement to sound cues is available for Deaf and hard-of-hearing players: an 80x80 frame at top-centre of the screen flashes red / green / cyan / gold for the matching cue, sustained 0.6 seconds. The visual toggle is independent of the sound toggle, so users can run audio-off and visual-on or both together.

Theming

A bounded subpanel covers the everyday controls: global font, editor scale, validation-badge palette, border and background opacity, per-panel alpha. A full per-element editor lives at /gems theme. The full editor exposes 45 element classes across Panels, Overlays, Rows, Buttons, Text, Emphasis, and Global. Five user-named preset slots, plus copy-to-all-profiles. Themes can be shared via chat link.

The theming apply engine uses two patterns. Persistent UI (panels, singleton overlays, the focus ring) is frame-registered: EMS holds a reference to the widget and re-skins it directly when the theme changes. Transient and construction-time UI (rows, buttons, text FontStrings, emphasis state modifiers, the global addon font) is consumer-lookup: the widget reads its spec from the current theme at the moment it renders. Both patterns produce identical visible theming. Consumer-lookup classes are not unbound and are not reserved; they apply at a different point in the widget's lifecycle.

Five overlay classes are reserved in the taxonomy for features not yet shipped in v2.0.0: overlay.toast.info, overlay.toast.error, overlay.modal.dim, overlay.tooltip, overlay.dragPreview. Their specs are in place so future work can bind them without a taxonomy change. One panel class, panel.profileMgr, is a Blizzard-owned surface (the AceDBOptions profile picker); EMS cannot currently reach a frame handle for it, so its theming is deferred until that handle is exposed.

Feedback panel

Four buttons under /gems -> Accessibility -> Feedback link to AbleGamers APX, the Game Accessibility Guidelines, a Netflix documentary on accessible play in WoW, and the support Discord. WoW has no browser-launch API, so each button opens a static-popup edit box with the URL pre-selected for Ctrl+C copy.

Compatibility with other accessibility addons

AddonCoexistsNotes
BlindSlashYesEMS TTS speaks step announcements. The chat-frame emitter pipes state into a dedicated chat-frame slot (default frame 9) for BlindSlash to parse.
ConsolePortYesDetected at login via the gamepad-detected flag. The keybind UI accepts gamepad buttons without extra config.
DialogueUIYesNo shared UI surface.
Leatrix PlusYesNo shared UI surface. Leatrix's own cursor-enhancement options are a good choice for users who want more cursor textures than EMS ships.
ElvUIYesEMS owns its own frames. Anchor MainFrame inside an ElvUI layout normally.
WeakAurasYesNo shared UI surface. No taint interaction.
Atkinson Hyperlegible (font addon)YesEMS bundles an in-app font switch via LibSharedMedia with Atkinson Hyperlegible included. Third-party font addons still coexist.

What EMS cannot do

These are capabilities the addon API does not expose. They are structural limits, not deferred features.

Slash commands

CommandDescription
/gems settingsOpen settings, then click Accessibility
/gems simplifiedToggle Simplified Mode
/gems themeOpen the per-element Theming editor

Feedback and reporting

The support Discord at discord.gg/temptingus is the primary channel. Accessibility reports go in the addon thread. The Feedback panel inside /gems -> Accessibility surfaces the same link plus the three external standards EMS draws from.

References

CVar Dashboard

A management panel for 284 WoW console variables across 14 sections. Each variable has a recommended value and the dashboard tracks how far your settings deviate from optimal.

Health Score

A weighted 0-100 score summarising your CVar health. Critical settings (like SpellQueueWindow or maxfps) carry more weight than cosmetic ones. The score updates live as you change values.

Auto-Switching Profiles

Five built-in profiles switch automatically based on detected content:

Custom Profiles

Create, clone, rename, and delete your own profiles. Useful if the built-in presets do not match your hardware or preferences.

Profile Map Editor

Maps each of the 53 context keys to a CVar profile. When the context system detects a zone change, the matching profile activates automatically.

Fix Controls

What Changed

On login, the dashboard detects which CVars changed since your last session and highlights them. Useful for catching settings that external addons or game patches might have modified.

Macro Sequencing
Combat & Targeting
Nameplates
Raiding
Dungeons & M+
Solo Play & Open World
UI & Quality of Life
FPS & Performance
Visual Quality
Sound
Floating Combat Text
Accessibility
Dragonriding & Advanced Flying
Combat Audio

SQW Optimiser

Dynamic SpellQueueWindow optimisation that adjusts your spell queue timing in real time based on measured network latency.

How It Works

WoW has a console variable called SpellQueueWindow that controls how many milliseconds early you can queue your next spell cast. Too low and you clip GCDs. Too high and you lose reaction time.

The SQW Optimiser continuously measures your latency using EWMA (Exponentially Weighted Moving Average) smoothing with outlier rejection, then sets the SpellQueueWindow to an optimal value.

Formula

SpellQueueWindow = clamp(ewma_latency + buffer, 50, 400)

Dashboard Integration

When enabled, the CVar Dashboard shows a Managed badge on SpellQueueWindow and skips it in the health score calculation (since the optimiser is handling it).

Logout Restore

On logout, the optimiser restores SpellQueueWindow to its pre-optimisation value so your setting is clean if you disable the addon later.

Slash Commands

Command Description
/gems sqw Show current SQW status and values

Repair Module

Automated diagnostics for your sequences with one-click fixes.

How to Use

13 Diagnostic Categories

Empty Steps
Oversized Steps (255+ chars)
Stale Spells
Duplicate Steps
Missing Variables
Invalid Step Functions
Broken Reset Conditions
Orphan Keybinds
Missing Metadata
Conflicting Contexts
Malformed KeyPress/KeyRelease
Unused Variables
Icon Resolution Failures

Fix All

After running a repair, click Fix All to apply all safe fixes in one click. Fixes that might change behaviour (like removing duplicate steps) are marked for review.

Quality Gating

Before exporting or sending a sequence, GRIP-EMS runs a quick repair check. If issues are found, you get a warning with the option to fix before sharing.

Spell Cache Viewer

Browse the cached spell data that the sequencing engine uses for icon resolution, autocomplete, and spell validation.

How to Use

  1. Type /gems spellcache to open the viewer
  2. Search by spell name or spell ID
  3. See cached data: icon texture, cast time, cooldown, GCD category, and spell school

What the Cache Contains

The spell cache stores data for every spell referenced in your sequences plus spells from your current spellbook. It populates on login and updates when you change spec or talents.

Debugging Icons

If a spell icon is not resolving correctly in the tracker or action bar, check the spell cache viewer. Common issues:

Tempo Advisor Integration

The Tempo Advisor reads cast time and GCD category from the spell cache to classify each step. If a spell shows as UNKNOWN in the advisor, check whether the cache has data for that spell ID.

Debug and Diagnostics

Tools for troubleshooting when something is not working as expected.

Debug Mode

/gems debug toggles debug mode. When on, the engine prints every decision to chat: which step was selected, why, and what macro text was generated.

Debug Window

/gems debugwindow opens a scrollback window (500-message buffer) that collects debug output without flooding your chat frame.

Execution Tracer

The execution tracer records per-step data (timestamp, step index, spell name, cast result, GCD state, and latency) and feeds it into the Tempo Advisor for empirical learning. It activates automatically when the Tempo Advisor is enabled.

Other Commands

Command Description
/gems diag Print a diagnostic summary to chat
/gems mapinfo Show current content detection data
/gems test Run the in-game test suite
/gems status Show addon version and sequence count

Reporting a Bug

When something needs a developer's eyes, your settings file is the fastest way to get it fixed. The file is GRIP-EMS.lua, with GRIP-EMS.lua.bak next to it as the previous save.

Find it from the Battle.net app: pick World of Warcraft, click the gear next to Play, and choose Show in Explorer (Reveal in Finder on Mac). Then open:

_retail_\WTF\Account\<ACCOUNT>\<Realm>\<Character>\SavedVariables\

Keybinds and settings are stored per character, so use the folder for the character it happened on. <ACCOUNT> is either a Battle.net number like 123456#1 or an account name in capitals.

If your sequence keybinds disappeared, capture it the moment it happens: type /reload, then copy both GRIP-EMS.lua and GRIP-EMS.lua.bak out of that folder before you log in again. Logging back in overwrites the .bak. Send both files unedited. With /gems debug on, the keybind-loss guard: line in chat names which path triggered it.

UI Tour

Click the numbered hotspots below to explore each area of the editor interface.

Sequence List
BM_SingleTarget
BM_AoE
Fire_Opener
1
Steps Keybind Macros Variables Context Raw
1. /cast Kill Command
2. /cast Barbed Shot
3. /cast Cobra Shot
1

Sequence List

The left panel shows all your sequences. Each entry displays the sequence name, spec icon, and a health score badge from the Repair Module. Click to select, right-click for options (rename, delete, enable/disable).

2

Steps Tab

Your rotation steps, one per row. Drag the handle to reorder. Each step shows a character count and spell icon. Action nodes with Interleave display an [IL:N] indicator and spinner control.

3

Toolbar

Create, delete, import, export, and open settings. The toolbar also has undo/redo buttons and a search field for filtering the sequence list.

4

Keybind Tab

Assign a per-spec keybind. Press the key you want, and it binds immediately. Toggle between normal, vehicle, and pet battle bind slots.

5

Context Tab

Pick which contexts (raid, dungeon, PvP, etc.) activate this sequence version. 53 context types in collapsible groups with Select All / Clear All.

6

Tracker HUD

A preview of the floating combat overlay. Shows the sequence icon, step counter, and keybind label. Drag to reposition in-game.

7

Tempo Advisor Overlay

The Faster/Slower widget. Shows your current MS vs recommended MS, a delta bar, CPS sparkline, and confidence level (Estimated or Calibrated).

Keyboard Shortcuts

Key Action
Ctrl+Z Undo
Ctrl+Y Redo
Tab Spell autocomplete
Ctrl+S Save sequence
Delete Remove selected step

Sequence Builder

Build a sequence right here in the guide and see how it works. The live preview shows the execution order, and each step has a character counter.

Step Functions

Sequential

Step 1, 2, 3, ... N, then back to 1. The default and most common.

Priority

Always tries step 1 first. Falls through if the spell cannot cast.

Reverse Priority

Same as Priority but starts from the last step.

Random

Picks a random step each keypress. Fun for fishing macros.

Execution Preview

Type some steps above to see the preview.

Import Walkthrough

Walk through the 4-stage import process step by step.

Slash Commands

All 42 slash commands at a glance. Type /gems help in-game for a quick reference.

Command Description Category
/gems Toggle the sequence editor Basic
/gems help Show all available commands Basic
/gems open Open the editor (alias) Basic
/gems status Show addon version and sequence count Basic
/gems settings Open the settings panel Basic
/gems guide Open the interactive tutorial Basic
/gems resetui Reset window position and size to defaults Basic
/gems create Create a new sequence Sequences
/gems delete <name> Delete a sequence by name
/gems delete BM_ST
Sequences
/gems list List all stored sequences Sequences
/gems reset <name> Reset a sequence to step 1 Sequences
/gems validate Check all sequences for stale or unknown spells Sequences
/gems revalidate Force re-tag all sequences with spell IDs Sequences
/gems bind <name> <key> Bind a key to a sequence
/gems bind BM_ST F5
Keybinds
/gems unbind <name> Remove keybind from a sequence Keybinds
/gems binds Show all keybinds for the current spec Keybinds
/gems import Open the import paste window Import/Export
/gems export <name> Export a sequence to clipboard Import/Export
/gems exportall Open multi-select export window Import/Export
/gems migrate Migrate sequences from a compatible sequencer Import/Export
/gems send <name> <target> Send a sequence to a player
/gems send BM_ST Targettoon
Sharing
/gems accept Accept the last received sequence Sharing
/gems block <player> Block a player from P2P sharing Sharing
/gems unblock <player> Unblock a player Sharing
/gems blocklist List all blocked players Sharing
/gems browse Open the remote macro browser Sharing
/gems tracker Cycle tracker visibility modes UI
/gems tracker lock Lock or unlock tracker position UI
/gems cvar Open the CVar Dashboard
/gems cvar reset, /gems cvar profile
UI
/gems spellcache Open the spell cache viewer UI
/gems fs Tempo Advisor status
/gems fs on, /gems fs off, /gems fs reset
UI
/gems msadvisor Analyse sequence timing for optimal click rate UI
/gems debug Toggle debug mode Diagnostics
/gems debugwindow Toggle the debug window Diagnostics
/gems diag Print a diagnostic summary to chat Diagnostics
/gems test Run the in-game test suite Diagnostics
/gems repair <name> Analyse and repair a sequence
/gems repair BM_ST
Diagnostics
/gems repairall Analyse and repair all sequences Diagnostics
/gems mapinfo Show current content detection data Diagnostics
/gems testlocale Run locale translation round-trip test Developer
/gems compress Compress a sequence string Developer
/gems decompress Decompress a sequence string Developer

Common Workflows

  1. Run /gems to open the editor
  2. Click New , name your sequence
  3. Add steps in the Steps tab (one spell per line, Tab for autocomplete)
  4. Save, switch to Keybind tab, press your key
  5. Test on a target dummy and adjust
  1. Ask your friend to /gems export <name>
  2. They paste the string in Discord/party chat
  3. You run /gems import, paste the string
  4. Preview, resolve conflicts, and import
  1. Enable Tempo Advisor: /gems fs on
  2. Play your rotation for a few minutes
  3. Watch the Faster/Slower overlay for guidance
  4. After 30 samples it switches to Calibrated mode
  5. Adjust your MS slider to match the recommendation

Plugin API

Third-party addons can register sequences with GRIP-EMS through the plugin API.

Registration

GRIPEMS:RegisterPlugin("MyAddon", sequenceTable)

The sequenceTable is a Lua table of sequences following the standard GRIP-EMS format. Each entry must have a name, steps, and step function at minimum.

Callback

GRIPEMS:OnPluginLoaded(function(addonName)
  -- plugin is ready
end)

Fires after GRIP-EMS loads and processes the registered sequences. Use it to apply any post-registration setup.

Format Requirements

Tip: Plugin-registered sequences appear in the editor with a plugin badge and cannot be edited directly. Export them first if you want to modify.

Settings Reference

All settings grouped by panel. Open settings with /gems settings.

The Accessibility subpanel (one-click preset, speech, reduce motion, contrast preset, density, cursor overlay, simplified mode, sound cues, theming, flicker-safe palette) is documented separately. See the Accessibility section above for the full list and design rationale.

General

Click Rate (MS)
Global milliseconds between keypresses
250
Per-Character MS
Override the global click rate for this character
Off
Auto-Migrate
Run migration check on first load
On
Minimap Button
Show the minimap icon
On
Locale
Override the auto-detected language
Auto

Hold to Freeze

Enable hold-to-freeze
Pause the active sequence on its current step while the freeze modifier is held
Off
Freeze modifier
Which modifier freezes: Shift, Control, or Alt
Shift

Tracker

Visibility
When to show the tracker overlay
In Combat
Scale
Size multiplier for tracker icons
1.0
Lock Position
Prevent dragging the tracker
Off
Step Counter
Show step number on tracker icons
On

Profiles

Active Profile
Current AceDB settings profile
Default
Profile Map
Which CVar profile activates for each context
Built-in

Sharing

Auto-Accept Friends
Accept sequences from friends without prompt
Off
Chat Links
Show clickable links when receiving sequences
On
Block List
Players blocked from P2P sharing
Empty

CVar Dashboard

Auto-Fix Entries
Per-CVar opt-in for automatic correction
None
Auto-Switch Profile
Change CVar profile based on content detection
On
Health Score Display
Show the 0-100 health score in the panel
On

SQW Optimiser

Enabled
Dynamic SpellQueueWindow tuning
Off
Buffer
Extra MS added to the EWMA latency estimate
20
Restore on Logout
Reset SQW to original value on logout
On

Faster/Slower

Mode
Tempo Advisor mode: Off, Overlay, or Auto-Set
Overlay
Buffer
MS padding added to the recommended rate
10
Sparkline
Show CPS sparkline history on the overlay
On
Audio Alerts
Play a sound on tempo mismatch
Off
Hold Mode CVar
Let the Advisor manage Hold to Cast
Off

Debug

Debug Mode
Print engine decisions to chat
Off
Debug Window
Show the scrollback debug window
Off
Execution Tracer
Log per-step execution details
Off

Roadmap

Feature timeline for GRIP-EMS. Everything marked SHIPPED is available now.

Version Features Status
v1.0 Sequencing engine, visual editor, 4 step functions SHIPPED
v1.1 Multi-version sequences, context auto-switching SHIPPED
v1.2 P2P sharing, chat links, block list SHIPPED
v1.3 Variables, Lua function vars, event-driven re-evaluation SHIPPED
v1.4 Tracker HUD, 4 visibility modes, scale/lock SHIPPED
v1.5 Per-spec keybinds, vehicle/pet battle support, gamepad SHIPPED
v1.6 Multi-window editor, syntax highlighting, spell autocomplete SHIPPED
v1.7 Hierarchical actions, macro recorder, 11-language localisation SHIPPED
v1.7.1 Sharing controls, plugin API, repair module SHIPPED
v1.8 Action bar integration, side-by-side diff, metadata editor SHIPPED
v1.9.0 CVar Dashboard, SQW Optimiser, spell cache viewer SHIPPED
v1.9.1 Tempo Advisor, Interleave/Weave, import quality, text export SHIPPED
v2.0 Accessibility suite: one-click mode, theming editor, keyboard navigation, simplified mode SHIPPED
v2.1.0 If/Else action nodes, sequence authorship, cross-class spell catalogue SHIPPED
v2.1.8 In-combat variables, hold to freeze, disable a step, per-loadout keybinds, variant indicators SHIPPED
v2.1.9 - v2.1.12 Editor scroll and drag fixes, locale auto-translate, cross-class spell resolution, Loop and If duplicate preservation SHIPPED
v2.1.13 - v2.1.16 Skyriding keybind overhaul: dismount-to-cast, druid forms, exit watchdog, bar-addon compatibility SHIPPED
v2.1.17 Reloading during an arena or Mythic+ run no longer leaves sequences dormant until the match ends; clicking a greyed-out row re-activates it properly. Import preview corruption false alarms removed. ACCESSIBILITY.md ships in the download again. SHIPPED
v2.1.18 Vanishing sequence keybinds now warn and offer /gems binds restore; dismounting into combat while skyriding restores your keys right away. Importing an older sequence no longer errors and keeps its structure. Simplified Mode and the in-game test suite fixed. SHIPPED
v2.1.19 Library migration fixed after the source sequencer's update hid its runtime data. Imported and received sequences keep author, signature, and edit chain; Forge-exported strings import with the source labelled. Starter Build keybind-loss closed, the Variants tab draws and names its target version, and variable saves keep every field. SHIPPED
v2.1.20 Fresh-login skyride keys heal at takeoff, and the Keybinds tab warns when another addon contends vehicle or pet battle keys. ENTER and SPACE reach the game when keyboard navigation targets nothing, popups gain full keyboard handling with larger targets, and cross-class Mindbender references resolve again. SHIPPED
v2.1.21 Interleaved steps space against their original positions, fixing rotations that drifted out of order and the keybind stalls that came with them. Western-locale text gains a parity backfill. SHIPPED
v2.1.22 A sequence whose steps are all interleave actions no longer loses its base rotation on import; EMS detects the case and warns you, and the Repair tab clears the interleave flags in one click. Click Rate tooltips corrected across every locale, and user-facing text moves to British spelling. SHIPPED
v2.1.23 Imported bare-name macro steps inline the bundled macro body and auto-heal on login, so a shared sequence runs without hunting for a matching macro. Disabled steps stay disabled through import instead of switching back on. SHIPPED
v2.1.24 Skyriding keys yield to the sequence layer cleanly, cast buttons register for click steps, and VK-only keys cast by name when auto-dismount is off. The client build 12.0.7 joins the supported list. SHIPPED
v2.1.25 Priority and Reverse Priority loops honour their Repeat count instead of firing once. A multi-version sequence keeps its macro on your action bar when the active version changes, rather than orphaning the copy you dragged there. SHIPPED
v2.1.26 A [nochanneling] step tag joins [channeling] in the Spell Picker. The CVar-change chat notice is off by default, the per-step edit box grows taller before it scrolls, native exports record their EMS version, and the rotation preview follows a Loop's Repeat count and step function. SHIPPED
v2.1.27 Sorting sequences by Last Updated no longer errors on older text timestamps. The cross-class All Classes list is rebuilt against the current 12.0.7 client. SHIPPED
v2.1.28 Drag a step into a loop to nest it, by dropping it on the loop's row or into a loop open in the detail pane, with undo and a depth-limit refusal. Macro-reference steps can refresh themselves after you edit the underlying macro, off by default. Step-list drag lands where you point again, and an If that only fills its Else branch respects the nesting limit. SHIPPED
v2.2.0 A plugin API lets other addons extend GRIP-EMS with import and export formats, settings and panels, variables, conditions, and step functions. A plugin's export format shows in the export picker. The loop-and-branch self-heal also runs on context switches now, so swapping versions on entering a dungeon or arena keeps step grouping. SHIPPED
v2.3.0 Quick-swap the live version of a sequence with a pin, plus badges showing which is live. Keyboard navigation reaches the Keybind tab, Export window, and Theming editor. The spell picker inserts at the cursor and replaces a highlighted selection. Plugin API v3 lets addons drive action bars: per-step spell data, the sequence macro, and a /gems subcommand. SHIPPED
v2.3.1 Native exports carry build context (class, spec, and talent loadout) plus a per-sequence changelog field, both travelling on export and import. The verified badge signs the full macro content now, so a tampered sequence reads as tampered and cross-language imports no longer false-flag. A context-switch Lua error on versions with no steps is fixed. SHIPPED
v2.3.2 Cross-language spell-name data moved to a load-on-demand companion addon shipping in the same download, keeping about a megabyte out of the base load. The cursor overlay is built on first enable instead of at every login. The AddOns list groups the GRIP family under a GRIP category with the locale bundle nested under EMS. SHIPPED
v2.3.3 Every export string carries the full story (author, class, spec, talents, what it casts and what it needs), so sharing sites can fill a post straight from the paste string, and collections carry the same per-sequence detail as single exports. Player-to-player sends bundle the macros a sequence depends on, and the exporter identity follows your privacy mode. SHIPPED
v2.3.4 Renaming a sequence keeps its identity: verification badge, fork history, privacy mode, macro dependencies, sound cues, Conditions assignments and hold-mode keybind all carry through. Imported talent strings survive saving, renaming and duplicating. Plugin-created sequences can no longer be renamed by hand. SHIPPED
v2.3.5 The flat step list takes more than one step at a time. Ctrl-click toggles a step, shift-click grabs the range from your last pick, and a plain click goes back to one. Duplicate and Delete act on the whole block as a single undo. Outline and action-tree sequences keep single-select. SHIPPED
v2.3.6 The Source tab stays responsive on large sequences and saves a sequence that contains a loop. Disabled steps inside a Loop or IF node stay out of the compiled macro, and a corrupted sequence entry is skipped and reported instead of crashing the editor at login. Imports track their source more closely, and the CVar Dashboard gains a NamePlate Stacking recommendation. SHIPPED
v2.3.7 The step index and the step count finally agree. Priority and Reverse Priority sequences stop showing the wrong spell on the macro stub and action bar, the tracker stops rendering "7/4", and the spoken step announcement names the step being cast. A new API:GetAuthoredSteps accessor gives plugins the authored base order. SHIPPED
v2.3.8 An interleave whose interval overruns its block no longer compiles to nothing in silence. The editor warns, names the action and the block's step count, and suggests the Repeat that would make it fit. SHIPPED
v2.3.9 Keybind fixes for per-loadout mode: Clear removes a per-spec bind instead of claiming there is none, suppressed keys stop rendering across the UI, clearing a key sweeps its suppress markers, and the conflict warning reads the merged view. The test runner flags a filter that matches nothing. SHIPPED
v2.3.10 Spell Cache Viewer and Remote Browser rows render instead of painting blank, and the spell rename behind them applies to the live cache. The Set Keybind button no longer sticks greyed out after an in-combat create. SHIPPED
v2.3.11 The CVar Health score keeps a login-to-login history with a trend line, the Raiding section models Raid Spell Density, the raid and PvP profiles carry nameplate stacking masks, and the header counts categories and CVars from the registry. Garbled Korean locale text restored. SHIPPED
v2.3.12 Delves get the fifth built-in CVar profile with all three delve contexts mapped to it, and the SQW Optimizer's latency ring draws a trend line in the CVar health subpanel. SHIPPED
v2.3.13 The CVar Health registry grows to 255 variables across 14 sections with a new Combat Audio section, the dashboard gains search and a show-only-issues filter, numeric CVars become sliders and on/off CVars tickboxes, and the graphics dropdowns read their tier names from the game's own strings. SHIPPED
v2.3.14 Key Down Casting is set on at every login so a fresh install works without changing a game setting first, and its CVar Health row is removed. SHIPPED
v2.3.15 Import hardening: broken sequence data reports instead of raising; Forge native payload reader SHIPPED
v2.3.16 An unsigned import no longer picks up your byline on save; the provenance verdict badge explains itself on hover SHIPPED
v2.3.17 Variable bodies run against a fixed read-only list; a do-not-share mark blocks export and player-to-player sharing SHIPPED
v2.3.18 Cross-character sequence visibility with push-copy to another character; reset paths repaint the tracker HUD and bar overlay SHIPPED
v2.3.19 Names game patch 12.1; nested protected content is refused with a reason instead of a decode error, and connected-realm theme links call the 12.1 replacement SHIPPED
v2.4.0 Hold While Channeling per sequence version, with an option to release an empowered spell at maximum rank; a keybind conflict panel that reports and clears what else is bound to your sequence keys; Plugin API version 4 SHIPPED
v2.4.1 Sequence keybinds are re-applied on every world load, so they survive a reload and zoning into an instance SHIPPED
v2.4.2 Step spell names are re-resolved out of combat, so a temporary form or proc name no longer sticks in the step list SHIPPED
v2.4.3 An import no longer overwrites a macro you wrote yourself, so a name clash leaves your macro untouched and tells you which one it skipped SHIPPED
v2.4.4 A temporary spell swap is never saved into step text, so your steps keep the ordinary base name and the step list works the current name out as it draws SHIPPED
v2.4.5 The step visualizer reads each step's own text, so a keypress box full of conditional casts no longer shows the same spell on every row SHIPPED
v2.4.6 Undo is discarded when you switch version, and step rows are locked on a version whose action tree drives them, so neither can write a change into a version you did not edit SHIPPED
v2.4.7 The guide's New in list has its own v2.3.1 section, so the three things that shipped in v2.3.1 are listed where they belong instead of being left out SHIPPED
v2.4.8 A sequence you did not write is confirmed by name before it is sent, answered or exported, a do-not-share mark survives every copy and edit, and no save, duplicate or arrival transfers authorship to you SHIPPED
v2.4.9 EMS finds its macros by what they contain instead of by position, so deleting or renaming a sequence no longer writes into the wrong macro, and two sequences can no longer be handed one macro name; the import preview lists what it turned away and why, and its tick boxes stay with the row they belong to SHIPPED
v2.4.10 The tracker button reports each step's own spell on Priority, on Reverse Priority and on plugin step orders, so a keypress spell no longer shows on every step outside Sequential SHIPPED
v2.4.11 Collections whose sequences carry a name wrapper import on every route, a malformed import reports what it could not read instead of stopping, and a badly stored sequence no longer stops activation, an editor save, the tracker or the plugin interface, nor empties its own steps on a rebuild SHIPPED
v2.4.12 A sequence holding a damaged version keeps its version display: the LIVE badge, the version menu marker, the list row tag and the tracker number all agree on the same live version, the wrong version is no longer named live when two hold the same value, and a context or talent loadout change no longer queues an endless reload SHIPPED
v2.4.13 Editing one version of a sequence no longer works out the step names in its other versions, so a talent swap cannot rewrite a version you did not open; the keybind conflict panel and /gems keys check the modifier combinations a sequence branches on, and list each one another addon or a game binding holds; and a sequence you wrote yourself is recorded as your own work when it is first saved, so it is no longer treated as though it came from elsewhere SHIPPED
v2.4.14 A step keeps the spell name you typed after a talent replaces it, because the spell recorded alongside your text is resolved from your words rather than from whatever the game serves at that moment, and a version you wrote for another loadout shows the names you gave it; and Hold While Channeling reaches every character instead of only one with an empowered spell, since the hold acts on any channel from any source SHIPPED
v2.4.15 A sequence imported on v2.4.14 casts again: the import stores spell names instead of the raw transport form, a copy already damaged on your character is reported in the repair panel as an error and repaired by the check that runs at login even where an earlier repair had cleared its stored spell tags, and a sequence that embeds another is repaired in one pass rather than needing a second login SHIPPED
v2.4.16 A repair run from the repair panel reports its own outcome, so one that changes nothing says so and one that has to wait for combat to end says it is queued, a panel row explains on hover what its own Fix button will do, or what to do by hand where that button is greyed out, and a stored sequence the login repair pass cannot read is passed over instead of halting the pass, so the sequences after it are still repaired SHIPPED
Next Accessibility verification pass, locale translation batches PLANNED

Glossary

Action Node

A hierarchical building block in the visual editor: Action, Loop, Repeat, Conditional, If/ElseIf/Else.

Calibrated

Tempo Advisor confidence level after collecting 30+ play samples.

Compile

The process of flattening a hierarchical action tree into a linear step list for the sequencing engine.

Context

A game situation (raid tier, dungeon difficulty, PvP mode, etc.) that can trigger automatic version switching.

CPS

Clicks Per Second. Shown in the Tempo Advisor sparkline overlay.

CVar

Console Variable. A WoW client setting stored by the game engine.

Estimated

Tempo Advisor confidence level before 30 play samples are collected.

EWMA

Exponentially Weighted Moving Average. Used by the SQW Optimiser to smooth latency data.

GCD

Global Cooldown. The minimum time between most spell casts, usually 1.5 seconds before haste.

GRIP1

The native serialisation format for GRIP-EMS sequences. A compressed Lua table string.

Health Score

A 0-100 quality rating. The CVar Dashboard and Repair Module both generate health scores.

Interleave

A compile-time weave that injects a spell every N steps into the rotation.

Macro Stub

A SecureActionButton created at load time to execute a sequence. Keybinds attach to these.

Off-GCD

A spell that can be cast without triggering the Global Cooldown.

P2P

Player-to-Player. Direct sequence sharing via whisper, party, or raid chat.

Priority

A step function that always tries step 1 first, then step 2 if step 1 fails, and so on.

Profile

A saved set of CVar values. The CVar Dashboard supports 5 auto-switching profiles plus custom ones.

Reset Condition

An event that sends the sequencer back to step 1: combat, target, gear, spec, or idle timer.

Sequential

The default step function. Advances one step per keypress, then loops to step 1.

SpellQueueWindow

A WoW CVar controlling how early your next spell can be queued (in milliseconds).

Step Function

The algorithm deciding which step fires next: Sequential, Priority, ReversePriority, or Random.

Tempo Advisor

Per-sequence click rate analysis with a Faster/Slower overlay. Learns from your play data.

Weave

Synonym for Interleave. Set an interval on an Action node to weave it every N steps.

FAQ

No. GRIP-EMS fires one spell per keypress using standard WoW macro API calls. You press the button; the addon picks which spell to cast. This is the same mechanism Blizzard provides for castsequence macros.

Every feature ships free. No Patreon tier-gating, no premium version. If you want to say thanks, there is a PayPal sponsor link on CurseForge.

Yes. Use /gems import, paste the string, and GRIP-EMS auto-detects the format. Alternatively, if the old addon is still installed, use /gems migrate to transfer everything in one click.

GRIP-EMS stores keybinds per-spec. Switch back to the original spec and your binds will reappear. You can also run /gems binds to see what is currently bound.

Yes. Use /gems send <name> <player> to send directly, or /gems export to copy the string to clipboard for Discord or forum posting. Friends can also click the chat link to accept immediately.

WoW enforces a 255-character limit on each SecureActionButton macro. GRIP-EMS shows a live character counter in the editor so you can see how close each step is to the limit.

Make sure action bar icon integration is enabled in Settings. GRIP-EMS supports Blizzard, ElvUI, and Bartender4 action bars. If you use a different bar addon, the icon may not update automatically.

Yes. Create a healing sequence with your heal spells, and use Priority step function if you want the addon to always try your strongest heal first. Variables and context switching work the same way for healers.

It starts with a theoretical estimate right away. After 30 play samples it blends in your actual data (70% theory, 30% empirical). You can see the confidence level (Estimated vs Calibrated) on the overlay.

Run /gems fs reset to clear the stored data and start fresh. You can also turn it off entirely with /gems fs off.

No. It only changes client-side console variables. If something feels wrong, open the dashboard and click Fix All Critical to revert to recommended values. The What Changed panel on login shows exactly what was modified.

The CVar Dashboard has a per-CVar reset button and a section-level Fix All button. For a full Blizzard default reset, type /console cvar_default in chat.

Yes. The Accessibility subpanel covers screen-reader support via a chat-frame emitter, three palette presets plus an 8-type colourblind matrix, a flicker-safe palette for photosensitivity, large-target density mode, Simplified Mode for switch input and eye trackers, and a one-click Accessibility preset. See the Accessibility section above for the full feature list and the compatibility matrix.