Enables building World of Warcraft addon UIs using the declarative FenUI widget library.

Install

mkdir -p .claude/skills/k-fenui && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/9632" && unzip -o skill.zip -d .claude/skills/k-fenui && rm skill.zip

Installs to .claude/skills/k-fenui

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Context for FenUI - the UI widget library for WoW addons. Covers frames, layouts, buttons, panels, and theming. Load this when building addon UI or working with FenUI widgets. Triggers: fenui, ui, widget, frame, layout, panel, button, tabs.
240 chars✓ has a “when” trigger
Intermediate

Key capabilities

  • →Instantiate UI widgets like panels and buttons
  • →Implement declarative layout management
  • →Apply consistent theme tables
  • →Handle tabbed navigation and grids

How it works

The skill provides a declarative API to define UI components, which are then rendered using the FenUI library's internal layout system.

Inputs & outputs

You give it
UI configuration table
You get back
Lua code for FenUI widget instantiation

When to use k-fenui

  • →Build addon UI panels
  • →Create custom layout systems
  • →Implement FenUI buttons and widgets
  • →Add tabbed navigation to frames
  • →Define UI themes

About this skill

FenUI

FenUI is a progressive-enhancement widget layer over Blizzard's frames and templates, with a design-token theme system. The copy in Mechanic/Libs/FenUI/ is synced from the FenUI source repo (_dev_/Libs/FenUI); fix FenUI in its own repo and re-sync rather than patching the vendored copy. Authoritative docs: Mechanic/Libs/FenUI/README.md and Mechanic/Libs/FenUI/AGENTS.md.

Access and degradation

FenUI is a plain global (FenUI = FenUI or {} in Core/FenUI.lua), not a LibStub library. The library is embedded through Libs\FenUI\FenUI.xml. Always guard when FenUI is optional:

if FenUI and FenUI.CreatePanel then
    frame = FenUI:CreatePanel(parent, config)
else
    frame = CreateFrame("Frame", nil, parent, "BackdropTemplate")  -- fallback
end

Factories

Pattern: FenUI:Create<Widget>(parent, config) returns a Blizzard frame with a mixin applied. A string config is accepted by CreatePanel (title) and CreateButton (text). Builder forms exist for a few: FenUI.Panel(parent):title("..."):build(), FenUI.Flex, FenUI.Stack, FenUI.TabGroup, FenUI.Group.

AreaFactories
ContainersCreatePanel, CreateInset, CreateScrollPanel, CreateScrollInset, CreateCard, CreateDialog, CreateSection, CreateGroup
LayoutCreateLayout, CreateStack, CreateFlex, CreateGrid, CreateSplitLayout, CreateToolbar
ControlsCreateButton, CreateIconButton, CreateCloseButton, CreateImageButton, CreateCheckbox, CreateInput, CreateMultiLineEditBox, CreateDropdown, CreateScrollBar
Navigation and listsCreateTabGroup, CreateTree, CreateVirtualList
DisplayCreateImage, CreateSectionHeader, CreateStatusRow, CreateInfoPanel, CreateEmptyState, CreateRoundedBox, CreateChevron
Theming UICreateThemePicker, CreateThemeOption, CreateSettingsGroup
local panel = FenUI:CreatePanel(UIParent, { title = "My Window", width = 400, height = 300,
    movable = true, resizable = true, closable = true })

local stack = FenUI:CreateStack(panel, { direction = "vertical", gap = "md", align = "stretch", padding = "sm" })
stack:AddChild(topButton)
stack:AddChild(spacer, { grow = 1 })

local tabs = FenUI:CreateTabGroup(panel, {
    tabs = { { key = "main", text = "Main" }, { key = "settings", text = "Settings", badge = "!" } },
    onChange = function(key) end,
})

local grid = FenUI:CreateGrid(panel, { columns = { 24, "1fr", "auto" }, rowHeight = 24,
    onRowClick = function(row, data) end })

local button = FenUI:CreateButton(panel, { text = "Click me", onClick = function() end })

Sizes accept numbers, percentages ("50%"), viewport units and "auto"; minWidth/maxWidth/aspectRatio constrain layouts. Check the factory's config handling in Widgets/<Name>.lua for the exact keys before using one you have not used.

Tokens and themes

  • Colors: FenUI:GetColor(token), GetColorRGB, GetColorHex, GetColorTable; spacing FenUI:GetSpacing("spacingPanel"); radius FenUI:GetRadius("radiusControl"). Three tiers: primitive, semantic, component. Use semantic tokens (textDefault, textHeading, surfacePanel), not raw colors.
  • Themes: FenUI:GetThemeList(), FenUI:SetGlobalTheme(name), FenUI:GetGlobalTheme(), FenUI:OnThemeChanged(callback). A global theme change re-colors live widgets; a custom widget that resolves token colors once defines RefreshTheme() and calls FenUI:RegisterThemedFrame(widget).
  • Blizzard scroll frames can be skinned with FenUI:SkinScrollFrame.

Mechanic conventions

  • Use FenUI widgets instead of raw frames where one exists; add new widgets to FenUI itself.
  • Type scale and neutral headings follow the Obsidian look (Mechanic/CHANGELOG.md 1.3.7): gold only for the window title, active tab, selection and focus.
  • Keep the view layer thin and test at several UI scales.
  • Mechanic's Utils.lua falls back gracefully when FenUI helpers are missing.

When not to use it

  • →When building non-WoW addon interfaces
  • →When manual frame positioning is required

Prerequisites

LibStubFenUI library

Limitations

  • →Requires FenUI library availability
  • →Limited to WoW addon development

How it compares

It uses a declarative approach for widget creation instead of manual frame positioning and styling.

Compared to similar skills

k-fenui side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
k-fenui (this skill)08moNo flagsIntermediate
frontend-design4813moNo flagsAdvanced
screenshot-to-code2043moNo flagsBeginner
textual14310moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

frontend-design

anthropics

Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.

481544

screenshot-to-code

OneWave-AI

Convert UI screenshots into working HTML/CSS/React/Vue code. Detects design patterns, components, and generates responsive layouts. Use this when users provide screenshots of websites, apps, or UI designs and want code implementation.

204389

textual

KyleKing

Expert guidance for building TUI (Text User Interface) applications with the Textual framework. Invoke when user asks about Textual development, TUI apps, widgets, screens, CSS styling, reactive programming, or testing Textual applications.

143346

web-artifacts-builder

anthropics

Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts.

49162

radix-ui-design-system

sickn33

Build accessible design systems with Radix UI primitives. Headless component customization, theming strategies, and compound component patterns for production-grade UI libraries.

33130

svelte-ui-design

XIYO

ALWAYS use this skill for ANY Svelte component styling, design, or UI work. Svelte 5 UI design system using Tailwind CSS 4, Skeleton Labs design tokens/presets/Tailwind Components, and Bits UI headless components. Covers class composition, color systems, interactive components, forms, overlays, and all visual design.

23136

Search skills

Search the agent skills registry