GatherMate2
GatherMate2 is an addon to collect and track herbs, mines, fishing pools, gas clouds, archaelogy finds and treasures, and displays them on the world map and the mini map.
This is the Retail version of GatherMate2, the version for WoW Classic can be found here
GatherMate will remember the location of every herb you pick or every ore you mine, so that you can easily find the positions of the herbs and mines again. Once you come into range of a recorded spot, GatherMate will show an icon representing the type of herb/ore/fish/etc. on your mini map, directly allowing you to decide if its worth checking out. Additionally, all spots are shown on the World Map, to ease navigation to certain types of nodes and making gathering more fun.
To give you a head start, GatherMate2 also offers a pre-filled data module, so you don't need to discover all herbs and mines yourself, but instead can just start gathering right away. Simply install GatherMate2_Data and hit a few buttons to import all the provided data, and you're good to go.
Features
- Tracking of all gathering professions and more!
- Herbs
- Mines
- Gas Clouds
- Archaeology Digs
- Fishing Pools
- Treasures
- Timber for Housing!
- Display of all collected data on the World Map and the MiniMap
- Support for Routes
- Import data via GatherMate2_Data
Video about configuring this addon.
Usage
Using GatherMate2 is straight-forward.
After the installation, GatherMate2 is automatically active and collecting data.
You can configure which data should be shown on the World Map or MiniMap in the Configuration Dialog, which can be accessed either via the /gathermate slash command or be found in the Interface options in the WoW Menu.
Localization (Translation of Nodes)
GatherMate2 relies on the node names to be translated in all languages WoW supports. You can contribute additional translations for your language here using the Localization tool:
https://www.wowace.com/projects/gathermate2/localization
Any translations submitted through that tool will be automatically included in the next release.
GatherMate2_Data
GatherMate2_Data has been updated with all fresh data from Wowhead, including support for The War Within (and Midnight in the future), and will be continously updated throughout the coming expansion.
If you are looking for a pre-filled database for GatherMate2, get GatherMate2_Data here:
https://www.curseforge.com/wow/addons/gathermate2_data
-
View User Profile
-
Send Message
Posted Feb 27, 2026I can see it installed in curseforge, but it doesn't seem to be installed in WOW. Can you help me?
-
View User Profile
-
Send Message
Posted Feb 27, 2026German Mining Nodes Fixed. That was fast. Thank you @moonfann
-
View User Profile
-
Send Message
Posted Feb 26, 2026I'm playing the German version of the game. The herbs are marked and displayed on my minimap, but the ores aren't. What could be the reason for this?
**EDIT: Fixed a couple of hours later. Thcx <3 **
-
View User Profile
-
Send Message
Posted Feb 27, 2026In reply to corvi_80: Same Problem.
LUA:
15x GatherMate2/GatherMate2.lua:527: table index is secret
[GatherMate2/GatherMate2.lua]:527: in function 'GetIDForNode'
[GatherMate2/Collector.lua]:291: in function 'GetWorldTarget'
[GatherMate2/Collector.lua]:163: in function '?'
[BugSack/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua]:109: in function <...ack/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:109>
[C]: ?
[BugSack/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua]:19: in function <...ack/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:15>
[BugSack/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua]:54: in function 'Fire'
[GatherMate2/Libs/AceEvent-3.0/AceEvent-3.0.lua]:120: in function <...ddOns/GatherMate2/Libs/AceEvent-3.0/AceEvent-3.0.lua:119>
Locals:
self = <table> {
modules = <table> {
}
nodeTextures = <table> {
}
defaultModuleState = true
db_types = <table> {
}
nodeIDReplacementMap = <table> {
}
db = <table> {
}
HBD = <table> {
}
enabledState = true
reverseNodeIDs = <table> {
}
defaultModuleLibraries = <table> {
}
rareNodes = <table> {
}
name = "GatherMate2"
orderedModules = <table> {
}
gmdbs = <table> {
}
Visible = <table> {
}
baseName = "GatherMate2"
phasing = <table> {
}
nodeExpansion = <table> {
}
db_storage_map = <table> {
}
mapBlacklist = <table> {
}
nodeIDs = <table> {
}
}
type = "Treasure"
name = <no value>
(*temporary) = <table> {
Uralter Manasplitter = 552
Große mithrilbeschlagene Truhe = 509
Übungsschließkassette = 514
Schimmernder Draeneibrustschutz = 551
Aufgewühlte Erde = 566
Leyblumenblüte = 555
Uralter Manakristall = 554
Seidene Schatzkiste = 534
Doppelt verstärkter Arkwein = 559
Große Dunkelholztruhe = 510
Pfeils Nest = 542
Primitive Truhe = 527
Scharlachrote Schließkiste = 519
Schatzkiste aus Ahornholz = 540
Große eisenbeschlagene Truhe = 505
Glühkappe = 525
Robuste Teufelseisentruhe = 528
Adamantitbeschlagene Truhe = 530
Geléeablagerung = 563
Takks Nest = 541
Silberbeschlagene Schatzkiste = 537
Blutblütensprösslinge = 512
Riesenmuschel = 501
Onyxei = 546
Verdächtig leuchtende Truhe = 549
Uralter Manabrocken = 553
Strahlender Apexissplitter = 550
Verbeulte Schließkiste = 517
Stabile Schatzkiste = 535
Immerfrostsplitter = 532
Grabtruhe = 520
Manaerfülltes Juwel = 558
Ramponierte Schließkiste = 515
Schwere Teufelseisentruhe = 522
Mysteriöse Kamelfigur = 538
Teufelseisentruhe = 521
Moosbedeckte Schließkiste = 518
Durchnässte Schließkiste = 516
Teufelsstahltruhe = 524
Beschlagene Teufelseisentruhe = 529
Leuchtender Foliant = 557
Schatzkiste aus Runensteinen = 536
Große Geléeablagerung = 564
Schatzkiste der Dunkeleisenzwerge = 539
Glitzernde Truhe = 561
Nest der Scharfzahnmatriarchin = 543
Schatztruhe des Donnerkönigs = 547
Reliquiar von Hochfels = 548
Große ramponierte Truhe = 507
Leyblumenpulver = 556
Kristallprisma = 562
Dunkle Erde = 545
Ei der Netherschwingen = 531
Bunt gefärbtes Ei = 533
Robuste Truhe = 504
Große robuste Truhe = 506
Geldkassette des Bukaniers = 508
Weidentruhe = 526
Bodenauswuchs = 565
Ramponierte Truhe = 503
Nest der Ravasaurusmatriarchin = 544
Mechanisierte Truhe = 560
}
(*temporary) = "table index is secret"
-
View User Profile
-
Send Message
Posted Feb 27, 2026In reply to corvi_80: Doesn't work in EN either. I fixed it by adding:
setmetatable(spells, {
__index = function(t, key)
if type(key) == "string" and key:find("Mining") then
return "Mining"
end
end
})
after the spells-declaration in Collector.lua (on line 48ish) - see "local spells" and add it after its }
-
View User Profile
-
Send Message
Posted Feb 19, 2026Hi is it possible to change the filter sites so when you look on all the eg ore you can filter, you can chose to only see the ore for each dlc or at least give us a options to search after the ore type we will filter out, its hard to find what i will filtre because of word blindness
-
View User Profile
-
Send Message
Posted Feb 15, 2026Hi
There is a bug
2x GatherMate2_Data/GatherMateData.lua:201: bad argument #1 to 'pairs' (table expected, got nil)
[tail call]: ?
[C]: in function 'pairs'
[GatherMate2_Data/GatherMateData.lua]:201: in function 'MergeMines'
[GatherMate2_Data/GatherMateData.lua]:187: in function 'PerformMerge'
[GatherMate2/Config.lua]:1156: in function <GatherMate2/Config.lua:1147>
[C]: ?
[Ace3/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:45: in function <...nfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua:43>
[Ace3/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:839: in function <...nfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua:661>
[C]: ?
[Ace3/AceGUI-3.0-41/AceGUI-3.0.lua]:66: in function <Ace3/AceGUI-3.0/AceGUI-3.0.lua:64>
[Ace3/AceGUI-3.0-41/AceGUI-3.0.lua]:300: in function 'Fire'
[Ace3/AceGUI-3.0-41/widgets/AceGUIWidget-Button.lua]:22: in function <...dOns/Ace3/AceGUI-3.0/widgets/AceGUIWidget-Button.lua:19>
Locals:
(*temporary) = "LeftButton"
(*temporary) = false
-
View User Profile
-
Send Message
Posted Feb 15, 2026Message: Interface/AddOns/GatherMate2/GatherMate2.lua:527: table index is secret
Time: Sun Feb 15 12:18:34 2026
Count: 1
Stack:
[Interface/AddOns/GatherMate2/GatherMate2.lua]:527: in function 'GetIDForNode'
[Interface/AddOns/GatherMate2/Collector.lua]:291: in function 'GetWorldTarget'
[Interface/AddOns/GatherMate2/Collector.lua]:173: in function 'SpellStopped'
[Interface/AddOns/GatherMate2/Collector.lua]:77: in function <Interface/AddOns/GatherMate2/Collector.lua:77>
Locals:
self = <table> {
modules = <table> {
}
nodeTextures = <table> {
}
defaultModuleState = true
db_types = <table> {
}
nodeIDReplacementMap = <table> {
}
db = <table> {
}
HBD = <table> {
}
enabledState = true
reverseNodeIDs = <table> {
}
defaultModuleLibraries = <table> {
}
rareNodes = <table> {
}
name = "GatherMate2"
orderedModules = <table> {
}
gmdbs = <table> {
}
Visible = <table> {
}
baseName = "GatherMate2"
phasing = <table> {
}
nodeExpansion = <table> {
}
db_storage_map = <table> {
}
mapBlacklist = <table> {
}
nodeIDs = <table> {
}
}
type = "Treasure"
name = <no value>
(*temporary) = <table> {
Disturbed Earth = 566
Tattered Chest = 503
Large Darkwood Chest = 510
Wicker Chest = 526
Mechanized Chest = 560
Primitive Chest = 527
Jelly Deposit = 563
Glowing Tome = 557
Dented Footlocker = 517
Twice-Fortified Arcwine = 559
Gleaming Draenic Chest = 551
Leypetal Blossom = 555
Prismatic Crystal = 562
Battered Chest = 502
Mysterious Camel Figurine = 538
Large Solid Chest = 506
Netherwing Egg = 531
Mana-Infused Gem = 558
Everfrost Chip = 532
Trove of the Thunder King = 547
Ancient Mana Shard = 552
Dart's Nest = 542
Brightly Colored Egg = 533
Giant Clam = 501
Radiating Apexis Shard = 550
Large Mithril Bound Chest = 509
Solid Fel Iron Chest = 528
Practice Lockbox = 514
Scarlet Footlocker = 519
Buccaneer's Strongbox = 508
Sturdy Treasure Chest = 535
Solid Chest = 504
Glimmering Chest = 561
Runestone Treasure Chest = 536
Ravasaur Matriarch's Nest = 544
Battered Footlocker = 515
Heavy Fel Iron Chest = 522
Onyx Egg = 546
Felsteel Chest = 524
Waterlogged Footlocker = 516
Ancient Mana Crystal = 554
Large Iron Bound Chest = 505
Ground Wart = 565
Glowcap = 525
Dark Iron Treasure Chest = 539
Maplewood Treasure Chest = 540
Bound Adamantite Chest = 530
Silverbound Treasure Chest = 537
Suspiciously Glowing Chest = 549
Takk's Nest = 541
Ancient Mana Chunk = 553
Large Battered Chest = 507
Bound Fel Iron Chest = 529
Leypetal Powder = 556
Large Jelly Deposit = 564
Bloodpetal Sprout = 512
Fel Iron Chest = 521
Razormaw Matriarch's Nest = 543
Silken Treasure Chest = 534
Highmaul Reliquary = 548
Adamantite Bound Chest = 523
Burial Chest = 520
Dark Soil = 545
Mossy Footlocker = 518
}
(*temporary) = "table index is secret"
-
View User Profile
-
Send Message
Posted Feb 15, 2026In reply to Manshima: Vibecoded but maybe this will fix it?
in GatherMate2.lua, find:
function GatherMate:GetIDForNode(type, name)
return self.nodeIDs[type][name]
end
Replace with:
function GatherMate:GetIDForNode(type, name)
if not name then return nil end
if issecretvalue and issecretvalue(name) then return nil end
return self.nodeIDs[type][name]
end
Find:
function GatherMate:GetNameForNode(type, nodeID)
Replace entire function with:
function GatherMate:GetNameForNode(type, nodeID)
if not nodeID then return nil end
if issecretvalue and issecretvalue(nodeID) then return nil end
return self.reverseNodeIDs[type][nodeID]
end
Find:
function GatherMate:AddNode(zone, x, y, nodeType, name)
Replace entire function with:
function GatherMate:AddNode(zone, x, y, nodeType, name)
local nodedb = gmdbs[nodeType]
if not nodedb then return end
if issecretvalue and issecretvalue(name) then return end
local id = self:EncodeLoc(x,y)
-- db lock check
if GatherMate.db.profile.dbLocks[nodeType] then
return
end
nodedb[zone] = nodedb[zone] or {}
nodedb[zone][id] = self.nodeIDs[nodeType][name]
self:SendMessage("GatherMate2NodeAdded", zone, nodeType, id, name)
end
in Collector.lua, find:
function Collector:GetWorldTarget()
Replace entire function with:
function Collector:GetWorldTarget()
if foundTarget or not spells[curSpell] then return end
if (MinimapCluster:IsMouseOver()) then return end
local ok, what = pcall(tooltipLeftText1.GetText, tooltipLeftText1)
if not ok or not what then return end
if issecretvalue and issecretvalue(what) then return end
local nodeID = GatherMate:GetIDForNode(spells[prevSpell], what)
if what and prevSpell and what ~= prevSpell and nodeID then
self:addItem(prevSpell,what)
foundTarget = true
end
end
Find:
function Collector:UIError(event,token,msg)
Replace entire function with:
function Collector:UIError(event,token,msg)
local ok, what = pcall(tooltipLeftText1.GetText, tooltipLeftText1)
if not ok or not what then return end
if issecretvalue and issecretvalue(what) then return end
if issecretvalue and issecretvalue(msg) then return end
if strfind(msg, miningSpell) or (miningSpell2 and strfind(msg, miningSpell2) or (miningSpell3 and strfind(msg, miningSpell3))) then
self:addItem(miningSpell,what)
elseif strfind(msg, herbSkill) then
self:addItem(herbSpell,what)
elseif strfind(msg, pickSpell) or strfind(msg, openSpell) then
self:addItem(openSpell, what)
elseif strfind(msg, NL["Lumber Mill"]) then
self:addItem(loggingSpell, what)
end
end
Find:
function Collector:SpellStarted(event,unit,target,guid,spellcast)
Replace entire function with:
function Collector:SpellStarted(event,unit,target,guid,spellcast)
if unit ~= "player" then return end
if issecretvalue and issecretvalue(target) then target = nil end
foundTarget = false
ga ="No"
local spellname = GetSpellName(spellcast)
if spellname and (spells[spellname] or spells[spellcast]) then
if spells[spellname] then
curSpell = spellname
prevSpell = spellname
else
curSpell = spellcast
prevSpell = spellcast
end
local nodeID = target and GatherMate:GetIDForNode(spells[prevSpell], target)
if nodeID then
self:addItem(prevSpell,target)
foundTarget = true
else
self:GetWorldTarget()
end
else
prevSpell, curSpell = nil, nil
end
end
I just came across this error myself and I had Claude actually fix a few errors in other addons (or at least I think so...they stopped popping up in the other addons so...). Here's to hoping. When the dev updates with their official fixes it will overwrite all this anyways.
-
View User Profile
-
Send Message
Posted Feb 13, 2026I get LUA Errors in WoW Retail 12.0.1 (War Within) Delves if i pickup a curiosity Treasure.
-
View User Profile
-
Send Message
Posted Feb 5, 2026Is there a way to make it so "Show mining Nodes" and others have an extra option "Only when tracking" ?
-
View User Profile
-
Send Message
Posted Feb 4, 2026This is the same error I have been seeing. If I ignore the pop-up, it just keeps coming up over and over again. I am sad.
-
View User Profile
-
Send Message
Posted Feb 13, 2026In reply to redharlot: Seems that it was Rarity that is interfering with other mods. I turned it off and no longer get the pop up for Gathermate or other addons.
-
View User Profile
-
Send Message
Posted Jan 30, 2026Retail Wow. Ver.2-1.51.3. In dvelve I got error:
Message: Interface/AddOns/GatherMate2/GatherMate2.lua:527: table index is secret
Time: Fri Jan 30 21:02:43 2026
Count: 21
Stack:
[Interface/AddOns/GatherMate2/GatherMate2.lua]:527: in function 'GetIDForNode'
[Interface/AddOns/GatherMate2/Collector.lua]:291: in function 'GetWorldTarget'
[Interface/AddOns/GatherMate2/Collector.lua]:163: in function '?'
[Interface/AddOns/Altoholic/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua]:109: in function <...lic/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:109>
[C]: ?
[Interface/AddOns/Altoholic/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua]:19: in function <...lic/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:15>
[Interface/AddOns/Altoholic/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua]:54: in function 'Fire'
[Interface/AddOns/AskMrRobot/Libs/AceEvent-3.0/AceEvent-3.0.lua]:120: in function <...AddOns/AskMrRobot/Libs/AceEvent-3.0/AceEvent-3.0.lua:119>
Locals:
self = <table> {
modules = <table> {
}
nodeTextures = <table> {
}
defaultModuleState = true
db_types = <table> {
}
nodeIDReplacementMap = <table> {
}
db = <table> {
}
HBD = <table> {
}
enabledState = true
reverseNodeIDs = <table> {
}
defaultModuleLibraries = <table> {
}
rareNodes = <table> {
}
name = "GatherMate2"
orderedModules = <table> {
}
gmdbs = <table> {
}
Visible = <table> {
}
baseName = "GatherMate2"
phasing = <table> {
}
nodeExpansion = <table> {
}
db_storage_map = <table> {
}
mapBlacklist = <table> {
}
nodeIDs = <table> {
}
}
type = "Treasure"
name = <no value>
(*temporary) = <table> {
Disturbed Earth = 566
Большой сундук Темного Леса = 510
Большой сундук, окованный железом = 505
Насыщенный маной самоцвет = 558
Радужный кристалл = 562
Большой побитый сундук = 507
Механизированный сундук = 560
Большой сундук, окованный мифрилом = 509
Примитивный сундук = 527
Сундук, окованный адамантитом = 530
Кристалл древней маны = 554
Добротный сундук из оскверненного железа = 528
Побег кровоцвета = 512
Сундучок Алых = 519
Тяжелый Сундук из оскверненного железа = 522
Шелковый сундук с сокровищами = 534
Побитый сундучок = 515
Подозрительно светящийся сундук = 549
Осколок древней маны = 552
Побитый сундук = 503
Замшелый сундучок = 518
Сундук из оскверненного железа = 521
Ларец из лозы = 526
Погребальный сундук = 520
Осколок Вечного льда = 532
Сейф буканьера = 508
Большой добротный сундук = 506
Затопленный сундучок = 516
Странная фигурка верблюда = 538
Прочный сундук с сокровищами = 535
Дважды крепленое чародейское вино = 559
Сверкающий сундук = 561
Темная земля = 545
Лучащийся апекситовый осколок = 550
Окованный серебром сундук с сокровищами = 537
Проломленный сундучок = 517
Большая сота с пчелиным молочком = 564
Добротный сундук = 504
Яйцо дракона из стаи Крыльев Пустоты = 531
Учебный денежный ящик = 514
Цветок силоцвета = 555
Кленовый сундук с сокровищами = 540
Пыльца силоцвета = 556
Инкрустированный руническими камнями сундук с сокровищами = 536
Гнездо острозуба-матриарха = 543
Гнездо равазавра-матриарха = 544
Блестящий дренорский сундук = 551
Гнездо Такка = 541
Кусок древней маны = 553
Гигантский моллюск = 501
Гнездо Дарта = 542
Сота с пчелиным молочком = 563
Реликварий клана Верховного Молота = 548
Сундук из оскверненной стали = 524
Пламеневик = 525
Сундук, окованный оскверненным железом = 529
Ониксовое яйцо = 546
Раскрашенное яйцо = 533
Светящийся фолиант = 557
Сокровища Властелина Грома = 547
Сундук с сокровищами Черного Железа = 539
Земляной нарост = 565
}
(*temporary) = "table index is secret"
-
View User Profile
-
Send Message
Posted Jan 29, 2026Now that we have an option to toggle tracking for lumber could you add a section for it as well to always/never/only show while tracking?
-
View User Profile
-
Send Message
Posted Jan 27, 2026Gas Clouds in BC are not being marked as before the pre-patch. I was collecting in Zangermarsh.
-
View User Profile
-
Send Message
Posted Jan 25, 2026Update: it seems that Rarity is causing issues with other mods, after turning that off I no longer get this pop up.
Everytime I log on there is a pop up, Gathermate2 has been blocked from an action only available to the Blizzard UI and prompts me to disable or Ignore. What is it try to do that is being blocked and is the end of using this until it is changed?
-
View User Profile
-
Send Message
Posted Dec 27, 2025I can see all lumber nodes except in Legion zones. I tried different combinations with different settings, triple checked everything was turned on. All other zones work normally.
-
View User Profile
-
Send Message
Posted Jan 7, 2026In reply to Alourra: I have the exact same error. Tried everything, disabled every other addon too. I can only guess this has something to do with remix? The nodes do show up on the minimap in the broken isle, just not on the big zone / worldmap.
-
View User Profile
-
Send Message
Posted Dec 21, 2025Getting the following error as of 12/21/2025 when trying to import.
1x GatherMate2_Data/GatherMateData.lua:201: bad argument #1 to 'pairs' (table expected, got nil)
[tail call]: ?
[C]: in function 'pairs'
[GatherMate2_Data/GatherMateData.lua]:201: in function 'MergeMines'
[GatherMate2_Data/GatherMateData.lua]:187: in function 'PerformMerge'
[GatherMate2/Config.lua]:1162: in function <GatherMate2/Config.lua:1153>
[C]: ?
[GatheringTracker/Libs/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:45: in function <...nfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua:43>
[GatheringTracker/Libs/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:839: in function <...nfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua:661>
[C]: ?
[Ace3/AceGUI-3.0-41/AceGUI-3.0.lua]:66: in function <Ace3/AceGUI-3.0/AceGUI-3.0.lua:64>
[Ace3/AceGUI-3.0-41/AceGUI-3.0.lua]:300: in function 'Fire'
[Ace3/AceGUI-3.0-41/widgets/AceGUIWidget-Button.lua]:22: in function <...dOns/Ace3/AceGUI-3.0/widgets/AceGUIWidget-Button.lua:19>
Locals:
(*temporary) = "LeftButton"
(*temporary) = false