GRIP - Enhanced Macro Sequencer

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

v2.3.14

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 hides it in the Current Keybind box, the sequence list, the step tooltip, and the tracker -- not just in the live driver. 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 -- so 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 -- about a megabyte less in the base addon at login. Leave it 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.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 -- adding import and export formats, settings and a settings panel, variables, conditions, and step functions, and mounting their 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 -- and 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 -- expand Loop, Repeat, and Conditional nodes into a linear step list
  2. Interleave -- insert 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 212 WoW console variables across 13 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.

Combat
Camera
Display
Graphics
Mouse
Nameplates
Network
Performance
Raid Frames
Sound
Spell Queue
Targeting
UI

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 -- toggle 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 -- open 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. /gems -- 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, warns, and offers a one-click fix. 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 -- 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
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.