Most of the content is made up of blocks called elements such as a race, class feature, language, or spell. Each of these elements have a set of child nodes that hold details about the implementation such as a description, specific setters unique to a certain element, rules that grant you additional elements or increase statistics like your Armor Class or Dexterity, and rules that grant you additional elements through selection.

This section talks a little about each of these area’s.

Structure

The structure of an element is very similar for each element even though some elements may have required parts while others don’t require these to function. As you have seen in the race element in the quick start section an element has four attributes that each element must implement.

AttributeDescription
nameThis is what you will see in the builder and on your character sheet and can be anything you want.
typeThis is used by the builder to determine for example which items need to be populated in a selection (such as Spell or Language) and where it should be placed in the build tab. There is a collection of pre-defined types here that you should choose from.
sourceThe name of the published source, author, website, or homebrew campaign your element comes from, can be anything you want.
idThis should be a unique id. Start your id with ID_ and only use letters, numbers and underscores. An element with an id that already exists will override the existing element completely. In order to avoid duplicate elements the best practice is to make your id in the following format ID_{AUTHOR}_{SOURCE}_{TYPE}_{NAME}.

The element also has a number of child nodes that it can implement, a short description of each of these is listed below.

NodeDescription
compendiumThis currently is used to hide the element from compendium search results.
supportsA collection that is used to filter elements when creating a selection rule as archetypes, skill proficiencies, fighting styles, and so on.
requirementsVarious requirements an element can have such as a race or a minimum ability score to allow the element to be selected from a list.
descriptionThe description that shows up in the panel on the right side in the builder. This is made using basic HTML.
sheetThe plain text description that will be displayed on the sheet instead of inside the builder. You can set attributes that hide the element on the character sheet or change the name displayed on the sheet.
settersA set of setters specific to certain elements such as school for spells or names (male/female) for a race.
spellcastingA simple node to indicate that this element is a spellcasting class or archetype. This will create a base for the spellcasting class including a tab and a spellcasting page.
multiclassA node on a class to indicate you can multiclass with the class.
rulesA collection of rules that this element has such as statistic increases, granting additional elements, allowing a selection of a collection of elements and so on.
Compendium

You can include a compendium node with a display attribute set to false to hide it from the compendium search results.

Use this for elements that make little sense of being in the compendium such as selection options for elements (e.g. fire/cold/lightning), selections that increase ability scores, or elements that have no description and just clutter the results.

<compendium display="false" />
Supports

The supports node is mainly used to filter out certain elements for selection rules. There is no limit on how many supports an element can contain, just make sure you separate them with a comma ,.

When you want to allow a player to select for example a Sorcerous Origin which should be of type Archetype you should create the following supports node:

<supports>Sorcerous Origin</supports>

This will allow the selection rule to find all elements of type Archetype that have a support Sorcerous Origin in them. This way the original Sorcerer class element won’t need changes and allows you to add new Archetypes for classes quick. This is the case for many of the selection options such as sub races, fighting styles, languages, and so on.

Requirements

There are elements which might require you to have a certain race or a minimum ability score, this node is the place where you can set these requirements. When you need to be a changeling for a certain feat you should add the id of the changeling race element to this node like this:

<requirements>ID_DOCS_RACE_CHANGELING</requirements>

The difference with this node is that this will result into a dynamic expression that is used in the builder. It can contain AND (&& or ,) and OR (||) conditions to allow you to create your desired requirements, use the NOT (!) before any ID or block to invert the condition. When you need a requirement on an ability score you have to add a small block instead of an id like this: [dex:13]. A list of available requirement pairs is displayed below.

Here is what it should look like when you need to be a changeling with a dexterity of 13 or higher:

<requirements>ID_DOCS_RACE_CHANGELING,[dex:13]</requirements>

Predefined key/value pairs that are currently available (more will be added when needed).

KeyValue
str, dex, con, int, wis, chaAny value for the ability score, not the modifier.
levelAny number ranging from 1-20.
typeAn element type such as ‘spell’. Some feats require you to have at least one spell for example.
idThe id of an element such as ID_DOCS_RACE_CHANGELING

You can encapsulate requirements with parentheses when you have multiple conditions that are valid. With the following requirement you meet the requirements when you have strength or dexterity of 13 and your class is a fighter or a ranger.

<requirements>([str:13]||[dex:13]),(ID_CLASS_FIGHTER||ID_CLASS_RANGER)</requirements>
<requirements>[type:spell])</requirements>
Description

This is the description that will be displayed in the panel on the right side within the builder. This node accepts basic HTML, styling is done by the builder and can be applied by adding certain classes to certain elements. The element name is already added by default at the top of the description panel and the source url at the bottom. When the source of an element is unknown by the builder it will generate a url that will perform a search query on google with the name of the source and the name of the element.

