Events, Items & Account

Server timeline

See what unlocks at each server age. Pass your server start date to find your server age and everything that is unlocked or still locked.

The timeline holds 33 milestones, from day 0 to day 1240. Heroes, experts, pets, events, and Fire Crystal levels are stored as ids. They resolve to full entries from Heroes, Experts, Pets, and Events when you call resolve() or serverTimelineStatus().


Type

ServerTimelineMilestone

FieldTypeDescription
idstringStable identifier, such as day-54
namestringDisplay name, such as Day 54
daynumberServer age in days at which the content unlocks. Day 0 is the server start date
heroIdsstring[]Ids of the heroes that unlock. Resolve with heroes()
heroShardEventIdsRecord<string, string[]>Ids of the events that give shards of each hero, by hero id. A hero with no listed event has no key
expertIdsstring[]Ids of the experts that unlock. Resolve with experts()
petIdsstring[]Ids of the pets that unlock. Resolve with pets()
eventIdsstring[]Ids of the events that unlock. Resolve with events()
fireCrystalLevelIdsstring[]Ids of the Fire Crystal levels that unlock, such as fc-5
unlocksServerTimelineUnlock[]Everything else that unlocks

ServerTimelineUnlock

FieldTypeDescription
namestringWhat unlocks, as text
keystring?Names an unlock that a site reads, so the site does not match text. Unique in the timeline
itemIdstring?Id of an entry in Items. Resolved to item

The key is set for war-academy on day 220 and t12-research on day 680, and for no other unlock.

ResolvedServerTimelineMilestone

The result of resolve(). It keeps id, name, and day, and replaces each id field.

FieldTypeDescription
heroesHero[]The heroes that unlock
heroShardEventsRecord<string, GameEvent[]>The shard events of every hero by hero id. An empty array when no event is listed
experts(Expert | UnreleasedExpert)[]The experts that unlock
petsPet[]The pets that unlock
eventsGameEvent[]The events that unlock
fireCrystalLevelsFireCrystalLevel[]The Fire Crystal levels that unlock
unlocksResolvedServerTimelineUnlock[]Each unlock with its item in place of itemId

ServerTimelineStatus

FieldTypeDescription
agenumberServer age in whole days
startDatestringServer start date in YYYY-MM-DD format, in UTC
unlockedServerTimelineStatusMilestone[]Milestones at or before the age, oldest first
lockedServerTimelineStatusMilestone[]Milestones after the age, oldest first
nextServerTimelineStatusMilestone?The first locked milestone. Not set when every milestone is unlocked

ServerTimelineStatusMilestone is a resolved milestone with a date added: the calendar date on which it unlocks for that server, in YYYY-MM-DD format and UTC.


Factory

import { serverTimeline } from 'whiteout-survival-data'

serverTimeline() // all 33 milestones
serverTimeline(source) // wrap a pre-filtered array

Filters

MethodSignatureDescription
unlockedAtunlockedAt(age: number)Milestones at or before the server age in days. A milestone on the age itself is unlocked
lockedAtlockedAt(age: number)Milestones after the server age in days
import { serverTimeline } from 'whiteout-survival-data'

serverTimeline().unlockedAt(100).count() // 7
serverTimeline().lockedAt(100).first()?.day // 120

Terminal methods

MethodReturnsDescription
.get()ServerTimelineMilestone[]All results
.first()ServerTimelineMilestone | undefinedFirst result
.find(id)ServerTimelineMilestone | undefinedFind by id
.findByName(name)ServerTimelineMilestone | undefinedCase-insensitive exact name match
.search(query)ServerTimelineMilestone[]Case-insensitive partial name match
.count()numberNumber of results
.resolve()ResolvedServerTimelineMilestone[]Replaces every id with its entry. Throws Error when an id matches no entry

Functions

FunctionReturnsDescription
serverAge(startDate, asOf?)numberWhole days from the start date to asOf. asOf defaults to now
serverTimelineStatus(startDate, asOf?)ServerTimelineStatusThe age, the unlocked and locked milestones, and the next one
heroGenerationAt(serverAge)numberThe highest hero generation unlocked at a server age in days

Dates are a Date or a string such as 2026-01-15. Both count in UTC and ignore the time of day. serverAge and serverTimelineStatus throw RangeError when a date is invalid or asOf is before the start date. heroGenerationAt is 1 on day 0 and 17 from day 1240, and throws RangeError for a negative or non-numeric age.


