Passive Skill Tree JSON

From Path of Exile Wiki
Jump to navigation Jump to search

This page contains development information and is intended for developers and not regular end users.

Passive skill tree JSON is used by the official website and many other community tools to display the skill tree.


The subsections follow the format of the json.

Key Type
assets Associative Array
characterData Associative Array
constants Associative Array
extraImages Associative Array
groups Associative Array
imageRoot String
imageZoomLevels Float Array
max_x Integer
max_y Integer
min_x Integer
min_y Integer
nodes Associative Array
root SkillTreeNode
skillSprites Associative Array


This is an associative array that maps an asset name to an asset at a specific zoom level (i.e. "0.3835" below, note: Assets that don't change with zoom level will have a single entry of "1").


"assets": {
    "PSSkillFrame": {
        "0.1246": "https://link/to/asset/",
        "0.2109": "https://link/to/asset/",
        "0.2972": "https://link/to/asset/",
        "0.3835": "https://link/to/asset/"
    "PSPointsFrame": {
        "1": "https://link/to/asset/"


Associative array that maps the character attributes to the classid.

Each value for the array contains another associative array for various attributes:

Key Value description Type
base_dex character class starting dexterity integer
base_int character class starting intelligence integer
base_str character class starting strength integer

This maps to Scion as of this writing for example:

>>> st['characterData']['0']
{'base_int': 20, 'base_dex': 20, 'base_str': 20}
"characterData": {
    "0": {
        "base_str": 20,
        "base_dex": 20,
        "base_int": 20


Constants contain various game constants.

Located under the top level:

  constants: { /* constants */}
Key Value description Type
PSSCentreInnerRadius Radius Integer
chracterAttributes See Below Associative Array
classes See Below Associative Array
skillsPerOrbit A constant for SkillTreeNode.oidx Integer Array
orbitRadii A constant for SkillTreeNode.o Integer Array


Associative array of character attributes and their id.


Key Value description Type
<Name of the attribute> Id of attribute integer


>>> json['constants']['characterAttributes']['Strength']
"characterAttributes": {
    "Strength": 0,
    "Dexterity": 1,
    "Intelligence": 2


Associative array of Character classes and their associated id


Key Value description Type
Internal name of the class based on attributes, i.e. <Attribute>Class for example:

StrDexIntClass (refers to Scion)

Id of the class integer


>>> json['constants']['classes']['StrDexIntClass']
"classes": {
    "StrClass": 1,
    "DexClass": 2,
    "IntClass": 3,
    "StrDexClass": 4,
    "StrIntClass": 5,
    "DexIntClass": 6,
    "StrDexIntClass": 0


This an associative array linking the CharacterClassId found in constants.classes to the associated 2DArt and location on the tree in which to display the art.

Note: Scion does not have an extra image to display when the class is selected


"extraImages": {
    "1": {
        "x": -4070.52,
        "y": 7.37268,
        "image": "Art/2DArt/BaseClassIllustrations/Str.png"


Groups is an associative array containing groups for the nodes.

Key Value description Type
oo Associative array of orbitals (i.e. SkillTreeNode.oidx). The boolean value states if the orbit is occupied assoc array[string, boolean]
n Contains a list of the associated nodes by their unique id array[integer]
x x-coordinate float
y y-coordinate float

You can see in the sample below that group 6 has an oo that is just an array of booleans. If this is seen, treat the index of the boolean as the key in the associative array.

"groups": {
    "6": {
        "x": 400.602,
        "y": -1786.7,
        "oo": [
        "n": [
    "15": {
        "x": 3424.24,
        "y": 3807.71,
        "oo": {
            "1": true
        "n": [


This is just a link to the image root for assets. Values that have been seen in the passed include:, /image/, /image//


This is an array of floats that designate the zoom levels for different assets used when creating a tree

"imageZoomLevels": [


This is the maximum x that a node on the normal skill tree will be (does not include ascendancy nodes and their odd locations).


This is the maximum y that a node on the normal skill tree will be (does not include ascendancy nodes and their odd locations).


This is the minimum x that a node on the normal skill tree will be (does not include ascendancy nodes and their odd locations).


This is the minimum y that a node on the normal skill tree will be (does not include ascendancy nodes and their odd locations).


Nodes is an associative array containing general information about the passive skill nodes in form of an associative array. The key of this dictionary is the Node ID and the value uses the following key value pairs:

Key Value description Type
ascendancyName Name of the associated ascendancy class

Not present if the node is not associated with an ascendancy

da how much dexterity the node adds integer
dn Name of the node string
g Id of the group the node is in integer
ia how much intelligence the node adds integer
icon Path relative to the root to node icon string
id Unique id of the nodes integer
isAscendancyStart Whether the node is a starting point for ascendancy class

Not present if the node is not associated with an ascendancy

isJewelSocket Whether the node is a socket for jewel boolean
isMultipleChoice Whether the node is a multiple choice node boolean
isMultipleChoiceOption Whether the node is a choice option for a multiple choice node boolean
ks Whether the node is a key stone boolean
m Whether the node is a mastery (i.e. the center of certain circles have images which are technically also passive skill nodes) boolean
not Whether the node is a notable boolean
o Radii of orbit (0 to 4, orbitRadii = [0, 82, 162, 335, 493]) integer
oidx index on the orbit (skillsPerOrbit = [1, 6, 12, 12, 40]) integer
out Connections to other nodes by their id array[integer]
passivePointsGranted Passive points given integer
reminderText Reminder text(s). These appear grey in game and give some extra information about the mechanics or node.

Not present if there is no reminder text

flavourText Node flavour text (similar to the flavour text on uniques, appears in the unique border color in game) array[string]
sa How much strength the node adds integer
sd Stat descriptions. One Element per line (lines still may contain escaped characters, i.e. \n) array[string]
spc class starting node array
"nodes": {
    "57279": {
        "id": 57279,
        "icon": "Art/2DArt/SkillIcons/passives/KeystoneBloodMagic.png",
        "ks": true,
        "not": false,
        "dn": "Blood Magic",
        "m": false,
        "isJewelSocket": false,
        "isMultipleChoice": false,
        "isMultipleChoiceOption": false,
        "passivePointsGranted": 0,
        "flavourText": [
            "Lay open your veins, and draw power from your own spilled life."
        "spc": [],
        "sd": [
            "Removes all mana. Spend Life instead of Mana for Skills"
        "g": 451,
        "o": 0,
        "oidx": 0,
        "sa": 0,
        "da": 0,
        "ia": 0,
        "out": [
        "in": []


Contains the class starting nodes under the out key.


>>> st['root']
{'out': [50459, 47175, 50986, 61525, 54447, 44683, 58833], 'oidx': 0, 'ia': 0, 'da': 0, 'g': 0, 'o': 0, 'sa': 0}
>>> st['root']['out']
[50459, 47175, 50986, 61525, 54447, 44683, 58833]


Contains various arrays

Key Value description Type
keystoneActive array[assoc array]
keystoneInactive array[assoc array]
mastery array[assoc array]
normalActive array[assoc array]
normalInactive array[assoc array]
notableActive array[assoc array]
notableInactive array[assoc array]

Each of the array elements contains another associative array with that links the icon path with a specific sprite:

Key Value description Type
coords Contains an associate array that maps the icon path (as from the nodes) to coordinates in the sprite file and the size of the icon in the sprite file (see below) assoc array
filename Name of the sprite file string


>>> st['skillSprites']['mastery'][0]['filename']

The each of the coords values contains another associative array like this:

Key Value description Type
w width of the icon integer
h height of the icon integer
x x position integer
y y position integer


>>> st['skillSprites']['mastery'][0]['coords']['Art/2DArt/SkillIcons/passives/MasteryGroupMana.png']
{'w': 32, 'h': 32, 'y': 96, 'x': 128}

Ascendancy classes JSON

The ascendancy classes json section (i.e. from the json release under var = opts [...] ascClasses: { /* json */} )

Contains an associative array that maps the character class id to the information about the ascendancy classes.

assoc array for each class

Key Value description Type
name Name of the regular class (ex. "Marauder") string
classes ascendancy classes for this class by their id. The key is a class id, the value is another associative array. assoc array[string, assoc array]

assoc array for ascendancy classes

Key Value description Type
displayName Name of the ascendancy class string
name Name of the ascendancy class string
flavourText The flavour text of the class string
flavourTextColour comma-separated RGB colour string
flavourTextRect comma-separated coordinates string


>>> asc['1']['classes']['1'].items()
dict_items([('name', 'Juggernaut'), ('flavourTextColour', '175,90,50'), ('flavourText', ' What divides the conqueror \n from the conquered? Perseverance.'), ('displayName', 'Juggernaut'), ('flavourTextRect', '250,150,1063,436')])
>>> asc['1']['classes']['2'].items()
dict_items([('name', 'Berserker'), ('flavourTextColour', '175,90,50'), ('flavourText', 'The savage path is \nalways swift and sure.'), ('displayName', 'Berserker'), ('flavourTextRect', '760,415,976,429')])
>>> asc['1']['classes']['3'].items()
dict_items([('name', 'Chieftain'), ('flavourTextColour', '175,90,50'), ('flavourText', '     The Ancestors speak \nthrough your clenched fists.'), ('displayName', 'Chieftain'), ('flavourTextRect', '250,175,976,429')])

List of official JSON announcements

The latest passive skill tree JSON can be found in the official github account of the developers

Historically, JSON files are posted in the official website directly:

Versions json link Ref
version 1.2.0 [1] [2]
version 1.3.0 N/A (posted via poeskilltree tool dev) [3]
version 2.0.0
version 2.1.0
version 2.2.0
version 2.3.0 [4] [5]
version 2.4.0 [6] [7]
version 2.5.0 [8] [9]
version 2.6.0
version 3.0.0
version 3.1.0
version 3.2.0
version 3.3.0
version 3.4.0
version 3.5.0
version 3.6.0 [10] [11]
version 3.7.0 [12] [13]
version 3.8.0 [14] [15]
version 3.9.0
version 3.10.0 [16] [17]
version 3.11.0 [18] [19]
version 3.12.0 [20] [21]
version 3.13.0
version 3.14.0 [22] [23]
version 3.15.0 [24] [25]