Architecture

Contributor3 min readUpdated

In short

The contract between the addon's modules, the compiled guide data, the toolchain and the tests.

On this page
  1. Overview
  2. Globals

Polestar is a leveling-guide system for World of Warcraft: Forever (client 1.60.1, ## Interface: 16001, install folder _classic_beta_ during beta). This file is the contract between modules: the code follows it, and a change to a contract changes this file with it.

Reference material, checked out locally (gitignored):

  • .ref/wow-ui-source-forever/ — Blizzard's Forever UI source (Gethe/wow-ui-source, branch forever). Interface/AddOns/Blizzard_APIDocumentationGenerated/*.lua declares every C API function and event with argument types. Verify every client API you call against it; a retail or Era assumption is not evidence.
  • The live client's AddOns folder, as found by tools/lib/addons.js ($WOW_FOREVER_ADDONS, then the detected clients: <client>/_classic_beta_/Interface/AddOns/; read-only for reference; EllesmereUI's SKINNING_API.md lives there).

Overview#

Polestar is a set of addons, a folder of guides and the Node tools that turn one into the other. The addons:

AddonWhat it holdsBuilt by (node tools/polestar.js …)In gitShips
Polestar (addon/Polestar/)The addon: engine, navigation, quests, gear, maps, quality of life, Lookup, Dungeons, Rares and every windowhand-written, plus a few generated data filesYesYes
Polestar_Guides (addon/Polestar_Guides/)Polestar's own pack (pack id guides)compile, from guides/yes (generated)Yes
community addonsAddons by other authors (X-Polestar-Pack in their TOC; docs/PACKS.md, docs/PACK_FORMAT.md)the same compiler, from their own repositoriesin their own repositoriesby their authors
Polestar_ItemDB (addon/Polestar_ItemDB/)Item stats and Forever reward choices for the gear advice; loaded on demanditemdb build (Items.lua), then gear build (Forever.lua)yes (generated)Yes
Polestar_Names_<locale> (addon/Polestar_Names_deDE/ … zhTW/)Quest, NPC, object and item names in one client language, for Polestar.Names; loaded on demand, only the client's own, never in Englishi18n names, from the community names database (pinned) and the Era quest databaseyes (generated)Yes
Polestar_QuestDB (addon/Polestar_QuestDB/)The quest database behind quest markers and tooltips; loaded on demandquestdb buildno (local, gitignored)yes, when built
Polestar_Codex (addon/Polestar_Codex/)Lookup's Codex, and the Dungeons and Rares data; loaded on demandcodex build, from release-safe inputs (--local-extras builds a local-only one)no (generated, gitignored)yes, always: pack fails without it
Polestar_Nav (addon/Polestar_Nav/)Polestar's walking router (started from Shortest Path Forever v1.16.0 by Cillian Berragan, GPL-3.0-or-later; Polestar's since 2026-10-16) with Polestar's walking maps of Eastern Kingdoms, Kalimdor and Zephras Isle (maps format 2, grown from his format) and the walk's chokepoints, for the arrow's walking routes; loaded on demand at login, never while an installed Shortest Path Forever guides (the target handed to it, or a journey of its own running; Nav, "In-game walking routes (Polestar_Nav)", "Hand-off to Shortest Path Forever")the router hand-written (Routing/); nav pack (the maps, PACK.json, from the navigation grid and the ground layers)Yesyes, always
Polestar_Travel (addon/Polestar_Travel/)Zone crossings for the travel planner, from an optional local crossings file; loaded with Polestartravel buildno (local, gitignored)no, never packaged (Nav, "Travel planner and zone crossings")
Polestar_Recorder (addon/Polestar_Recorder/)The optional standalone recorder of play sessions, for authoringhand-writtenYesyes, as its own zip
Read the rest of this section283 words

A guide goes from a .guide file to the game in four steps. An author writes it in a pack (guides/ for Polestar's own). lint and compile parse it and fill in names, places and coordinates from the reference data in data/forever. compile writes the result as Lua into the pack's addon folder (addon/Polestar_Guides for ours). install copies that folder into the game, where the pack registers its guides with Core/Guides.lua at load time and the Engine plays them ("Guide data" and "Engine" below).

Where to look next: docs/README.md maps every document; addon/README.md lists every addon file with its public table; tools/README.md lists the commands, every generated file and the rebuild order; tests/README.md describes the test layers and the fake client.

addon/Polestar/Polestar.toc loads eleven XML manifests in this order. Each module's manifest lists that module's files. The module sections below follow this order.

text
Core\Core.xml           Core: namespace, lifecycle, events, settings, Compat, guide registry, Engine, automation, commands
Theme\Theme.xml         Theme + widget kit
Nav\Nav.xml             Waypoint arrow, map/minimap pins, travel planner, TomTom bridge
Quests\Quests.xml       Quest database access, markers, tooltips, quest levels
Gear\Gear.xml           Item stats, stat weights, upgrade tooltips, reward picks
Maps\Maps.xml           World map: no fog of war, coordinates, zone levels, dungeon and travel pins, instances
QoL\QoL.xml             Quality-of-life helpers
Lookup\Lookup.xml       Codex, sources, generated guides, mount spotting
Dungeons\Dungeons.xml   Dungeon quest journal data
UI\UI.xml               Guide window, guide menu, zone art, Lookup and Dungeons views, route choice, options
Rares\Rares.xml         Rare NPCs and treasures: detection, pins, alerts, view
Talents\Talents.xml     Talent plans: the hub section, talent frame marks, reminder

Manifests use only <Script file="..."/> and <Include file="..."/> (paths relative to the XML file, backslashes allowed). The test harness parses the TOC and these manifests, so tests always load exactly what the client loads.

Globals#

Only these globals may be assigned anywhere under addon/ (enforced by tests/syntax.test.js via luac -l):

Polestar, PolestarDB, PolestarCharDB, PolestarRecorderDB, SLASH_POLESTAR<n>, SLASH_POLESTARREC<n>, SLASH_POLESTARWAY<n> (/way, claimed only while no addon has it), BINDING_HEADER_POLESTAR, BINDING_NAME_POLESTAR_*, in Polestar_Nav only Polestar_NavEngine (the engine's handoff), PolestarPathData (the walking maps) and, in Routing/Costs.lua only, Polestar_NavCosts (the router's ground-class costs), and in Nav/Journey.lua only TomTom (its stand-in, set while TomTom is not installed and cleared when it stands down; "Nav API").

Everything else is local or lives on the Polestar table. Named frames must be prefixed Polestar.

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