-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Foundry is a small toolkit for building WoW addons. I made it while reworking my own addons (Homestead and Sift), and since the work was happening anyway, I cleaned it up so other people could use it too.
If you've built an addon before, you've probably used Ace3. Foundry isn't trying to replace it, Ace3 is solid and still maintained. The thing is, Ace3 was built for an older version of WoW's API, and Blizzard has added a lot since then: a proper settings system, a new menu system, better scrolling lists, cleaner tooltip hooks. A bunch of that newer stuff either has no good library wrapping it, or the old community libraries that did have gone unmaintained. So you end up either fighting the raw Blizzard code yourself or leaning on a library nobody's touched in years.
That's the gap Foundry fills. It wraps the modern Blizzard stuff so you write a few clean lines instead of a verbose mess but it never hides the real Blizzard objects from you. There's always a way to reach underneath and grab the raw thing when you need to. You're saving yourself typing, not giving up control.
Right now it handles the everyday stuff: slash commands, game events, addon startup/login, saved settings (and it reads your existing AceDB save files as-is, so switching doesn't nuke anyone's settings), Blizzard's scrolling lists, your addon's options panel, tooltip hooks, and context menus.
The best part is you don't have to commit to anything. Grab one piece, keep using Ace3 for everything else, and add more whenever you feel like it. And if there's some Blizzard API you wish was easier to use, tell me that's literally how every module so far got added. You bring an addon and a thing you want made simpler, and that's enough.
New to WoW addons? Start here →
Packaging for CurseForge, Wago, or embedded releases? Package Foundry with your addon →
Moving from Ace3? Use the Ace-to-Foundry migration guide →
This wiki is the API reference — full docs for each module are below. At runtime Foundry is exposed as _G.Foundry_1_0.
Each module is self-contained: declare ## Dependencies: Foundry-1.0 and use only the modules you need.
| Module | What it bridges | Status | Reference |
|---|---|---|---|
| Commands | Slash commands — Blizzard's SlashCmdList + SLASH_* registration system |
Available | Foundry.Commands |
| Events | Game events — Blizzard's frame event system (RegisterEvent/OnEvent, RegisterUnitEvent) |
Available | Foundry.Events |
| Lifecycle | Addon startup — the ADDON_LOADED, PLAYER_LOGIN, and PLAYER_LOGOUT events |
Available | Foundry.Lifecycle |
| DB | Saved data — Blizzard's SavedVariables persistence |
Available | Foundry.DB |
| List | Scrolling lists — Blizzard's ScrollBox system (ScrollBoxListView, DataProvider, ScrollUtil) |
Available | Foundry.List |
| Settings | Options panel — Blizzard's Settings registration API (RegisterCanvasLayoutCategory, RegisterAddOnCategory) |
Available | Foundry.Settings |
| Tooltip | Tooltip hooks — the modern TooltipDataProcessor system |
Available | Foundry.Tooltip |
| Menu | Context menus — the modern Blizzard_Menu / MenuUtil system |
Available | Foundry.Menu |
local F = _G.Foundry_1_0
if not F then
error("MyAddon requires Foundry-1.0. Please install or enable it.")
endFoundry on its own does nothing — it only runs when an addon depends on it.
Foundry ships one module at a time, and each module is validated against a real consuming addon before it lands. All eight modules — Commands, Events, Lifecycle, DB, List, Settings, Tooltip, and Menu — are now available (consumers: Homestead and Sift).
There are no dates here on purpose: a module ships when an addon has actually proven it, not on a schedule. To propose or pull forward a module, see Adding new modules in the README.