The addon, file by file

Contributor9 min readUpdated

In short

Which addon is which, the modules in load order with each file and its public table, where a hub screen lives, and the generated files.

On this page
  1. The addons
  2. Polestar, module by module
  3. Core
  4. Theme
  5. Nav
  6. Quests
  7. Gear
  8. Maps
  9. QoL
  10. Lookup
  11. Dungeons
  12. UI
  13. Rares
  14. Talents
  15. Where a hub screen lives
  16. Generated files: do not edit

The in-game side of Polestar: Lua 5.1 addons for World of Warcraft: Forever (## Interface: 16001). Each folder here is one addon, installed into the game's Interface/AddOns by node tools/polestar.js install. The contract between the modules is docs/ARCHITECTURE.md; this page says which part is which.

The addons#

FolderWhat it holdsBuilt byIn gitShips
PolestarThe addon: guide engine, waypoint arrow and travel planner, quest markers, gear advice, world map, quality of life, Lookup, Dungeons, Rares, Talents and every window.Hand-written, apart from the generated files listed belowYesyes, in Polestar-<version>.zip
Polestar_GuidesPolestar's own guide pack (pack id guides): every guide under guides/, compiled to Lua. Loads with Polestar.compile, from guides/yes (generated)yes, in Polestar-<version>.zip
Polestar_ItemDBItem stats for the gear advice (Items.lua) and Forever item stats with quest reward choices (Forever.lua). Loaded on demand.itemdb build, then gear buildyes (generated)yes, in Polestar-<version>.zip
Polestar_Names_<locale>One per client language (deDE … zhTW): the quest, NPC, object and item names of Polestar's guides, quest database and Codex in that language (Names.lua), from the community names database and the Era quest database (LICENSE-DATA.txt, Ding's CREDITS.md). Loaded on demand by Core/Names.lua, only the client's own; none on an English client.i18n namesyes (generated)yes, in Polestar-<version>.zip
Polestar_QuestDBThe quest database behind the quest markers, available-quest markers, tooltips and nameplate icons. Loaded on demand.questdb build, from data/foreverno (gitignored, built locally)yes, in Polestar-<version>.zip when built
Polestar_CodexLookup's Codex: items, mounts, pets, recipes, NPCs, rares, quests, zones, dungeons and treasures with where each comes from; also the Dungeons and Rares data. Loaded on demand.codex buildno (gitignored, built locally)no: install copies it when built, pack never packages it
Polestar_NavThe arrow's walking routes: Polestar's walking router (Routing/, started from Shortest Path Forever's by Cillian Berragan, GPL-3.0-or-later, used with his permission, and Polestar's since 2026-10-16; CREDITS.md), pricing each step by its ground class and the player's faction (Routing/Costs.lua), on Polestar's walking maps of Eastern Kingdoms, Kalimdor and Zephras Isle (maps format 2, grown from his format), with the walk's chokepoints. API.lua hands the engine to Polestar as Polestar_NavEngine; it reads only its own maps (PolestarPathData), also with Shortest Path Forever installed. Loaded on demand at login.the router hand-written; nav pack (Polestar's maps and Chokepoints.lua, PACK.json); the maps never edited by handyes (the maps generated)yes, in Polestar-<version>.zip
Polestar_TravelZone crossings for the travel planner, from the optional local crossings file data/local/crossings.json. Loads with Polestar.travel buildno (gitignored, built locally)no: install copies it when built, pack never packages it
Polestar_RecorderAn optional, standalone recorder (no dependency on Polestar): quests, routes, world data and, while Polestar runs, guide progress, into PolestarRecorderDB. Off until turned on (/psrec on). record import reads what it wrote.Hand-writtenYesyes, as its own Polestar_Recorder-<version>.zip; install --recorder

The data addons Polestar can do without: with Polestar_QuestDB, Polestar_Codex or Polestar_ItemDB missing, the features that read them say what is missing instead of failing; without its Polestar_Names_<locale> a client reads the guides' English names; without Polestar_Nav the arrow points straight at each stop. Which inputs may be redistributed, and so which data addons may ship, is in THIRD_PARTY.md.

Polestar, module by module#

Polestar.toc loads eleven XML manifests, one per module, and each manifest lists that module's files. The order below is the load order. The addon's namespace is one table, ns inside the addon and the global Polestar outside it (Core/Init.lua: Polestar = ns), so ns.Engine and Polestar.Engine are the same table. "Public table" is the table a file defines or adds to.