Examples

import {
  heroGenerationAt,
  serverAge,
  serverTimeline,
  serverTimelineStatus,
} from 'whiteout-survival-data'

// Server age in whole days. Day 0 is the start date.
serverAge('2026-07-01', '2026-10-11') // 102

// Everything unlocked and locked for a server, with heroes and pets resolved
const status = serverTimelineStatus('2026-07-01', '2026-10-11')
status.age // 102
status.unlocked.flatMap((m) => m.heroes.map((h) => h.name))
// ['Natalia', 'Jeronimo', 'Molly', 'Zinman', 'Flint', 'Philly', 'Alonso']
status.next?.name // 'Day 120'
status.next?.date // '2026-10-29'

// The highest hero generation unlocked at a server age
heroGenerationAt(status.age) // 2

// The day on which a keyed unlock happens
const warAcademy = serverTimeline()
  .get()
  .find((m) => m.unlocks.some((u) => u.key === 'war-academy'))
warAcademy?.day // 220

// Query the milestones directly
serverTimeline().find('day-54')?.petIds
// ['cave-hyena', 'arctic-wolf', 'musk-ox', 'titan-roc', 'giant-tapir']

// Resolve the first milestone after day 1000
serverTimeline()
  .lockedAt(1000)
  .resolve()[0]
  .heroes.map((h) => h.name)
// ['Hank', 'Estrella', 'Viveca']

Notes

The experts unlock on four days: day 120 (Holger, Agnes, Cyrille), day 160 (Romulus), day 200 (Valeria, Baldur, Fabian), and day 230 (Kathy, Ronne). Days 160 and 230 have no other content, so their milestones hold only experts. The day of each expert is also unlockRequirement.daysRequired in Experts.

Generation 17 (Aiden, Bertha, and Eleanor) is on day 1240. The package owner states that the day is accurate, because the heroes of every generation from generation 6 on unlock 80 days after the generation before.

The pet days on the timeline and unlockRequirement.daysRequired in Pets are the same. Titan Roc and Giant Tapir are on day 54, Snow Leopard and Giant Elk on day 90, Cave Lion and Snow Ape on day 140, Iron Rhino and Saber-tooth Tiger on day 200, Mammoth and Frost Gorilla on day 280, and Frostscale Chameleon on day 370.

The events that unlock are Sunfire Castle (day 53), State vs. State and King of the Ice (day 80), and Hero's Mission (day 195). They link to sunfire-castle, svs-state-of-power, king-of-icefield, and heros-mission in Events. Hero's Mission replaces Gina's Revenge on day 195, so the timeline keeps only Hero's Mission. The other unlocks text is not an event page, so it has no link.

The shard events of each hero cover five events: Lucky Wheel, Hall of Heroes, Hall of Chief, King of Icefield, and State of Power (SVS). For Generations 2 to 9, the event is the first way to get shards of a new generation. Each of these generations has one hero for Lucky Wheel, one for Hall of Heroes, and one for the other three events. Generation 1 and Generations 10 to 17 use shardSources from Heroes, limited to the same events. Jeronimo and Natalia have no listed event. Hall of Chief is listed only for Philly (Generation 2).

The Fire Crystal levels link as follows: FC 1 to FC 3 on day 60, FC 4 and FC 5 on day 150, FC 6 to FC 8 on day 315, and FC 9 and FC 10 on day 500. The "Fire Crystal Age Unlocks" entry on day 60 has the itemId fire-crystal, so it shows the Fire Crystal icon from Items. The laboratory entries read "Crystal Laboratory Unlocks (4x)" on day 150, "Crystal Laboratory Updated (5x)" on day 220, and "Crystal Laboratory Updated (6x)" on day 315. Day 315 also reads "Daily Missions Update (20x Fire Crystal rewards)".


Known gaps

Assumptions in the timeline

Justus, an expert that the game has not released, is on day 360, the day of the generation 6 heroes. He unlocks "after Gen 6 Heroes unlock in your state" and has no stated day, so day 360 is the earliest day he can unlock. resolve() returns him in experts with unreleased set to true.

Gareth is on no milestone.

Generation 18 is not announced, so it is not on the timeline.

The Fire Crystal level images are 52 by 52 pixel crops. They are small and keep the red table background.

Hall of Chief is left out of the shard events for Generation 3 and later by choice.


Next steps

Previous
Skins