GRIP-EMS

The free macro sequencer for World of Warcraft

No paywalls. No Patreon. Every feature included.

1

Drop spells into the editor

2

Pick a step function

3

Bind a key

4

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.

1

Open the editor

Type /gems in chat. The GRIP-EMS editor window appears.

2

Create a sequence

Click New in the sequence list. Give it a name -- something like "Fury ST" or "Resto Raid".

3

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.

4

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.

5

Press and play

Find a target and start pressing your keybind. Each press fires the next spell in your sequence. Your rotation is live.

Press Tab inside any step to search your spellbook. Autocomplete matches by name and inserts the /cast line for you.
The character counter turns yellow at 200 and red at the 255-character macro limit. If you hit red, split your logic across multiple steps or use variables to shorten repeated text.

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.

GRIP-EMS reads the legacy export format natively. No conversion tools 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.
How the Preview Simulates Steps

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.

Batch Validation

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.

Context Versioning Deep Dive

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.

Variable Substitution

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.

Sharing and Import/Export

Player-to-Player Sharing

Send sequences to other players via whisper, party, raid, or instance chat. The recipient gets a clickable chat link -- one click to preview, one more to accept. No copy-pasting strings, no external websites. Just click and go.

Friends can enable auto-accept in settings to skip the confirmation dialog entirely. Useful for guildies who share sequences regularly.

Block list: Use /gems block <player> to block a player from sending you sequences. Blocked transmissions are silently dropped. Manage your block list in Settings or via /gems blocklist. The block list is account-wide and persists across characters.

You can only send to players who also have GRIP-EMS installed.

Exporting

Single export: Type /gems export <name> and the sequence is copied to your clipboard as an encoded string. Paste it anywhere -- Discord, a forum post, a guild doc.

Multi-select export: Type /gems exportall to open a picker window. Check the sequences you want, and GRIP-EMS automatically includes any variables they depend on. No manual tracking required.

Copy as Text: The export picker includes a "Copy as Text" button that generates a human-readable plain-text summary of selected sequences -- step function, reset conditions, keybinds, steps, KeyPress/KeyRelease, and variable dependencies. Useful for sharing outside the game without encoded strings.

Multi-Select Export Details
  • The picker shows all sequences with version count, step count, and a gold "Uses N variables" indicator when variable dependencies exist.
  • Selecting a sequence automatically selects all variables it references, including transitive dependencies (a variable that calls another variable, up to 8 levels deep). Auto-selected variables show an "auto" badge in gold.
  • You can manually deselect auto-selected variables or add extras.
  • If a selected sequence uses /click to call another sequence that is not selected, a warning banner appears so you know the export will be incomplete.
  • Variable descriptions are included in the export. If no description is set, the variable's code comment is used as a fallback.
  • Select All / Deselect All buttons for quick batch selection.

The exported string is locale-safe. Spell names are encoded as spell IDs, so the import works in any language. A German player can export a sequence and a Korean player can import it without issues.

Locale safety also extends to your saved sequences. Each step is backed by a spell ID tag, and if you change your WoW client language, the addon automatically retranslates all step text on login. Item names (from /equip and /equipslot) and toy names (from /usetoy) are also covered.

In text-mode rotation preview, a Copy button lets you copy the full rotation to your clipboard for sharing in Discord or forums.

Importing

Run /gems import to open the paste window. Paste an export string from GRIP-EMS or from a compatible sequencer addon. The import preview shows every sequence in the string with color-coded status:

For each item you can choose Skip, Replace, or Rename. Variables included in the export are listed separately with the same options. You always see exactly what you are getting before anything changes.

GRIP1 collection strings can bundle multiple sequences and their variables into a single export. Paste the string and all items appear in the preview at once.

What Gets Imported

A full import includes all of the following data per sequence:

  • Sequence name, icon, and author metadata
  • All macro steps (text preserved exactly)
  • Step function (Sequential, Priority, Reverse Priority, or Random)
  • Reset conditions (combat, target, gear, spec, idle timer)
  • KeyPress and KeyRelease lines
  • Context versions (all 15 types if present)
  • Variable references (auto-included when dependencies are detected)

GRIP-EMS reads the legacy encoded format natively. The import pipeline handles double-encoded strings, collection wrappers, and legacy variable schemas without any manual steps.

Export Format Details

