Characters & Social

Events

Access the full dataset of Stardew Valley heart events and filter by villager name, heart level, or marriage-specific milestones using the chainable EventQuery API.

Quick Start

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

// Get all heart events
const all = events().get()

// Get all events for a specific villager
const pennyEvents = events().byVillager('Penny').get()

// Get all 2-heart events
const twoHeartEvents = events().byHearts(2).get()

// Get only marriage candidate events
const marriageEvents = events().marriageEvents().get()

Type Definition

Each event record conforms to the GameEvent interface:

FieldTypeDescription
idstringUnique identifier for the event.
namestringAuto-generated display name in the format "Villager N-Heart".
villagerstringName of the villager this event belongs to.
heartsnumberThe heart level required to trigger this event.
descriptionstringDescription of the event scene.

Query Methods

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

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

Filter Methods

MethodReturnsDescription
byVillager(villager)EventQueryFilter by villager name (case-insensitive exact match).
byHearts(hearts)EventQueryFilter by heart level (e.g., 2, 4, 6, 8, 10, 14).
marriageEvents()EventQueryFilter to only marriage candidate events (hearts 2, 4, 6, 8, 10, 14).

Sort Methods

MethodReturnsDescription
sortByHearts(order?)EventQuerySort by heart level. Pass 'asc' (default) or 'desc'.
sortByVillager(order?)EventQuerySort alphabetically by villager name. Pass 'asc' (default) or 'desc'.

Examples

List all events for a villager in order

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

const samEvents = events().byVillager('Sam').sortByHearts().get()

samEvents.forEach((e) => {
  console.log(`${e.hearts}-Heart: ${e.description}`)
})

Count events per heart level

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

for (const level of [2, 4, 6, 8, 10, 14]) {
  const count = events().byHearts(level).count()
  console.log(`${level}-heart events: ${count}`)
}

Get marriage milestone events sorted by villager

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

const results = events().marriageEvents().sortByVillager().get()

results.forEach((e) => {
  console.log(`${e.villager}${e.hearts}-Heart Event`)
})

Chain filters together

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

// Find only the 8-heart marriage events
const eightHeartMarriage = events()
  .marriageEvents()
  .byHearts(8)
  .sortByVillager()
  .get()

Wrap a pre-filtered array

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

const filtered = events().byVillager('Leah').get()
const sorted = events(filtered).sortByHearts('desc').get()
Previous
Universal gifts
Next
Quests