WoW Forever talent calculator

How we read this

Everything here is a restatement of data shipped in the World of Warcraft game client, pulled from Blizzard's own servers, with the exact build it came from attached. No fan site is ever a source.

Where the data comes from

Blizzard's patch server advertises every build, and the client's database tables sit on Blizzard's public CDN in CASC archives. We pull those tables ourselves and parse them against a pinned version of the community WoWDBDefs column definitions, so the same build always names its columns the same way. We never scrape Wowhead, Icy Veins, or any other site, and we never copy their data.

We name each build by the day we first saw it, "the Sep 30, 2026 build", because nobody remembers a build number. That is the day the build was first pulled here from Blizzard's CDN. It is not a release date: Blizzard publishes none for these clients. When two builds of one client were first seen the same day, each also carries its short build id, "Sep 17, 2026 (69913)". The full version is in every page's provenance line and on the build page.

How a value gets to a page

Every displayed value carries its build, its table, and its row. A change is shown as:

  1. The build is pulled from the CDN and each table's raw file is hashed and recorded.
  2. Rows are normalized, joined into entities, and the exact values are written verbatim, with one flagged exception: a few Forever item numbers the modern client itself computes rather than stores (see computed values).
  3. The build is diffed against the previous one, field by field, values shown side by side.
  4. A build's page records its BuildConfig, CDNConfig, the pinned definitions commit, and per-table row counts and hashes. See the newest one: the Oct 22, 2026 build.

How the words on a page are written

The answer sentence, the verdict, the FAQ answers, the title, the meta description and the headings on every item, spell, recipe, talent, hub, compare and build page are put together by the site's code from the two builds' client rows, by fixed rules, the same for every page of a kind (see the verdict rule). No one writes them page by page, and no language model is called when a page is built.

Tooltip text is the client's own description, its numbers filled from the client's own tables. A value that depends on your character is named in words; one the tables cannot supply is left out, never guessed. The site's own pages (this one, about, the guides and beta) are written by us.

How we check ourselves

Every value comes from Blizzard's own client, pulled from Blizzard's CDN; there is no third-party source or cross-check. The checks we run are our own, and each one blocks a build rather than warning about it:

When we call a change a buff or a nerf

A change is labelled buffed or nerfed only when every field with an unambiguous direction agrees: cast time, power cost, cooldown, range, durability and bag slots. A cheaper, faster or longer-ranged spell is a buff; the reverse is a nerf. A talent is graded by the numbers its rank tooltips print. Anything mixed, or a field whose direction is not obvious, is labelled simply "changed". A spell's cooldown is judged as the tooltip prints it, the larger of the client's two cooldown columns, so a cooldown the client moved from one column to the other is not a buff or a nerf. Effect base points and item stat budgets never decide the label, because the Classic and Forever engines store damage and stats differently and the raw numbers do not compare. Both values are always shown, so you can check the call yourself.

How item changes are read

The two engines store an item's stats differently, so the item diff compares what the tooltip shows, not the storage. A stat is compared by its name and amount; the modern client's internal stat-budget value is kept in the raw field table but never decides that an item changed. Classic Era keeps resistances in a separate array indexed by the client's spell-school enum, while the Forever client stores each one as a stat id; the id for each school was confirmed from items present in both builds (Thunderfury carries Fire and Nature Resistance on both sides), so Era resistances are read as the same stats and the tooltips line up. Holy resistance, which one Era item carries and no cross-build item confirms, is left unnamed until a build confirms it.

A changed item whose only change is the class or subclass the client files it under (Tough Jerky moved from Consumable to Food & Drink) is reclassified, not changed: its page title says Unchanged, the hero names what was re-filed, and hubs count it on its own line. An untouched item that cannot be equipped has no page, so a reclassified one keeps its page but is not indexed and is left out of the sitemap, search and the hub lists, unless it is the one page of a spell it casts. Weapons carry a second damage slot in the Classic layout; its school column is not yet identified in that layout, so the secondary damage line is omitted on both cards rather than guessed. An item's on-use, equip and chance-on-hit lines show the effect spell's own description, resolved from that build's spell tables the way the in-game tooltip does. Rows whose name marks them as Blizzard's scaffolding (Deprecated, DNT, DND, NYI, (OLD), [PH], test, QATest, debug, zzOLD, "Monster - ", stat-test gear such as "90 Epic Warrior Helm" or "Ring of Critical Testing", the "Durability" test set, "Monster Weapon", "OLDMonster - ", "Copy of", QA, Nax PH, [TMP], glued Test, QA or OLD such as "TestBoots", "QAEnchant" or "OLDRecruit's Belt", Test and a digit such as "MHTest02", placeholder anywhere, or a name that is just "Template Item" or "Unused"), zones the client itself marks unused or as a placeholder ("UNUSED Stratholme", "***On Map Dungeon***", a "Prototype" area), and zones the client places on its own Development Land or test maps (Programmer Isle, the Jeff quadrants), keep a page but are noindex and left out of hubs, search, the sitemap and the zone map index; each hub counts them in one footnote. One that the two builds did not change has no page at all.

Computed values (Forever item stats, talent ranks)

Classic Era ships an item's final numbers, so we show them verbatim. The modern Forever client does not: it stores each item's stat allocation, weapon kind and armor class, and computes the +N stat, weapon damage and armor the tooltip shows at runtime from its own item-budget tables (RandPropPoints, ItemDamage*, ItemArmor*). To show the real numbers we run the client's own formula over the client's own tables. This is the only place the site computes a value; it is flagged as computed wherever it appears, and the verbatim allocation is kept beside it.

