GRIP-EMS
The free macro sequencer for World of Warcraft
No paywalls. No Patreon. Every feature included.
Drop spells into the editor
Pick a step function
Bind a key
One keypress, one spell -- your rotation fires automatically
Installation
Addon Manager
Search for GRIP - Enhanced Macro Sequencer or GRIP-EMS in your addon manager of choice. It is listed on CurseForge, Wago Addons, WowUp, and WoWInterface.
Manual Install
Download the latest release from one of the platforms below. Extract the GRIP-EMS folder into your addons directory:
World of Warcraft/_retail_/Interface/AddOns/GRIP-EMS/
Then restart WoW or type /reload in chat.
Requirements
World of Warcraft Retail (Midnight 12.0.1 or later). No dependencies -- GRIP-EMS ships everything it needs.
Quick Start
Five steps. That is all it takes to go from zero to a working rotation.
Open the editor
Type /gems in chat. The GRIP-EMS editor window appears.
Create a sequence
Click New in the sequence list. Give it a name -- something like "Fury ST" or "Resto Raid".
Add your rotation spells
Type one spell per step. Press Tab inside any step to search your spellbook -- it matches by name and inserts the /cast command for you. Add as many steps as your rotation needs.
Save and bind a key
Click Save, then switch to the Keybind tab. Hit the capture button and press the key you want to use. Done.
Press and play
Find a target and start pressing your keybind. Each press fires the next spell in your sequence. Your rotation is live.
Migration
GRIP-EMS imports sequences from other macro sequencer addons. Sequences, variables, step functions, metadata, multi-version data, and context overrides all transfer. You do not lose anything.
In-Game Migration
If your previous sequencer is still installed, open GRIP-EMS and click Migrate in the sequence list. Everything transfers automatically with a detailed report in chat. All step functions, reset conditions, variables, context versions, and keybind hints are preserved.
This is the fastest way. One click, full transfer.
Clipboard Import
Export a sequence from your old addon, then run /gems import in GRIP-EMS. Paste the string into the import window and pick which sequences to bring over.
Conflicts are color-coded so you always know what you are getting:
- Green -- new sequence, safe to import
- Yellow -- exists but different, review before replacing
- Red -- exists and identical, skip or rename
Choose skip, replace, or rename per item. Variables are auto-included when needed.
Core Concepts
These are the building blocks. Once you understand them, everything else in the addon clicks into place.
Sequence
A sequence is an ordered list of macro steps that execute one per keypress. Each sequence has a name, an icon, one or more steps (each containing WoW macro text), a step function that controls advancement order, and optional reset conditions.
Think of it as a playlist for your spells. Each keypress plays the next track.
Step Function
The step function determines the order your steps fire. There are four:
Sequential -- Steps fire 1, 2, 3, ... N, then loop back to 1. Straightforward and predictable. Best for simple rotations where order matters.
Priority -- Always tries step 1 first. If the GCD is active or the spell is on cooldown, it falls through to step 2, then 3, and so on. Resets to step 1 on each keypress. Put your most important spell first.
Reverse Priority -- Same logic as Priority but starts from the last step and works upward. Useful for rotations where your filler belongs at the top of the list.
Random -- Picks a random step each keypress. Niche, but fun for flavor rotations or testing.
Reset Conditions
Resets send the sequence back to step 1. There are five types, and you can combine them:
- Combat end -- resets when you leave combat
- Target change -- resets when you switch targets
- Gear swap -- resets on equipment change
- Spec change -- resets when you change specialization
- Idle timer -- resets after N seconds of no keypresses
Combined syntax example: target/combat/5 means "reset on target change, combat end, or 5 seconds idle."
Most players use combat end plus a short idle timer. That covers the majority of scenarios.
Macro Stub
A macro stub is a standard WoW /macro that you drag to your action bar. The stub displays the correct spell icon and tooltip. When you press the keybind, the addon routes directly to the sequence engine -- the stub is just for visual feedback on your bar.
You never edit the stub manually. GRIP-EMS creates and updates it for you.
Keybind
Keybinds are per-spec and temporary. They never overwrite your saved WoW keybindings. When you switch specs, GRIP-EMS auto-swaps to that spec's bindings. Keybinds auto-suspend during vehicles, skyriding, and pet battles.
You can bind the same key to different sequences across different specs. The addon handles the swap automatically.
Variables
Variables let you reuse text across multiple sequences. Define a variable like myTrinket with the value /use 13 and then write ~myTrinket~ in any step. The addon substitutes the value at compile time.
Variables can also be Lua functions that re-evaluate on events. For example, you could create a variable that checks which trinket is equipped and updates the /use line automatically when you swap gear.
Account-wide. Define once, use everywhere.
The Editor
The editor is the main window you see when you type /gems. It has a sequence list on the left and a 6-tab editing area on the right. Everything you do to build and manage sequences happens here.
Steps Tab
The step list shows each macro step with its text, a character counter, and drag handles for reordering. Click any step to edit it inline.
GRIP-EMS uses a working-copy pattern. Your edits are not live until you click Save. Changed your mind? Click Discard to throw away everything since the last save. This keeps your running rotation safe while you experiment.
Metadata Editor
A collapsible panel below the sequence name lets you edit Author, Description, Help Text, and Help Link. Four read-only fields (Class, Spec, Created, Updated) are shown alongside. Metadata is included in GRIP1 exports and preserved on import.
Spell Autocomplete
Press Tab inside a step to search your spellbook. It matches by spell name. Select a result and the /cast SpellName command is inserted for you. Fast, accurate, no typos.
Character Counter
Each step shows an N/255 counter. Green under 200, yellow from 200 to 254, red at 255. The 255-character limit is a hard WoW restriction on macro text -- you cannot exceed it.
Rotation Preview
A live preview appears below the editor header whenever a sequence has steps. It shows you exactly what the engine will do on each keypress before you ever leave the editor.
A toggle button in the top-right corner switches between two display modes:
- Icon mode (default): A horizontal strip of spell icons, one per simulated keypress. Each icon shows a step number in the bottom-right corner. Hover any icon for a tooltip with the step index and spell name. If the strip overflows, scroll horizontally. Fade gradients on the edges indicate when more icons are available in each direction.
- Text mode: A numbered list showing the full macro text for each step. A summary line at the bottom shows the total step count and the longest step's character count, color-coded green/yellow/red using the same thresholds as the per-step counter.
Random step function: Icons show each unique step once with a "Random order" hint. The actual execution order is unpredictable, so no cycle is simulated.
Sequential, Priority, and Reverse Priority: The preview simulates 20 keypresses so you can see the full cycle, including wraps back to the beginning.
Spell status tinting on icons:
- Red overlay -- spell does not exist (renamed or removed in a patch)
- Orange overlay -- spell exists but is not learned (wrong spec or talent)
- No overlay -- spell is valid, an item, or a variable reference
The preview updates live as you edit steps. No save required.
Spell Validation
A yellow warning banner appears at the top of the editor when any step references a spell that may be outdated.
Hover the banner for a breakdown: "unknown" spells (removed or renamed in a patch) and "known" spells (exist in the game but not in your current spellbook -- typically talent-gated or wrong-spec).
The same status is reflected in the Rotation Preview icon tinting (see above) so you can spot exactly which steps are affected.
Spell warnings now update automatically when you swap specs or change talents -- no need to close and reopen the editor.
Use /gems validate to check all sequences at once. See Slash Commands for details.
KeyPress / KeyRelease
Two editor boxes sit above the step list. KeyPress lines run before each step (e.g., /stopmacro [channeling]). KeyRelease lines run after. Per-step fit status shows whether the keyPress text fits within the 255-char limit for that particular step.
Keybind Tab
Press the capture button, then press your desired key. The keybind is per-spec -- switch specs and you get a different set. The tab shows all specs and their current bindings at a glance.
Click Clear to remove a binding. The keybind is released immediately -- no reload needed.
Keybinds are temporary override bindings. They never touch your saved WoW keybind configuration.
Macros Tab
Shows your WoW macro slots used by GRIP-EMS stubs. The display reads N/138 account-wide slots and N/18 character-specific slots.
The Orphan Cleanup button removes stubs for sequences that have been deleted. If you delete a lot of sequences, run this to reclaim macro slots.
Variables Tab
Account-wide variable editor. Create, edit, and delete variables from a single list. Each variable has a name and a value -- either plain text or a Lua function.
Lua function variables can bind to events for automatic re-evaluation. For example, bind to PLAYER_EQUIPMENT_CHANGED and the variable updates every time you swap gear. Validation runs on save to catch syntax errors before they hit your sequences.
Context Tab
Context versions let one sequence behave differently based on content type. There are 15 context types organized in collapsible groups:
Raid: Mythic, Heroic, Normal, LFR
Dungeon: Mythic+, Heroic, Normal, Timewalking
PvP: Arena, Battleground
Solo: Delves, Open World, Scenario
Default: Fallback for anything not explicitly covered
Each version has its own set of steps. The addon auto-switches based on what content you are in, with smart fallback chains. For example, if no Mythic+ version exists, it falls back to Dungeon, then Default.
A conflict dialog warns you when two versions claim the same context type.
Raw Tab
Shows the raw Lua table representation of the sequence data. Read-only view for advanced users. The addon validates syntax via pcall + loadstring -- if the data is malformed, it tells you.
Useful for debugging, verifying imports, or just seeing exactly what the engine is working with under the hood.
Sequencing Engine
How Execution Works
When you press a keybind, the addon loads the current step's macro text onto a SecureActionButton. WoW executes that macro as if you had clicked it. The step function then advances to the next step for the following keypress. All of this happens within WoW's secure action framework -- no automation, no botting, just one spell per keypress.
The addon never bypasses WoW's restrictions. Every action requires a physical keypress from you. Blizzard's anti-cheat sees exactly one spell cast per player input, which is how macros are supposed to work.
The 15 context types each have a fallback chain. When the addon detects your content type, it looks for a matching version. If none exists, it walks the chain until it finds one:
- Mythic Raid -> Raid -> Default
- Heroic Raid -> Raid -> Default
- Normal Raid -> Raid -> Default
- LFR -> Raid -> Default
- Mythic+ -> Dungeon -> Default
- Heroic Dungeon -> Dungeon -> Default
- Normal Dungeon -> Dungeon -> Default
- Timewalking -> Dungeon -> Default
- Arena -> PvP -> Default
- Battleground -> PvP -> Default
- Delves -> Solo -> Default
- Open World -> Solo -> Default
- Scenario -> Solo -> Default
The addon checks GetInstanceInfo() and C_ChallengeMode on zone change and combat start. Detection is instant -- you never need to reload.
Most players only need Default plus one or two context versions. You do not have to fill them all in.
Write ~varname~ in any step. At compile time, the addon replaces it with the variable's current value. The substitution happens before the macro text is loaded onto the button, so WoW never sees the variable syntax -- just the final macro text.
Lua function variables re-evaluate on their bound events. When a variable's value changes, the addon recompiles all sequences that reference it. This means your rotation stays current even if you swap gear or change talents mid-session.
Example: a variable named trinket1 with value /use 13. Write ~trinket1~ in a step and the compiled macro reads /use 13. Change the variable to /use 14 and every sequence using it updates automatically.
Icon Resolution
The sequence icon updates dynamically based on the current step's first /cast or /use spell. SpellCache scans your spellbook at login and provides instant icon lookups. If a step has no recognized spell, the sequence's default icon is used.
This means your action bar always shows the spell that is about to fire. No guessing, no stale icons.
Tracker HUD
The Tracker HUD is a movable overlay that shows your active sequences as icons on screen. Each icon displays the current spell and a step counter (e.g. 3/8). It gives you at-a-glance visibility into where each sequence is in its rotation without needing to open the editor.
Visibility Modes
Cycle through the four modes with /gems tracker:
Always -- The tracker is always visible, in and out of combat.
In Combat -- Appears when you enter combat, hides when you leave. Clean screen outside of fights.
Has Target -- Appears when you have a target, hides otherwise. Good for questing and open world.
Never -- Tracker is completely hidden. Use this if you prefer the minimal look.
Features
- Step counter on each icon showing current/total (e.g. 3/8)
- Active-sequence gold highlight on the last-pressed sequence
- Scale slider (0.5x to 2.0x) in Settings > Tracker
- Lock/unlock position: drag to reposition, then lock with
/gems tracker lock - Icons update dynamically to show the current step's spell
What the Tracker Looks Like
Tracker mockup. The gold border marks the last-pressed sequence. Step counters show current/total.
Positioning
Drag the tracker to any spot on your screen. Once you have it where you want it, type /gems tracker lock to prevent accidental repositioning. Run the same command again to unlock.
Position is saved per character and persists across sessions. If you use different UI layouts on different characters, each one remembers its own tracker spot.
Tracker Quick Reference
| Action | How |
|---|---|
| Cycle visibility mode | /gems tracker |
| Lock/unlock position | /gems tracker lock |
| Change scale | Settings > Tracker > Scale |
| Reposition | Unlock, drag, lock |
Slash Commands
All commands use /gems as the prefix. Type /gems help in-game for a quick reference. Most of these have shorter alternatives -- /gems alone toggles the editor.
| Command | Description |
|---|---|
/gems |
Toggle the sequence editor |
/gems help |
Show all available commands |
/gems open |
Open the editor (alias for /gems) |
/gems create |
Create a new sequence |
/gems delete <name> |
Delete a sequence by name |
/gems list |
List all stored sequences |
/gems test <name> |
Advance one step and show the result |
/gems repair <name> |
Analyze a sequence for issues and open the repair UI with one-click fixes |
/gems repairall |
Analyze all sequences and open the batch repair UI |
/gems cvar |
Manage CVar profiles from chat (select, auto-switch, view changes) |
/gems sqw |
Show SQW Optimizer status, toggle on/off, or adjust buffer |
/gems reset <name> |
Reset a sequence to step 1 |
/gems bind <name> <key> |
Bind a key to a sequence |
/gems unbind <name> |
Remove the keybind from a sequence |
/gems binds |
Show all keybinds for the current spec |
/gems import |
Open the import paste window |
/gems export <name> |
Export a sequence to clipboard |
/gems exportall |
Open multi-select export window |
/gems migrate |
Migrate sequences from a compatible sequencer |
/gems send <name> <target> |
Send a sequence to a player |
/gems block <player> |
Block a player from P2P transmission |
/gems unblock <player> |
Unblock a player |
/gems blocklist |
List all blocked players |
/gems accept |
Accept the last received sequence |
/gems tracker |
Cycle tracker visibility modes |
/gems tracker lock |
Lock or unlock tracker position |
/gems settings |
Open the settings panel |
/gems guide |
Open the interactive tutorial |
/gems debug |
Toggle debug mode |
/gems debugwindow |
Toggle the debug window |
/gems status |
Show addon version and sequence count |
/gems validate |
Validate all sequences for stale or missing spells |
/gems testlocale |
Run a locale round-trip test and healing simulation |
/gems revalidate |
Force re-tag all sequences from current spell names |
Sequence Management
/gems create, /gems delete, /gems list, /gems test, /gems reset
Keybinds
/gems bind, /gems unbind, /gems binds
Sharing
/gems import, /gems export, /gems exportall, /gems send, /gems block, /gems unblock, /gems blocklist, /gems accept, /gems migrate
UI and Display
/gems (editor), /gems tracker, /gems tracker lock, /gems settings, /gems guide
Debug and Maintenance
CVar and Optimization
/gems cvar, /gems sqw, /gems msadvisor
Debug and Maintenance
/gems debug, /gems debugwindow, /gems status, /gems validate, /gems testlocale, /gems revalidate, /gems repair, /gems repairall
Common Workflows
Create and bind in one session
/gems create -- add your steps in the editor, save -- /gems bind MySequence F
Or do it all through the UI: click New, add steps, Save, switch to Keybind tab, press F.
Export to a friend
/gems export MySequence -- paste the clipboard string in Discord or whisper --
For sending directly in-game: /gems send MySequence Playername
Quick testing
/gems test MySequence /gems test MySequence /gems test MySequence
Each call advances one step and prints the macro text to chat. Useful for verifying step order without needing a target.
Settings
Open settings with /gems settings or through the Blizzard addon settings panel (ESC > Options > AddOns > GRIP-EMS). Everything is organized into a few straightforward categories.
General
Debug Mode -- Toggles debug output to chat. Useful for troubleshooting sequences that do not fire correctly. Shows step advancement, variable substitution, and context switching in real time.
Tracker
Visibility Mode -- Always / In Combat / Has Target / Never. Controls when the Tracker HUD appears on screen.
Scale -- 0.5x to 2.0x (default 1.0x). Make the icons bigger for combat visibility or smaller for a minimal look.
Lock Position -- Prevents accidental dragging. Unlock, reposition, then lock again.
Profiles
GRIP-EMS uses AceDB for profile management. You can have per-character profiles or share a single profile across all characters. Switch profiles in the Profiles tab of the settings panel.
Profiles store settings only -- your sequences are always account-wide. Switching profiles changes things like tracker visibility, but your sequence library stays the same on every character.
Sharing Settings
Channel Protection -- Controls which chat channels can receive sequence shares. By default, whisper, party, and raid are enabled. Instance and guild channels can be toggled on or off.
Auto-Accept from Friends -- When enabled, sequences sent by players on your friends list are automatically accepted without a confirmation dialog. Saves time in guilds where people share frequently.
CVar Dashboard
Profile -- Select a built-in profile (Raid, M+, Solo, PvP) or a custom profile. Each profile defines recommended CVar values for that content type.
Auto-Switch -- When enabled, the addon automatically selects the best profile based on the zone you enter (raid instance, M+ dungeon, arena, open world).
Per-CVar Auto-Fix -- Toggle auto-fix individually for each CVar. Only opted-in CVars are corrected on login.
Health Score -- Weighted 0-100 score shown in the dashboard header. Critical CVars count more heavily.
SQW Optimizer
Enable -- Turns the dynamic SpellQueueWindow optimizer on or off.
Sensitivity (Buffer) -- Milliseconds added on top of smoothed latency. Higher values give more input forgiveness at the cost of slight delay. Default: 100ms.
Live Display -- Shows current SQW value with latency and buffer breakdown. Click rate advisory badge shows optimal keypress interval.
Debug and Diagnostics
Debug Window -- A scrollable log window with 500-message capacity. Toggle it with /gems debugwindow. Shows step advancement, variable evaluation, context switches, import results, and error messages. You can copy the log to clipboard for sharing.
Status -- Type /gems status to see the addon version, sequence count, macro slot usage, and current profile.
Minimap Button
GRIP-EMS places a minimap button using LibDBIcon. Left-click opens the editor, right-click opens settings. The button also appears in the addon compartment (the bag icon on the minimap bar) for players who prefer a cleaner minimap.
You can hide the minimap button in settings if you prefer using slash commands exclusively.
What's New Popup
After updating to a new version, a popup shows the most important changes. This only appears once per version and can be dismissed instantly. It links to the full changelog on GitHub for players who want the complete details.
| Setting | Category | Default | Description |
|---|---|---|---|
| Debug Mode | General | Off | Toggle debug output to chat |
| Tracker Visibility | Tracker | In Combat | Always / In Combat / Has Target / Never |
| Tracker Scale | Tracker | 1.0x | Icon size multiplier (0.5x-2.0x) |
| Tracker Lock | Tracker | Unlocked | Prevent accidental dragging |
| Channel Protection | Sharing | Whisper/Party/Raid | Which channels accept sequence shares |
| Auto-Accept Friends | Sharing | Off | Skip confirmation for friend shares |
| Minimap Button | General | Shown | Show or hide the minimap icon |
| CVar Profile | CVar Dashboard | General | Active CVar profile (Raid, M+, Solo, PvP, or custom) |
| CVar Auto-Switch | CVar Dashboard | Off | Auto-select profile based on zone |
| SQW Optimizer | CVar Dashboard | Off | Dynamic SpellQueueWindow optimization |
| SQW Buffer | CVar Dashboard | 100ms | Latency buffer added to smoothed EWMA value |
Interactive UI Tour
Click the numbered markers on the mockup below to learn what each part of the editor does. Each marker reveals a short explanation.
Sequence List Item
Each entry shows the sequence name, its icon, and the bound key in gold. The currently selected sequence is highlighted with a green border. If you have unsaved edits, a small dot appears next to the name -- that is the dirty-state indicator telling you there are uncommitted changes.
Click any sequence to load it into the editor. The previous sequence's working copy is discarded unless you saved it first.
Tab Bar
Six tabs, each with a specific purpose:
- Steps -- Edit your macro steps, reorder them, use spell autocomplete
- Keybind -- Capture a keybind for this sequence (per-spec)
- Macros -- See WoW macro slot usage, clean up orphaned stubs
- Variables -- Create and manage account-wide ~varname~ variables
- Context -- Set up content-specific versions (raid, dungeon, PvP, solo)
- Raw -- View the raw Lua table data (read-only, for debugging)
The active tab has a green underline. Click any tab to switch.
Step Entry
Each step shows its number, the macro text, and a character counter (e.g. 18/255). Click a step to edit it inline.
Press Tab inside any step to trigger spell autocomplete. It searches your spellbook by name and inserts the /cast SpellName line. The character counter turns green under 200, yellow from 200-254, and red at the 255-character WoW macro limit.
All edits happen on a working copy. Nothing is live until you click Save.
KeyPress Field
Lines entered here run before every step in the sequence. Common uses include /stopmacro [channeling] to prevent interrupting channeled spells, or /startattack to ensure auto-attacks are running.
Each step has a per-step fit indicator showing whether the keyPress text plus that step's text fits within the 255-character macro limit. If a step turns red, the combined text is too long -- shorten either the keyPress or the step.
There is also a KeyRelease field below the steps for lines that run after each step.
Save / Discard
Save commits your working copy to the live sequence. The engine picks up the changes immediately -- no reload needed. Your rotation updates on the next keypress.
Discard throws away all changes since the last save and reloads the live version. Use this when you have been experimenting and want to go back to what was working.
Search and Sort
Type in the search bar to filter sequences by name. The list updates as you type.
Click the sort button to cycle through three modes: alphabetical (A-Z), by class, or by most recently updated. Class sorting groups your sequences by the WoW class they belong to.
New / Duplicate / Delete / Migrate
New creates a blank sequence and opens it in the editor. Give it a name and start adding steps.
Duplicate creates a deep copy of the selected sequence -- all steps, settings, and context versions are cloned. Useful for making a variant (e.g., single-target vs. AoE) without starting from scratch.
Delete removes the selected sequence after a confirmation dialog. The macro stub is cleaned up automatically.
Migrate detects compatible sequencer addons and transfers their sequences into GRIP-EMS. One click, full transfer.
Editor Workflow Summary
The editor follows a consistent pattern no matter what you are doing:
Select or create
Pick a sequence from the list, or click New to start fresh. The editor loads the sequence into a working copy.
Edit freely
Add steps, change the step function, tweak keyPress lines, adjust context versions. Nothing goes live until you save. Experiment without risk.
Save or discard
Click Save to commit your changes to the live engine. Click Discard to revert. The rotation updates on the very next keypress after saving.
Bind and test
Switch to the Keybind tab, capture a key, and start pressing. If something feels off, go back to step 2 and adjust.
Quick Keyboard Shortcuts
| Key | Where | What it does |
|---|---|---|
| Tab | Inside a step | Opens spell autocomplete |
| Escape | Editor window | Closes the editor |
Responsive Layout
The editor window is resizable. Drag any edge or corner to adjust. The sequence list and editing area scale proportionally. On smaller resolutions, the layout remains usable down to about 800px width.
Window position and size are saved between sessions. Close the editor and it reopens in the same spot.
Sequence Builder
See how a sequence comes together. Fill in the fields below and click Build and Copy to generate a preview string. This is a simplified demo format -- to create real sequences, use the in-game editor (/gems) or import a proper export string with /gems import.
Configure Your Sequence
Step Function Preview
Import Walkthrough
This walkthrough shows exactly what happens when you import sequences. Click through each step to see the process.
Stage 1: Paste the String
Open the import window with /gems import and paste the export string.
Advanced Topics
WoW caps macro text at 255 characters per action. GRIP-EMS handles this automatically -- the character counter in the editor shows your current count and turns red at the limit.
If a step exceeds 255 characters, it will not execute in combat. The addon warns you in the editor, but it cannot prevent you from saving an over-length step.
KeyPress lines are fitted per-step. If the step text plus keyPress text fits in 255, both execute together on keybind press. If not, keyPress runs only when you click the macro stub on your action bar (not via keybind). The editor shows per-step fit status so you know exactly which steps are affected.
To stay under the limit: keep each step focused on one or two spells, use variables for repeated text, and avoid long conditionals when possible.
WoW requires all combat actions to go through Blizzard's secure action system. GRIP-EMS creates SecureActionButtons that WoW treats as legitimate macro buttons. This is the same system every macro addon uses.
It is not automation. You press a key, one spell fires. The addon cannot cast spells on its own, queue spells, or act without player input. Each keypress maps to exactly one macro execution.
The addon uses WrapScript to set step attributes on each OnClick event. The step function advances in the preBody handler, and the button's macrotext attribute is updated for the next press. All of this is within Blizzard's approved API surface.
WoW locks most addon UI operations during combat. You cannot create or modify SecureActionButtons, change keybinds, or update macro stubs while fighting.
GRIP-EMS queues these changes and applies them when combat ends via the OOC (Out-of-Combat) Queue. If you edit a sequence mid-fight and hit Save, the changes are queued and applied the moment PLAYER_REGEN_ENABLED fires.
You might notice a brief delay on the first keypress after making changes during combat. This is normal -- the engine is recompiling the sequence with your new steps.
Repair Module
The Repair Module scans your sequences for common problems and offers one-click fixes. It checks 13 diagnostic categories including stale spells, structure issues, character limits, variable references, keybind conflicts, macro stub problems, engine configuration, metadata completeness, context version gaps, action tree integrity, locale safety, import artifacts, and performance concerns.
Health Score
Each sequence gets a health score from 0 to 100. The score appears as a color-coded badge on the sequence icon in the list: green (80+), yellow (50-79), or red (below 50). A score of 100 means no issues were detected.
Using the Repair UI
Open the repair window in three ways: right-click a sequence and choose Repair, type /gems repair SequenceName, or type /gems repairall to scan everything at once. Issues are grouped by category with severity indicators (CRIT, ERR, WARN, INFO). Click Fix on any individual issue or Fix All to apply every available fix in one pass.
Quality Gates
When exporting or sending sequences with critical or error issues, a confirmation dialog warns you before proceeding. After importing sequences, a chat message tells you if issues were detected so you can run /gems repair immediately.
CVar Dashboard
The CVar Dashboard gives you full visibility into the 212 game variables (CVars) that affect combat performance, visuals, and input responsiveness. Variables are organized into 13 sections with live health scoring.
Profiles
Four built-in profiles (Raid, M+, Solo, PvP) define recommended CVar values for each content type. The addon can auto-switch profiles based on the zone you enter, or you can select a profile manually. Custom profiles can be created by cloning a built-in profile and adjusting individual values.
What Changed?
On login, the addon compares a snapshot of your CVar values from last session against current values. If anything changed (patch reset, another addon, manual edit), a notification banner shows what moved and lets you review before fixing.
Per-CVar Auto-Fix
Instead of blanket-overwriting all recommended CVars, you choose exactly which ones the addon manages. Toggle auto-fix per CVar in the dashboard. On login, only your opted-in CVars are corrected. The Fix button next to each CVar lets you apply the recommended value on demand.
Health Score
A weighted score (0-100) in the dashboard header shows overall CVar health. Critical CVars count more. The score updates live as you fix individual values or apply a profile.
Slash Commands
Use /gems cvar to manage profiles from chat. /gems status now includes CVar health summary (OK/warn/critical counts).
Dynamic SQW Optimizer
The SQW (SpellQueueWindow) Optimizer automatically tunes your SpellQueueWindow CVar based on real-time network latency. This determines how early WoW accepts your next spell input before the current GCD finishes.
How It Works
The optimizer samples your world latency, smooths it using EWMA (Exponential Weighted Moving Average) with outlier rejection to filter lag spikes, adds a configurable buffer, and clamps the result between 50ms and 400ms. It rechecks every 10 seconds and on zone or spec changes. A hysteresis guard prevents flapping between similar values.
Click Rate Advisory
Based on your current GCD and the applied SQW value, the optimizer calculates your optimal click interval. The advisory badge in the dashboard shows this value so you can pace your keypresses for maximum throughput.
Safety
Your original SQW value is captured at login and automatically restored on logout. CVar writes are gated behind InCombatLockdown() to prevent taint. The CVar Dashboard marks SQW as "Managed" when the optimizer is active, disabling the manual Fix button to prevent conflicts.
Controls
Enable the optimizer in Settings or with /gems sqw on. Adjust the latency buffer with the sensitivity slider. Use /gems sqw to check current status, EWMA latency, and applied value. /gems msadvisor uses live optimizer data when active.
Troubleshooting
| Problem | Solution |
|---|---|
| Sequence does not fire | Check /gems status for errors. Verify the keybind in the Keybind tab. Try /gems reset <name> to reset to step 1. Check that all steps are under 255 characters. |
| Spells cast in wrong order | Check your step function. Sequential goes in order. Priority always tries step 1 first. Try Sequential if unsure. |
| Import string not recognized | Make sure you copied the full string including the prefix. The string should start with a recognized format marker. |
| Keybind does not work | Check /gems binds for the current spec. Keybinds are per-spec. Also check for conflicts in WoW's Key Bindings menu (ESC > Key Bindings). |
| Tracker not showing | Check /gems tracker to cycle visibility modes. It might be set to Never. Also try /gems tracker lock to make sure it is not locked off-screen -- unlock, reposition, then lock again. |
| Variables not substituting | Check the variable name matches exactly (case-sensitive). Use ~varname~ syntax with tildes. Open the Variables tab and verify the variable exists and has a value. Save the sequence after adding the variable reference. |
| Context not switching | Open the Context tab and verify you have a version for your content type. Check the fallback chain -- if you are in a Heroic Dungeon, the addon checks Heroic Dungeon, then Dungeon, then Default. |
/gems debug and watch the chat output as you press your keybind. It shows which step fired, what macro text was used, and whether any variables were substituted.Roadmap
Major features shipped and planned for GRIP-EMS.
| Feature | Version | Status |
|---|---|---|
| Sequencing Engine + Visual Editor | v1.0 | Shipped |
| Context Switching (53 content types) | v1.2 | Shipped |
| P2P Sharing + Remote Browser | v1.7 | Shipped |
| Repair Module (13-category diagnostics) | v1.8 | Shipped |
| CVar Dashboard (212 CVars, profiles, auto-fix) | v1.9 | Shipped |
| Dynamic SQW Optimizer (EWMA latency tuning) | v1.9 | Shipped |
| CVar Profile Export/Import | -- | Planned |
| SQW History Sparkline | -- | Planned |
Glossary
Context Version
A variant of a sequence tuned for specific content (raid, dungeon, PvP, etc.). The addon switches automatically based on your current instance type.
Dirty State
Unsaved changes in the editor. A small indicator appears next to the sequence name when dirty. Save or Discard to clear it.
Fallback Chain
The order the addon checks for context versions. If no specific version exists for your content type, it walks the chain until it finds one. Example: Mythic+ -> Dungeon -> Default.
KeyPress
Macro text that runs before each step. Used for utility lines like /stopmacro [channeling]. Defined per-sequence, applied per-step when it fits within the 255-char limit.
KeyRelease
Macro text that runs after each step. Same fitting rules as KeyPress.
Macro Stub
The WoW /macro that represents a sequence on your action bar. Created and managed automatically by GRIP-EMS. You never edit it manually.
OOC Queue
Out-of-Combat Queue. Protected API calls that cannot run during combat are queued here and executed when combat ends (PLAYER_REGEN_ENABLED).
Reset Condition
An event that sends the sequence back to step 1. Five types: combat end, target change, gear swap, spec change, idle timer. Combinable (e.g. target/combat/5).
SecureActionButton
A WoW UI element that can execute actions in combat. Each GRIP-EMS sequence gets one. This is how the addon fires spells within Blizzard's secure framework.
Sequence
An ordered list of macro steps that fire one per keypress. The core building block of GRIP-EMS.
Step Function
The algorithm that decides which step fires next. Four options: Sequential (in order), Priority (try step 1 first, fall through), Reverse Priority (try last step first), Random.
Variable
A reusable text snippet written as ~name~ and substituted into steps at compile time. Can be plain text or a Lua function that re-evaluates on events.
Working Copy
The editor works on a deep copy of the sequence data. Changes are not live until you click Save. This prevents broken rotations while you experiment.
Frequently Asked Questions
No. GRIP-EMS fires one spell per keypress using WoW's built-in secure macro system. It works exactly like a regular /macro -- you press a key, one spell casts. Blizzard explicitly allows this. Their own Single Button Assistant feature works the same way.
Every feature is free. No Patreon tier, no premium unlock, no ads. The author accepts donations via PayPal if you want to support development, but nothing is locked behind payment.
Yes. Use /gems import to paste an export string, or click Migrate if your old addon is still installed. Sequences, variables, step functions, and context versions all transfer.
No. GRIP-EMS uses temporary override bindings that sit on top of your normal bindings. When you unload the addon or clear the GRIP-EMS bind, your original binding is restored. Per-spec bindings auto-swap when you switch specs.
WoW caps each macro action at 255 characters. If a step exceeds this, it silently fails in combat. The editor shows a red counter when you hit the limit. Keep steps focused on a few spells each, and use variables to shorten repeated text.
Yes. GRIP-EMS keybinds route directly to the engine, bypassing action bars entirely. The macro stubs on your bar update their icons and tooltips regardless of which bar addon you use.
Yes. Any spell sequence works. Healing sequences might use [@mouseover] or [@focus] targeting conditionals in the step text. Tank sequences work the same as DPS rotations.
https://jesperlive.github.io/grip-ems-guide/ -- it updates automatically on every release via GitHub Pages.