Data sources & method

Every number on this site traces back to a game client build. No guessed values.

Where the data comes from

All talent data is extracted from the game clients published by wago.tools DB2 exports:

DatasetProductBuild
WoW Forever (beta)wow_classic_beta1.60.1.70009
Live tree layout (client-pushed)wow_classic_betabeta-20260924-0b7ac8df
Classic Era (baseline)wow_classic_era1.15.9.69722

Tables used: Talent, TalentTab, ChrClasses, SpellName, Spell, SpellEffect, SpellMisc and race/skill tables for upcoming features. Rows are pulled as CSV per build, cached locally, normalized into the JSON served from /data/, and pinned — this page’s numbers change only when we re-run the pipeline against a new build.

Why the layout sync exists: the beta client receives its actual talent trees as login-pushed data, which public DB2 snapshots lag behind — the plain Talent table for this build still shows removed Classic-era talents at their old positions. The live membership and positions (which talents exist, which moved) are therefore synced against a client export of the same build (beta-20260924-0b7ac8df); per-rank text, values and spell IDs keep coming from the DB2 pull, and talents the export adds carry the client's own rank texts and icons. Both sources are the same beta build.

Pipeline: scripts/fetch_talents.py (download + verify), scripts/build_talents.py (normalize), scripts/merge_client_talents.py (sync live layout + classic statuses), scripts/diff_talents.py (raw table diff), scripts/spotcheck.py (raw-CSV ↔ JSON alignment proof). Each run writes SHA-256 manifests for every downloaded table.

Diff methodology

Talents are matched by name within each tree between the live Forever layout and the Classic Era client. A talent is new if no Classic Era talent carries that name, changed if its rank text, values or rank count differ from Classic, moved if it sits in a different tree spot than its Classic position, and identical otherwise. Talents that left a tree entirely are listed per tree as removed. Numeric value changes inside identical wording still count as changes — the calculator's "Compare to Classic" toggle dims only the strictly identical ones.

Known gaps (honest list)

  • Rank 2+ values: the beta DB2 keeps effect rows only for rank-1/base spells. For unchanged spells we fill higher ranks from the Classic Era tables by the same spell ID (840 rank rows this build, flagged valuesFromEra in the JSON) — the detail panel marks those values. Era rows store every base value one below what the client displays (the old WDB convention), so the import adds the +1 back before substituting. Talents added by the layout sync carry the client's own per-rank texts instead.
  • 17 talent names in the beta localization tables are empty holes; we fall back to the Classic Era name for the same spell ID and flag those nodes (nameFromEra) in the JSON. The same fallback resolves 17 rank-1 icons (iconFromEra); every other icon is decoded straight from the beta CASC and self-hosted.
  • Weaponmaster anomaly: three Arms slots (IDs 132/125/123) share the name “Weaponmaster” in the current beta tables — kept as-is, flagged for verification on the next build.
  • Race/class matrix: the skill-line race masks over-report in beta; the racial pages will ship only after the filter is fixed. Druid mask bits point at race IDs 65/66 (Skyborne) — tracked, not yet claimed as fact.

Verification

Spot checks compare each normalized JSON node against the raw CSV row it came from (position, ranks, prerequisite links). The current dataset: 466 talent slots in the live trees — 69 identical / 263 changed / 19 moved / 115 new / 81 removed vs Classic Era.

Feedback & corrections

Found a wrong value? Mail hello@wowforevercalc.com with the talent name and what you see in game — corrections usually land within one build cycle. Change history is on the Updates page.

Legal

This is a fan-made tool, not affiliated with or endorsed by Blizzard Entertainment. World of Warcraft and WoW Forever are trademarks of Blizzard Entertainment, Inc. Game data © Blizzard Entertainment, extracted via wago.tools.