PeaversSplitsData
A data library addon for World of Warcraft that provides benchmark keystone boss splits from parses.gg, for other addons to read.
Features
- Median time from the start of a Mythic+ run to each boss dying, for every dungeon in the current season
- The middle half of the pool (p25/p75) alongside every median, so a consumer can say what a delta is worth
- The run count behind every figure -- nothing here asks to be trusted without its sample size
- Exact keystone levels only, never a band: a level with no entry means no pool at that level cleared the sample floor
- One season only, with the patch it was baked against exposed as
API.GetPartition - Daily updates, generated from parses.gg's public splits endpoint
- Ships no UI; every call is nil-guarded and safe to make optimistically
A split is the time from the start of a Mythic+ run to a boss dying. It is the number a group is judged by while the key is being run - the dungeon timer is a single deadline at the very end, and it tells you nothing until it is too late to do anything about it, whereas being ninety seconds down at the second boss is knowable at the second boss.
This addon ships no UI. PeaversSplits is the consumer.
What is in it
For every dungeon in the current season, at every exact keystone level with enough runs behind it, and for every boss:
| field | meaning |
|---|---|
split |
the pool's median seconds from the start of the run to that boss dying |
fast / slow |
its p25 and p75 - the middle half of the pool |
runs |
how many runs the figures rest on |
order |
where the game lists that boss in the dungeon |
name |
the boss's English name |
fast and slow are not decoration. A delta of forty seconds means nothing on
a boss where the middle half of the pool spans four minutes, and a consumer that
shows a bare +0:40 invites the reader to conclude something the number cannot
support.
Two rules the shape enforces
Exact keystone level, never a band. Enemy health scales per level, so a +19
is genuinely slower than a +10 for reasons that are not the group's doing. A
level with no entry means no pool at that level cleared the sample floor - it
does not mean the neighbouring level will do. API.GetLevels exists so a
consumer can say "no pace for +14 yet, the highest published is +12" rather
than quietly comparing against +12.
One season only. Every dungeon here was keyed on the same patch, so nothing
in the file can be compared against a pool from another one. A dungeon rotated
out of the current season simply has no entry, rather than carrying last
season's numbers under this season's name. API.GetPartition returns the patch,
and is worth showing: if the game has moved on and the data has not been
rebaked, that string is the only thing that says so.
Where the data comes from
Generated by splits-module in
PeaversAddonDataSupplier
from parses.gg's public /api/keys/{id}/splits, which
publishes the same pool the site's own Splits widget is drawn from. The
generator runs daily and opens a pull request here, which auto-merges.
src/Data/Splits.lua is overwritten wholesale on each run. Do not edit it by
hand. It is named for its contents rather than for its source, deliberately:
naming a data file after where the data came from is what turns a source change
into a silently unloaded file.
For Developers
local API = _G.PeaversSplitsData and _G.PeaversSplitsData.API
local mapID = C_ChallengeMode.GetActiveChallengeMapID()
local level = C_ChallengeMode.GetActiveKeystoneInfo()
-- One boss, at this exact level.
local pace = API.GetSplit(mapID, level, encounterID)
if pace then
print(("pool reaches this boss at %.0fs over %d runs"):format(pace.split, pace.runs))
end
-- The whole route, before the key starts.
local bosses = API.GetBosses(mapID, level)
-- What IS covered, for saying something useful about a level that is not.
local levels = API.GetLevels(mapID)
API.GetDungeonName(mapID) --> "Murder Row"
API.GetPartition() --> "12.1"
API.GetLastUpdate() --> "2026-08-27 19:31:24"
Every call is guarded at every level of the lookup and returns nil on any miss
rather than erroring, so it is safe to query optimistically straight out of
ENCOUNTER_END. Returned tables are shared, not copied - treat them as
read-only.
Full API documentation is in the docs folder, and PeaversSplits is a working implementation example.
Installation
This is a data library used by other Peavers addons and doesn't require direct user interaction. PeaversUpdater installs and updates it automatically alongside its parent addon, or download it directly from CurseForge.
Part of the Peavers addon collection · Report an issue · Support development on Patreon

