Spell Pack Format
Import additional spells into the app using a JSON file.
What is a Spell Pack?
The app ships with SRD spells only (free license). A Spell Pack is a JSON file that adds spells from other sources. Import it in Settings → Spell Packs. Spells from a Spell Pack replace bundle spells with the same ID.
JSON Schema
Use the JSON Schema for validation and autocompletion in your editor. Add $schema to your file — VSCode, IntelliJ, and other editors will highlight errors and suggest field values.
{
"$schema": "https://5e-spellbook.pages.dev/spellpack.schema.json",
"format": 1,
"edition": "edition2014",
"spells": [...]
} Top-level Structure
format number Always 1 (current version) edition string "edition2014" or "edition2024" — each edition is imported separately spells array Array of spell objects (see below) {
"format": 1,
"edition": "edition2014",
"spells": [...]
} Spell Object Fields
id string required Unique identifier. Convention: spell name + source abbreviation, lowercased, all non-alphanumeric characters removed.
"fireboltphb" // Fire Bolt + PHB → fireboltphb
"charmpersonxge" // Charm Person + XGE → charmpersonxge level number required Spell level. 0 for cantrips, 1–9 for leveled spells.
school string required School of magic. One of:
abjurationconjurationdivinationenchantmentevocationillusionnecromancytransmutation source string required Source book abbreviation, e.g. "PHB", "XGE", "TCE". Used as part of the spell ID.
2014 edition — multiple source books:
PHBXGETCEEGWAIFTDSCCLLKBMTIDRotFAAGSatOGGR 2024 edition — single source: XPHB (2024 Player's Handbook).
XPHB ritual boolean required true if the spell can be cast as a ritual, false otherwise.
concentration boolean required true if the spell requires concentration, false otherwise.
components object required Spell components — verbal (V), somatic (S), material (M). Each is a boolean.
{
"verbal": true, // boolean — V component
"somatic": true, // boolean — S component
"material": false // boolean — M component
} materials object | null required Material component details. null if no materials needed. If present, cost is in copper pieces (100 cp = 1 gp), consumed indicates if used up on cast.
// No material component
"materials": null
// Material without cost, not consumed
"materials": { "cost": null, "consumed": false }
// Material with cost (in copper), consumed on cast
"materials": { "cost": 2500, "consumed": true }
// 2500 copper = 25 gold pieces castingTime array required Array of casting time entries. Each entry has value (number) and unit.
Possible unit values:
actionbonusreactionminutehour // 1 action
[{ "value": 1, "unit": "action" }]
// 1 bonus action
[{ "value": 1, "unit": "bonus" }]
// 1 reaction
[{ "value": 1, "unit": "reaction" }]
// 10 minutes
[{ "value": 10, "unit": "minute" }] duration object required Spell duration. Structure depends on type. For "permanent" type, optional ends array describes how the spell can end (e.g. "dispel", "trigger").
Possible type values:
instanttimedpermanentspecial Unit values (only for type "timed"):
roundminutehourday // Instantaneous
{ "type": "instant" }
// 1 hour
{ "type": "timed", "unit": "hour", "value": 1 }
// 10 minutes
{ "type": "timed", "unit": "minute", "value": 10 }
// 1 round
{ "type": "timed", "unit": "round", "value": 1 }
// Permanent (until dispelled)
{ "type": "permanent", "ends": ["dispel"] }
// Permanent (until dispelled or triggered)
{ "type": "permanent", "ends": ["dispel", "trigger"] }
// Special duration
{ "type": "special" } range object required Spell range. Combines shape type, distance type, and optional distance value.
Shape types:
pointconelinecubesphereemanationradiushemispherespecial Distance types:
selftouchfeetmilessightunlimited // 120 feet
{ "type": "point", "distanceType": "feet", "distanceValue": 120 }
// Self
{ "type": "point", "distanceType": "self" }
// Touch
{ "type": "point", "distanceType": "touch" }
// Self, 30-foot cone
{ "type": "cone", "distanceType": "feet", "distanceValue": 30 }
// Self, 60-foot line
{ "type": "line", "distanceType": "feet", "distanceValue": 60 }
// Self, 10-foot radius sphere
{ "type": "sphere", "distanceType": "feet", "distanceValue": 10 }
// Self, 15-foot cube
{ "type": "cube", "distanceType": "feet", "distanceValue": 15 }
// Self, 10-foot emanation
{ "type": "emanation", "distanceType": "feet", "distanceValue": 10 }
// 1 mile
{ "type": "point", "distanceType": "miles", "distanceValue": 1 }
// Sight
{ "type": "point", "distanceType": "sight" }
// Unlimited
{ "type": "point", "distanceType": "unlimited" } en,
ru object required Localized content. Both en and ru objects have the same structure. Text fields support HTML markup.
{
"name": "Fire Bolt", // spell name
"text": "<p>You hurl a mote of fire at a creature...</p>",
// HTML — spell description
"higherLevels": "<p>At higher levels...</p>",
// HTML or null — upcast text
"materialsText": "a tiny strip of phosphorus",
// string or null — material description
"castingCondition": "when a creature you can see..."
// string or null — reaction trigger
} Both en and ru are required. If you only have one language, duplicate the content into both fields.
classes array optional Class names with access to this spell. Lowercase. Same 13 classes in both editions. Defaults to empty array if omitted.
artificerbarbarianbardclericdruidfightermonkpaladinrangerroguesorcererwarlockwizard subclasses array optional Subclass identifiers with access to this spell. Lowercase, hyphenated. Lists differ between editions. Defaults to empty array if omitted.
"subclasses": ["arcana-domain", "arcane-trickster", "eldritch-knight"] Edition Differences
The spell JSON structure is identical between editions. The differences are in content: spell IDs, sources, and available subclasses.
Spell ID Convention
Spell ID is always (name + source) lowercased with non-alphanumeric characters removed. Since 2014 has multiple source books and 2024 has only XPHB, IDs differ.
// edition2014 — source varies per book
"fireboltphb" // Fire Bolt from PHB
"shadowbladexge" // Shadow Blade from XGE
"summonbeasttce" // Summon Beast from TCE
// edition2024 — source is always XPHB (2024 Player's Handbook)
"fireboltxphb" // Fire Bolt from XPHB Source Books
2014 edition includes spells from 13 source books:
PHBXGETCEEGWAIFTDSCCLLKBMTIDRotFAAGSatOGGR 2024 edition includes spells from a single source: XPHB (2024 Player's Handbook).
Subclasses
Both editions use the same 13 classes. Subclass lists differ — 2024 adds new subclasses while keeping most from 2014.
2014 edition subclasses (72)
aberrant-mindalchemistambition-domain-(psa)arcana-domainarcane-archerarcane-tricksterarmorerartilleristbattle-smithchronurgy-magiccircle-of-sporescircle-of-starscircle-of-the-landcircle-of-the-mooncircle-of-wildfireclockwork-soulcollege-of-glamourcollege-of-spiritsdeath-domaindivine-souldrakewardeneldritch-knightfey-wandererforge-domaingloom-stalkergrave-domaingraviturgy-magichorizon-walkerknowledge-domainknowledge-domain-(psa)life-domainlight-domainlunar-sorcerymonster-slayernature-domainoath-of-conquestoath-of-devotionoath-of-gloryoath-of-redemptionoath-of-the-ancientsoath-of-the-crownoath-of-the-watchersoath-of-vengeanceoathbreakerorder-domainpath-of-the-ancestral-guardianpath-of-the-giantpath-of-the-totem-warriorpeace-domainpsi-warriorschool-of-illusionshadow-magicsolidarity-domain-(psa)strength-domain-(psa)swarmkeepertempest-domainthe-archfeythe-celestialthe-fathomlessthe-fiendthe-geniethe-great-old-onethe-hexbladethe-undeadthe-undyingtrickery-domaintwilight-domainwar-domainway-of-shadowway-of-the-open-handway-of-the-sun-soulzeal-domain-(psa) 2024 edition subclasses (91)
aberrant-mindaberrant-sorceryabjureralchemistambition-domain-(psa)arcana-domainarcane-archerarcane-tricksterarchfey-patronarmorerartilleristbanneretbattle-smithcartographercelestial-patroncircle-of-sporescircle-of-starscircle-of-the-landcircle-of-the-mooncircle-of-the-seacircle-of-the-starscircle-of-wildfireclockwork-sorceryclockwork-soulcollege-of-glamourcollege-of-lorecollege-of-spiritscollege-of-the-moondeath-domaindivine-souldivinerdraconic-sorcerydrakewardeneldritch-knightevokerfey-wandererfiend-patronforge-domaingloom-stalkergrave-domaingreat-old-one-patronhorizon-walkerillusionistknowledge-domainknowledge-domain-(psa)life-domainlight-domainlunar-sorcerymonster-slayernature-domainoath-of-conquestoath-of-devotionoath-of-gloryoath-of-redemptionoath-of-the-ancientsoath-of-the-crownoath-of-the-noble-geniesoath-of-the-watchersoath-of-vengeanceoathbreakerorder-domainpath-of-the-ancestral-guardianpath-of-the-giantpath-of-the-totem-warriorpath-of-the-wild-heartpeace-domainpsi-warriorschool-of-illusionscion-of-the-threeshadow-magicsolidarity-domain-(psa)spellfire-sorcerystrength-domain-(psa)swarmkeepertempest-domainthe-archfeythe-celestialthe-fathomlessthe-fiendthe-geniethe-great-old-onethe-hexbladethe-undeadthe-undyingtrickery-domaintwilight-domainwar-domainwarrior-of-shadowwarrior-of-the-elementsway-of-shadowway-of-the-open-handway-of-the-sun-soulwinter-walkerzeal-domain-(psa) Full Example
{
"$schema": "https://5e-spellbook.pages.dev/spellpack.schema.json",
"format": 1,
"edition": "edition2014",
"spells": [
{
"id": "fireboltphb",
"level": 0,
"school": "evocation",
"source": "PHB",
"ritual": false,
"concentration": false,
"components": {
"verbal": true,
"somatic": true,
"material": false
},
"materials": null,
"castingTime": [
{ "value": 1, "unit": "action" }
],
"duration": { "type": "instant" },
"range": {
"type": "point",
"distanceType": "feet",
"distanceValue": 120
},
"classes": ["sorcerer", "wizard", "artificer"],
"subclasses": [],
"en": {
"name": "Fire Bolt",
"text": "<p>You hurl a mote of fire at a creature or object within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 fire damage. A flammable object hit by this spell ignites if it isn't being worn or carried.</p>",
"higherLevels": "<p>This spell's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10).</p>",
"materialsText": null,
"castingCondition": null
},
"ru": {
"name": "Огненный снаряд",
"text": "<p>Вы бросаете сгусток огня в существо или предмет в пределах дистанции. Совершите дальнобойную атаку заклинанием по цели. При попадании цель получает урон огнём 1к10. Горючий предмет, по которому попало это заклинание, загорается, если его никто не несёт и не носит.</p>",
"higherLevels": "<p>Урон заклинания увеличивается на 1к10, когда вы достигаете 5-го уровня (2к10), 11-го уровня (3к10) и 17-го уровня (4к10).</p>",
"materialsText": null,
"castingCondition": null
}
}
]
}