wow-api-xml-schema

SKILL.md

WoW XML Schema

This skill documents the XML schema for World of Warcraft addon development. XML files define User Interface elements declaratively — frames, textures, font strings, fonts, and animations. While most UI functionality is also available in Lua via the Widget API, XML provides a structured way to define layouts, templates, and widget hierarchies.

Source of truth: https://warcraft.wiki.gg/wiki/XML_schema XSD file: https://raw.githubusercontent.com/Gethe/wow-ui-source/live/Interface/AddOns/Blizzard_SharedXML/UI.xsd Current as of: Patch 12.0.0 (Retail only) Scope: All XML elements and attributes used in WoW addon .xml files.

When to Use This Skill

Use this skill when you need to:

  • Write or read WoW addon .xml UI definition files
  • Define frames, textures, font strings, or animations in XML
  • Set up XML virtual templates (virtual="true") and inheritance (inherits="")
  • Understand which XML attributes map to which Lua API calls
  • Configure anchors, layers, scripts, key-values, or resize bounds in XML
  • Set up the <Ui> root element with proper namespace declarations
  • Use <Include> and <Script> tags to load files from XML
  • Define <Font> or <FontFamily> objects for text styling
  • Create animation groups and animations declaratively
  • Build intrinsic frames (intrinsic="true")
  • Understand XML element inheritance hierarchy (e.g., Button inherits from Frame inherits from LayoutFrame)

Relationship to Other Skills

Skill Relationship
wow-api-widget Covers the Lua-side Widget API methods called on widgets. This skill covers the XML-side declarative definitions. Many XML attributes map directly to Widget API methods.
wow-addon-structure Covers .toc file format and addon loading. XML files are listed in .toc and loaded in order.
wow-api-framexml Covers FrameXML helper functions and mixins. XML mixin and secureMixin attributes reference Lua mixins documented there.
wow-lua-api Covers the Lua 5.1 environment. <Script> tags execute Lua code within that environment.

Widget Hierarchy (XML Elements)

<Ui>                          -- Root element; encloses all other tags
├── <Include />               -- Loads another .xml or .lua file
├── <Script />                -- Executes inline or file-based Lua code
├── <Font />                  -- Defines a reusable font object
├── <FontFamily />            -- Defines fonts per alphabet/locale
├── <LayoutFrame>             -- Abstract base: name, anchors, size, keyvalues, animations
│   ├── <Texture />           -- Draws an image, solid color, or gradient
│   │   ├── <MaskTexture />   -- Applies a mask to other textures
│   │   └── <Line />          -- Draws a line between two anchors
│   ├── <FontString />        -- Draws text
│   └── <Frame>               -- Handles events, user interaction, contains child widgets
│       ├── <Button>          -- Responds to clicks
│       │   ├── <CheckButton> -- Adds checked/unchecked state
│       │   └── <ItemButton>  -- Intrinsic frame extending Button
│       ├── <ColorSelect>     -- Color wheel + value picker
│       ├── <Cooldown>        -- Rotating edge / swipe overlay
│       ├── <EditBox>         -- Text input field
│       ├── <GameTooltip>     -- Tooltip formatting
│       ├── <MessageFrame>    -- Scrolling message display
│       ├── <Model>           -- 3D model rendering
│       │   ├── <PlayerModel>
│       │   │   ├── <DressUpModel>
│       │   │   └── <TabardModel>
│       │   ├── <CinematicModel>
│       │   └── <UiCamera>
│       ├── <ModelScene>      -- Scene-based 3D rendering
│       ├── <ScrollFrame>     -- Scrollable container
│       ├── <ScrollingMessageFrame> -- Intrinsic scrolling messages
│       ├── <SimpleHTML>      -- Renders HTML content
│       ├── <Slider>          -- Value selector within a range
│       ├── <StatusBar>       -- Fill bar (health, progress, etc.)
│       ├── <MovieFrame>      -- Video playback
│       ├── <ArchaeologyDigSiteFrame>
│       ├── <QuestPOIFrame>
│       └── <ScenarioPOIFrame>
└── <AnimationGroup>          -- Contains animations
    └── <Animation>           -- Abstract base for animations
        ├── <Alpha>           -- Fades opacity
        ├── <Scale>           -- Resizes
        │   └── <LineScale>
        ├── <Translation>     -- Moves position
        │   └── <LineTranslation>
        ├── <Path>            -- Moves through control points
        ├── <Rotation>        -- Rotates around an origin
        └── <TextureCoordTranslation> -- Shifts texture coordinates