Fields Polestar adds to a game frame (row.psRecord, button.psTip, frame.psSkin) start with ps, so they never clash with the frame's own keys or with fields other addons set on shared frames. They live only on the frame, never in saved variables.

#ModuleManifestPublic tablesWhat it is
1CoreCore/Core.xmlPolestar itself, Compat, Data, Hooks, Guides, Search, Engine, Automation, BindingsNamespace, lifecycle, events, settings, client API wrapper, guide registry, guide engine, quest automation, slash commands
2ThemeTheme/Theme.xmlTheme, Anim, WidgetsColours, fonts, media, tweens and the widget kit every window is built from
3NavNav/Nav.xmlNav, PinsThe navigation target, map and minimap pins for every module, the waypoint arrow, the travel planner
4QuestsQuests/Quests.xmlQuestDBQuest database access, quest markers, quest tooltip lines, quest levels in titles
5GearGear/Gear.xmlItemDB, GearItem stats, stat weights, upgrade advice, gear tooltip lines, reward picks
6MapsMaps/Maps.xmlMapsWorld map without fog of war, zone level ranges, coordinates, dungeon and travel pins, flight timer, instance tracker
7QoLQoL/QoL.xmlQoLQuality of life helpers: action buttons, XP and pace, merchant, reward marks, flight masters, death helper, toggles, requests from other players
8LookupLookup/Lookup.xmlCodex, LookupThe Codex reader, where things come from, generated guides, mount spotting
9DungeonsDungeons/Dungeons.xmlDungeonsA quest journal per dungeon and raid, and the guide that picks up a dungeon's quests
10UIUI/UI.xmlUIThe guide window, the hub and its Guides, Lookup and Dungeons sections, zone art, route choice, welcome, problem report, options
11RaresRares/Rares.xmlRaresRare NPCs and treasures: detection, pins, alerts and the hub's Rares section
12TalentsTalents/Talents.xmlTalentsTalent plans for every class: the hub's Talents section, marks and tooltip lines on the talent frame, a reminder when a point waits

Bindings.xml at the addon root declares the key bindings; it calls into Core/Commands.lua. Fonts are in Media/Fonts, textures in Media/Nav and Media/UI.

Core#

FilePublic tableWhat it does
Init.luaPolestar (ns)The namespace and shared plumbing: lifecycle (OnInit, OnLogin), message bus (On, Off, Fire), game events, settings (Get, Set, RegisterDefaults), per-character state, the /polestar and /pole commands; translations (L, LC; Locales/<locale>.lua loads right after it from Core.xml), game terms in the client's words (StandingName, QualityName, FactionName) and AI_LOCALES
Compat.luaCompatEvery quest, map and unit client call, in one place, so tests can swap it for a fake; also the one copy of the client helpers every module shares: IsSecret and Readable (secret values from combat-restricted APIs), Now (the server clock) and MapName (the client's map name, else the Codex zone's)
Data.luaDataLoads the load-on-demand data addons (Data.Pack(name))
Names.luaNamesQuest, NPC, object and item names in the client's language: the client's own, else its Polestar_Names_<locale>, loaded on demand; nil (English) on an English client
Hooks.luaHooksThe one owner of the tooltip and item-click hooks; modules add lines and handle clicks through it
Guides.luaGuidesThe guide registry: packs, guides and map frames registered at load time, and the queries behind the guide menu (lists, suggestions)
Search.luaSearchOne search over guides and every Codex entity, for the hub's search box and Lookup
Engine.luaEngineThe guide engine: the current step, each goal's status, where the waypoint points; progress recomputed from live client state
ClassTrainers.lua(registers data)Generated: one class trainer per town and class, for the class-training reminder
Automation.luaAutomationAccepts and turns in the quests the guide wants right now
Commands.luaBindingsGuide slash commands and key binding labels

Theme#

FilePublic tableWhat it does
Theme.luaThemeColour schemes, fonts, media paths and frame skins
Anim.luaAnimShort property tweens (fade, slide, pop, fill) on one driver frame
Widgets.luaWidgetsThe widget kit: the Polestar shell, setting controls, rows; also defines the options registry RegisterOptions
FilePublic tableWhat it does
Nav.luaNavThe point being guided to and where it is relative to the player
MapCanvas.luaMapCanvasDrawing on Blizzard's map frames (world map, battlefield map) with Polestar's own frames, the maps only read
Pins.luaPinsMap and minimap icons for every module, in named layers
Arrow.luaNav.arrowThe waypoint arrow: turning, distance, label, arrival ring
Layers.lua(local)Nav's own pins: the target, its area, the points where the travel route changes mode
Bridges.luaNavMirrors the target to other waypoint addons and to the game's own waypoint
Travel.luaNavThe travel planner: walking, flights, boats, hearth, crossings, as a shortest-path search
TravelData.lua(registers data)Generated: the flight network, transports and inns for the planner