<description>
    <p class="flavor">Changelings are subtle shapeshifters capable of disguising their appearance. Their ability to adopt other creatures’ guises makes them consummate spies and criminals.</p>
</description>

The best documentation to create descriptions is looking at the existing content.

Setters

The setters is where unique values depending on the type of the element can be set with a combination of a key and a value. A race element for example might have names while a spell element has material components. Specific names depending on the type are used to populate these values in the builder.

The format for these setters is <set name="{name}">{value}</set>. Some setters that have the same name have additional attributes besides the name attribute to make sure the difference can be used by the builder. Think of a price setter with additional currency attribute to determine the type of coin used, or a name setter with a gender attribute to generate a random name based on the characters gender.

Required Setters (Race)
<setters>
    <set name="names" type="male">Adrik, Alberich, Baern, Barendd, Brottor</set>
    <set name="names" type="female">Amber, Artin, Audhild, Bardryn, Dagnal</set>
    <set name="names" type="clan">Balderk, Battlehammer, Brawnanvil, Dankil, Fireforge</set>
    <set name="names-format">{{name}} {{clan}}</set>
</setters>
Required Setters (Class)
<setters>
    <set name="hd">d8</set>
</setters>
Required Setters (Language)
<setters>
    <set name="speakers">Demons</set>
    <set name="script">Infernal</set>
    <set name="exotic">true</set>
</setters>
Required Setters (Spell)
<setters>
    <set name="level">3</set>
    <set name="school">Evocation</set>
    <set name="time">1 action</set>
    <set name="duration">Instantaneous</set>
    <set name="range">150 feet</set>
    <set name="hasVerbalComponent">true</set>
    <set name="hasSomaticComponent">true</set>
    <set name="hasMaterialComponent">true</set>
    <set name="materialComponent">a tiny ball of bat guana and sulfur</set>
    <set name="isConcentration">false</set>
    <set name="isRitual">false</set>
</setters>
Sheet

Much like the description node the sheet node contains the description this will be visible on the sheet. This description is plain text, not HTML. This should normally be a short description since space is limited.

The sheet node has an optional display attribute (default: true), when set to false the element will not be displayed on the character sheet. Think of simple class features that grant a skill proficiency or language. These elements are visible in other sections of the sheet and will only take up space in the features and traits section so they can be hidden.

<sheet display="false">
    <description>You gain proficiency in the Deception skill.</description>
</sheet>
<sheet display="true">
    <description>As an action, you can polymorph into any humanoid of your size that you have seen, or back into your true form. However, your equipment does not change with you. If you die, you revert to your natural appearance.</description>
</sheet>

The description should be placed inside a description child node (multiple description nodes can be added) within the sheet node. You can add a level attribute on the description node so you can have different descriptions based on your level. Inside the description you can inject values such as your level or ability modifiers. You should wrap a specific name inside $(key) for it to be replaced. A list of these names can be found below, also more information how to create custom names in the rules section.

<sheet>
    <description level="1">A bonus of {{wisdom:modifier}} to healing.</description>
    <description level="6">A bonus of {{wisdom:modifier}} to healing and damage with spells.</description>
</sheet>

An alternative sheet name can be set using the alt attribute.

<sheet alt="Alternative Name">
    <description>A description of a feature.</description>
</sheet>

Use the optional action attribute to specify the action it takes to perform the feature and the same can be done using the usage attribute to specify how often you can use the feature.

<sheet action="Bonus Action" usage="1/Long Rest">
    <description>A description of a feature.</description>
</sheet>

The action and usage attributes can also be set on the description to change them based on the level.

<sheet action="Bonus Action" usage="1/Long Rest">
    <description>A description of a feature.</description>
    <description usage="2/Long Rest">A description of a feature.</description>
</sheet>
Spellcasting

A simple node to indicate that this element is a spellcasting class or archetype. This will create a base for the spellcasting class including a tab and a spellcasting page, the name comes from the name attribute and is case-sensitive. Use the ability attribute to assign one of the abilities as the spellcasting ability. Include a list inside with the class name that should function as the spelllist.

<spellcasting name="Wizard" ability="Intelligence">
    <list>Wizard</list>
</spellcasting>
Exting Spellcasting List

You can extend an existing spelllist of a class by including a spellcasting node in another element. Use the name of the original spellcasting node and include the extend attribute with the value of true.

<spellcasting name="Wizard" extend="true">
    <extend>Cleric</extend>
</spellcasting>
Multiclass

Instead of creating a complete element for the multiclass class the builder clones the class element and modifies some parts, starting with the id. Include the requirements to multiclass with or into this class.

The ID_INTERNAL_GRANT_MULTICLASS element that is granted here is a requirement.

