Skills & Progression

Professions

Access the complete dataset of Stardew Valley professions and filter by skill, level, or parent profession to explore the branching progression paths using the chainable ProfessionQuery API.

Quick Start

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

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

// Get all farming professions
const farmingProfs = professions().bySkill('Farming').get()

// Get only level-5 professions
const level5 = professions().byLevel(5).get()

// Find a specific profession
const artisan = professions().findByName('Artisan')

Type Definition

Each profession record conforms to the ProfessionData interface:

FieldTypeDescription
idstringUnique identifier for the profession.
namestringDisplay name of the profession.
skillProfessionSkillThe parent skill: 'Farming', 'Fishing', 'Foraging', 'Mining', or 'Combat'.
level5 | 10Whether this is a level-5 or level-10 profession.
parentProfessionstring | nullThe ID of the level-5 profession this branches from, or null for level-5 professions.
descriptionstringDescription of the profession's effect.

The ProfessionSkill type is defined as 'Farming' | 'Fishing' | 'Foraging' | 'Mining' | 'Combat'.

Query Methods

ProfessionQuery extends QueryBase and inherits five terminal methods shared by all query builders:

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

Filter Methods

MethodReturnsDescription
bySkill(skill)ProfessionQueryFilter by skill name. Accepts a ProfessionSkill value.
byLevel(level)ProfessionQueryFilter by profession level. Pass 5 or 10.
byParent(parentId)ProfessionQueryFilter to professions that branch from a given parent profession ID.

Sort Methods

MethodReturnsDescription
sortByName(order?)ProfessionQuerySort alphabetically by name. Pass 'asc' (default) or 'desc'.

Examples

List all level-5 profession choices by skill

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

const skills = ['Farming', 'Fishing', 'Foraging', 'Mining', 'Combat']

skills.forEach((skill) => {
  const profs = professions().bySkill(skill).byLevel(5).get()
  console.log(`${skill}: ${profs.map((p) => p.name).join(' or ')}`)
})

Explore a profession's branching path

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

// Find the level-5 profession
const tiller = professions().findByName('Tiller')

if (tiller) {
  // Get the two level-10 options that branch from it
  const options = professions().byParent(tiller.id).get()

  console.log(`${tiller.name} (Level 5): ${tiller.description}`)
  options.forEach((p) => {
    console.log(`  -> ${p.name} (Level 10): ${p.description}`)
  })
}

Get all level-10 professions sorted alphabetically

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

const level10 = professions().byLevel(10).sortByName().get()

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

Build a complete profession tree for a skill

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

const skill = 'Mining'
const level5Profs = professions().bySkill(skill).byLevel(5).get()

level5Profs.forEach((l5) => {
  console.log(`${l5.name}: ${l5.description}`)
  const children = professions().byParent(l5.id).get()
  children.forEach((l10) => {
    console.log(`  -> ${l10.name}: ${l10.description}`)
  })
})

Wrap a pre-filtered array

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

const combatProfs = professions().bySkill('Combat').get()
const sorted = professions(combatProfs).sortByName('desc').get()
Previous
Skills