Skip to content

Spell Book Settings (Class Rules)

The Spell Book Settings dialog is the per-actor configuration point for Spell Book. It controls which spell lists each spellcasting class draws from, cantrip and spell swap rules, ritual casting behavior, preparation bonuses, wizard mechanics, and per-actor overrides for global rule settings.

The window title reads Spell Book Settings - {actor name}.

Spell Book Settings dialog


The dialog opens from several entry points:

  • Spell Book sidebar: Click the gear button in the Player Spell Book sidebar.
  • Character sheet: Right-click the Spell Book button on the actor sheet.
  • No spell list assigned notice: When a class tab has no spell list, click the notice button to open the dialog scrolled to that class’s section.

When a class or subclass that grants spellcasting is added to a character, or spellcasting is granted during a level-up, the module whispers a chat card to you and to the character’s owners for any affected class that has no spell list assigned. The card names the affected classes. You see an Assign Spell List button that opens Class Rules for that character; an owning player sees an Open Spell Book button that opens their Spell Book.


The top fieldset contains per-actor overrides and a shortcut. These apply to the whole actor, not a specific class.

FieldTypeBehavior
Rule Set OverrideSelect: Use Global / Legacy / ModernOverrides the world-level Default Spellcasting Rules setting. Use Global inherits the world value. See Ruleset Types and Meanings for what Legacy and Modern change. Sets the class defaults applied when a new class is first initialized on the actor.
Notify on Spell ChangesCheckboxWhen on, GMs receive a whispered card whenever this actor saves a change to its prepared cantrips or spells. A class over its limit adds a warning line to that card. Inherits the world-level Notify GM on Spell Changes setting.
Open Details CustomizationButtonOpens the Details Customization dialog. When this dialog is detached, the palette opens in the same detached window.

Stored on the actor as:

  • flags.spell-book.ruleSetOverride (null = use global, "legacy", or "modern")
  • flags.spell-book.notifyGm (always an explicit true or false after save)

One fieldset renders per spellcasting class detected on the actor, sorted alphabetically. Each fieldset is headed by the class icon and name. When the actor has no spellcasting classes, a placeholder message shows instead.

FieldTypeDefaultBehavior
Show CantripsCheckboxtrue for most classes, false for Paladin and RangerWhen off, the cantrip group is hidden in the Spell Book and the class’s non-granted, non-always-prepared cantrips are removed on save. Disabled when the class has no cantrip scale value.
Force Wizard ModeCheckboxfalseShown only for wizard-eligible classes. When on, this class is treated as a wizard: spellbook tab, free starting spells, level-up free spells, scroll learning, and gold-based copying.
Cantrip SwappingSelect: none / level-up / long-restVaries by rule set and classControls when cantrips may be changed. Disabled when Show Cantrips is off.
Spell SwappingSelect: none / level-up / long-restVaries by rule set and classControls when prepared spells may be changed.
Ritual CastingSelect: none / prepared / alwaysVaries by rule set and classprepared casts only currently prepared rituals; always casts any ritual from the list.
Class Spell ListMulti-select journal picker (customSpellList)[]Required. UUIDs of journal spell-list pages this class pulls spells from. When empty, the tab renders the “no spell list assigned” notice and no spells are available.
Subclass Spell ListMulti-select journal picker (customSubclassSpellList)[]Optional. UUIDs of journal pages that overlay the class list with subclass-specific spells. Leaving it empty means no subclass overlay.
Spell Preparation BonusNumber -20..200Added to the class’s calculated maximum prepared spells. Negative values reduce the cap.
Cantrip Preparation BonusNumber -20..200Added to the class’s calculated maximum prepared cantrips. Disabled when Show Cantrips is off.

Both multi-selects draw from the same pool of journal pages:

  • The module’s built-in custom spell lists pack
  • Every other JournalEntry compendium whose pages are of type spells, excluding other type
  • Minus any list UUIDs in the world-level Hidden Spell Lists setting
  • Minus any stock list whose spells all come from Compendium Browser sources you have disabled

Options are grouped by Class, Subclass, and Other. Multiple selections on either field are merged at read time and de-duplicated by UUID. Lists are created, duplicated, merged, and renamed through the Spell List Manager. See Creating New Spell Lists and Modifying Existing Spell Lists.

Shown only when the class is detected as a wizard or Force Wizard Mode is enabled.

FieldTypeDefaultBehavior
Starting SpellsNumber >= 06Free spells the wizard begins with at level 1.
Spells Per LevelNumber >= 02Free spells granted on each wizard level-up.
Spell Learning Cost MultiplierNumber >= 050Gold pieces per spell level charged when copying a spell into the spellbook. Cantrips are free.
Spell Learning Time MultiplierNumber >= 0120Minutes per spell level required to copy a spell. Cantrips take 1 minute.

See Wizard Spellbook Management for how these values feed into the Spellbook tab.


The defaults applied when a class is first detected depend on the effective rule set (world setting or actor override). See Ruleset Types and Meanings for the full per-class defaults table.


The Save button in the footer writes all changes as a single actor update:

  • Global overrides are written to flags.spell-book.ruleSetOverride and flags.spell-book.notifyGm.
  • Per-class rules are merged into flags.spell-book.classRules[<classIdentifier>].
  • Turning off Show Cantrips deletes the class’s non-granted, non-always-prepared cantrips.
  • The per-actor rule cache is cleared and SpellDataManager.invalidateCache(actor) is called.
  • Any open Spell Book window for this actor reloads all class tabs.

Prepared spells no longer on a changed spell list are not removed. The dialog closes on submit.