Bartender4
Bartender4 is a full ActionBar replacement mod. It provides you with all the features needed to fully customization most aspects of your action and related bars.
Bartender4 in Midnight: As of version 4.16.5, Midnight support is in preview - it'll be worked on until release, of course.
Major Changes since Dragonflight / 10.0
- Hold-to-cast is not currently available for addons
- Action Bars have been slightly re-arranged in Bartender4 for Dragonflight and beyond
- Bar 1-8 now reflect Blizzard Bars 1-8 (these are old 1, 3-6, and the 3 new bars)
- The old bars 7-10 are now called "Class Bar 1-4" (Shapeshifting, Stances, etc)
- The old bar 2 is now called Bonus Action Bar
Features
- Support for all Action Bars and all related bars
- 10 Action Bars (13 in Dragonflight & War Within!)
- Stance Bar
- Pet Bar
- Bag Bar
- Micro Menu
- XP/Reputation Bar
- All Bars are fully customizable (Scale, Alpha, Fade-Out settings, ...)
- Very flexible and customizable Show/Hide driver based on Macro Conditions
- Additional Layout and Paging settings for Action Bars
- Page all bars based on Stance or Modifier
- Possess Bar support
- Custom State driver support with Macro Conditions
- Options to hide specific elements of the buttons (Macro Text, HotKey, more could be added on demand)
- StickyFrames support
- Masque/ButtonFacade support!
- Easy Hotkey Binding using KeyBound
- Options to control the hiding of the default blizzard artwork (you might still want that to be displayed..)
FAQ
Q: I cannot move/drag my skills on my bars?
A: Hold Shift to move skills safely. You can also unlock your bars in the Bartender4 options, but using Shift is safer and recommended.
Q: How do i access the Configuration?
A: You can open the configuration with the Slash Commands (/bt or /bartender) or through the Bartender4 LDB plugin.
Q: Where are my keybindings? And how do i bind new keys?
A: Bartender4 buttons should automatically inherit keybindings from the Blizzard bars. For new keybindings, you can use KeyBound to re-bind your keys. You can access KeyBound by its slash command (/kb) or through the button in the BT4 config. Hover a button, press key → voila!
Q: Can I skin the buttons beyond the built-in options?
A: Bartender4 allows skinning through Masque! After installing both Bartender4 and Masque, you can customize the BT4 appearance in the Masque options.
Q: How do i disable the snapping of the bars?
A: Currently, you can temporarily override the snapping by holding down the Shift Key while moving your bars, or uncheck the option in the popup when your bars are unlocked.
Feature Requests/Bug Tracker
Please submit Bugs and/or Feature Requests using the Ticket System on the WoWAce Project page or in the Bartender4 Forum Thread. Please provide as many information as possible, including your client language, the exact version you are running, how to reproduce any errors, and a stack trace, if applicable.
Links
WoWAce Project: Bartender4 on WoWAce
Custom State Header: Info page on WoWAce
-
View User Profile
-
Send Message
Posted Jan 24, 2026There's an issue at this current version 1/19/26. If you use any skills that are mouse target skills by clicking on the bar, the yellow glow of the click stays on the skills untill you hit /reload
-
View User Profile
-
Send Message
Posted Jan 24, 2026Error when trying to /logout on TBC Anniversary:
*edit* Bartender4 not playing nice with Incognito resurrected. Using the game menu to logout works fine. *end edit*
9x [ADDON_ACTION_FORBIDDEN] AddOn 'Bartender4' tried to call the protected function 'Logout()'.
[!BugGrabber/BugGrabber.lua]:583: in function '?'
[!BugGrabber/BugGrabber.lua]:507: in function <!BugGrabber/BugGrabber.lua:507>
[C]: in function 'Logout'
[Blizzard_ChatFrameBase/Shared/SlashCommands.lua]:748: in function '?'
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:207: in function 'ParseText'
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:252: in function 'SendText'
[IncognitoResurrected/IncognitoResurrected.lua]:337: in function <IncognitoResurrected/IncognitoResurrected.lua:309>
[tail call]: ?
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:370: in function <...s/Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua:366>
Locals:
self = <table> {
}
event = "ADDON_ACTION_FORBIDDEN"
addonName = "Bartender4"
addonFunc = "Logout()"
name = "Bartender4"
badAddons = <table> {
Bartender4 = true
}
L = <table> {
ADDON_CALL_PROTECTED_MATCH = "^%[(.*)%] (AddOn '.*' tried to call the protected function '.*'.)$"
NO_DISPLAY_2 = "|cffffff00The standard display is called BugSack, and can probably be found on the same site where you found !BugGrabber.|r"
ERROR_DETECTED = "%s |cffffff00captured, click the link for more information.|r"
USAGE = "|cffffff00Usage: /buggrabber <1-%d>.|r"
BUGGRABBER_STOPPED = "|cffffff00There are too many errors in your UI. As a result, your game experience may be degraded. Disable or update the failing addons if you don't want to see this message again.|r"
STOP_NAG = "|cffffff00!BugGrabber will not nag about missing a display addon again until next patch.|r"
ADDON_DISABLED = "|cffffff00!BugGrabber and %s cannot coexist; %s has been forcefully disabled. If you want to, you may log out, disable !BugGrabber, and enable %s.|r"
NO_DISPLAY_STOP = "|cffffff00If you don't want to be reminded about this again, run /stopnag.|r"
NO_DISPLAY_1 = "|cffffff00You seem to be running !BugGrabber with no display addon to go along with it. Although a slash command is provided for accessing error reports, a display can help you manage these errors in a more convenient way.|r"
ERROR_UNABLE = "|cffffff00!BugGrabber is unable to retrieve errors from other players by itself. Please install BugSack or a similar display addon that might give you this functionality.|r"
ADDON_CALL_PROTECTED = "[%s] AddOn '%s' tried to call the protected function '%s'."
}
-
View User Profile
-
Send Message
Posted Jan 24, 2026Hi, some lua erros about "money"
Message: ...e/AddOns/Blizzard_MoneyFrame/Mainline/MoneyFrame.lua:303: attempt to perform arithmetic on a secret value
Time: Sat Jan 24 14:03:02 2026
Count: 2
Stack:
[Interface/AddOns/Blizzard_MoneyFrame/Mainline/MoneyFrame.lua]:303: in function 'MoneyFrame_Update'
[Interface/AddOns/Blizzard_MoneyFrame/Shared/MoneyFrame.lua]:637: in function 'SetTooltipMoney'
[Interface/AddOns/Blizzard_GameTooltip/Mainline/GameTooltip.lua]:317: in function 'GameTooltip_OnTooltipAddMoney'
[Interface/AddOns/Blizzard_SharedXMLGame/Tooltip/TooltipDataRules.lua]:146: in function 'func'
[Interface/AddOns/Blizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua]:56: in function <...lizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua:51>
[Interface/AddOns/Blizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua]:78: in function <...lizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua:74>
[Interface/AddOns/Blizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua]:166: in function <...lizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua:165>
[Interface/AddOns/Blizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua]:334: in function 'ProcessLineData'
[Interface/AddOns/Blizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua]:315: in function 'ProcessLines'
[Interface/AddOns/Blizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua]:292: in function <...lizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua:245>
[C]: in function 'securecallfunction'
[Interface/AddOns/Blizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua]:242: in function <...lizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua:241>
[tail call]: ?
[C]: ?
[Interface/AddOns/Blizzard_SharedXMLGame/Tooltip/TooltipDataHandler.lua]:517: in function 'SetBagItem'
[Interface/AddOns/Blizzard_UIPanels_Game/Mainline/ContainerFrame.lua]:1553: in function 'OnUpdate'
[Interface/AddOns/Blizzard_UIPanels_Game/Mainline/ContainerFrame.lua]:1512: in function 'OnEnter'
[Interface/AddOns/Blizzard_UIPanels_Game/Mainline/ContainerFrame.lua]:1508: in function <...s/Blizzard_UIPanels_Game/Mainline/ContainerFrame.lua:1507>
Locals:
frameName = "GameTooltipMoneyFrame1"
money = 51394
forceShow = nil
frame = GameTooltipMoneyFrame1 {
GoldButton = GameTooltipMoneyFrame1GoldButton {
}
PrefixText = GameTooltipMoneyFrame1PrefixText {
}
small = 1
moneyIconsDirty = false
trialErrorButton = GameTooltipMoneyFrame1TrialErrorButton {
}
CopperButton = GameTooltipMoneyFrame1CopperButton {
}
moneyType = "STATIC"
staticMoney = 51394
lastArgMoney = 51394
vadjust = 0
info = <table> {
}
SuffixText = GameTooltipMoneyFrame1SuffixText {
}
SilverButton = GameTooltipMoneyFrame1SilverButton {
}
}
info = <table> {
collapse = 1
}
gold = 5
goldDisplay = "5"
silver = 13
copper = 94
goldButton = GameTooltipMoneyFrame1GoldButton {
Text = GameTooltipMoneyFrame1GoldButtonText {
}
}
silverButton = GameTooltipMoneyFrame1SilverButton {
Text = GameTooltipMoneyFrame1SilverButtonText {
}
}
copperButton = GameTooltipMoneyFrame1CopperButton {
NormalTexture = Texture {
}
Text = GameTooltipMoneyFrame1CopperButtonText {
}
}
iconWidth = 13
spacing = -4
maxDisplayWidth = nil
isColorBlindModeDesired = false
(*temporary) = GameTooltipMoneyFrame1CopperButton {
NormalTexture = Texture {
}
Text = GameTooltipMoneyFrame1CopperButtonText {
}
}
(*temporary) = <no value>
(*temporary) = GameTooltipMoneyFrame1CopperButton {
NormalTexture = Texture {
}
Text = GameTooltipMoneyFrame1CopperButtonText {
}
}
(*temporary) = <no value>
(*temporary) = 0
(*temporary) = 0
(*temporary) = Texture {
}
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to perform arithmetic on a secret value"
COPPER_PER_SILVER = 100
SILVER_PER_GOLD = 100
-
View User Profile
-
Send Message
Posted Jan 24, 2026I still don't see any keyring checkbox/toggle in the bag bar menu. TBC Anniversary
-
View User Profile
-
Send Message
Posted Jan 24, 2026Hello, some bugs when using skills directly from the book, also LUA errors as in:
9x [ADDON_ACTION_BLOCKED] AddOn 'Bartender4' tried to call the protected function 'MultiBarBottomLeftButton5:SetAttribute()'.
[!BugGrabber/BugGrabber.lua]:583: in function '?'
[!BugGrabber/BugGrabber.lua]:507: in function <!BugGrabber/BugGrabber.lua:507>
[C]: in function 'SetAttribute'
[Blizzard_ActionBar/Shared/ActionButton.lua]:521: in function 'UpdatePressAndHoldAction'
[Blizzard_ActionBar/Shared/ActionButton.lua]:596: in function 'Update'
[Blizzard_ActionBar/Shared/ActionButton.lua]:544: in function 'UpdateAction'
[Blizzard_ActionBar/Shared/ActionButton.lua]:1070: in function 'OnEvent'
[Blizzard_ActionBar/Shared/ActionButton.lua]:223: in function <...ceBlizzard_ActionBar/Shared/ActionButton.lua:220>
Locals:
self = <table> {
}
event = "ADDON_ACTION_BLOCKED"
addonName = "Bartender4"
addonFunc = "MultiBarBottomLeftButton5:SetAttribute()"
name = "Bartender4"
badAddons = <table> {
Bartender4 = true
}
L = <table> {
ADDON_CALL_PROTECTED_MATCH = "^%[(.*)%] (AddOn '.*' tried to call the protected function '.*'.)$"
NO_DISPLAY_2 = "|cffffff00The standard display is called BugSack, and can probably be found on the same site where you found !BugGrabber.|r"
ERROR_DETECTED = "%s |cffffff00captured, click the link for more information.|r"
USAGE = "|cffffff00Usage: /buggrabber <1-%d>.|r"
BUGGRABBER_STOPPED = "|cffffff00There are too many errors in your UI. As a result, your game experience may be degraded. Disable or update the failing addons if you don't want to see this message again.|r"
STOP_NAG = "|cffffff00!BugGrabber will not nag about missing a display addon again until next patch.|r"
ADDON_DISABLED = "|cffffff00!BugGrabber and %s cannot coexist; %s has been forcefully disabled. If you want to, you may log out, disable !BugGrabber, and enable %s.|r"
NO_DISPLAY_STOP = "|cffffff00If you don't want to be reminded about this again, run /stopnag.|r"
NO_DISPLAY_1 = "|cffffff00You seem to be running !BugGrabber with no display addon to go along with it. Although a slash command is provided for accessing error reports, a display can help you manage these errors in a more convenient way.|r"
ERROR_UNABLE = "|cffffff00!BugGrabber is unable to retrieve errors from other players by itself. Please install BugSack or a similar display addon that might give you this functionality.|r"
ADDON_CALL_PROTECTED = "[%s] AddOn '%s' tried to call the protected function '%s'."
}
Thank you for your time
-
View User Profile
-
Send Message
Posted Jan 23, 2026I have an issue. When using the standard blizzard "Display Numbers for Cooldowns" The cooldown text is BEHIND the Keybind text, making the remaining cooldown numer in most cases unreadable. I have always used OmniCC and with that the Cooldown Text was always leyered in TOP of the keybind text. Is there a solution for this? because this is unplaybale atm. Blaming bilzzard, not the addon devs! You guys actually know what you are doing :)
-
View User Profile
-
Send Message
Posted Jan 23, 2026Having an issue in TBC Anniversary where macros using Rank 1 spells, once placed on the bars, register as max rank
Other than that everything works great :)
-
View User Profile
-
Send Message
Posted Jan 23, 2026Is there a working version for pre patch tbc anniversary with link to the file please?
-
View User Profile
-
Send Message
Posted Jan 23, 20262x [ADDON_ACTION_BLOCKED] AddOn 'Bartender4' tried to call the protected function 'MainActionBar:SetShownBase()'.
[!BugGrabber/BugGrabber.lua]:583: in function '?'
[!BugGrabber/BugGrabber.lua]:507: in function <!BugGrabber/BugGrabber.lua:507>
[C]: in function 'SetShownBase'
[Blizzard_ActionBar/Shared/ActionBar.lua]:337: in function 'UpdateVisibility'
[Blizzard_ActionBar/Shared/ActionBar.lua]:320: in function 'Show'
[Blizzard_ActionBarController/ActionBarController.lua]:211: in function 'ValidateActionBarTransition'
[Blizzard_ActionBarController/ActionBarController.lua]:175: in function 'ActionBarController_UpdateAll'
[Blizzard_ActionBarController/ActionBarController.lua]:66: in function <...Blizzard_ActionBarController/ActionBarController.lua:55>
Locals:
self = <table> {
}
event = "ADDON_ACTION_BLOCKED"
addonName = "Bartender4"
addonFunc = "MainActionBar:SetShownBase()"
name = "Bartender4"
badAddons = <table> {
Bartender4 = true
}
L = <table> {
ADDON_CALL_PROTECTED_MATCH = "^%[(.*)%] (AddOn '.*' tried to call the protected function '.*'.)$"
NO_DISPLAY_2 = "|cffffff00The standard display is called BugSack, and can probably be found on the same site where you found !BugGrabber.|r"
ERROR_DETECTED = "%s |cffffff00captured, click the link for more information.|r"
USAGE = "|cffffff00Usage: /buggrabber <1-%d>.|r"
BUGGRABBER_STOPPED = "|cffffff00There are too many errors in your UI. As a result, your game experience may be degraded. Disable or update the failing addons if you don't want to see this message again.|r"
STOP_NAG = "|cffffff00!BugGrabber will not nag about missing a display addon again until next patch.|r"
ADDON_DISABLED = "|cffffff00!BugGrabber and %s cannot coexist; %s has been forcefully disabled. If you want to, you may log out, disable !BugGrabber, and enable %s.|r"
NO_DISPLAY_STOP = "|cffffff00If you don't want to be reminded about this again, run /stopnag.|r"
NO_DISPLAY_1 = "|cffffff00You seem to be running !BugGrabber with no display addon to go along with it. Although a slash command is provided for accessing error reports, a display can help you manage these errors in a more convenient way.|r"
ERROR_UNABLE = "|cffffff00!BugGrabber is unable to retrieve errors from other players by itself. Please install BugSack or a similar display addon that might give you this functionality.|r"
ADDON_CALL_PROTECTED = "[%s] AddOn '%s' tried to call the protected function '%s'."
}
This error seems to be when trying to use an item from the questie tracker but for some reason bartender is having a problem with it.
-
View User Profile
-
Send Message
Posted Jan 22, 2026Hello!
Ever since TBC pre patch my "Request Stop" while flying randomly moves to a specific spot on my UI for no known reason. I've confirmed immediately upon it happening that bartender is correctly marked to have the part of the UI elsewhere, yet it continues to be in this random spot each time. It does seem responsive to action either upon clicking it. It's quite odd.
Just thought I'd mention in case others having same issue.
-
View User Profile
-
Send Message
Posted Jan 22, 2026getting an error everytime I login that Blizz says is called by Bartender4. There was an issue raised on Github about BT trying to call upon a hidden function or value or something that matches exactly the issue I'm having.
7x [ADDON_ACTION_FORBIDDEN] AddOn 'Bartender4' tried to call the protected function 'AceEvent30Frame:RegisterEvent()'.
[!B
-
View User Profile
-
Send Message
Posted Jan 22, 2026Any chance of an out of mana and range combined button coloring?
-
View User Profile
-
Send Message
Posted Jan 22, 2026I've got a strange problem (started occuring in december, so long before prepatch) that I think I've diagnosed. I've always played with bar 1 hidden, which is my main rotational stuff. If i log in with bar 1 hidden and mount up, none of my dragonflight buttons work, EVEN if I unhide the bar. But if i log in with bar 1 visible and mount up, the dragonflight buttons work, even if I hide the bar. Surely this is related to state configuration, which have never modified, but I simply cannot figure out how to troubleshoot this.
-
View User Profile
-
Send Message
Posted Jan 21, 2026I'm using bartender as a replacement for weakauras, would it be possible to have an option to desaturate spell icons when they're on cooldown?
-
View User Profile
-
Send Message
Posted Jan 21, 2026I'm going insane.
I set a bar's state configuration to use custom conditions, and then I set that condition to this:
[target,exists] 6; hide
I would assume, then, that if I have a target, it would show bar 6; if I have no target, it would hide the bar.
And it does that... usually. But if I so much as look at something, it shows the bar.
I think this has to do with soft targeting or action targeting, but I have mine turned OFF.
ElvUI didn't do this... any ideas?
-
View User Profile
-
Send Message
Posted Jan 21, 2026TBC anniversary any1 have also problem with xp and reputation bars are missing ?
-
View User Profile
-
Send Message
Posted Jan 21, 2026Does anyone know how to fix the message that appears in the spellbook: ‘You have added this to an action bar that is hidden or disabled’?
-
View User Profile
-
Send Message
Posted Jan 22, 2026In reply to riellino:
You can remove that by enabling the bar you are using in blizzard's option. That won't affect visibility of the actual bar since that's controlled by bartender.
If the spell is on one of the class bars, you're probably out of luck.
-
View User Profile
-
Send Message
Posted Jan 21, 2026Just works for me in midnight prepatch. Only other addon is tomtom.
-
View User Profile
-
Send Message
Posted Jan 20, 2026bad argument #2 to '?' (Usage: self:SetVertexColor(color [, a]))
[tail call]: ?
[C]: in function 'SetVertexColor'
[Bartender4/libs/AceGUI-3.0-41/widgets/AceGUIWidget-ColorPicker.lua]:149: in function 'SetColor'
[Bartender4/libs/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:1385: in function <...nfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua:1118>
[Bartender4/libs/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:1145: in function <...nfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua:1118>
[Bartender4/libs/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:1650: in function 'FeedGroup'
[Bartender4/libs/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:1575: in function <...nfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua:1559>
[C]: ?
[Bartender4/libs/AceGUI-3.0-41/AceGUI-3.0.lua]:66: in function <...aceBartender4/libs/AceGUI-3.0/AceGUI-3.0.lua:64>
[Bartender4/libs/AceGUI-3.0-41/AceGUI-3.0.lua]:300: in function 'Fire'
[Bartender4/libs/AceGUI-3.0-41/widgets/AceGUIContainer-TabGroup.lua]:342: in function 'SelectTab'
[Bartender4/libs/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:1686: in function 'FeedGroup'
...[Bartender4/libs/AceGUI-3.0-41/widgets/AceGUIContainer-TreeGroup.lua]:530: in function 'SelectByValue'
[Bartender4/libs/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:1746: in function 'FeedGroup'
[Bartender4/libs/AceConfig-3.0-3/AceConfigDialog-3.0-92/AceConfigDialog-3.0.lua]:1930: in function 'Open'
[ShadowedUF_Options/config.lua]:6686: in function 'Open'
[ShadowedUnitFrames/ShadowedUnitFrames.lua]:954: in function '?'
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:227: in function <...s/Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua:174>
[C]: in function 'ParseText'
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:252: in function <...s/Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua:251>
[C]: in function 'SendText'
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:370: in function <...s/Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua:366>