Quests#

FilePublic tableWhat it does
QuestDB.luaQuestDBReads Polestar_QuestDB and answers lookups
Tracker.luaQuestDBQuest markers on the map: objectives, turn-ins and quest givers with quests available now
Tooltips.luaQuestDBQuest lines on unit, item and object tooltips; quest icons on nameplates
QuestLevels.lua(local)Quest levels before quest titles wherever the client draws a title without one
Options.luaQuestDB.OPTIONSThe quest settings and the /polestar questdb command

Gear#

FilePublic tableWhat it does
ItemDB.luaItemDBReads Polestar_ItemDB; entries are parsed on first lookup
Weights.luaGearLeveling stat weights per class and spec, and what each class can wear
SpecData.luaGearGenerated: stat weight bands per spec and level, racial gear traits
Gear.luaGearUpgrade advice: an item's score and whether it is an upgrade
Tooltip.luaGearUpgrade lines on item tooltips
Bags.luaGear.BagsThe upgrade arrow on bag items, in the game's bags and Baganator
Rewards.luaGearRanks quest reward choices
Picks.luaGearThe reward to take at a turn-in, for the guide window and tooltips
Options.lua(registers options)The Gear options page

Maps#

FilePublic tableWhat it does
Maps.luaMapsThe module's settings, options page and shared helpers
WorldMap.luaMapsZone level ranges on continent maps and the world map's info bar
ZoneLevels.lua(registers data)Generated: each zone's level range
Reveal.luaMapsThe world map without fog of war
Coords.luaMapsThe player's coordinates under the minimap
MinimapButton.luaMapsThe optional Polestar button on the minimap's edge
Dungeons.luaMapsDungeon entrance pins on the world map
TravelPins.luaMapsFlight master and transport pins
FlightTimer.luaMapsDestination and time left while on a flight
Instances.luaMapsInstance entries against the hourly cap, run stats, raid lockouts

QoL#

FilePublic tableWhat it does
QoL.luaQoLWhat the helpers share: settings, the out-of-combat queue
Data.lua(registers data)Generated: spirit healers and flight masters
Buttons.luaQoL.ButtonsThe quest item, Hearthstone and target buttons
Hearth.luaQoLHearthstone cooldown and bind location
XP.luaQoL.XPXP per hour, time to level, per-level splits
Vendor.luaQoL.VendorSells grey items and repairs at a merchant
Rewards.luaQoL.RewardsMarks on the game's quest reward choices, and an optional automatic pick
Flight.luaQoL.FlightOpens the flight map from the gossip and marks the node the route flies to
Death.luaQoL.DeathAs a ghost: run back or use the nearest Spirit Healer, whichever is faster
Toggles.luaQoL.TogglesSmall questing toggles, each inert while off
Social.luaQoL.SocialSummons, resurrections, invitations and duels
Options.lua(registers options)The Questing and Quality of Life settings

Lookup#

FilePublic tableWhat it does
Codex.luaCodexReads Polestar_Codex, chunk by chunk
Sources.luaLookupWhere an item, mount or pet comes from (and where an NPC, quest, dungeon or treasure is), ranked for this character
Guide.luaLookupOpens the curated guide for an item, or builds one from a ranked source
Spotter.luaLookupWhat mount another player rides; where-from lines on tooltips
Options.lua(registers options)The Lookup settings

Dungeons#

FilePublic tableWhat it does
Dungeons.luaDungeonsA journal page per dungeon and raid: quests, bosses in kill order, entrance
Pickup.luaDungeonsWhich of a dungeon's quests this character can take before the run, and a guide that collects them
Handin.luaDungeonsAfter the run: a guide to where the dungeon's finished quests are turned in, and the follow-ups taken there
Attune.luaDungeonsAttunements and keys: this character's progress through each, and a guide through what is left

UI#

