Welcome, Macro-Wright!
A visual macro builder for retail WoW, spell/talent data pulled live from Blizzard's own API.
1Drag commands, conditions, spells, and items from the side panels onto the canvas.
2Connect them by dragging from the amber dots. Start leads into your first command; conditions plug into a command's dashed dot below it.
3Watch the compiled macro build itself at the bottom of the screen, then hit Copy and paste it straight into WoW's macro window.
4Stuck on syntax? The book icon in the corner holds a full command & condition reference. The "?" covers canvas controls like panning, zooming, and multi-select.
Who are you playing?
Pick a class, then a spec, to see its spells. You can change this any time from the class/spec dropdowns.
Forge Requires a Workbench
MacroForging is a drag-and-drop canvas built for a mouse and keyboard - wiring nodes together doesn't translate to a touchscreen. Pull this up on a desktop or laptop instead.

MacroForging

Retail WoW · live Blizzard API data · conjured for macro-crafters
Fan-made, unofficial - not affiliated with or endorsed by Blizzard Entertainment.
Summoning your spellbook…

Commands

Cast
Cast Sequence
Cast Random
Use item
Equip item
Equip slot
Target
Focus
Start attack
Stop casting
Stop macro
Cancel aura
Dismount
100%
My Macros
Saved locally in this browser. Export a string to share one, or a whole batch, with someone else.
Save Current
Saved Macros
Import
How to Wield This Canvas
Getting Around
ScrollZoom in / out, centered on your cursor
Shift + dragPan the canvas
Middle-dragPan the canvas (alternative)
Building Your Macro
Drag from paletteAdd a command, condition, spell, or item node
Drag a dotConnect to another node's dot
Ctrl/Cmd + click a dotDisconnect whatever's wired to that dot
Selecting Nodes
Drag empty canvasBox-select multiple nodes
Shift + click a nodeAdd / remove one node from the selection
Drag a selected nodeMove the whole selection together
Delete / BackspaceRemove all selected nodes (Start is protected)
The Macro-Wright's Codex
What each command and condition actually does, so you're not guessing. Blizzard has never published an official exhaustive list of either - see MACRO_REFERENCE.md in the repo for sources.
Commands
#showtooltipShows an icon on your action bar and replaces the macro's tooltip with the real spell/item tooltip. Bare, WoW picks it based on what fires; named (or conditioned), it's pinned to that spell/item.
/castCasts a spell by name or ID.
/castsequenceCycles through a list, one step per press, instead of re-evaluating conditions from the top each time. Use this instead of /cast when you want "next thing in the list," not "first matching condition."
/castrandomPicks one spell from the list at random each time the macro fires.
/useTriggers an item's use effect (a trinket proc, a potion) without changing what you're wearing. Can target by name or by equip slot, slot survives gear swaps, name doesn't.
/equipPuts a named item on. If the slot's ambiguous (two rings, two trinkets), WoW picks which one.
/equipslotPuts a named item on into a slot you choose yourself, no ambiguity. Mainly for weapon swaps or picking Trinket 2 specifically.
/targetSelects a unit by name (or a keyword like target, focus, player).
/focusSets your focus target - a second, sticky target independent of your regular one, usable via @focus in any other action's conditions.
/startattackBegins auto-attacking your current target.
/stopcastingInterrupts your own current cast, e.g. to weave in an instant.
/stopmacroHalts the macro right there, nothing after it runs. Almost always paired with a condition.
/cancelauraRemoves a buff/aura from yourself by name, handy for shapeshift forms or stances that block another action.
/dismountDismounts you if you're currently on a mount.
Conditions · Combat & Target
In / out of combatOnly fires depending on whether you're currently fighting.
Target is enemy / friendlyChecks your current target's disposition.
Target exists / no targetWhether you actually have something selected at all.
Target is dead / aliveChecks whether your current target is dead.
Conditions · Modifiers & Clicks
Shift / Ctrl / Alt heldOnly fires while that modifier key is held down, the classic trick for one button doing two or three things.
Left / right-clickedWhich mouse button actually triggered the macro.
Conditions · Targeting Keyword
@target / @focus / @mouseover / @player / @petAims just that one action at a specific unit, without changing your actual target.
Conditions · Player State
Stance/Form NOnly fires while you're in that numbered stance/form/shapeshift slot - which number is which depends on your class.
Mounted / Stealthed / RestingChecks that player state directly.
Indoors / outdoors / swimmingChecks your current environment.
Channeling a spellWhether you're mid-channel on something right now (optionally a specific spell).
Conditions · Group
In / not in a groupWhether you're grouped with anyone at all.
Specifically a party / raidWhich type of group you're in.
Conditions · Spec & Talents
Active spec is #spec:n - checks your currently active specialization by its index (1st, 2nd spec, etc.), not by name.
Knows spellknown:spellID - checks whether you currently know a given spell, regardless of where it came from (talent, baseline kit, hero talent). This is what makes a passive talent usable inside a macro at all: passives can never be /cast, but they can gate which active spell a /cast line picks. Type a spell name in the value field to search your spec's known spells and passives.
Not talent:row/colIf you've seen the old fixed-grid [talent:row/col] conditional in an ancient guide: it was removed in Dragonflight (patch 10.0.0) when the talent grid became the node-based tree system live today. known:, added in patch 10.0.2, is the actual replacement.
Worth Knowing
Multiple conditionsWiring several condition nodes into one command combines them, all must be true for that line to run.
Chained commands = if/elseConnecting two commands of the same type in sequence (e.g. a conditional /cast into a fallback /cast) compiles as one semicolon-joined line, WoW's real if/else syntax, instead of two separate lines. Separate lines don't behave as if/else in-game; the game runs every line on each press. Unconditional same-type commands in a row still compile as separate lines, since that's how a macro fires multiple actions on purpose (two trinkets back to back).
255 charactersWoW's hard limit per macro, including #showtooltip. The counter at the bottom turns red if you go over.
No buffs/debuffs/combat-log conditionsThere is no conditional for "does the target have this debuff" or "did this event just happen." That needs a real addon reading Blizzard's combat-log API (WeakAuras, etc.) - macros fundamentally can't do it.
No delaysEvery line runs instantly in one client tick, and most offensive spells share a global cooldown, so stacking several /cast lines still won't fire more than one per press in practice.

Spells

Compiled macro

0 / 255
Connect a Start node into a command to see output here.