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 Aug 20, 2026Is there any chance there could be an update for Classic Era where the bars better reflect what we have? Currently there's actually less bars in bt4 after the 1.15.9 update (if you're excluding stance bars and stealth bars, etc) There's only a total of 7 bars as opposed to edit mode's 8, and that's including using the 2nd bar 1 (if I count that one in blizzard it's 9 bars, just can't move it) "extra action button" afaik doesn't even do anything in Classic Era?
Show us some love~ ♥
-
View User Profile
-
Send Message
Posted Aug 20, 2026In reply to LordIanzOoalGown:
I do not play Classic Era and so I do not know what the correct state is. As a hack solution however, I'd try opening `ActionBars.lua` (note plural) and on line 11 replace `local WoWRetail = ...` with `local WoWRetail = true`, since that appears to be the only variable affecting the number of visible action bars.
-
View User Profile
-
Send Message
Posted Aug 15, 2026Anyone getting this error? Everything seems to be working as far as I can tell, just this error message pops up everytime I lkog a character in.
5x ...s/Blizzard_MainMenuBarBagButtons/Classic/Keyring.lua:23: attempt to call a nil value
[Blizzard_MainMenuBarBagButtons/Classic/Keyring.lua]:23: in function <...s/Blizzard_MainMenuBarBagButtons/Classic/Keyring.lua:22>
[C]: in function 'SetParent'
[Bartender4/BagBarClassic.lua]:133: in function 'FeedButtons'
[Bartender4/BagBarClassic.lua]:82: in function 'ApplyConfig'
[Bartender4/BagBarClassic.lua]:67: in function 'ApplyConfig'
[Bartender4/BagBarClassic.lua]:58: in function <Bartender4/BagBarClassic.lua:47>
[C]: ?
[Atlas/Libs/AceAddon-3.0/AceAddon-3.0.lua]:66: in function <...faceAtlas/Libs/AceAddon-3.0/AceAddon-3.0.lua:61>
[Atlas/Libs/AceAddon-3.0/AceAddon-3.0.lua]:523: in function 'EnableAddon'
[Atlas/Libs/AceAddon-3.0/AceAddon-3.0.lua]:536: in function 'EnableAddon'
[Atlas/Libs/AceAddon-3.0/AceAddon-3.0.lua]:626: in function <...faceAtlas/Libs/AceAddon-3.0/AceAddon-3.0.lua:611>
Locals:
self=KeyRingButton <MainMenuBarBagButtons.xml:115>{
animIcon=Texture <MainMenuBarBagButtons.xml:144>
initialHeight=39
initialWidth=18
flyin=AnimationGroup <MainMenuBarBagButtons.xml:118>
}
(*temporary)=nil
(*temporary)=BT4BarBagBar <Bar.lua:152>{
buttons=<table>
id="BagBar"
hidedriver=<table>
MasqueGroup=<table>
config=<table>
name="Bag Bar"
elapsed=0
overlay=BT4BarBagBarOverlay <Bar.lua:165>
}
(*temporary)="attempt to call a nil value"
-
View User Profile
-
Send Message
Posted Aug 20, 2026@Fogszter turn off keyring in Bag bar options
-
View User Profile
-
Send Message
Posted Aug 14, 2026I figured out the issue I was having. Do you happen to use AzeriteUI? I do and I reverted an update by AzeriteUI from before the 12.1 update and Bartender's bar and configurations are working again. For me it seems like an issue with AzeriteUI.
-
View User Profile
-
Send Message
Posted Aug 12, 2026There is still problems with One click buttons. Sometimes there is no skill/power on the one click button which means when I hit the button nothing happens and no attack is used. It will not work until one click button appears with some kind of skill/power.
This seems to be working fine without Bartenders 2, so clearly Bizz has messed up the API, I don't know if they updated it again today. Sadly this addon still needs some fine tuneing.
-
View User Profile
-
Send Message
Posted Aug 12, 2026Just a small request if you ever get the time, is there a way to add a disable for the stupid, well to me, blue diamonds that show up over the shop and ? on the micro menu, I know you have bigger things to work on, but if there is ever a chance, thank you for a great addon and all the work you do to maintain it
-
View User Profile
-
Send Message
Posted Aug 12, 2026Anyone having this problem? Bartender won't let me access the configuration screen. Comes up blank. My toolbars are all empty except for the main one. If fading or one-button is a problem I can't access it to remove it. Suggestions? Is there a way to back up my settings and do a fresh install?
-
View User Profile
-
Send Message
Posted Aug 12, 2026@user_3u3w0mbvjwo853m2 for each bar checkmark the grid option and then all the icons show for each one.
-
View User Profile
-
Send Message
Posted Aug 13, 2026@wjacobs359 Thank you for the response. One of the issues I'm having is that I can't get the options screen to come up to allow me to put the check mark in the box. Is it somewhere other than the bartender config screen? The config screen comes up blank.
-
View User Profile
-
Send Message
Posted Aug 13, 2026@wjacobs359 Message: This is what pops up every time I try enter the config screen:
...r4/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua:130: attempt to call a nil value
Time: Thu Aug 13 09:45:03 2026
Count: 1
Stack:
[Interface/AddOns/Bartender4/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua]:130: in function 'SetValue'
[Interface/AddOns/Bartender4/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua]:75: in function 'OnAcquire'
[Interface/AddOns/Bartender4/libs/AceGUI-3.0/AceGUI-3.0.lua]:156: in function 'Create'
[Interface/AddOns/Bartender4/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-
-
View User Profile
-
Send Message
Posted Aug 14, 2026@user_3u3w0mbvjwo853m2 I'm also having this issue as well. Configuration screens comes up blank. None of the Bartender bars are showing at all. Using hotkeys to buttons on Bartender aren't working.
-
View User Profile
-
Send Message
Posted Aug 12, 2026Bartender4
4.17.9
Still getting machine gun LUA errors, even on a fresh install. This started after I added one button rotation to the bar.
-
View User Profile
-
Send Message
Posted Aug 12, 2026@somali_lemonade Same here... still not working with the one button rotation.
-
View User Profile
-
Send Message
Posted Aug 12, 2026@spitty64 Mine half works sometimes when there is a power or skill in the box. when three is no ability nothing happens.
-
View User Profile
-
Send Message
Posted Aug 11, 2026Try this patch for the UpdateAssistedCombatRotationFrame issue
```
--- a/LibActionButton-1.0.lua
+++ b/LibActionButton-1.0.lua
@@ -1743,6 +1743,17 @@
-----------------------------------------------------------
--- button management
+-- Blizzard's ActionBarButtonAssistedCombatRotationFrameMixin:OnUpdate (12.1.0+) now calls
+-- actionButton:OnActionBarSlotChanged() directly instead of relying on the ACTIONBAR_SLOT_CHANGED
+-- event (which it now suppresses).
+function Generic:OnActionBarSlotChanged()
+ if self._state_type == "action" then
+ ClearNewActionHighlight(self._state_action, true, false)
+ end
+ Update(self)
+end
+
function Generic:UpdateAction(force)
local action_type, action = self:GetAction()
if force or action_type ~= self._state_type or action ~= self._state_action then
```
-
View User Profile
-
Send Message
Posted Aug 11, 2026This patch has really messed with the UI. Best to disable all addons until the creators have had a few days or even weeks.
-
View User Profile
-
Send Message
Posted Aug 11, 2026If your getting errors like this: (And i mean massive spam errors)
1530x ...ceBlizzard_ActionBar/Shared/ActionButton.lua:1887: attempt to call a nil value
[Blizzard_ActionBar/Shared/ActionButton.lua]:1887: in function <...ceBlizzard_ActionBar/Shared/ActionButton.lua:1880>
Locals:
self=Frame <LibActionButton-1.0.lua:2351>{
ActiveFrame=Frame <ActionButtonComponentTemplate.xml:19>
updateTimeLeft=-0.067000
InactiveTexture=Texture <ActionButtonComponentTemplate.xml:11>
}
elapsed=0.067000
actionButton=BT4Button1 <LibActionButton-1.0.lua:225>{
popupDirection="UP"
NewActionTexture=Texture <ActionButtonTemplate.xml:56>
BorderShadow=Texture <Flyout.xml:18>
TargetReticleAnimFrame=Frame <ActionButtonComponentTemplate.xml:332>....................
ETC.. (its a nasty long error)
Replace this function: in file: LibActionButton-1.0.lua
function UpdateAssistedCombatRotationFrame(self)
if not (C_ActionBar and C_ActionBar.IsAssistedCombatAction) then return end
local show = self._state_type == "action" and C_ActionBar.IsAssistedCombatAction(self._state_action)
local assistedCombatRotationFrame = self.AssistedCombatRotationFrame
-- create frame if needed
if show and not assistedCombatRotationFrame then
assistedCombatRotationFrame = CreateFrame("Frame", nil, self, "ActionBarButtonAssistedCombatRotationTemplate")
self.AssistedCombatRotationFrame = assistedCombatRotationFrame
end
if assistedCombatRotationFrame then
assistedCombatRotationFrame:UpdateState()
end
end
with:
function UpdateAssistedCombatRotationFrame(self)
-- Disabled for LibActionButton buttons.
-- Blizzard's ActionBarButtonAssistedCombatRotationTemplate assumes
-- a native Blizzard ActionBarActionButtonMixin parent and can error
-- when attached to LibActionButton/Bartender buttons.
return
end
-
View User Profile
-
Send Message
Posted Aug 11, 2026yes can confirm the machine gun errors do stop if you uncheck all the fade boxes ON EVERY BAR under visablity
update.. was fine in town but after some combat came back
-
View User Profile
-
Send Message
Posted Aug 11, 2026923978x Bartender4/Bar.lua:417: attempt to call a nil value
[Bartender4/Bar.lua]:417: in function <Bartender4/Bar.lua:415>
[Bartender4/Bar.lua]:431: in function 'ControlFadeOut'
[Bartender4/Bar.lua]:133: in function <Bartender4/Bar.lua:129>
[C]: ?
[C]: in function 'SetAttribute'
[Blizzard_RestrictedAddOnEnvironment/RestrictedFrames.lua]:534: in function 'SetAttribute'
[ if not newstate then return end
if newstate == "show" then
self:Show()
self:SetAttribute("fade", false)
elseif strsub(newstate, 1, 4) == "fade" then
self:Show()
self:SetAttribute("fade", (newstate == "fade") and true or strsub(newstate, 6))
elseif newstate == "hide" then
self:Hide()
end
]:7: in function <[string " if not newstate then return end..."]:1>
[tail call]: ?
[C]: ?
[Blizzard_RestrictedAddOnEnvironment/RestrictedExecution.lua]:481: in function <...d_RestrictedAddOnEnvironment/RestrictedExecution.lua:444>
[tail call]: ?
[Blizzard_RestrictedAddOnEnvironment/SecureHandlers.lua]:112: in function <...izzard_RestrictedAddOnEnvironment/SecureHandlers.lua:107>
...[Bartender4/ButtonBar.lua]:47: in function 'ApplyConfig'
[Bartender4/StateBar.lua]:65: in function 'ApplyConfig'
[Bartender4/ActionBar.lua]:52: in function 'ApplyConfig'
[Bartender4/ActionBars.lua]:363: in function 'Create'
[Bartender4/ActionBars.lua]:150: in function <Bartender4/ActionBars.lua:142>
[C]: ?
[!WilduTools/libs/AceAddon-3.0/AceAddon-3.0.lua]:66: in function <...ddOns/!WilduTools/libs/AceAddon-3.0/AceAddon-3.0.lua:61>
[!WilduTools/libs/AceAddon-3.0/AceAddon-3.0.lua]:523: in function 'EnableAddon'
[!WilduTools/libs/AceAddon-3.0/AceAddon-3.0.lua]:536: in function 'EnableAddon'
[!WilduTools/libs/AceAddon-3.0/AceAddon-3.0.lua]:626: in function <...ddOns/!WilduTools/libs/AceAddon-3.0/AceAddon-3.0.lua:611>
Locals:
bar=BT4Bar3 <Bar.lua:152>{
id="3"
hidedriver=<table>
MasqueGroup=<table>
module=<table>
config=<table>
name="Bar 4"
bindingmapping="MULTIACTIONBAR3BUTTON%d"
elapsed=0
overlay=BT4Bar3Overlay <Bar.lua:165>
}
LABSpellFlyout=LABFlyoutHandlerFrame <LibActionButton-1.0.lua:904>{
Background=Frame <LibActionButton-1.0.lua:905>
}
(*temporary)=nil
(*temporary)=BT4Bar3Overlay <Bar.lua:165>{
Text=FontString <Bar.lua:182>
Center=Texture <NineSlice.lua:52>
RightEdge=Texture <NineSlice.lua:52>
BottomEdge=Texture <NineSlice.lua:52>
TopRightCorner=Texture <NineSlice.lua:52>
BottomRightCorner=Texture <NineSlice.lua:52>
BottomLeftCorner=Texture <NineSlice.lua:52>
TopEdge=Texture <NineSlice.lua:52>
TopLeftCorner=Texture <NineSlice.lua:52>
backdropInfo=<table>
LeftEdge=Texture <NineSlice.lua:52>
bar=BT4Bar3 <Bar.lua:152>
}
(*temporary)="attempt to call a nil value"
LAB=<table>{
callbacks=<table>
activeButtons=<table>
ACTION_HIGHLIGHT_MARKS=<table>
eventFrame=Frame <LibActionButton-1.0.lua:59>
nonActionButtons=<table>
flyoutHandler=LABFlyoutHandlerFrame <LibActionButton-1.0.lua:904>
actionButtons=<table>
actionButtonsNonUI=<table>
NumChargeCooldowns=0
buttonRegistry=<table>
FlyoutInfo=<table>
FlyoutButtons=<table>