Characters & Social

Special Orders

Access the full dataset of Stardew Valley special orders -- both town board and Mr. Qi challenges -- and filter by type, requester, or repeatability using the chainable SpecialOrderQuery API.

Quick Start

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

// Get all special orders
const all = specialOrders().get()

// Get only town board orders
const townOrders = specialOrders().byType('town').get()

// Get Mr. Qi's special orders
const qiOrders = specialOrders().byType('qi').get()

// Find repeatable orders
const repeatable = specialOrders().repeatable().get()

Type Definition

Each special order record conforms to the SpecialOrderData interface:

FieldTypeDescription
idstringUnique identifier for the special order.
namestringDisplay name of the special order.
requesterstringName of the NPC who requests the order.
type'town' | 'qi'Whether this is a town board order or a Mr. Qi challenge.
textstringDescription or flavor text of the order.
prerequisitesstring | nullAny prerequisites that must be met before the order appears, or null if none.
timeframenumberNumber of days to complete the order.
requirementsstringWhat the player must do to complete the order.
rewardsstringWhat the player receives upon completion.
repeatablebooleanWhether the order can be completed more than once.

The SpecialOrderCategory type is defined as 'town' | 'qi'.

Query Methods

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

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

Filter Methods

MethodReturnsDescription
byType(type)SpecialOrderQueryFilter by order type. Pass 'town' or 'qi'.
byRequester(requester)SpecialOrderQueryFilter by requester NPC name (case-insensitive exact match).
repeatable()SpecialOrderQueryFilter to only repeatable special orders.

Sort Methods

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

Examples

List all town board orders

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

const townOrders = specialOrders().byType('town').sortByName().get()

townOrders.forEach((o) => {
  console.log(`${o.name} — requested by ${o.requester} (${o.timeframe} days)`)
})

Find all orders from a specific NPC

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

const orders = specialOrders().byRequester('Demetrius').get()

orders.forEach((o) => {
  console.log(`${o.name}: ${o.requirements}`)
  console.log(`Reward: ${o.rewards}`)
})

Get repeatable Qi challenges

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

const repeatableQi = specialOrders()
  .byType('qi')
  .repeatable()
  .sortByName()
  .get()

repeatableQi.forEach((o) => {
  console.log(`${o.name}${o.rewards}`)
})

Check prerequisites before accepting an order

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

const order = specialOrders().findByName('Island Ingredients')

if (order) {
  if (order.prerequisites) {
    console.log(`Prerequisites: ${order.prerequisites}`)
  } else {
    console.log('No prerequisites required.')
  }
  console.log(`Complete within: ${order.timeframe} days`)
}

Wrap a pre-filtered array

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

const qiOrders = specialOrders().byType('qi').get()
const sorted = specialOrders(qiOrders).sortByName('desc').get()
Previous
Quests
Next
Skills