# Ace3 Documentation — Full Reference > Documentation for the Ace3 World of Warcraft addon framework: a suite of embeddable Lua libraries for addon structure, saved variables, configuration, events, timers, communication, serialization, localization, and GUI. --- # Getting Started URL: https://wowace-docs.nickdnk.workers.dev/getting-started # Getting Started New to World of Warcraft addons? You're in the right place. This guide takes you from an empty folder to a working addon built on **Ace3**, and explains the pieces as it goes. ::: tip Using an AI assistant? Load [`/llms-full.txt`](/llms-full.txt) into your AI's context for the complete Ace3 reference in one file. ::: ## What is Ace3, and why use it? Ace3 is the most widely used **addon framework** for World of Warcraft: a set of small, focused libraries that handle the repetitive parts of addon development so you can focus on what your addon does. It isn't one monolithic library; you **embed only the pieces you need** and ignore the rest. What that buys you: - **Less boilerplate**: a clean addon lifecycle (`OnInitialize` / `OnEnable` / `OnDisable`) instead of hand-wiring [`ADDON_LOADED`](https://warcraft.wiki.gg/wiki/ADDON_LOADED). - **Settings that just work**: [AceDB-3.0](/api/ace-db) stores `SavedVariables` with per-character profiles and smart defaults. - **Configuration for free**: describe your options once and [AceConfig-3.0](/api/ace-config) builds both a settings GUI *and* slash commands from it. - **Event handling**: [AceEvent-3.0](/api/ace-event) registers and dispatches game events and inter-addon messages, with throttling for bursty events via [AceBucket-3.0](/api/ace-bucket). - **Leak-free custom UI**: [AceGUI-3.0](/acegui/) builds windows from a pool of recycled widgets, so rebuilding your interface never leaks frames for the session. - **Addon communication**: [AceComm-3.0](/api/ace-comm) sends messages of any length to other copies of your addon across the group or guild. - **…and more**: timers ([AceTimer-3.0](/api/ace-timer)), data serialization ([AceSerializer-3.0](/api/ace-serializer)), localization ([AceLocale-3.0](/api/ace-locale)), safe function hooks ([AceHook-3.0](/api/ace-hook)) and other utilities. The rest of this page walks through setting up an addon and points you at the library for each task. ## Download Get the latest Ace3 release: Download Ace3 Ace3 is a bundle of libraries you **embed inside your own addon**; there's no separate install for players. Unzip the libraries you need into a `Libs/` subdirectory of your addon folder and reference them from your `.toc` or `embeds.xml` (see [load order](#basic-addon-file-setup) below). You only need to ship the libraries you actually use. ## Basic Addon File Setup Create a folder for your addon in `\Interface\AddOns`. The name must be unique; pick something descriptive. Inside it you'll create a few text files. ### The `.toc` file Name it the same as the folder, with `.toc` appended (e.g. `MyAddon/MyAddon.toc`). Lines beginning with `##` are metadata; the rest is the list of files to load. The key field is `## Interface`, which declares the game build(s) your addon supports: ```toc ## Interface: 11508, 20505 ## Title: My Addon's Title ## Notes: Some notes about this addon. ## Author: Your Name Here ## Version: 0.1 ## SavedVariables: MyAddonDB ``` ::: tip Interface numbers & supporting multiple versions Each interface number identifies a game version, and it increases as the game is patched. `## Interface` accepts a **comma-separated list**, so one `.toc` can support several client flavors at once. The example targets two: - **`11508`**: Classic Era, patch 1.15.8 - **`20505`**: Burning Crusade Classic (Anniversary), patch 2.5.5 Add the current retail number too (`120005` at the time of writing) to cover retail in the same file: ```toc ## Interface: 11508, 20505, 120005 ``` Each listed client loads the addon and reports its own number; read it at runtime from [`GetBuildInfo`](https://warcraft.wiki.gg/wiki/API_GetBuildInfo) (the `interfaceVersion` return, the 4th value, not the build number). The alternative to a CSV list is shipping a **separate TOC per flavor**, named with a suffix WoW recognizes: - `MyAddon_Mainline.toc`: retail - `MyAddon_Vanilla.toc`: Classic Era - `MyAddon_TBC.toc`: Burning Crusade Classic - `MyAddon_Wrath.toc`: Wrath Classic - `MyAddon_Cata.toc`: Cataclysm Classic - `MyAddon_Mists.toc`: Mists of Pandaria Classic `_Mainline`/`_Classic` are lower priority than expansion-specific suffixes, so a `_Cata.toc` wins over `_Classic.toc` on a Cataclysm Classic client. The CSV approach keeps everything in one file. For the complete list of fields and flavor suffixes, see the [TOC format reference](https://warcraft.wiki.gg/wiki/TOC_format). ::: ### Loading the libraries After the metadata, the `.toc` lists the files to load, top to bottom. There are **two equivalent ways** to pull in the Ace3 libraries; pick one. With the **direct** approach the library files are listed in the `.toc` itself; with the **embeds.xml** approach that list moves to a separate file (the `embeds.xml` tab below), keeping your own code visually separate. Either way, `LibStub` must be loaded first, followed by `CallbackHandler-1.0`. ::: code-group ```toc [MyAddon.toc (direct)] ## Interface: 11508, 20505 ## Title: My Addon's Title ## SavedVariables: MyAddonDB # load each library (LibStub first), then your own code Libs\LibStub\LibStub.lua Libs\CallbackHandler-1.0\CallbackHandler-1.0.xml Libs\AceAddon-3.0\AceAddon-3.0.xml Core.lua ``` ```toc [MyAddon.toc (with embeds.xml)] ## Interface: 11508, 20505 ## Title: My Addon's Title ## SavedVariables: MyAddonDB embeds.xml Core.lua ``` ```xml [embeds.xml]