We gate the formula against Blizzard's own other engine. For every item unchanged between the two builds we compute the Forever number and compare it with Era's shipped number. On the newest Forever build (Oct 22, 2026), checked against the Oct 27, 2026 Classic Era build: stats match 99.5%, weapon damage 99.3%, armor 99.8%. The remaining fraction is items Blizzard actually rebudgeted, which the diff shows as changes; a mismatch is investigated, never averaged away. Every Forever build is re-checked against its Classic Era baseline on every site build, and a category below 98%, or one that could not be checked, blocks the build.

Talent ranks are not computed any more. The Forever client keeps its talent tree in the Trait tables: one spell per talent, and a curve (TraitDefinitionEffectPoints, CurvePoint) that sets each effect's value at every rank. The talent calculator and every talent page render the client's own description template over that curve value, rank by rank, beside Classic Era's one spell per rank. A talent is "changed" when the numbers its tooltip shows differ at any rank (or when it moved, lost ranks or changed prerequisites), which is the same comparison on the calculator, the talent page and the hubs.

Withheld rows: what the client lists but will not let us read

"Removed" is a claim about the client, so we make it only when the client gives no other account of a row. Two accounts it can give, both read from Blizzard's own files, make a row withheld instead:

A withheld entity keeps its page so its URL is stable for the build that reads it again, but the page is kept out of the search index, the sitemap and every ledger: it can state what the client withholds and nothing about whether the entity changed. Hubs, the home page and each compare page carry the count.

A Classic Era spell the Forever client ships no data for, but that a spell it does ship still grants by id (a rune's "Gain the ability" effect names it), is counted as removed in the totals, yet its page never says so: it says the client still grants the spell and ships no data for it, is kept out of the search index, the sitemap and the spells list, and the spells hub carries the count. A removed Classic Era spell that is not granted itself but shares its name and class with one that is (5 of them, Beacon of Light among them) reads the same way: its page says the client ships no data for it and still grants a same-name spell of its class, names that spell's ID, and never says the client grants this one.

A profession recipe is named by the spell it teaches, so a recipe row whose spell the newest build ships no name for is read the same careful way. When that spell sits in an encrypted section, the recipe is withheld. When the name it last had (in Classic Era, else in the last Forever build that named it) is now a recipe of another profession, its old address forwards there: Classic Era's Alchemy healing potions are First Aid recipes in Forever. Any other such row keeps a page under its last name, kept out of the index, the sitemap and the profession ledgers.

Folded talent ranks. Classic Era ships each rank of a talent as its own spell. WoW Forever ships one spell per talent and reads each rank's values from the talent's rank curve, so a Classic Era rank spell with no Forever row of its own is not removed: when the Forever talent still lists it, its page reads it as that rank of the talent's one spell and compares the two clients' text at that rank. Its Forever tooltip is the talent's one spell read at that rank from the curve of the talent's own trait definition, the same curve its rank text is read from, so every tooltip line compares at that rank, even when another trait definition names the same spell with a different curve. The build totals still count it as a row the newer table lacks.

Unchanged pages, and the columns a player never sees

Every player spell and every equippable item in the newest Forever build has a page, changed or not (since 2026-09-18). An unchanged page shows one tooltip and says the client ships the same tooltip as Classic Era. The hubs still list only what changed: if a row is in a hub list, it changed. A passive talent's rank spells that carry the talent's own name keep their page, but it is noindex and left out of search and the spells list: they are read on the talent's page, the one page for that name.

Two kinds of change set are the client's bookkeeping, not a change a player can see, and read as unchanged on the tooltip while the raw field diff keeps them. An item the Forever client only re-filed (its class or subclass, its stack size, its vendor buy price or an item level moving between the two "no level" values 0 and 1) is badged "reclassified". A spell whose only differing columns are the engine's internal level columns (SpellLevels.BaseLevel, SpellLevel, MaxLevel, which the spellbook tooltip never shows and which the Forever engine leaves at zero on thousands of Era spells) or a duration index that points at the same duration is badged "internal". So is a spell whose cooldown the client only moved between its two cooldown columns (SpellCooldowns.RecoveryTime and CategoryRecoveryTime): the tooltip prints the larger of the two, and when that number is the same on both sides nothing a player sees moved. So is a talent whose only change is its column in the tree grid: it moved sideways in the same row, with the same tree, row, requirements and rank tooltips. So is an enchant whose only change is its name, where the Forever client stores the name as a template whose number it fills in from the enchant's own values, and the filled-in name reads exactly as in Classic Era ("Armor +10" on both sides). A third kind is a real change the tooltip cannot show: a spell whose effect data moved (an aura or effect type, a miscValue, an added effect, or a value on an effect no tooltip line prints) while every line both tooltips print reads the same. It is badged "same tooltip", its page says what the client changed behind the tooltip and that the client does not say what that does in play, and it never says "unchanged". A fourth kind is a recipe, pattern, plans, formula or tome item the Forever client re-encoded: Classic Era kept its Use text on a teaching spell, and Forever stores that same text on the item, word for word (case and spacing aside), and teaches the same spell through a spell named Learning. Both builds' spell tables prove the move, the page says the Use text is the same, and it is badged "same text". All four are counted apart on the hubs, the compare pages and the build pages, and the build checks that every diff's count matches its rows.

What we deliberately do not do

Synced Oct 27, 2026. Found something wrong? See corrections.