Get an Epic Experience with Premium


Combat Login to Add Favorites
  • World of Warcraft
  • 769 Monthly Downloads
  • Supports: 6.0.3
  • 332,170 Total Downloads
  • Updated 11/06/2014
  • Created 04/10/2009
  • 583 Favorites
  • Project Site
  • Comments
  • Release Type: Release
  • License: GNU General Public License version 3 (GPLv3)
  • Newest File: 3.0RC2

About Watcher


Watcher helps you manage your rotation by consolidating and condensing information onto a simple to read display. It allows you to focus on things that are more important like boss mechanics, your situational awareness, or listening to your raid leader; instead of being bogged down in the act of performing your rotation.

With deep and powerful configuration options, Watcher allows you to see exactly the information about your rotation that you want to see. However, it comes with a wide variety of defaults for many classes and specs to get you started. Properly configured and customized, Watcher is a mighty tool for both new players just learning their classes as well as players that have been raiding since classic.

A GIF of Watcher running on a 2H Frost Death Knight:

Watcher also includes:

  • A dynamic event-driven architecture; unlike some other rotation helping addons, Watcher won't tank your framerate
  • Masque support for skinning icons
  • A large number of visibility options to control exactly when Watcher shows up
  • And more!


Through the use of a priority system as well as powerful filters for spells and abilities, Watcher displays your rotation in the familiar context of a timeline, with higher priority spells stacked on top of lower priority ones and upcoming abilities placed on the timeline according to when they will become useful. Abilities on the timeline are waiting for a wide variety of things: coming off of cooldown, waiting for resources, monitoring a DoT, etc.

Attacks ready to be performed are displayed using a stack with the most prioritised attack shown on top.

Ability keybinds can be optionally displayed.


More to come in this section later.

A slightly old full walkthrough of Watcher configuration is located here

Display settings documentation.

Priorities can be adjusted to where they suit you.

Spells can be configured to be cast based on a wide variety of filters whether that be the presence (or lack there of) of an aura on you or your target, your target's health percent, your mana/resource percent, whether a spell can be stolen or interrupted, whether you have a particular talent or glyph, among other options.


Found a bug? Report it!

Want a feature? Request it!


Want to help make the defaults better? Vist the class forum posts for each default:

Death Knight | Druid | Hunter | Mage | Monk | Paladin | Priest | Rogue | Shaman | Warlock | Warrior

Here's a tutorial for creating and exporting defaults.

tag 3.0RC2
Michael P. Starkweather <>
2014-11-06 23:18:29 -0600


Michael P. Starkweather:
    - Some changes to message and TOC for the RC2
    - Change anticipation support in the secondary resource filter to only count anticipation if you have more than 5 combo points.
Marci @ Hellscream:
    - Fixed Feral defaults to properly not cap CP and not Thrash if you have SotF.
    - Added Anticipation support to Combat Rogue Defaults.
Michael P. Starkweather:
    - Fix for not using the correct spellId for the power filter change.
    - Fix accidental bug with not specifying unit
    - Remove check if a channel has a cooldown in the usability filter.
    - Change to remove the cost of the currently casting spell from the player's mana pool in the power filter
Marci @ Hellscream:
    - Various changes to Hunter defaults.
    - Made changes to ProtPaladin defaults to account for Talented buffs and procs.
    - Berserker Rage added to ProtWar defaults.
    - Rererere-fixed Jab. This should work for everyone and be simpler.
    - Added Force of Nature to Balance defaults.
    - Insanity issues in Priest Defaults, should fix.
    - Fixed Jab. Again. Apparently there is a different SpellID depending on MH weapon. 6 SpellIDs. 6 Filters per SpellID. 36 separate filters for Jab. 'Cause "Reasons". Thanks Blizz.
    - Fix for Shadow Word: Insanity.
    - Fixed SpellID issue with Jab. Different SpellID based on 2h vs DW. Wierd.
    - Fixes to Frost priorities and filters.
    - Added Brewmaster defaults.
    - Added Resonating Power, Bloodbath, Sudden Death.
    - Initial pass at Shadow Defaults.
    - Adjusted Prot defaults, to account for Bastion of Glory, and not capping Holy Power, and use Shield of the Righteous.
    - Thrash Fix.
    - Balance defaults in.
    - Small changes to ProtWar defaults. Probably more will be needed.
Michael P. Starkweather:
    - Spell texture should now always change if the spell texture changes.
    - Should now properly never show things that are usable on the GCD.
Marci @ Hellscream:
    - Added Prot Defaults.
    - Fix to Demonic Fury and Burning Embers reflected in the Defaults.