FilePublic tableWhat it does
UI.luaUIWhat the windows share: ui.* defaults, goal text formatting, command routing
ZoneArt.luaUI.ZoneArtA zone's world map painting, drawn from the player's own client
ZoneArtOverlays.lua(registers data)Generated: every world map overlay of every zone map
GuideFrame.luaUI.GuideFrameThe guide window
GearPick.luaUI.GearPickThe reward pick under a turn-in goal
Picker.luaUI.PickerThe hub: its section rail, sidebar and search, and its built-in Guides section (the guide menu); defines UI.RegisterSection
Lookup.luaUI.LookupThe hub's Lookup section
Dungeons.luaUI.DungeonsSectionThe hub's Dungeons section
RouteChoice.luaUI.RouteChoice"Choose your path": one card per zone where a guide offers several next guides
Welcome.luaUI.WelcomeThe welcome a character sees the first time Polestar meets it
Copy.luaUI.ShowCopyA small window holding text to copy
Report.luaUI.Report"Report a problem" (the guide window's bug button, /polestar report): a report on the step on screen to copy for the Polestar Discord; UI.ShowDiscord, the invite on its own
Packs.luaUI.PacksThe Community guides page of the options window
Options.luaUI.OptionsThe options window: pages, tabs, sections, settings search

Rares#

FilePublic tableWhat it does
Rares.luaRaresSettings and the "last seen" history
Detect.luaRares.DetectWhat the client reports about rares and treasures nearby
Pins.luaRaresRares and treasures on the world map and minimap
Toast.luaRares.ToastThe rare alert
Options.lua(registers options)The rares settings
View.luaUI.RaresSectionThe hub's Rares section

Talents#

FilePublic tableWhat it does
Talents.luaTalentsSettings, the chosen plan, plan progress, the snapshot checked against the live tree, the unspent-point reminder
Builds.lua(registers plans)Generated by talents build: the plans and the tree they were checked against
Overlay.luaTalents.OverlayMarks and tooltip lines on the client's talent frame
Options.lua(registers options)The talent settings
View.luaUI.TalentsSectionThe hub's Talents section

Where a hub screen lives#

The hub is the window UI/Picker.lua builds. Guides is its built-in section; every other section registers itself with UI.RegisterSection({ key, label, icon, order, build, render, ... }) from its own file:

SectionOrderFile
Guides10UI/Picker.lua (built in)
Lookup20UI/Lookup.lua
Dungeons30UI/Dungeons.lua
Talents40Talents/View.lua
Rares50Rares/View.lua

Lookup and Dungeons keep their screens in UI/; Rares and Talents keep their screens in their own modules, which works because Rares.xml and Talents.xml load after UI.xml. A new section registers the same way, from a file that loads after UI/Picker.lua.

Generated files: do not edit#

These files are written by a command. Edit the command's inputs and run it again; tools/README.md lists every input and the order to rebuild in.

FileCommand
Polestar/Core/ClassTrainers.luanode tools/polestar.js trainers build
Polestar/Nav/TravelData.luanode tools/polestar.js travel build
Polestar/Gear/SpecData.lua, Polestar/Gear/LICENSE-DATA.txtnode tools/polestar.js gear build
Polestar/Maps/ZoneLevels.luanode tools/polestar.js maps build
Polestar/UI/ZoneArtOverlays.luanode tools/polestar.js maps overlays
Polestar/QoL/Data.luanode tools/polestar.js qol build
Polestar/Media/Nav/*.tga, Polestar/Media/UI/*.tganode tools/polestar.js media
Polestar_Guides/* (TOC, Pack.lua, MapFrames.lua, Guides.lua, LICENSE-DATA.txt)node tools/polestar.js compile
Polestar_ItemDB/Items.luanode tools/polestar.js itemdb build
Polestar_ItemDB/Forever.lua, Polestar_ItemDB/LICENSE-DATA.txtnode tools/polestar.js gear build
Polestar_ItemDB/Polestar_ItemDB.tocitemdb build, then gear build adds Forever.lua to it
Polestar_Names_<locale>/*node tools/polestar.js i18n names
Polestar_QuestDB/* (local)node tools/polestar.js questdb build
Polestar_Codex/* (local)node tools/polestar.js codex build
Polestar_Travel/* (local)node tools/polestar.js travel build

The ## Version line of every TOC is set by node tools/polestar.js version <x.y.z>. The generated Lua files say on their first lines which command wrote them.

Was this page helpful?

Start with, or act

  • PlayersInstall and first run
  • PlayersCommunity guides
  • PlayersFAQ
  • Guide authorsWriting a community guide
  • Guide authorsGuide format cheatsheet
  • ContributorsContributing
  • ActionCopy the AddOns folder (Windows)C:\Program Files (x86)\World of Warcraft\_classic_beta_\Interface\AddOns
  • ActionCopy the AddOns folder (macOS)/Applications/World of Warcraft/_classic_beta_/Interface/AddOns
  • ActionFind an optionEvery setting with its default; type its name here to jump to it.
  • ActionEvery slash command