GRIP-EMS uses a CBOR + Deflate + Base64 encoding pipeline. The resulting string is compact and safe to paste in chat, forums, or Discord. There are no line length restrictions -- the paste window in GRIP-EMS handles strings of any size.

Spell names are stored as spell IDs in the export format. This means a sequence exported on an English client imports correctly on a German, Korean, or Chinese client. The recipient's SpellCache resolves the IDs to local spell names.

The format is versioned. Future versions of GRIP-EMS will always be able to read strings exported by older versions.

In-Game Migration

If your previous sequencer is still installed, click Migrate in the sequence list. GRIP-EMS detects the other addon's saved data and transfers everything: sequences, variables, step functions, reset conditions, context versions, and metadata.

A chat report shows what transferred and flags any items that need manual attention. Most migrations complete in under a second with zero manual work.

Chat Link Sharing

When you send a sequence, the recipient sees a clickable link in their chat window. Clicking the link opens a preview showing the sequence name, step count, step function, and a summary of the steps. A second click accepts the sequence into their library.

This is the fastest way to share in a group setting. Drop the link in raid chat and everyone can grab it instantly. No need to paste strings or coordinate timing.

Quick Reference

Action Command
Send to a player /gems send <name> <target>
Block a player /gems block <player>
Unblock a player /gems unblock <player>
List blocked players /gems blocklist
Accept last received /gems accept
Export single /gems export <name>
Export multiple /gems exportall
Import from clipboard /gems import
Migrate from other addon /gems migrate

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

The tracker works great as a combat HUD -- set it to "In Combat" mode, scale it up, and position it near your character.

What the Tracker Looks Like

KC 2/4
WW 1/6
FB 1/3

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
Most commands have shorter alternatives. /gems alone toggles the editor, and Tab autocompletes command names.
Commands by Category

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.

Settings persist across sessions via AceDB. You do not need to reconfigure anything after a reload or relog.

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.

Full Settings Reference
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.

GRIP-EMS
_ X
Search sequences...
6
BM_Hunter_ST F 1
Fury_Warrior_AoE X
Fire_Mage_Burst R
Resto_Druid_HoT W
New Duplicate Delete Migrate 7
KC
BM_Hunter_ST
Steps Keybind Macros Variables Context Raw 2
KeyPress
/stopmacro [channeling]
4
1 /cast Kill Command 18/255
2 /cast Barbed Shot 16/255
3 /cast Cobra Shot 16/255
4 /cast Kill Command 18/255
3
Save Discard 5

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:

1

Select or create

Pick a sequence from the list, or click New to start fresh. The editor loads the sequence into a working copy.

2

Edit freely

Add steps, change the step function, tweak keyPress lines, adjust context versions. Nothing goes live until you save. Experiment without risk.

3

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.

4

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.

The dirty-state indicator (a small dot next to the sequence name) tells you at a glance whether you have unsaved changes. If the dot is visible, you have not saved yet.
If you switch to a different sequence without saving, your working copy is discarded. Always save before switching if you want to keep your edits.

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

Enter steps above to see the execution preview.

Import Walkthrough

This walkthrough shows exactly what happens when you import sequences. Click through each step to see the process.

Stage 1 - Stage 2 - Stage 3 - Stage 4

Stage 1: Paste the String

Open the import window with /gems import and paste the export string.

!GRIP1!eJzVk8tuwyAQRf+F9YgEMGDs7LrpR1QV4vGYWsE2Mo7UKMq/F5y0UqJ2m82 Iz9y5DMxc4K0lCFu4ADI0hAu95CIgHaiFTnsMlm+HvqfKPWfDXtL3nh5bwC...

Advanced Topics

The 255-Character Limit

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.

Secure Action Framework

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.

Combat Lockdown

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.
When in doubt, enable debug mode with /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

Is this a bot? Will I get banned?

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.

Is it really free? What is the catch?

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.

Can I import my sequences from another addon?

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.

Do keybinds conflict with my WoW bindings?

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.

How do I share sequences with my guild?

Use /gems send <name> <player> to send via whisper, or share in party/raid chat. Recipients get a clickable link.

For sharing outside the game, use /gems exportall to export multiple sequences as a string and share it on Discord or a website.

What is the 255-character limit?

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.

Does it work with action bar addons?

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.

Can I use it for healing or tanking?

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.

Where is the guide hosted online?

https://jesperlive.github.io/grip-ems-guide/ -- it updates automatically on every release via GitHub Pages.