It seems since recent Classic Era client updates (mid-2025, 1.15.x+), many addons that use BackdropTemplate or call SetBackdropColor / SetBackdropBorderColor during early loading have started throwing the following error:
Message: Interface/AddOns//Main.lua line XXX:
table index is nil
It originates in Blizzard’s C-side implementation of BackdropTemplate, which stores its internal color/border data in a table called frame.backdropInfo.
In older builds:
SetBackdropColor()andSetBackdropBorderColor()were safe to call any time afterCreateFrame()— even if the frame was hidden.
In current Classic Era builds:
backdropInfoisn’t created until the frame is actually rendered once on screen.- If any Lua code calls
SetBackdropColororSetBackdropBorderColorbefore that moment (for example, duringADDON_LOADEDorPLAYER_LOGIN), the engine throws a C-level “table index is nil” before control even returns to Lua. - Wrapping the call in
pcall()or usingseterrorhandler()does not catch it, because it’s raised inside the client’s C-code, not Lua.
When it triggers
- On cold login (especially when the affected frame is hidden, off-screen, or parented to
UIParentbefore it’s drawn). - Not usually on
/reload, because by then the frame has already been rendered once. - It’s intermittent and depends on addon load order, frame visibility, and UI scale.
Impact
- The error is harmless but noisy.
- It doesn’t break functionality — it only fires once on login.
- Many addons that tint or recolor hidden frames (chat boxes, panels, config windows, etc.) are affected.
Known workarounds I’ve read up on
There doesn’t seem to be a full Lua-side fix but these methods reduce or hide the issue sometimes:
- Delay backdrop coloring until after
PLAYER_ENTERING_WORLDand after the frame is visible. - Use
Container:HookScript("OnShow", function() ...color... end)instead of calling it immediately. - Replace backdrops with plain textures (
frame:CreateTexture()+SetColorTexture) instead ofSetBackdropColor.
Unfortunately in my case none of these are working
Blizzard would need to restore a safe lazy initialization of backdropInfo or suppress the thrown error until the table is allocated, as it was in previous Classic clients (and possibly in retail Dragonflight?)