Shops

Island Trader

Access the complete barter stock for the Island Trader on Ginger Island, where items are traded for goods rather than gold, using the chainable IslandTraderQuery API.

Quick Start

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

// Get all island trader items
const all = islandTrader().get()

// Get permanent (non-rotating) items
const permanent = islandTrader().permanent().get()

// Get items available on Tuesday
const tuesday = islandTrader().byDay('Tuesday').get()

// Get recipe trades only
const recipes = islandTrader().recipes().get()

Type Definition

Each item conforms to the IslandTraderItem interface:

FieldTypeDescription
idstringUnique identifier.
namestringDisplay name of the item received.
descriptionstringIn-game description text.
imagestringPath to the item's image.
tradeItemIdstringID of the item required for the trade.
tradeItemNamestringDisplay name of the trade item.
tradeItemImagestringPath to the trade item's image.
tradeAmountnumberQuantity of the trade item required.
dayIslandTraderDay | undefinedDay of the week when available (undefined for permanent stock).
isRecipeboolean | undefinedWhether this trade yields a recipe.
availabilitystring | undefinedSpecial availability condition, if any.

IslandTraderDay

type IslandTraderDay =
  | 'Monday'
  | 'Tuesday'
  | 'Wednesday'
  | 'Thursday'
  | 'Friday'
  | 'Saturday'
  | 'Sunday'

Query Methods

IslandTraderQuery extends QueryBase and inherits five terminal methods:

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

Filter Methods

MethodReturnsDescription
permanent()IslandTraderQueryFilter to items always in stock (no day restriction and no special availability).
daily()IslandTraderQueryFilter to day-specific rotating items only.
byDay(day)IslandTraderQueryFilter to all items available on the given day (permanent + that day's rotating item).
recipes()IslandTraderQueryFilter to recipe items only.
byTradeItem(tradeItemId)IslandTraderQueryFilter to items traded for the specified trade item (by item ID).
alwaysAvailable()IslandTraderQueryFilter to items with no special availability condition.

Sort Methods

MethodReturnsDescription
sortByTradeAmount(order?)IslandTraderQuerySort by trade amount. Pass 'asc' (default) or 'desc'.
sortByName(order?)IslandTraderQuerySort alphabetically by name. Pass 'asc' (default) or 'desc'.

Examples

List the daily rotating stock

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

const days = [
  'Monday',
  'Tuesday',
  'Wednesday',
  'Thursday',
  'Friday',
  'Saturday',
  'Sunday',
]

days.forEach((day) => {
  const items = islandTrader().byDay(day).get()
  console.log(`${day}: ${items.length} items available`)
})

Find the most expensive trade

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

const expensive = islandTrader().sortByTradeAmount('desc').first()

if (expensive) {
  console.log(
    `${expensive.name} costs ${expensive.tradeAmount}x ${expensive.tradeItemName}`,
  )
}

Get all recipe trades sorted by name

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

const recipes = islandTrader().recipes().sortByName().get()

recipes.forEach((r) => {
  console.log(`${r.name}: ${r.tradeAmount}x ${r.tradeItemName}`)
})
Previous
Adventurer's guild