Broker_Portals
Why would you have actionbars filled with portals, or open your spellbook everytime you cast a portal? Just right click on icon or minimap button and you can access all portals so comfortably.
It is designed as DataBroker plug-in, that lets you access all portal and teleport spells from one spot. Addon will be attached to minimap by default, but if you want to move/customize it, you will have to install additional addon like TitanPanel, HidingBar, or Bazooka and there are many more.
Features:
- All mage portals, hearthstone and teleporting items available from simple dropdown menu
- Minimap button, so you don't have to install any additional addon
- Hearthstone location and cooldown in tooltip
- Reagent count in tooltip (for Cataclusm Classic)
- If hearthstone is on cooldown, Scroll of Recall will be used instead if possible
- Can announce, that you're casting a portal
Localization:
If you'd like to add/update localizations, do so here. Then leave a comment on WowAce or on Curse as I'm checking those more often than localization app itself, and I'll repack it.
Bugs / Suggestions:
If you have encountered any problem, or if you think theres something missing. Feel free to post a ticket here.
FAQ:
- I managed to hide my minimap icon, how do I turn it on again?
- Just simply type "/portals".
- Does it support teleportation items like engineering teleports or Kirin Tor rings?
- Yes.
TODO:
Enable adding custom items/spells
Version 1.15.1, Retail WoW:
Message: Interface/AddOns/Broker_Portals/portals.lua:523: attempt to concatenate field 'scrollListSize' (a nil value)
Time: Fri Aug 8 15:55:46 2025
Count: 1
Stack:
[C]: ?
[Interface/AddOns/Broker_Portals/portals.lua]:523: in function <Interface/AddOns/Broker_Portals/portals.lua:426>
[Interface/AddOns/Broker_Portals/portals.lua]:1195: in function <Interface/AddOns/Broker_Portals/portals.lua:1140>
[tail call]: ?
Locals:
---
Message: ...roker_Portals/libs/LibDewdrop-3.0-1/LibDewdrop-3.0.lua:317: attempt to compare number with nil
Time: Fri Aug 8 15:56:11 2025
Count: 2
Stack:
[C]: ?
[Interface/AddOns/Broker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua]:317: in function <...roker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua:315>
[Interface/AddOns/Broker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua]:1804: in function <...roker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua:1773>
[Interface/AddOns/Broker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua]:2680: in function <...roker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua:2649>
[Interface/AddOns/Broker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua]:2830: in function 'Open'
[Interface/AddOns/Broker_Portals/portals.lua]:1212: in function <Interface/AddOns/Broker_Portals/portals.lua:1210>
[Interface/AddOns/Titan/TitanLDB.lua]:303: in function <Interface/AddOns/Titan/TitanLDB.lua:301>
Locals:
---
Edit: I fixed it myself. I just added:
if PortalsDB.scrollListSize == nil then
PortalsDB.scrollListSize = 33
end
Into "function frame:PLAYER_LOGIN()", just after the whole "Upgrade from versions" part. So this part around line 1194 now looks this way:
elseif PortalsDB.version < 2 then
PortalsDB.showItems = true
PortalsDB.showItemCooldowns = true
PortalsDB.announce = false
PortalsDB.version = 4
end
if PortalsDB.scrollListSize == nil then
PortalsDB.scrollListSize = 33
end
if icon then icon:Register('Broker_Portals', obj, PortalsDB.minimap) end
CreateSettingsPanel()
PrepareMenuData()
PrepareMenuData()
self:UnregisterEvent('PLAYER_LOGIN')
In reply to dabear78:
ok I'll look into it tomorrow. but it's strange, should be there.
In reply to artscout375: Perhaps it was because I updated from a very old version? My version was over a year old (I think it was almost two years old). The Curseforge client did not automatically recognize the add-on when I reinstalled my PC (restored my addons from a backup), and therefore it had not been updated for a long time.
EDIT: My SavedVars looked like this:
PortalsDB = {
["fontSize"] = 12,
["showItemCooldowns"] = true,
["showItems"] = true,
["showHSItems"] = true,
["version"] = 5,
["announce"] = false,
["minimap"] = {
["minimapPos"] = 270.9549169569074,
["hide"] = false,
},
}
before the update. The lua file started with an empty line. I believe your upgrade code only updated it to version 6, where “scrollListSize” is not available. The next time you start the addon, the database would be updated to version 7. The next time you start it, it would be updated to version 8, and so on. Perhaps you should check the versions in reverse order? First check if it is <2, then if it is 4, then if it is 5, and so on. This way, even the oldest DB version will be updated to the latest version on the first launch.
EDIT 2: Or perhaps an “all-in-one” solution? Something like this:
local currentDBVersion = 9
if (not PortalsDB) or (PortalsDB.version == nil) or (PortalsDB.version < currentDBVersion) then
PortalsDB = (PortalsDB ~= nil) and PortalsDB or {}
PortalsDB.minimap = (PortalsDB.minimap ~= nil) and PortalsDB.minimap or {}
PortalsDB.minimap.hide = (PortalsDB.minimap.hide ~= nil) and PortalsDB.minimap.hide or false
PortalsDB.showItems = (PortalsDB.showItems ~= nil) and PortalsDB.showItems or true
PortalsDB.showHSItems = (PortalsDB.showHSItems ~= nil) and PortalsDB.showHSItems or true
PortalsDB.showItemCooldowns = (PortalsDB.showItemCooldowns ~= nil) and PortalsDB.showItemCooldowns or true
PortalsDB.showChallengeTeleports = (PortalsDB.showChallengeTeleports ~= nil) and PortalsDB.showChallengeTeleports or true
PortalsDB.showChallengeSubCat = (PortalsDB.showChallengeSubCat ~= nil) and PortalsDB.showChallengeSubCat or false
PortalsDB.showEngineeringSubCat = (PortalsDB.showEngineeringSubCat ~= nil) and PortalsDB.showEngineeringSubCat or true
PortalsDB.showChallengeSubCat = (PortalsDB.showChallengeSubCat ~= nil) and PortalsDB.showChallengeSubCat or false
PortalsDB.showTeleportsSubCat = (PortalsDB.showTeleportsSubCat ~= nil) and PortalsDB.showTeleportsSubCat or false
PortalsDB.scrollListSize = (PortalsDB.scrollListSize ~= nil) and PortalsDB.scrollListSize or 33
PortalsDB.sortItems = (PortalsDB.sortItems ~= nil) and PortalsDB.sortItems or false
PortalsDB.announce = (PortalsDB.announce ~= nil) and PortalsDB.announce or false
PortalsDB.fontSize = (PortalsDB.fontSize ~= nil) and PortalsDB.fontSize or UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT
PortalsDB.version = currentDBVersion
end
This code checks whether the database exists, is not empty, and is at least the current version (using the variable currentDBVersion). If one of the three criteria is met, the code goes through all possible entries in the database and checks for “nil” (i.e., not present). If it really does not exist, the default value is set, but if it already exists, the existing value is retained. Finally, the database version is set to the latest version.
EDIT 3: Or maybe just "if (PortalsDB.version ~= currentDBVersion) then". If the PortalsDB does not exist or is empty, PortalsDB.version would be nil and therefore not == currentDBVersion.
EDIT 4: I also translated all the missing phrases into german ;) But 2 phrases are missing from the tool: L["SORT_ITEMS"] = "Gegenstände alphabetisch sortieren" and L["SORT_ITEMS_TOOLTIP"] = "Wenn diese Option aktiviert ist, werden die Elemente in alphabetischer Reihenfolge angezeigt, andernfalls werden sie wie bisher in der Reihenfolge angezeigt, in der sie in die Datenbank eingegeben wurden".
It is the retail version.
Sorry I did not post that . I hope this helps. Thanks for the fast update fix.
We have a problem . Just did the update and I just got another error.
1 Jul 2025
Message: Interface/AddOns/Broker_Portals/portals.lua:834: table index is nil
Time: Wed Jul 2 11:49:09 2025
Count: 1
Stack:
[Interface/AddOns/Broker_Portals/portals.lua]:834: in function <Interface/AddOns/Broker_Portals/portals.lua:782>
[Interface/AddOns/Broker_Portals/portals.lua]:901: in function <Interface/AddOns/Broker_Portals/portals.lua:843>
[Interface/AddOns/Broker_Portals/portals.lua]:1194: in function <Interface/AddOns/Broker_Portals/portals.lua:1138>
[tail call]: ?
Locals:
itemType = "items"
itemList = <table> {
1 = 40585
2 = 40586
3 = 44934
4 = 44935
5 = 45688
6 = 45689
7 = 45690
8 = 45691
9 = 48954
10 = 48955
11 = 48956
12 = 48957
13 = 51557
14 = 51558
15 = 51559
16 = 51560
17 = 139599
18 = 21711
19 = 37863
20 = 17690
21 = 17691
22 = 17900
23 = 17901
24 = 17902
25 = 17903
26 = 17904
27 = 17905
28 = 17906
29 = 17907
30 = 17908
31 = 17909
32 = 22631
33 = 32757
34 = 35230
35 = 43824
36 = 46874
37 = 50287
38 = 52251
39 = 58487
40 = 61379
41 = 63206
42 = 63207
43 = 63352
44 = 63353
45 = 63378
46 = 63379
47 = 64457
48 = 65274
49 = 65360
50 = 95050
51 = 95051
52 = 95567
53 = 95568
54 = 87548
55 = 93672
56 = 103678
57 = 110560
58 = 118662
59 = 118663
60 = 118907
61 = 128353
62 = 128502
63 = 128503
64 = 136849
65 = 139590
66 = 140192
67 = 140324
68 = 142469
69 = 144391
70 = 144392
71 = 151016
72 = 166559
73 = 230850
}
menuCategory = "mainitems"
itemsGenerated = 1
i = 0
(for index) = 39
(for limit) = 73
(for step) = 1
i = 39
itemName = nil
_ = nil
itemQuality = nil
_ = nil
_ = nil
_ = nil
_ = nil
_ = nil
_ = nil
itemIcon = nil
itemSpellDescription = nil
(*temporary) = <table> {
Direbrew's Remote = <table> {
}
}
(*temporary) = <table> {
secure = <table> {
}
itemID = 58487
itemType = "items"
}
(*temporary) = <table> {
type = "item"
}
(*temporary) = "table index is nil"
methods = <table> {
mainitems = <table> {
}
}
In reply to aes_seda:
what era? MoP classic, classic, retail?
In reply to aes_seda:
Ok found it. Pushing fix now, check 1.15.1 when it's out
Ok I've got all challenge portals from Wowhead. Notify me please if some challenge portals are still missing.
Now I pushed update for MoP, also did submenu's for challenge portals based on expansions.
I've prepard MoP classic version, but didn't do anything yet about expansion sorting. I'm not really playing retail at all since BFA but I will get to it
It looks like portals from Season 1 and Season 2 are mixed together, and some of the Season 2 portals aren't showing up. There doesn’t seem to be an option to edit the list — is there any way to fix this?
In reply to user_b5xs3ajn5kg95b48: which season 2 portals are missing?
Does anyone know if there is a way to sort the challenge portal subsection by expansion? With the amount of dungeon portals in game currently, having them all grouped together in a single subsection is starting to get unruly.
In reply to Smugcorp:
I'll look into it
I've created a pull request to fix the issue introduced with 11.1.5. If you need a new version before they update the official release, you can use my fork at https://github.com/Amadeus-/Broker_portals
Hi,
I'm playing the new fresh servers.
I get the following lua-error on right click:
Error occured in: Global
Count: 1
Message: Interface/AddOns/Broker_Portals/portals.lua line 739:
attempt to index a number value
Debug:
[string "=[C]"]: ?
[string "@Interface/AddOns/Broker_Portals/portals.lua"]:739:
Interface/AddOns/Broker_Portals/portals.lua:731
[string "@Interface/AddOns/Broker_Portals/portals.lua"]:890:
Interface/AddOns/Broker_Portals/portals.lua:877
[string "@Interface/AddOns/Broker_Portals/portals.lua"]:1023:
Interface/AddOns/Broker_Portals/portals.lua:1023
[string "@Interface/AddOns/Broker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua"]:1797:
...roker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua:1773
[string "@Interface/AddOns/Broker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua"]:2680:
...roker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua:2649
[string "@Interface/AddOns/Broker_Portals/libs/LibDewdrop-3.0/LibDewdrop-3.0.lua"]:2830: Open()
[string "@Interface/AddOns/Broker_Portals/portals.lua"]:1023: OnClick()
[string "@Interface/AddOns/ChocolateBar/Chocolate.lua"]:295:
Interface/AddOns/ChocolateBar/Chocolate.lua:292
Locals:
AddOns:
Swatter, v4.4.7010 (SwimmingSeadragon)
Atlas, vv3.4.0
AtlasBattlegrounds, vv1.52.03
AtlasClassicWoW, vv1.52.05
AtlasLootClassic, vv3.2.0
AtlasLootClassicData, vv3.2.0
AtlasLootClassicDungeonsAndRaids, vv3.2.0
AtlasQuest, vv5.2.3
AucAdvanced, v4.4.7010 (SwimmingSeadragon)
AucFilterBasic, v4.4.7010 (SwimmingSeadragon)
AucStatHistogram, v4.4.7010 (SwimmingSeadragon)
AucStatiLevel, v4.4.7010 (SwimmingSeadragon)
AucStatPurchased, v4.4.7010 (SwimmingSeadragon)
AucStatSimple, v4.4.7010 (SwimmingSeadragon)
AucStatStdDev, v4.4.7010 (SwimmingSeadragon)
AucUtilFixAH, v4.4.7010 (SwimmingSeadragon)
BagBrother, v
Bagnon, v11.0.25
Bartender4, v4.15.1
BeanCounter, v4.4.7010 (SwimmingSeadragon)
BrokerEverything, v4.17.1-release
BrokerPortals, v1.14.3
ChocolateBar, vv3.14
ColoredInventoryItems, v1.4.1
Decursive, v2.7.24
Details, v#Details.12805.158-1-g8d65e6a
DetailsStreamer, v
DetailsTinyThreat, v
DoomCooldownPulse, v
Enchantrix, v4.4.7010 (SwimmingSeadragon)
EnchantrixBarker, v4.4.7010 (SwimmingSeadragon)
ExtendedCharacterStats, v3.3.12
Informant, v4.4.7010 (SwimmingSeadragon)
LeatrixMaps, v1.15.64
LeatrixPlus, v1.15.63
LibQuestXP, v4.0.15
MoveAny, v1.7.60
OmniCC, v11.0.6
Plater, vPlater-v596-Vanilla
Prat30, v3.9.61
Quartz, v3.7.13
Questie, v10.10.2
Raven, vr684
Scrap, v11.0.12
SharedMedia, v3.1.2-200
Stubby, v4.4.7010 (SwimmingSeadragon)
ThreatClassic2, vv2.57
TomTom, vv4.0.6-release
VendorPrice, v1.8.1
WeakAuras, v5.18.0
WhatsTraining, v7.1.1
ZPerl, v7.3.6
ZPerlArcaneBar, v
ZPerlCustomHighlight, v
ZPerlParty, v
ZPerlPartyPet, v
ZPerlPlayer, v
ZPerlPlayerBuffs, v
ZPerlPlayerPet, v
ZPerlRaidAdmin, v
ZPerlRaidFrames, v
ZPerlRaidHelper, v
ZPerlRaidMonitor, v
ZPerlRaidPets, v
ZPerlTarget, v
ZPerlTargetTarget, v
BlizRuntimeLib v1.15.5.57979(EU) <enUS>
(ck=768)
Someting I can do to get the addon working?
I've decided to upgrade menu system so it;s work in progress ATM. While there shouldn't be any visible changes all updates are internal and it should work. Currently know issue is that engineering and hearstone items sometimes won't show on first right click. Something that driving me mad while searching for reason :)
In reply to artscout375:
I submitted a pull request to fix spells not currently working on the retail client. I explained the reason why it wasn't working and the methodology I used to fix it on the pull request itself at https://github.com/artscout/Broker_portals/pull/10
Also, I don't necessarily mind the engineering portals being in a separate menu, but I hate not having a way to quickly see the cooldown on them. If I get some time I'll work on it.
In reply to Cerec:
I made every submenu customizable now )
It looks like The War Within's Engineering portal item, "Wormhome Generator:Khaz Algar", hasn't been added to the list yet.
https://www.wowhead.com/item=221966/wormhole-generator-khaz-algar