LibIconPicker

Development Tools 4 more categories

LibIconPicker is a reusable load-on-demand library that provides a flexible icon chooser dialog with callback support for addon developers.

WoW 12.1.0 Actively Maintained

Trend Explorer

Recent download momentum

Estimated downloads/hour over observed intervals in the last 48 hours.

Latest interval +13 /h 1h observed interval · ending Sep 11, 5 AM
Peak estimate +61.8 /h 1h observed interval · ending Sep 10, 7 PM
Average estimate +20.5 /h Time-weighted · 47.3h covered of 48h

Lines connect interval estimates, not hourly measurements. Unobserved time is not counted as zero or extrapolated to now.

About this addon

What it does

LibIconPicker is a high-performance icon selection library for World of Warcraft addons. It provides a clean, callback-based API that lets addons open an icon picker and receive the selected icon instantly — without managing UI state, layouts, or large icon lists themselves.

image

Designed from the ground up to be lightweight and efficient, LibIconPicker uses a hybrid scroll frame and lazy rendering so only visible icons are processed at any time. This keeps CPU usage low during scrolling and filtering, even with very large icon sets, and avoids unnecessary redraws or background work.

The UI is lazy-loaded and initialized only when needed, ensuring minimal memory usage and zero impact on addon startup time. No persistent data or saved variables are created by the library, keeping memory footprints small and predictable.

LibIconPicker is designed to load on-demand, supports multiple addons simultaneously, and avoids global side effects by following established WoW library conventions. The result is a fast, scalable, and memory-efficient icon picker that integrates cleanly into any addon without adding performance overhead or maintenance burden.

LibIconPicker is NOT SAFE TO EMBED due to global XML frame names in the addon xml files.

Usage

The following example loads LibIconPicker on demand (if not already loaded) before invoking its public API. See the use cases for complete integration patterns and how this library can be leveraged by consumer addons.

local LoadAddOn     = LoadAddOn or C_AddOns.LoadAddOn
local IsAddOnLoaded = IsAddOnLoaded or C_AddOns.IsAddOnLoaded
local addOnName     = 'LibIconPicker'
local loaded, msg   = IsAddOnLoaded(addOnName), nil
if not loaded then
    loaded, msg = LoadAddOn(addOnName)
    if not loaded then
        return print('Failed to load LibIconPicker, msg:', msg)
    end
end
LibIconPicker:Open(function(sel)
    print('Selected icon:', sel.icon)
end)
API Definition

Full Documentation is here:

The public interface definition is here with EmmyLua annotations

LibIconPicker_Options

--- @type LibIconPicker_Options
local opt = {
    showTextInput = true,
    -- @type LibIconPicker_TextInputOptions
    textInput = { label = 'Enter Name:', value = 'Uber Spell' },
    -- @type LibIconPicker_Anchor
    anchor = {
        point = 'TOPRIGHT',
        relativeTo = UIParent,
        relativePoint = 'TOPRIGHT',
        x = -50,
        y = -100
    },
}

Callback: LibIconPicker_CallbackFn

--- @param sel LibIconPicker_Selection
function callbackFn(sel)
    -- sel.icon           : The user selected icon
    -- sel.textInputValue : The user text input value
end

Usage Example

Show icon picker with textInput and anchor

--- @type LibIconPicker_Options
local opt = {
    showTextInput = true,
    anchor = {
        point = 'TOPRIGHT',
        relativeTo = UIParent,
        relativePoint = 'TOPRIGHT',
        x = -50,
        y = -100
    },
}
--- @param sel LibIconPicker_Selection
LibIconPicker:Open(function(sel)
    print('Selected icon:', sel.icon, ' user-input-text:', sel.textInputValue)
end, opt)

Close the Icon Picker

LibIconPicker:Close()

General Comments

Drop your commments/questions here.

Donations

If LibIconPicker has made your addon development easier, consider supporting its development:

About

At-a-glance numbers

Performance highlights

  • Peaked at Hot #9 on Sep 4, 2026.
  • Featured on the Hot list across 5 distinct weeks.
  • Shipped 3 releases in the last 30 days.
  • Averaging 1.2K new downloads per day over the past week.

Discover more

Keep exploring

Similar addons you might also want to check out.

More by kapresoft

Same creator, different utilities.

Similar in Development Tools

Comparable addons in the same lane.

ThisWeeksAuras #13 #497
48.4K downloads

ThisWeeksAuras is a Midnight-ready fork of M33kAuras by m33shoq, which is itself a fork of WeakAuras 2.

GSE: Sequences, Variables, Macros #27
10.1M downloads

GSE is an advanced macro compiler that is an alternative to the limits provided by the default macro editor.

Leatrix Sounds #55
7.0M downloads

Complete sound file browser for World of Warcraft. Supports all WoW games including Midnight and Burning Crusade Classic Anniversary (as well as all the others).

Simulationcraft #124
51.1M downloads

An addon that generates a Simulationcraft profile for your character

Hated Crate Tracker 2.0 #148
323.0K downloads

War Supply Crate tracker with drop prediction, live timers, and raid-wide sync. Crate farm coordination for solo hunters and full raids.

GRIP - EMS (Enhanced Macro Sequencer) #164 #407
34.3K downloads

Free macro sequencer for WoW: turn a multi-step rotation into one keybind, with a visual editor, smart context switching, import/export, and player-to-player sharing.

BugGrabber #173
18.3M downloads

Grabs bugs for the bug sack.

Talent Tree Tweaks #209
5.0M downloads

Various improvements and addition to the Retail talent tree and profession tree UI

BugSack #211
16.0M downloads

Toss those bugs inna sack.

Hyperframe (FPS Optimizer) #314
293.3K downloads

Hyperframe dynamically adjusts graphics settings based on content type to optimize FPS, frame rate, performance, and visual quality. It includes presets for dungeons, raids, arenas, and more, with customizable view distances, LOD, and particle effects.

Transcriptor #355
1.1M downloads

Logging utility for boss encounters.

idTip #376
3.6M downloads

Adds IDs to the ingame tooltips