k-fenui
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.zipInstalls 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.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
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.
| Area | Factories |
|---|---|
| Containers | CreatePanel, CreateInset, CreateScrollPanel, CreateScrollInset, CreateCard, CreateDialog, CreateSection, CreateGroup |
| Layout | CreateLayout, CreateStack, CreateFlex, CreateGrid, CreateSplitLayout, CreateToolbar |
| Controls | CreateButton, CreateIconButton, CreateCloseButton, CreateImageButton, CreateCheckbox, CreateInput, CreateMultiLineEditBox, CreateDropdown, CreateScrollBar |
| Navigation and lists | CreateTabGroup, CreateTree, CreateVirtualList |
| Display | CreateImage, CreateSectionHeader, CreateStatusRow, CreateInfoPanel, CreateEmptyState, CreateRoundedBox, CreateChevron |
| Theming UI | CreateThemePicker, 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; spacingFenUI:GetSpacing("spacingPanel"); radiusFenUI: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 definesRefreshTheme()and callsFenUI: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.md1.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.luafalls 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
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.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| k-fenui (this skill) | 0 | 8mo | No flags | Intermediate |
| frontend-design | 481 | 3mo | No flags | Advanced |
| screenshot-to-code | 204 | 3mo | No flags | Beginner |
| textual | 143 | 10mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by Falkicon
View all by Falkicon →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.
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.
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.
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.
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.
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.