Skip to content

Character input ​

BuildInput.character is the only required input. It describes the character sheet as it would be set in the UESP Build Editor.

ts
const stats = calculateBuild({
  character: {
    race: 'Nord',
    class: 'Dragonknight',
    level: 50,
    attributes: { health: 64, magicka: 0, stamina: 0 },
    mundusStone: 'The Thief',
    championPoints: 160,
    rulesVersion: 'Live',
  },
});

Fields ​

FieldTypeDescription
racestringRace name, e.g. "High Elf", "Nord", "Khajiit".
classstringClass name, e.g. "Sorcerer", "Dragonknight", "Nightblade".
levelnumberCharacter level, 1–50.
attributesobjectAttribute points: health, magicka, stamina. Max 64 points each, 64 total (fully in one stat, split, or all 64 in one).
mundusStonestring?Active Mundus Stone, e.g. "The Thief", "The Apprentice".
mundusStone2string?Second Mundus Stone — requires the Twice-Born Star set (5 pieces).
cyrodiilboolean?Enables Battle Spirit (PvP buffs).
vampireStagenumber?Vampirism stage, 0–4.
werewolfStagenumber?Lycanthropy stage, 0 or 1.
championPointsnumber?Total Champion Points, 0–3600. Required for CP nodes to apply.
rulesVersionstring?"Live" (default) or "PTS".

Names must match the UESP catalog

Race, class and mundus names are matched by the engine exactly as they appear in the UESP Build Editor. Unknown names behave as "none selected" rather than throwing — if a race passive seems missing, check the spelling first.

Race / class passives ​

Passives are not applied automatically (except with autoPassives: true for race — see Skills & Passives). Class and other passives are opt-in via passiveSkills or the catalog functions:

ts
import { listRacialPassives, listClassPassives } from 'uesp-eso-build-wrapper';

const passives = [
  ...listRacialPassives('Nord'),        // abilityId of each rank
  ...listClassPassives('Dragonknight'),
].map((p) => p.abilityId);

const stats = calculateBuild({
  character: { /* ... */ },
  passiveSkills: passives,
});

See Skills & Passives for the full picture.

Elder Scrolls Online is a trademark of ZeniMax Media Inc. This project is not affiliated with or endorsed by ZeniMax Media Inc.