For tool makers
- 212 KBtalent trees
- 467talents
- 1.60.1.70009build
- 2026-09-24last refreshed
- CC BY 4.0licence
What you can use
From the beta buildFour things, and they are the four a tool maker actually asks for: what every player can already see in the game’s own talent panel, and what it takes to draw a build, link to one and say where it came from. They are generated with the site, from the build every page is built from, so a number here and the same number on the page it came from are one number.
- The talent trees of all nine classes, as one file.
- The build code format, written out, with two worked examples and a decoder you can paste anywhere.
- An embed that puts a build on your page with a picture and a link back.
- The figures this site counted itself, each with the sentence that says how.
Use them, change them, sell what you make with them. One line of credit is the whole of what we ask, and it is right below.
The credit line we ask for
One line, with the address in it. In a spreadsheet it is a cell, in a video it is a line in the description, in a bot it is the footer of the message.
Talent trees and statistics from WoW Forever, https://wow-forever.gg (CC BY 4.0)
This compilation and our own statistics are licensed CC BY 4.0. World of Warcraft names, icons and game content belong to Blizzard Entertainment, Inc. and are not ours to license. Published as is, with no warranty.
You can only license what you own, so that sentence is narrow on purpose. Ours is the selection, the arrangement, the field names, this page and the figures we counted. Not ours, and no licence of ours can reach them: every name, every sentence of game text, every icon and every picture. The full terms are Creative Commons Attribution 4.0. This is a plain note about what we are handing you and not legal advice; if you are doing something where the difference matters, ask a lawyer rather than a fan site.
If you quote a number, name the build it came from: values change between builds, and the build is the first key of every file here.
Talent trees file
467 talentsEvery talent of all nine classes in build 1.60.1.70009: the tree it sits in, its row and column, how many ranks it takes, how many points the tree needs first, what it needs above it, the ability and icon it wears, and the text of each rank exactly as the calculator prints it in a tooltip.
The talents of a tree are listed in build code order, so position N in the list is digit N in that tree’s part of a code. That ordering is the one promise this file makes to a decoder, and it is what the next section is built on.
talents.json 212 KB, 33 KB over the wire
| Field | What it is |
|---|---|
build, generated, site | The game build the talents come from, the day the data behind the file was last refreshed, and this page, where every field is written down. |
licence, attribution | The licence sentence, and the exact line to show. Copy the second one as it stands. |
points_at_level_60 | How many talent points a character has at the level cap. |
levels_that_grant_a_point | The levels at which a point is given, in order. |
classes[].trees[].id | The tree id. This is the number before the dot in a build code. |
trees[].rows, .columns | The size of the grid the calculator draws for that tree. |
talents[] | In build code order: position N in this list is digit N in that tree’s part of a code. |
talents[].row, .column | Zero based position in the grid, top left first. |
talents[].max_ranks | How many points the talent takes. 0 means it cannot be bought in this build. |
talents[].points_required | Points that must already be spent in that tree before it can be taken. |
talents[].requires | Talent ids that must be at full rank first. Where there is more than one, any one of them is enough. Empty for most. |
talents[].spell_id, .icon_id | The ability behind the talent, and the icon it wears. Both are the ids this site already shows in its own addresses. |
talents[].description | The text of each rank, exactly as the calculator prints it in a tooltip. One entry when every rank reads alike, and absent when there is none. |
talents[].name = null | A position we keep but do not describe, so the digits still line up. There are none in this build. |
Not in this file. Costs, cooldowns and anything a talent record carries beyond the tree. Those belong to the ability, they move faster than anything here, and a stale copy of them in somebody’s spreadsheet is worse than no copy.
Build code format
A build lives in the link. The calculator keeps it in the address after the #, and a build this
site holds a page for keeps the same code in the path.
https://wow-forever.gg/talents/<class>/#<code>opens the calculator on that build.https://wow-forever.gg/talents/<class>/b/<code>/is the build’s own page, for the builds this site holds.
How a code is spelled
v2_names the layout. What follows it is<ranks>, and after a second underscore an optional<order>.<ranks>is one segment per tree that has points in it, joined with-. Trees with no points are left out.- A segment is
<tree id>.<digits>. The tree id is theidof a tree in talents.json. -
<digits>is one base 32 digit per talent of that tree, in the order that file lists them. The digit is the rank spent, from the alphabet0123456789abcdefghijklmnopqrstuv. Trailing zeros are trimmed, so a segment is often shorter than the tree, and a missing digit means no points. -
<order>is the click order, oldest point first: one character per point naming the talent’s position across every tree of the class, in the 62 character alphabet0-9a-zA-Z. It is written only when the class has 62 talents or fewer and the reader clicked the order themselves, and it is advisory: the ranks decide what the build is. - Only
0-9 a-z A-Z . _ -ever appear in a code, which is why it can also be a path segment.
What stays true
A v2 code keeps opening. The version marker is the whole point of the marker: if the layout ever
changes, the new one takes a new prefix, and every link already shared goes on opening the build it was
shared for. Codes written before the marker existed carry no prefix at all, and those still open too; the
calculator rewrites them as v2 on the way in. Nothing else about a code is promised: which
builds have a page of their own changes with what people make.
Worked example 1: Warrior, 8 of 51 points
v2_26.35
26 is the Arms tree. 35 is one digit per
talent in it, spending 8 points.
| Position | Digit | Talent | Rank |
|---|---|---|---|
| 1 | 3 | Improved Heroic Strike | 3 of 3 |
| 2 | 5 | Deflection | 5 of 5 |
Opens at /talents/warrior/#v2_26.35
Worked example 2: Mage, 51 of 51 points
v2_237.25522522312-8.235523
237 is the Arcane tree. 25522522312 is one digit per
talent in it, spending 31 points.
| Position | Digit | Talent | Rank |
|---|---|---|---|
| 1 | 2 | Wand Specialization | 2 of 2 |
| 2 | 5 | Arcane Focus | 5 of 5 |
| 3 | 5 | Improved Channeling | 5 of 5 |
| 4 | 2 | Arcane Subtlety | 2 of 2 |
| 5 | 2 | Magic Absorption | 2 of 2 |
| 6 | 5 | Arcane Concentration | 5 of 5 |
| 7 | 2 | Arcane Resilience | 2 of 2 |
| 8 | 2 | Arcane Geometry | 2 of 2 |
| 9 | 3 | Arcane Impact | 3 of 3 |
| 10 | 1 | Arcane Blast | 1 of 1 |
| 11 | 2 | Arcane Shielding | 2 of 2 |
8 is the Fire tree. 235523 is one digit per
talent in it, spending 20 points.
| Position | Digit | Talent | Rank |
|---|---|---|---|
| 1 | 2 | Wake of Fire | 2 of 2 |
| 2 | 3 | Incineration | 3 of 3 |
| 3 | 5 | Improved Fireball | 5 of 5 |
| 4 | 5 | Ignite | 5 of 5 |
| 5 | 2 | Flame Throwing | 2 of 2 |
| 6 | 3 | Impact | 3 of 3 |
A decoder to copy
Plain JavaScript, no dependency. It reads a code against one class from talents.json and hands back a rank per talent id. It reads a code; it does not judge a build, so a code edited by hand can decode to more points than the calculator will show you.
// Read a WoW Forever build code against one class from talents.json.
// Returns { "<talent id>": rank }. It reads a code; it does not judge a build:
// the calculator replays every point through the rules, so a hand-edited code
// can decode to more points than the calculator will show.
const B32 = '0123456789abcdefghijklmnopqrstuv';
function decodeBuild(code, cls) {
// 'v2_26.0503-27.5_a1b' and '#26.0503-27.5' and '26.0503' all read the same.
const body = String(code).replace(/^#/, '').replace(/^v\d+_/, '').split('_')[0];
const ranks = {};
for (const segment of body.split('-')) {
const dot = segment.indexOf('.');
if (dot <= 0) continue;
const tree = cls.trees.find((t) => t.id === Number(segment.slice(0, dot)));
if (!tree) continue;
const digits = segment.slice(dot + 1);
tree.talents.forEach((talent, i) => {
const rank = i < digits.length ? B32.indexOf(digits[i]) : 0;
if (rank > 0) ranks[talent.id] = Math.min(rank, talent.max_ranks);
});
}
return ranks;
}
Embed a build
A link around a picture, and a text link under it. No script of ours on your page and no frame of ours either, so it keeps working whatever either of us changes later.
The picture is the card this site already drew for that build. Cards exist for the builds this site holds; for any other code there is no card, so the snippet falls back to the class card and the link still opens the exact build. Both forms are below.
The calculator’s own share sheet is unchanged. It follows the build on screen, and the build on screen usually has no card of its own, so a Copy embed button there would hand out the class card most of the time and look like it had failed.
Our own statistics
4 figuresWhat this site counted itself, and nothing else. Every figure carries the sentence that says who counted it, what was counted, over how many and when, so you can judge it before you print it.
A figure whose sample is under its floor is left out whole rather than trimmed or printed small: a question this site cannot answer yet is missing here, never guessed. Counts of finished talent builds join the file once enough builds have been made in the calculator.
stats.json 3 KB
| Question | Counted | Where the number comes from |
|---|---|---|
| Which classes people play | 554 | From 554 players seen in the beta, to 24 Sept 2026 |
| Which faction people play | 220 | From 220 players seen in the beta, to 24 Sept 2026 |
| Which levels people are | 554 | From 554 players seen in the beta, to 24 Sept 2026 |
| Which races people play | 554 | From 554 players seen in the beta, to 24 Sept 2026 |
Not in this file. Anybody else’s counting, whatever it says. The talent builds the community published before launch are counted separately, are never added to a live count, and are not here: they are not ours to hand on.
What is not here
The database is the site itself: items, spells, quests, zones, routes and what changed since Classic are pages, with a tooltip, a picture and a sentence around every number, and they are not offered as files. Anything a reader shared with us is counted and never handed on as rows.
Reach us
A field you need that is not here, a number that looks wrong, or something you built with these and want us to see: the Contact card on the home page reaches us, and we read everything.
Share
Share this page
Post it to
Nothing is sent anywhere until you press one of these. WoW Forever has no share counters.