Reference Files

Reference Contents
XML-FOUNDATION.md Terminology, XML namespace setup, <Ui>, <Include>, <Script>, <LayoutFrame> base element, <Anchors>, <Size>, <KeyValues>, <Animations>
XML-FRAME-TYPES.md <Frame> and all subtypes: Button, CheckButton, ItemButton, ColorSelect, Cooldown, EditBox, GameTooltip, MessageFrame, Model (and subtypes), ScrollFrame, ScrollingMessageFrame, SimpleHTML, Slider, StatusBar, POI frames
XML-REGIONS.md <Texture>, <MaskTexture>, <Line>, <FontString>, plus shared child elements: <Color>, <Gradient>, <TexCoords>, <Shadow>, <Inset>, <Dimension>
XML-FONTS.md <Font>, <FontFamily>, <FontHeight>, <Member>
XML-ANIMATIONS.md <AnimationGroup>, <Animation> base, <Alpha>, <Scale>, <LineScale>, <Translation>, <LineTranslation>, <Path>, <Rotation>, <TextureCoordTranslation>

Quick Example

A minimal XML file that shows a texture centered on screen:

<Ui xmlns="http://www.blizzard.com/wow/ui/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.blizzard.com/wow/ui/
                        https://raw.githubusercontent.com/Gethe/wow-ui-source/live/Interface/AddOns/Blizzard_SharedXML/UI.xsd">
    <Frame parent="UIParent">
        <Size x="64" y="64"/>
        <Anchors>
            <Anchor point="CENTER"/>
        </Anchors>
        <Layers>
            <Layer level="ARTWORK">
                <Texture file="interface/icons/inv_mushroom_11" setAllPoints="true"/>
            </Layer>
        </Layers>
    </Frame>
</Ui>

Common XML Attribute Types

XSD Type Lua Equivalent Examples
xs:string string "MyFrame", "interface/icons/spell_nature_heal"
xs:boolean boolean "true", "false"
xs:int number (integer) "0", "42"
xs:float number (float) "1.0", "0.5"
xs:unsignedInt number (non-negative integer) "0", "255"
ui:FRAMEPOINT string "CENTER", "TOPLEFT", "BOTTOMRIGHT"
ui:FRAMESTRATA string "BACKGROUND", "LOW", "MEDIUM", "HIGH", "DIALOG", "FULLSCREEN", "FULLSCREEN_DIALOG", "TOOLTIP"
ui:DRAWLAYER string "BACKGROUND", "BORDER", "ARTWORK", "OVERLAY", "HIGHLIGHT"
ui:ORIENTATION string "HORIZONTAL", "VERTICAL"
ui:OUTLINETYPE string "NONE", "NORMAL", "THICK"
ui:ALPHAMODE string "DISABLE", "BLEND", "ALPHAKEY", "ADD", "MOD"
ui:INSERTMODE string "TOP", "BOTTOM"
ui:JUSTIFYHTYPE string "LEFT", "CENTER", "RIGHT"
ui:JUSTIFYVTYPE string "TOP", "MIDDLE", "BOTTOM"
ui:ANIMLOOPTYPE string "NONE", "REPEAT", "BOUNCE"
ui:ANIMSMOOTHTYPE string "NONE", "IN", "OUT", "IN_OUT", "OUT_IN"
ui:ANIMCURVETYPE string "NONE", "SMOOTH"
ui:KEYVALUETYPE string "nil", "boolean", "number", "string", "global"
ui:WRAPMODE string "CLAMP", "REPEAT", "CLAMPTOBLACK", "CLAMPTOBLACKADDITIVE", "CLAMPTOWHITE", "MIRROR"

Editor Setup

Use VS Code with the Red Hat XML extension for schema validation, autocompletion, and error checking in WoW XML files.

Weekly Installs
3
GitHub Stars
7
First Seen
8 days ago
Installed on
cline3
github-copilot3
codex3
gemini-cli3
cursor3
opencode3