v3.2.6
What's new
WowSimsExporter
v3.2.6 (2026-10-29)
Full Changelog Previous Releases
chore: sync Forever talent table with wowsims/forever (#78)
Co-authored-by: generalwrex 1731139+generalwrex@users.noreply.github.comMerge pull request #71 from dodoels/feat/i18n-zhcn
Add localization support (enUS + zhCN)Offer wowsimscn.com next to the international site on zhCN
On Forever with a zhCN client, the main tab shows two copyable links:
the international sim (wowsims.com/forever) and the China mirror
(wowsimscn.com). The mirror only serves its root, so no spec path is
appended. Other clients/locales are unchanged.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comAdd localization support with enUS and zhCN
Introduce a lightweight locale system (Locales/Locale.lua) with no new
library dependency. All user-facing strings in the UI, options, chat
messages and saved-data manager now go through Env.L, keyed by their
English text, with a full Simplified Chinese (zhCN) translation.
Unsupported-class message now lists localized class names.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comMerge pull request #77 from wowsims/feat/forever-talent-marker
feat: export the game flavor with each characterfeat: export the game flavor instead of a talent tree marker
Replace the Forever-only "talentTrees" key with "flavor", set by every flavor:
era, sod, tbc, wrath, cata, mists or forever. A sim can now tell which client
an export came from. The Forever sim uses it to apply talent strings only from
Forever exports. The existing "version" key is the addon release, the same on
every client, so it can't do this. The sod, tbc, wotlk, cata and mop addon
importers read top-level keys one by one, so the new key is ignored there.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comfeat: mark Forever talent strings as built from the Forever sim's trees
Forever exports now carry "talentTrees": "forever". The Forever sim drops
imported talent strings because an Era/SoD export has the same shape but
indexes different trees; the marker lets it apply only strings this flavor
built from its own tree order. Other flavors don't set the field, so their
exports are unchanged.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comMerge pull request #76 from wowsims/fix/forever-guards
fix: harden Forever talents and version guards found by comparing with forever-betatest: load files like the real client and cover missing Forever talent APIs
The snapshot harness now loads a file when the client recognises none of its
AllowLoadGameType values, as the game does. The classic clients don't know
camelot, so their snapshots load the Forever files and exercise the IS_FOREVER
guard; removing it now fails all six classic snapshots. The Forever snapshot
gains exports through C_ClassTalents and with no talent API at all.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comfix: guard the remaining version-specific files by flavor
ClassicTrees.lua, Glyphs.lua and Cata/Reforge.lua relied only on their
AllowLoadGameType line. A client that recognises none of the listed game types
loads the file anyway, and ClassicTrees.lua calls GetNumTalentTabs on
SPELLS_CHANGED. Return early like the other files under Flavors/.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comfix: keep the Forever export working when talents can't be read
GetForeverTalentRanks called C_SpecializationInfo.GetCombatConfigIDForSpecGroup
unguarded. Only the test mock defines it, so on a client without it the spec
lookup raised an error and /wse export produced no gear. Read the config through
C_ClassTalents.GetActiveConfigID first, fall back to the spec group lookup, and
return nil (empty talents) when neither exists.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comMerge pull request #73 from wowsims/feat/wow-forever-support
feat: add WoW Forever supportMerge pull request #75 from wowsims/refactor/flavor-modules
refactor: describe each game version as a registered flavorci: run the export snapshots before packaging a release
A tag pushed on a commit whose export differs from tools/test/snapshots
now fails the release job before the packager uploads anything.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comfix: make MoP inspect profession guessing handle gaps and conflicts
Inspecting a MoP player with no shared profession data guesses their
professions from gear. It had three bugs, all predating this PR:- An empty ring, hand, wrist, legs, back or shoulder slot crashed the
inspect export (method call on a nil item). - Jewelcrafting was never detected: the gem check compared the item's
whole gem table with gem IDs, and ipairs stopped at the first empty
slot. It now checks each gem of every equipped item. - More than two guessed professions called error(), aborting the export.
It now returns no professions, since at least one guess is wrong.
The snapshot test gains two inspect scenarios: "gaps" (empty head and
ring slots, a Jewelcrafting gem; guesses Enchanting and Jewelcrafting)
and "conflict" (three guesses; exports none). The existing inspect
export is unchanged.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- An empty ring, hand, wrist, legs, back or shoulder slot crashed the
test: cover MoP's fourth druid specialization
The spec matrix only tried specializations 1-3, so the MoP restoration
druid entry (spec ID 105) was never checked. On MoP the matrix now tries
every specialization a class has; the snapshot gains one DRUID 4 line.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comrefactor: drop dead MoP spec checks and the copied slot table
- MoP matches specs by specialization ID, so the 34 AddSpec check
functions were never called (and the druid ones were misleading).
They now pass nil, and AddSpec documents checkFunc as optional. - EquipmentSpec:GetItemInSlot(slotId) looks items up from EquipmentSpec's
own layout, replacing the hard-coded slot table copied into
Flavors/Mists/Items.lua.
Export snapshots are unchanged.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- MoP matches specs by specialization ID, so the 34 AddSpec check
test: keep the Forever snapshot stable across talent table syncs
The fake Forever client hard-coded the first talent ID of each tree,
copied from the generated table. When the daily sync regenerated that
table, the Forever snapshot would stop matching, and since the sync PR is
opened and merged with the workflow token, no Tests run would catch it
before the next unrelated PR failed.- snapshots.js reads the first-of-tree IDs from the generated block in
Flavors/Forever/Talents.lua and passes them to the mock - The Forever talents workflow runs the snapshot test before it opens and
merges the sync PR
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- snapshots.js reads the first-of-tree IDs from the generated block in
chore: update the Addon Studio project file for the new layout
The .wowproj listed files that no longer exist (UI.lua under
ExportStructures, per-version TOCs, Shared.lua, extras.lua, Misc.lua) and
missed most of the addon. It now lists the TOC, embeds.xml and every file
the TOC loads, in load order, plus the AceComm, AceHook and LibParse
libraries embeds.xml loads and folders for the new directories.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comfix: correct Cata restoration and holy spec entries
- Restoration shaman was reported as spec "enhancement"
- Restoration druid was reported as "balance" and linked to
druid/Restoration; the sim's page is druid/restoration - Holy paladin was reported as "protection"
Only these three lines of the Cata snapshot change.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
refactor: describe each game version as a registered flavor
Each Flavors/<Version>/Flavor.lua now calls Env.RegisterFlavor with
everything that differs for that version: sim URL, classes, item fields,
extra events, character pane button anchor, inspect support, and hooks for
talents, spec detection, glyphs, professions, the bag export filter and
per-item extras (runes, reforges, upgrades, tinkers). Shared code reads
Env.Flavor instead of checking which client it runs on.- Split Core/Shared.lua into Core/{Flavor,Util,Tooltip,Professions,
Items,Spec}.lua, and move version-specific helpers next to their flavor
(SoD runes, MoP upgrades/tinkers/profession inference, Forever talents) - Move ExportStructures/Misc.lua into Core/Professions.lua,
Talents/ClassicTrees.lua, Talents/Glyphs.lua and Flavors/Mists/Talents.lua - ItemSpec, EquipmentSpec, Character, UI and WowSimsExporter no longer
branch on the game version - Document the structure and the snapshot test in the README
Export snapshots for all seven game versions are unchanged.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- Split Core/Shared.lua into Core/{Flavor,Util,Tooltip,Professions,
refactor: move files into Core, Talents and Flavors folders
Pure renames, no content changes, so history follows the code:- Shared.lua -> Core/Shared.lua
- extras.lua -> Talents/ClassicTrees.lua
- Conditional_<Version>.lua -> Flavors/<Version>/Flavor.lua
- CataReforgeDetection.lua -> Flavors/Cata/Reforge.lua
The TOC load order is unchanged; export snapshots are unchanged.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
test: snapshot every game version's export against a fake client
tools/test/snapshots.js loads the addon's files in TOC order (honouring
AllowLoadGameType) into fengari with a fake client per game version
(tools/test/wow_mock.lua), runs login, player export, bag export, MoP
inspect and a class x talent tree spec matrix, and compares the result
with tools/test/snapshots/<flavor>.txt. Each fake client only defines the
APIs that client has. A new Tests workflow runs it on every PR.
Moves the Forever talent test into the same tools/test package.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comMerge remote-tracking branch 'origin/main' into feat/wow-forever-support
Conflicts:
WowSimsExporter.toc
Merge pull request #74 from wowsims/chore/update-interface-versions
chore: add current Era, TBC Anniversary and Titan interface numberschore: add current Era, TBC Anniversary and Titan interface numbers
Live builds per Blizzard's version service: Classic Era 1.15.9 (11509),
TBC Anniversary 2.5.6 (20506), Titan Reforged 3.80.2 (38002). Older
numbers are kept for clients that haven't updated.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comci: merge Forever talent syncs and watch client interface numbers
- Forever talents workflow merges its own sync PR once the preset test
has passed on the regenerated table; releases still need a tag - Add tools/update_interface_versions.py and a daily Interface versions
workflow: reads each supported flavor's live build from Blizzard's
version service and opens a PR (for review) adding new interface
numbers to the TOC
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- Forever talents workflow merges its own sync PR once the preset test
test: check Forever talent export against wowsims/forever presets
- Add tools/forever_talents_test: replays every talent string from the
sim's spec presets and saved builds, plus a maxed build per class,
through Conditional_Forever.lua under fengari with mocked C_Traits data - Record the source wowsims/forever commit in the generated table, and
leave the file untouched when the table itself hasn't changed - Add a Forever talents workflow: runs the test on PRs, and daily
regenerates the table and opens a PR when the sim's trees change
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- Add tools/forever_talents_test: replays every talent string from the
fix: address review findings for WoW Forever support
- Debounce auto-save so the save runs after the last change event, with
up-to-date talent data, instead of dropping events within the throttle - Skip uncached items in the bag export filter instead of erroring on a
nil item level - Count talent ranks granted without spending points (currentRank)
- Fail the talent generator if a class doesn't have exactly three trees
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- Debounce auto-save so the save runs after the last change event, with
feat: add WoW Forever support
WoW Forever runs on the retail client, so the addon did not load there and
relied on classic-only APIs. wowsims.com/forever's addon importer already
links to this addon and accepts the Classic Era export format.- Detect Forever via WOW_PROJECT_CAMELOT and add interface 16001
- Add Conditional_Forever.lua: sim link, classes, spec detection, and a
C_Traits-based talent export in the sim's positional string format - Generate the talent definition ID table from wowsims/forever trees with
tools/gen_forever_talents.py - Use GetProfessions/GetProfessionInfo and C_Item fallbacks on Forever
- Export random_suffix items, no glyphs, and register trait events
- Skip events the client doesn't know; fall back to Settings.OpenToCategory
- Move table.contains and TableMaxValIndex into Shared.lua
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Merge pull request #72 from wowsims/fix/disable-wowi-release
ci: disable WoWInterface upload and bump checkout to v4ci: disable WoWInterface upload and bump checkout to v4
Every release since v3.2.0 has failed because the WoWInterface upload
errors with curl HTTP/2 PROTOCOL_ERROR (likely a stale WI_API_KEY), which
makes the packager exit 1 even though CurseForge, Wago and GitHub uploads
succeed. Comment out WOWI_API_TOKEN until the token is regenerated.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.comMerge pull request #69 from timfennis/fix/mop-inspect-button
fix: restore MoP inspect buttonMerge pull request #67 from kwyatt/fix/tbc-sim-links
TBC: Fix: include class name in wowsims.com linksfix: restore MoP inspect button
fix: include class name in TBC wowsims.com links
Env.AddSpec URL suffixes for TBC were missing the class segment, so
generated links (e.g. shaman elemental) pointed to
wowsims.com/tbc/elemental instead of wowsims.com/tbc/shaman/elemental.
Prepend the class to every spec's URL suffix.Merge pull request #66 from MR-Valdez/main
fix TBC button location, tied to pvp char tab - THANK YOU!fix TBC button location, tied to pvp char tab
new checkbox text was cutoff, fixed width of checkbox
put button back to og style and place
Added Show Character Pane Button option
adjusted placement and size of open button
changed open button to be the wowsims icon.Merge pull request #65 from Adal4/main
Added category for 5.5.4Added category for 5.5.4
The PTR shows us that MoP 5.5.4 will have the same addon categorization system as Retail.
Source:
https://warcraft.wiki.gg/wiki/TOC\_format#Category
https://warcraft.wiki.gg/wiki/Addon\_Categories#Development\_ToolsMerge pull request #63 from xeropresence/unusedfix
Update CreateEquipmentSpec to exclude versionUpdate CreateEquipmentSpec to exclude version
Remove version from EquipmentSpec initialization.It is included in the player details section
Merge pull request #61 from wowsims/fix-release
Update Wago project IDreadded wowinterface
changed wago project id and deleted wowinterface release
Merge pull request #58 from wowsims/fix-release
Fix release actionMerge branch 'poly/tbc' into fix-release
update release action with the correct token variable name
Merge pull request #57 from wowsims/poly/tbc
TBC supportUpdate Shared.lua
tbc doesnt have glyphs
tbc support
Merge pull request #56 from Adal4/main
TOC unificationTOC unification
Merge pull request #55 from Poli93/patch-1
fix typotypo
Merge pull request #52 from Polynomix/korean-locale
synapse korean localemore url ref changes
changed site url
changed synapse parsing for korean locale
toc bump
Merge pull request #50 from Bezerck/main
Add id to export jsononly call unitguid once
Update Character.lua to add Id
Merge pull request #1 from wowsims/main
merge latest changesMerge pull request #48 from Polynomix/main
Infer professions from gear when the target does not have the addonInfer professions from gear when the target does not have the addon
Merge pull request #46 from Polynomix/main
Fix profession field missing when the inspected target does not have the addonfix profession field missing when the inspected target does not have the addon
Merge pull request #45 from Polynomix/main
Added missing librairiesadded missing librairies
Merge pull request #41 from Polynomix/main
Inspect exportclean up
Merge remote-tracking branch 'wowsims/main'
Merge pull request #43 from Adal4/main
Bump interface versionsasync inspect professions
spec detection
revert hide bag button
Bump interface versions
fix separators being 2 characters sometimes
Merge pull request #42 from wowsims/kg/era-support
Support classic erasupport classic era
Fixed inspecting party and raid members
hide export bag button
Added button to the inspect frame to export the inspected target
Merge pull request #40 from Polynomix/main
Fixed a lua error due to some information not being available in the …Fixed a lua error due to some information not being available in the early stage of the game loading
Merge pull request #38 from wowsims/profession-names
Use C_TradeSkillUI for localized profession names (Fixes #37)Use C_TradeSkillUI for localized profession names (Fixes #37)
Merge pull request #36 from wowsims/profession-names
Use GlobalStrings for localized profession namesUse GlobalStrings for localized profession names
Merge pull request #34 from wowsims/local-saves
add local saves support to be used by external appsadd local saves support to be used by external apps
Added entry to dropdown menu, remove export bag button
Added inspect button on inspected characters frame
Merge pull request #32 from Polynomix/inspect
inspect export featuresinspect export features
Working on being able to get inspected characters information, this branch will be deleted upon completion
Thanks to Poly for updating the addon to properly work and load, thank you very much!
removed prime from glyph entry for mop
adjusted author names for credits, if i missed anyone let me know!Merge pull request #31 from Polynomix/main
Updated for MoP classic by Polynomixadd pandaren faction detetction
pr feedback
pr feedback
added hand tinker parsing + fix itemSpec field name
added upgrade level tooltip parsing
Updated for MoP classic
Update release.yml
Merge pull request #29 from wowsims/sod-phase-7
Allow getting shoulder "rune" spellRemove version from title since it causes issues with packaging
Bump interface
Merge branch 'Adal4-main'
Export Soul Engraving spell IDs from shoulder items in bags
Add BigWigs packager release folder to gitignore
Allow getting shoulder "rune" spell
Bump interface
Bump interface
Added WowUp and WowInterface bigwigs packager workflow support
Merge pull request #26 from wowsims/fix/button-alignment-non-cata
Fix button alignment & LUA errorFix button alignment
Merge pull request #25 from wowsims/reforge_improvements
Reforge improvementsIgnore gems in reforge detection (Fixes #16)
Load dummy enchant item on login, fixes incorrect reforges on cold boot
Merge pull request #22 from wowsims/feature/add-addon-version-to-export
Add addon version to export optionsMerge pull request #23 from wowsims/feature/add-character-panel-button
Add button on character panelFix button positioning
Add button on character panel
Add close on Escape
Remove floating version v
Add addon version to export options
Merge pull request #21 from wowsims/kg/ring-rune-support
Remap itemEnchantmentID to the corresponding Spell ID for ring runesremap itemEnchantmentID to the corresponding Spell ID for ring runes
Merge pull request #19 from wowsims/hotfix/nullable-gems
[FIX] Nullable gems in previous indexFix comment typo
remove isGem function
Change to loop
Fill previous gems
Merge pull request #18 from wowsims/tharre/fix-mage-talent-export
Fix mage talent exports being brokenFix mage talent exports being broken
There's a "talent" at index 21 that doesn't exist, but GetNumTalents()
considers there to be 22 talents, because there's a valid index after it
at 22.
Fixes #17.Merge pull request #15 from wowsims/sockets
Fix socket bonus + non-english stat matching in reforge detectionRemove duplicate v from toc
Don't load embedded deps in development
Match long-form stats in locales where number appears in the middle
Update README.md
Merge pull request #13 from wowsims/packager
Setup BigWigs packagerMerge pull request #12 from raethkcj/main
Ignore enchants when calculating current statsSetup BigWigs packager
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include