Michael P. Starkweather:
    - Demonic fury/burning embers is now fixed.
Marci @ Hellscream:
    - Fixed issues with various Assassination defaults.
Michael P. Starkweather:
    - Switch to using the frequent power updates for both power and secondary resource
    - Change to the max slider in secondary resources to allow for up to 1000. A soft max will still be set by the type of secondary resource.
Marci @ Hellscream:
    - Changes to Rend handling, Execute SpellID for Arms.
    - Changes to bugged Warlock defaults.
    - New Paladin defaults, including fixes to Exorcism and reaction to Divine Purpose procs.
Michael P. Starkweather:
    - Change the "Towards Solar" and "Towards Lunar" so that you are able to actually read them.
    - Changes to Mage, Warlock, and Warrior defaults -- thanks Marci-Hellscream.
    - Fix for Ticket #75 - Slam broken in Defaults.
    - Always choose the spellId that we know to add
    - Switch to LibSpellbook for adding spells by name, should be a little bit more reliable at adding the correct spell.
    - Now can edit filter set names with a popup, taking care of ticket #51
    - Tiny change to hunter defaults and will not ask to replace. Aimed Shot - Thrill of the Hunt was configured slightly wrong.
    - Secondary Resource filter revamp.
    - Slider is used in Secondary Resource tab instead of entry box, with min and max set by the type of resource.
    - Eclipse: can now specify what direction that the Eclipse is growing
    - Combo Points: can now specify if you want to take Anticipation into account if you are a rogue
    - New API Version.
    - Removes because it isn't needed
    - Adds a cooldown table to each priorityList, this will be for cooldowns and will have a secondary display. Not implemented yet.
    - Adds an optionalBehavior variable to secondaryResource filters. Not implemented yet.
    - Reverse the spellName and dropdownLabel in spell dropdowns. This change is based on how the defaults are playing out.
    - Fixes for defaults for Warrior (ticket #71), Warlock (ticket #58), and Death Knight (ticket #59).
    - Made the secondary resource use the UNIT_POWER event instead of the UNIT_POWER_FREQUENT event.
    - Embedded AceSerializer. We'll use it later for export/import.
    - Fixed issue with Timer not being canceled when the frame is suddenly hiden.
    - Removed the animation calls that I was using to test.
    - No OnUpdate! Frame will now determine it needs to be animating and won't update if it doesn't have to.
    - Also, finally fixed issue with stacking at load. Stupid undocumented Blizzard API bugs
    - Fix for Warlock Soul Shards and Burning Embers not returning a decimal for the actual amount of those resources. Blizzard API is a little weird with these two.
    - Fix for desaturate sometimes not being applied when under/over the correct amount.


First Previous Page 13 of 60 Next Last
  • #764

    First I have to say thanks so much for updating this add-on, its really become a must have on all my chars.

    I noticed that I kept getting a message saying that my add-ons were causing a bunch of errors, so after looking into it I found the following: 

    Message: Interface\AddOns\Watcher\gcds.lua:116: attempt to compare number with nil
    Time 08/29/12 21:31;50
    Count: 17180
    Stack: [C]: ?
    Interface\AddOns\Watcher\gcds.lua:116 in function 'gcd'
    Interface\AddOns\Watcher\Core.lua:805: in function



    Any Ideas?

  • #765

    I think I got it. I was on a low level priest that doesn't have fortitude yet. Seems to work well with my other toons.

  • #766
    Quote from alpinebreeze »

    I think I got it. I was on a low level priest that doesn't have fortitude yet. Seems to work well with my other toons.

    ya that would do it... the addon uses a certain few generic spells who are on the GCD to determine the length of the GCD. This is an example (among many others) where the addon wasn't particularly well designed to handle situations that are outside the norm... like when spells get removed from the game. The author was in the middle of a lot of work on the addon when he suddenly abandoned it, so it will be some time before I can interprete his half-way completed work and close up all the little holes. 

  • #758

    Hey there, I was using FaceShooter till today. Since it's not supported anymore, for now at least, I started to look for a replacement. What a nice surprise this find was! Nicely done mate, after switching off what I don't need, works like a charm!


  • #757

    Thank you so much for working on this addon again.  I can't tell you how relieved I am to be able to continue to use this addon.  It's by far my favorite!

  • #753

    Heyas,  looks like altho this (or at least my edited version) were working on beta just fine, but with live Im getting the following error:


    Message: Interface\AddOns\Watcher\Core.lua:931: attempt to call field '?' (a nil value)
    Time: 08/28/12 15:51:11
    Count: 1
    Stack: Interface\AddOns\Watcher\Core.lua:931: in function `SetPriorityFrame'
    Interface\AddOns\Watcher\Core.lua:585: in function `CreatePriorityFrame'
    Interface\AddOns\Watcher\Core.lua:349: in function `?'
    ...non\libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:147: in function <...non\libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:147>
    [string "safecall Dispatcher[1]"]:4: in function <[string "safecall Dispatcher[1]"]:4>
    [C]: ?
    [string "safecall Dispatcher[1]"]:13: in function `?'
    ...non\libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:92: in function `Fire'
    ...ace\AddOns\Bagnon\libs\AceEvent-3.0\AceEvent-3.0.lua:52: in function <...ace\AddOns\Bagnon\libs\AceEvent-3.0\AceEvent-3.0.lua:51>

    Locals: self = <table> {
    defaults = <table> {
    powertypemin = <table> {
    sounds = <table> {
    CancelTimer = <function> defined @Interface\AddOns\Broker_TolBarad\Libs\AceTimer-3.0\AceTimer-3.0.lua:311
    ShowHideFrame = <function> defined @Interface\AddOns\Watcher\Options.lua:1472
    dir = <table> {
    GetSeventhshowraidboss2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2602
    SetFont = <function> defined @Interface\AddOns\Watcher\Options.lua:2667
    SetLabelCol = <function> defined @Interface\AddOns\Watcher\Options.lua:1787
    GetShowCombat = <function> defined @Interface\AddOns\Watcher\Options.lua:1498
    SetDefaults = <function> defined @Interface\AddOns\Watcher\Core.lua:59
    Get2Keybind2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2207
    ScheduleTimer = <function> defined @Interface\AddOns\Broker_TolBarad\Libs\AceTimer-3.0\AceTimer-3.0.lua:276
    SetFifthPriority = <function> defined @Interface\AddOns\Watcher\Options.lua:2428
    GetFont = <function> defined @Interface\AddOns\Watcher\Options.lua:2679
    SetSeventhPriority2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2567
    SetThirdshowraidboss2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2634
    SetSeventhshowraidboss2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2606
    ShowBarText = <function> defined @Interface\AddOns\Watcher\Options.lua:1321
    SetRipCombo = <function> defined @Interface\AddOns\Watcher\Options.lua:1744
    db = <table> {
    GetFifthPriority2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2543
    SetSegmentSize = <function> defined @Interface\AddOns\Watcher\Options.lua:2014
    SetLabel21 = <function> defined @Interface\AddOns\Watcher\Options.lua:1917
    GetSeventhPriority2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2563
    swingtype = 0
    GetThirdshowraidboss2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2630
    GetFifthPriority = <function> defined @Interface\AddOns\Watcher\Options.lua:2424
    SetLabel6 = <function> defined @Interface\AddOns\Watcher\Options.lua:1899
    Activateaxis = <function> defined @Interface\AddOns\Watcher\Options.lua:1964
    scan = <function> defined @Interface\AddOns\Watcher\Core.lua:399
    SetFifthPriority2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2547
    GetSegmentSize = <function> defined @Interface\AddOns\Watcher\Options.lua:1547
    GetLabel21 = <function> defined @Interface\AddOns\Watcher\Options.lua:1595
    unbindkeys2 = <function> defined @Interface\AddOns\Watcher\Options.lua:2321
    GetLabel23 = <function> defined @Interface\AddOns\Watcher\Options.lua:1603
    SetBar2Col = <function> defined @Interface\AddOns\Watcher\Options.lua:1811
    SetLabel24 = <function> defined @Interface\AddOns\Watcher\Options.lua:1935
    UNIT_ENTERED_VEHICLE = <function> defined @Interface\AddOns\Watcher\Core.lua:436
    AddPriorityTable = <function> defined @Interface\AddOns\Watcher\Options.lua:1287
    ActivateShowRaid = <function> defined @Interface\AddOns\Watcher\Options.lua:1447
    RAID_ROSTER_UPDATE = <function> defined @Interface\AddOns\Watcher\Core.lua:456
    GetBar8Col = <function> defined @Interface\AddOns\Watcher\Options.lua:1689
    GetSecondshowraidboss = <funct

  • #754

    That error seems to happen when you have/had something set in your priority list, but that something no longer exists. I need to build something that detects that problem and clears out the priorities automatically, but I don't have that set up yet. You'lll have to delete your saved variables for that addon to get it to work right.

  • #763

    Posted a followup directly below your post, just wanted to make sure you saw it :)

    Ty again for fixing this one up!

  • #762
    Quote from Jeslinis »

    "Well, by default mangle is supposed to show up and be timed to cast with the debuff that causes slower movement. you can override this by changing the "spell to track" to blank, removing infected wounds"

    Problem is.. I deleted it (it let me).. and now when I created a new mangle, its unable to track it.

    Im gonna delete the stuff pertaining to watcher in the wtf folder and see if that fixes.

    edit: where exactly is this stuff to delete? I see saved variables in my specific character (for the druid).. but I think the spell variables are global... However, there is no watcher.lua in my global saved variables?

    the variables are character specific, so you can delete the file for your character.

  • #761

    and basically continuing on here:


    Deleted my watcher.lua in my druids folder. this reset the addon for my druid.

    went into spell stuffs --

    For mangle: removed it tracking by Aura for the snare debuff (you should make this defaultly track CD only)

    For thrash: removed it tracking for its bleed aura only (you should make this defaultly track CD only)

    for lacerate; removed it tracking for its bleed aura only.


    Appears to be working


    Note: does not have a base default for Faerie Fire. .. Only Faerie swarm, which most tanks wont take due to pulling a mob by snaring it = bad (like why prot paladins do NOT glyph for snare shield throw)

  • #760

    "Well, by default mangle is supposed to show up and be timed to cast with the debuff that causes slower movement. you can override this by changing the "spell to track" to blank, removing infected wounds"

    Problem is.. I deleted it (it let me).. and now when I created a new mangle, its unable to track it.

    Im gonna delete the stuff pertaining to watcher in the wtf folder and see if that fixes.

    edit: where exactly is this stuff to delete? I see saved variables in my specific character (for the druid).. but I think the spell variables are global... However, there is no watcher.lua in my global saved variables?

    Last edited by Jeslinis on 8/29/2012 9:40:25 PM
  • #759

    Well, by default mangle is supposed to show up and be timed to cast with the debuff that causes slower movement. you can override this by changing the "spell to track" to blank, removing infected wounds.

    As for thrash tracking lacerate, lacerate  tracking moonfire, I don't know... is that seen in the config window in the "spell to track"? that's definatly not default behavior but it could be some glitch from the saved variables you have. You could certainly delete the saved variables you have to solve the problem sooner rather than later. I've still got to debug why it's not letting spells get deleted.

  • #756

    Should I delete the saved variables for this and start over? Im having issues atm on my druid with trying to setup for bearform mangle off CD, thrash, lacerate, and FF off CD, etc.. but for whatever reason, Mangle is tracking for the snare debuff aura, thrash is tracking lacerate, lacerate is tracking moonfire.. etc...

    I did submit a ticket on curseforge with the error I was getting trying to remove the bad thrash.. 

    But yea.. if you could do testing on a druid bearform to even just get it to show mangle when off CD, that would be amazing. ATM Power Auras cant even see mangle for some reason so I have NO method of telling myself its off CD other then looking at the bar.

  • #752

    ill look into hunters this week, maybe monday. ive been cleaning up the class luas, and nothingsknower has been hard at work cleaning up the main luas. nothinsknower has been showing me what i need to do to make the spells look the way we want them to right out of the box, so once its updated, almost every spell that you'd use in your rotation will already be set up......that means no need to input a spell yourself, it will already be done, and working the way it should:).

    ive been doing it alphabeticaly so dks and druids are done, hunters are next ect. (i got locks and warriors up and running, but they still need some love, and are last in line. im gettin about 3 classes per week, so maybe a week or two more and we'll be jammin. certainly by MoP.

  • #755

    Sounds great!

    On Beta, with the downloaded version I got a few days ago, I saw that Glaive toss (spell I added through the interface) once or twice vanished off of the bar, like I'd seen Chimera Shot do in Marksman, and it did not reappear until like 1-2 seconds before it was ready to be fired. I think it may have vanished right after I had done a Kill Command, but I'm constantly doing Kill Commands and seeing Glave Toss NOT disappear. I paid attention but at least in that test session on the Internal Test Boss, I couldn't identify what had caused Glaive Toss to vanish out of the display those few times.



  • To post a comment, please login or register a new account.
Login to Curse

Don't have an account? Create One.

Get an epic experience with Curse Premium
  • Faster addon downloads
  • Premium-Only Beta Giveaways
  • Ad-Free Curse experience
  • Premium Curse Client
  • and many More Features
  • Learn More »

Gamepedia Free-shirt Giveaway