<grant type="Grants" id="ID_INTERNAL_GRANT_MULTICLASS" />
<multiclass id="ID_WOTC_PHB_MULTICLASS_PALADIN">
    <prerequisite>Strength 13 and Charisma 13</prerequisite>
    <requirements>([str:13],[cha:13])</requirements>
    <setters>
        <set name="multiclass proficiencies">Light armor, medium armor, shields, simple weapons, martial weapons</set>
    </setters>
    <rules>
        <grant type="Grants" id="ID_INTERNAL_GRANT_MULTICLASS" />
        <grant type="Proficiency" name="ID_PROFICIENCY_ARMOR_PROFICIENCY_LIGHT_ARMOR" />
        <grant type="Proficiency" name="ID_PROFICIENCY_ARMOR_PROFICIENCY_MEDIUM_ARMOR" />
        <grant type="Proficiency" name="ID_PROFICIENCY_ARMOR_PROFICIENCY_SHIELDS" />
        <grant type="Proficiency" name="ID_PROFICIENCY_WEAPON_PROFICIENCY_SIMPLE_WEAPONS" />
        <grant type="Proficiency" name="ID_PROFICIENCY_WEAPON_PROFICIENCY_MARTIAL_WEAPONS" />
    </rules>
</multiclass>
Rules

The rules node is where most of the mechanics in an elements happens. With the use of rule nodes you can increase statistics like Armor Class, Strength and Dexterity, and Hit Points. Allow the player to make a selection of elements like the selection of a primal path for a barbarian, and grant elements like skill proficiencies, languages, and class features depending on the characters level, class, or archetype.

There currently are three types of rules that can be applied to the rules node which are the grant rule, select rule, and the stat rule. Attributes marked with an * are required.

Grant Rule
AttributeValue
type*The type of the granted element.
id*The id of the granted element.
levelThe level required for this grant rule. It is the first check before any other requirements and used most often.
requirementsA dynamic requirements string just like the requirements node in the element. Learn More
<grant type="Language" id="ID_LANGUAGE_COMMON" />
<grant type="Class Feature" id="ID_CLASS_FEATURE_BARBARIAN_PRIMAL_PATH" level="3" />
<grant type="Class Feature" id="ID_CLASS_FEATURE_ELDRITCH_FEATURE" requirements="ID_PHB_SPELL_ELDRITCH_BLAST" />
Selection Rule
AttributeValue
type*The type of the element that you can select. This will also determine where in the build tab the selection control will be displayed.
name*The name that is displayed on the selection control in the builder.
supportsA dynamic string to filter out elements with certain supports. You can also add a collection of IDs seperated by a single |, note: this way it is not possible for other custom content to be added afterwards.
levelThe level required for this selection rule. It is the first check before any other requirements and used most often.
requirementsA dynamic requirements string just like the requirements node in the element. Learn More
numberThe number of selections you can make. Use this instead of creating multiple of the same selection rules unless they are on different levels or have different requirements.
defaultYou can put the ID of an element here that if it is in the selection list it will be selected by default.
optionalTrue of false if this selection is optional. Perhaps to select a variant on another element such as a background variant.
<select type="Proficiency" name="Skill Proficiency (Rogue)" supports="Skill,ID_CLASS_ROGUE" number="4" />
<select type="Archetype" name="Sorcerous Origin" supports="Sorcerous Origin" level="3" />
<select type="Archetype" name="Another Sorcerous Origin" supports="ID_ORIGIN_A|ID_ORIGIN_B" level="3" />
Statistics Rule
AttributeValue
name*The name of the statistic value. (case-sensitive, will be all lowercase in the future)
value*The value which can be a number or the name of another statistic. (‘Wisdom Modifier’ or ‘Proficiency’)
bonusWhen there are multiple rules that apply a certain bonus to the same statistic the name here is used to compare all values and take the highest one, so they don’t stack. Use the name ‘base’ when assigning base such as speed or fly speed.
equippedA dynamic string that contains certain formatting for checking equipped items such as armor, shields, weapons.
levelThe level required for this statistics rule.
requirementsA dynamic string that can contain a requirement on certain elements when the level attribute alone is not enough. This is the same as the requirements node in the element.
inlineTrue when the statistic is specifically for replacing inline sheet descriptions that can’t be calculated (non-numeric).
<stat name="innate speed" value="30" bonus="base />
<stat name="innate speed:fly" value="30" bonus="base" equipped="![armor:heavy]" />
<stat name="speed:misc" value="10" />
<stat name="speed:fly:misc" value="10" equipped="![armor:heavy]" />
<stat name="acrobatics:proficiency" value="proficiency" bonus="double" />
<stat name="acrobatics:misc" value="3" />
<stat name="feature:damage type" value="Force" inline="true" />