Quartz
Quartz is a modular approach to a casting bar addon. An overview of (hopefully most of) the modules:
*Player
The core of Quartz is lightweight implementation of a standard casting bar, with configurable size, text and icon positioning, and colors.
*Target/Focus
Implementation of target and focus casting bars in similar fashion to the player cast bar.
*Buffs
Display of target and focus buffs and debuffs as duration bars.
*Flight
Hooks into FlightMap or InFlight to display the current flight progress on your casting bar.
*Global Cooldown
Displays a tiny spark-bar to show your Global Cooldown near the cast bar. Helpful for those who'd rather not squint at their action bars to see when they can cast again.
*Interrupt
Changes the color and text of your casting bar to help show that your cast has been interrupted (and show who interrupted it).
*Latency
Displays the amount of time spent between cast send and start events, in the form of a bar at the end of your casting bar, with optional text that displays the actual duration of the lag. This helps in canceling casts when they will not actually be interrupted, especially for users with consistently high pings.
*Mirror
Shows the 'basic' timers such as breath and feign death, as well as some 'odd' ones such as party invite time, resurrect timeout, and arena game start, and a framework for injecting custom timers into the bars.
*Range
Recolors the casting bar when your cast target moves out of range mid-cast.
*Swing
Displays a swing timer for your melee weapon as well as hunter autoshot.
*Timer
Allows for creating custom timers displayed on the mirror bars.
*Tradeskill Merge
Merges multiple casts of the same tradeskill item into one big cast bar.
Use /quartz to bring up the configuration menu.
-
View User Profile
-
Send Message
Posted Jan 26, 2026Going to be brutally honest, while I can get it to a state of mostly working with minimal LUA errors (though not none) there are a number of features that relied on being able to access values which are now considered 'secret' when in combat.
Anything that's not just passing a value through to a display element will probably not be possible in combat scenarios.
-
View User Profile
-
Send Message
Posted Jan 26, 2026please update i loved the look of this addon
-
View User Profile
-
Send Message
Posted Jan 26, 2026updated the toc file and it sort of works but after I enter a battleground the quartz cast bar stops showing up. really hope it gets updated, I've been using quartz since the original TBC
-
View User Profile
-
Send Message
Posted Jan 25, 2026really REALLY hope that Quartz gets updated and works. without an enemy cast bar and debuff lines for my target, playing a lock really stinks
-
View User Profile
-
Send Message
Posted Jan 25, 2026Hi folks, will Quartz be updated for midnight (long-term)?
-
View User Profile
-
Send Message
Posted Jan 24, 2026Got Quartz working in combat with the Midnight patch (game version 12.0.0.65560) by editing World of Warcraft\_retail_\Interface\AddOns\Quartz\modules\GCD.lua
1. replace lines 105 to 122, this is the function GCD:CheckGCD
2. with this
function GCD:CheckGCD(event, unit, guid, spell)
if unit ~= "player" then
return
end
local start, dur
if C_Spell and C_Spell.GetSpellCooldown then
local cd = C_Spell.GetSpellCooldown(spell)
if not cd then return end
local cdStart = cd.startTime
local cdDur = cd.duration
-- EARLY SANITISATION
if type(cdDur) ~= "number" then
-- Blizzard hid the GCD → use fallback
start = GetTime()
dur = 1.5
else
start = cdStart
dur = cdDur
end
else
local cdStart, cdDur = GetSpellCooldown(spell)
if type(cdDur) ~= "number" then
start = GetTime()
dur = 1.5
else
start = cdStart
dur = cdDur
end
end
-- MIDNIGHT FIX: detect secret values via pcall
local ok = pcall(function()
return dur > 0
end)
if not ok then
-- fallback again just in case
start = GetTime()
dur = 1.5
end
-- SAFE COMPARISON
if dur > 0 and dur <= 1.5 then
starttime = start
duration = dur
gcdbar:Show()
end
end
3. you must still set line 2 of the file \World of Warcraft\_retail_\Interface\AddOns\Quartz\Quartz.toc to
## Interface: 120000,11508,20505,50503,110207
Enjoy! I've used Quartz for a long time, and a big "thank you" to the devs.
-
View User Profile
-
Send Message
Posted Jan 24, 2026In reply to arc909:
I think I have more lua errors with quartz now with this fix.
-
View User Profile
-
Send Message
Posted Jan 23, 2026not sure what to fix by now. Quartz works initialy but stops working in dungeons as soon as i join a m+ no castiing bars at all, not even the blizz ones.
-
View User Profile
-
Send Message
Posted Jan 24, 2026Same with arenas and bgs :(
-
View User Profile
-
Send Message
Posted Jan 22, 2026I made the changes and get the same Problem when use Bartender4 together with Quartz.......
Delete Quartz Bartender 4 works perfect !!
But ty for you work with the changes :-)
1x [ADDON_ACTION_FORBIDDEN] AddOn 'Bartender4' hat versucht die geschützte Funktion 'AceEvent30Frame:RegisterEvent()' aufzurufen.
[!BugGrabber/BugGrabber.lua]:583: in function '?'
[!BugGrabber/BugGrabber.lua]:507: in function <!BugGrabber/BugGrabber.lua:507>
[C]: in function 'RegisterEvent'
[Bartender4/libs/AceEvent-3.0-4/AceEvent-3.0.lua]:33: in function 'OnUsed'
[Bartender4/libs/CallbackHandler-1.0-8/CallbackHandler-1.0.lua]:132: in function 'RegisterEvent'
[Quartz/modules/Swing.lua]:110: in function <Quartz/modules/Swing.lua:100>
[C]: ?
[Bartender4/libs/AceAddon-3.0-13/AceAddon-3.0.lua]:66: in function <Bartender4/libs/AceAddon-3.0/AceAddon-3.0.lua:61>
[Bartender4/libs/AceAddon-3.0-13/AceAddon-3.0.lua]:523: in function 'EnableAddon'
[Bartender4/libs/AceAddon-3.0-13/AceAddon-3.0.lua]:536: in function 'EnableAddon'
[Bartender4/libs/AceAddon-3.0-13/AceAddon-3.0.lua]:626: in function <Bartender4/libs/AceAddon-3.0/AceAddon-3.0.lua:611>
-
View User Profile
-
Send Message
Posted Jan 23, 2026In reply to vilogity: May be prolem not Quartz , but Bartender? Do You think?... IMHO
-
View User Profile
-
Send Message
Posted Jan 24, 2026In reply to vilogity:
When using the addon DoNotVendor with Quartz in 12.0.0 after changing the table of contents to enable 120000, I get the same error in DoNotVendor as shown above.
The error is preceded by the BugGrabber line:
[Quartz/modules/Swing.lua]:110: in function <Quartz/modules/Swing.lua:100>
Line 100 is
self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
I suspect this line is crashing the Ace Addon and then reporting the next addon that is loaded as causing the error.
Remove Quartz and DoNotVendor also works fine.
-
View User Profile
-
Send Message
Posted Jan 22, 2026Quartz Addon Fix Guide (Interface / Config / GCD Errors)
⚠ Before you start, make a backup of all original files.
1️⃣ Fix: Quartz not loading (Interface version issue)
Path
_retail_/Interface/AddOns/Quartz/Quartz.toc
Open Quartz.toc with Notepad
On the 2nd line, add 120000 to the ## Interface: value
Example
## Interface: 120000
Save the file
✅ Quartz will now load properly in-game.
2️⃣ Fix: Quartz loads but the settings window won’t open
Path
_retail_/Interface/AddOns/Quartz/Config.lua
Open Config.lua with Notepad
Locate line 201
❌ Remove this line
Settings.OpenToCategory("Quartz 3")
✅ Replace it with the following code
local category = Settings.GetCategory("Quartz 3")
if category then
Settings.OpenToCategory(category:GetID())
else
LibStub("AceConfigDialog-3.0"):Open("Quartz3")
end
Save and run /reload or restart the game
✔ Result
Typing /quartz in chat opens the Quartz settings panel directly
You can resize the window by dragging the bottom-right corner
3️⃣ Fix: Repeated Quartz errors during combat (GCD-related)
BugGrabber / Lua error spam during combat
→ Fixed by preventing hard errors using pcall
Path
_retail_/Interface/AddOns/Quartz/modules/GCD.lua
Open GCD.lua with Notepad
Press Ctrl + F and search for:
function GCD:CheckGCD
❌ Delete the entire original function
function GCD:CheckGCD(event, unit, guid, spell)
if unit == "player" then
local start, dur
if C_Spell and C_Spell.GetSpellCooldown then
local cooldown = C_Spell.GetSpellCooldown(spell)
if cooldown then
start, dur = cooldown.startTime, cooldown.duration
end
else
start, dur = GetSpellCooldown(spell)
end
if dur and dur > 0 and dur <= 1.5 then
starttime = start
duration = dur
gcdbar:Show()
end
end
end
✅ Replace it with this version
function GCD:CheckGCD(event, unit, guid, spell)
if unit == "player" then
local start, dur
if C_Spell and C_Spell.GetSpellCooldown then
local cooldown = C_Spell.GetSpellCooldown(spell)
if cooldown then
start, dur = cooldown.startTime, cooldown.duration
end
else
start, dur = GetSpellCooldown(spell)
end
local success, result = pcall(function()
return dur and dur > 0 and dur <= 1.5
end)
if success and result then
starttime = start
duration = dur
gcdbar:Show()
end
end
end
Save and /reload or restart the game
✔ Result
No more Quartz-related errors during combat
BugGrabber stays quiet
-
View User Profile
-
Send Message
Posted Jan 22, 2026In reply to topkid1219:
Are you able to fix this bug in interrupt.lua? It does not happen when Quartz is disabled so I'm assuming it is the problem.
10x [ADDON_ACTION_FORBIDDEN] AddOn 'BlizzMove' tried to call the protected function 'AceEvent30Frame:RegisterEvent()'.
[!BugGrabber/BugGrabber.lua]:583: in function '?'
[!BugGrabber/BugGrabber.lua]:507: in function <!BugGrabber/BugGrabber.lua:507>
[C]: in function 'RegisterEvent'
[BlizzMove/Libs/AceEvent-3.0-4/AceEvent-3.0.lua]:33: in function 'OnUsed'
[!WilduTools/libs/CallbackHandler-1.0-8/CallbackHandler-1.0.lua]:132: in function 'RegisterEvent'
[Quartz/modules/Interrupt.lua]:49: in function <Quartz/modules/Interrupt.lua:48>
[C]: ?
[!WilduTools/libs/AceAddon-3.0-13/AceAddon-3.0.lua]:66: in function <...ddOns/!WilduTools/libs/AceAddon-3.0/AceAddon-3.0.lua:61>
[!WilduTools/libs/AceAddon-3.0-13/AceAddon-3.0.lua]:523: in function 'EnableAddon'
[!WilduTools/libs/AceAddon-3.0-13/AceAddon-3.0.lua]:536: in function 'EnableAddon'
[!WilduTools/libs/AceAddon-3.0-13/AceAddon-3.0.lua]:626: in function <...ddOns/!WilduTools/libs/AceAddon-3.0/AceAddon-3.0.lua:611>
Locals:
self = <table> {
}
event = "ADDON_ACTION_FORBIDDEN"
addonName = "BlizzMove"
addonFunc = "AceEvent30Frame:RegisterEvent()"
name = "BlizzMove"
badAddons = <table> {
BlizzMove = true
}
-
View User Profile
-
Send Message
Posted Jan 22, 2026In reply to Moreorlessmaybe:
This is not a Quartz Problem !
I had the same with Bartender4.
This is a Blizz Move ADDON Problem, or others...DIK waht is WilduTools is.
I had 4 ADDON*s who crashed Bartender4 with Blocking and dont load.
Make a backup and delete this other addon´s and try if Quartz working alone, so I found my real ADDON`s that dosnt work, and all was ok after i delete them or take a new version.
-
View User Profile
-
Send Message
Posted Jan 22, 2026In reply to topkid1219: only "player" casting bar works / other casting bar does not work
it means time to say "thx and goodbye Quartz"
-
View User Profile
-
Send Message
Posted Jan 22, 2026Hi,
I updated the .toc file to 120000, but everytime I cast a spell the following message pops up:
Message: Interface/AddOns/Quartz/modules/GCD.lua:116: attempt to compare local 'dur' (a secret value)
Time: Wed Jan 21 22:11:51 2026
Count: 6
Stack:
[Interface/AddOns/Quartz/modules/GCD.lua]:116: in function '?'
[Interface/AddOns/DBM-Core/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua]:109: in function <...ore/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:109>
[C]: ?
[Interface/AddOns/DBM-Core/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua]:19: in function <...ore/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:15>
[Interface/AddOns/DBM-Core/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua]:54: in function 'Fire'
[Interface/AddOns/Quartz/libs/AceEvent-3.0/AceEvent-3.0.lua]:120: in function <...ace/AddOns/Quartz/libs/AceEvent-3.0/AceEvent-3.0.lua:119>
Locals:
self = <table> {
modules = <table> {
}
defaultModuleLibraries = <table> {
}
name = "Quartz3_GCD"
orderedModules = <table> {
}
db = <table> {
}
baseName = "Quartz"
enabledState = true
defaultModuleState = true
moduleName = "GCD"
}
event = "UNIT_SPELLCAST_START"
unit = "player"
guid = "Cast-3-4254-2552-580-34914-0041714117"
spell = 34914
start = <no value>
dur = <no value>
(*temporary) = <table> {
isOnGCD = true
modRate = <no value>
activeCategory = <no value>
isEnabled = <no value>
startTime = <no value>
timeUntilEndOfStartRecovery = <no value>
duration = <no value>
}
(*temporary) = <no value>
(*temporary) = "attempt to compare local 'dur' (a secret value)"
starttime = 7241.890000
duration = 1.137000
gcdbar = Quartz3GCDBar {
Center = Texture {
}
RightEdge = Texture {
}
backdropInfo = <table> {
}
BottomEdge = Texture {
}
BottomLeftCorner = Texture {
}
BottomRightCorner = Texture {
}
TopEdge = Texture {
}
TopRightCorner = Texture {
}
TopLeftCorner = Texture {
}
LeftEdge = Texture {
}
}
Anyone knows how to fix this?
Ty
-
View User Profile
-
Send Message
Posted Jan 21, 2026I've managed to get this working in Midnight by updating the toc file with 12000. Hopefully the addon author will release a proper version soon :)
For anyone wondering how to do it
Locate the toc file in the quartz directory in your addon folder
update Interface with 12000. It should read something like this
## Title: Quartz
## Interface: 120000, 11508,20505,50503,110207
## Notes: Modular casting bar.
## Author: Nevcairiel, Nymbia
You can do this with any addon that isn't updated but there is a chance it may not work with the new blizzard APIs. I've been running Quartz for about 20 mins now with this change and I'm not getting any lua errors so hoping its all good
-
View User Profile
-
Send Message
Posted Jan 21, 2026In reply to Mencc: Works great. Thank you so much.
Unfortunately, this doesn't work for bagnon, decursive, and MSBT.
-
View User Profile
-
Send Message
Posted Jan 21, 2026In reply to YetiMitLaser: I think MSBT will be busted for good due to the changes anyway unfortunately.