Skills & Progression

Skills

Access the complete Stardew Valley skills dataset and use utility functions to calculate player titles, mastery levels, and profession branching paths with the SkillQuery API.

Quick Start

import {
  skills,
  getTitle,
  getMasteryLevel,
  getProfessionOptions,
} from 'stardew-valley-data'

// Get all skills
const all = skills().get()

// Find a skill by name
const farming = skills().findByName('Farming')

// Calculate a player's title
const title = getTitle(10, 8, 7, 9, 6)

// Get mastery level from total XP
const level = getMasteryLevel(50000)

// Get level-10 profession options for a given level-5 choice
const options = getProfessionOptions('Farming', 'Tiller')

Type Definition

Each skill record conforms to the Skill interface:

FieldTypeDescription
idstringUnique identifier for the skill.
namestringDisplay name of the skill (e.g., "Farming", "Mining").
descriptionstringDescription of the skill.
toolBonusstringThe tool proficiency bonus gained from leveling this skill.
imagestringPath to the skill's icon image.
levelsSkillLevel[]Array of level progression data (see below).
masterySkillMasteryMastery unlock information for this skill.

SkillLevel

FieldTypeDescription
levelnumberThe level number (1--10).
xpRequirednumberXP required to reach this level from the previous level.
totalXpnumberCumulative XP required to reach this level.
recipesSkillLevelRecipesRecipes unlocked at this level.

SkillLevelRecipes

FieldTypeDescription
craftingstring[]Crafting recipes unlocked at this level.
cookingstring[]Cooking recipes unlocked at this level.

SkillMastery

FieldTypeDescription
unlocksMasteryUnlock[]Array of mastery unlocks for this skill.

MasteryUnlock

FieldTypeDescription
namestringName of the mastery unlock.
descriptionstringDescription of what this mastery grants.

Query Methods

SkillQuery extends QueryBase and inherits five terminal methods. It does not add additional filter or sort methods -- use the utility functions below for calculations.

MethodReturnsDescription
get()Skill[]Return all results as an array.
first()Skill | undefinedReturn the first result.
find(id)Skill | undefinedFind a skill by exact ID.
findByName(name)Skill | undefinedFind a skill by name (case-insensitive).
count()numberReturn the number of results.

Utility Functions

getTitleScore(farming, fishing, foraging, mining, combat)

Calculates the player's title score using the game's formula: floor((farming + fishing + foraging + mining + combat) / 2).

import { getTitleScore } from 'stardew-valley-data'

const score = getTitleScore(10, 10, 10, 10, 10) // 25

getTitle(farming, fishing, foraging, mining, combat)

Returns the player's title string based on their combined skill levels. Uses the same formula as getTitleScore internally.

import { getTitle } from 'stardew-valley-data'

const title = getTitle(10, 10, 10, 10, 10) // "Farmer"
const newbie = getTitle(1, 0, 0, 0, 0) // "Newcomer"

getMasteryLevel(masteryXp)

Returns the current mastery level (0--5) for a given total mastery XP amount.

import { getMasteryLevel } from 'stardew-valley-data'

getMasteryLevel(0) // 0
getMasteryLevel(10000) // 1
getMasteryLevel(100000) // 5

getProfessionOptions(skillName, level5Profession)

Returns the level-10 profession options available for a given skill and level-5 profession choice. Returns an empty array if the skill or profession is not found.

import { getProfessionOptions } from 'stardew-valley-data'

const options = getProfessionOptions('Farming', 'Tiller')
// Returns the two level-10 professions that branch from Tiller

options.forEach((p) => {
  console.log(`${p.name}: ${p.description}`)
})

Constants

SKILL_TITLES

An array of TitleThreshold objects sorted from highest to lowest minScore. Each entry maps a minimum score to a title.

FieldTypeDescription
minScorenumberMinimum title score required.
titlestringTitle displayed in-game.

The full title ladder:

ScoreTitle
30Farm King
29Cropmaster
27Agriculturist
25Farmer
23Rancher
21Planter
19Granger
17Farmgirl / Farmboy
15Sodbuster
13Smallholder
11Tiller
9Farmhand
7Cowpoke
5Bumpkin
3Greenhorn
0Newcomer

MASTERY_LEVELS

An array of MasteryLevel objects describing the XP thresholds for each mastery level.

LevelXP RequiredTotal XP
110,00010,000
215,00025,000
320,00045,000
425,00070,000
530,000100,000

Examples

Display all skills with their level-up recipes

import { skills } from 'stardew-valley-data'

skills()
  .get()
  .forEach((skill) => {
    console.log(`\n${skill.name}`)
    skill.levels.forEach((lvl) => {
      const crafting = lvl.recipes.crafting.join(', ') || 'none'
      const cooking = lvl.recipes.cooking.join(', ') || 'none'
      console.log(
        `  Level ${lvl.level}: Crafting: ${crafting} | Cooking: ${cooking}`,
      )
    })
  })

Build a player stats summary

import { getTitle, getTitleScore, getMasteryLevel } from 'stardew-valley-data'

const farming = 10,
  fishing = 8,
  foraging = 7,
  mining = 9,
  combat = 6
const score = getTitleScore(farming, fishing, foraging, mining, combat)
const title = getTitle(farming, fishing, foraging, mining, combat)
const mastery = getMasteryLevel(45000)

console.log(`Title: ${title} (score: ${score})`)
console.log(`Mastery Level: ${mastery}`)

Explore profession branching paths

import { skills, getProfessionOptions } from 'stardew-valley-data'

const farming = skills().findByName('Farming')

if (farming) {
  // Level 5 options would come from the professions module
  const tillerPath = getProfessionOptions('Farming', 'Tiller')
  const rancherPath = getProfessionOptions('Farming', 'Rancher')

  console.log('Tiller leads to:', tillerPath.map((p) => p.name).join(', '))
  console.log('Rancher leads to:', rancherPath.map((p) => p.name).join(', '))
}
Previous
Special orders