Data Dragon
Riot's official feed
Has Names, icons, prices, tooltip templates.
Lacks Every formula. Sometimes it is simply wrong: one patch listed attack damage per level as 0 for 172 of 173 champions.
itemize.lol
League of Legends has 173 characters, each with hundreds of ways to equip them. Players argue about the best one forever, because the game never tells you the number that would settle it. This site works that number out.A theorycrafting site whose real work is the data: a pipeline compiles the game's own files into formula trees each patch, hand-written models say how those formulas become damage, and an engine simulates the fight. TypeScript, Hono, Cloudflare Workers.

–
–
Every number comes from itemize.lol's live API, patch 26.21, as you move a slider.
You would think the damage of an ability is written down somewhere. It isn't. Three places each hold a piece of it.No public source gives real ability damage. Each has part of it, so the dataset is built in three layers, each doing only what it is reliable for.
Riot's official feed
Has Names, icons, prices, tooltip templates.
Lacks Every formula. Sometimes it is simply wrong: one patch listed attack damage per level as 0 for 172 of 173 champions.
mirrored by Community Dragon
Has The real formulas, per-rank values, base stats.
Lacks How the formulas combine.
written by people
Has Hit counts.
Lacks Currency. Its Samira numbers were a balance pass behind when this was built.
The game's data describes one. The ten appears only in the sentence a player reads. A person has to notice that and write it down, for 865 abilities, without ever typing in a number that the next patch will change.The game data has one calculation, DamageCalc: a single shot. That she fires ten is only in the tooltip's prose. Models name calculations and never contain game numbers, so balance patches flow through on the next build.
r: {
hits: [{
id: 'shots', type: 'physical',
amount: 'DamageCalc',
count: 10, over: 2,
crit: 'CriticalDamageCalc',
}],
},src/models/champions/Samira.ts
A wrong number that looks right is the worst thing a calculator can give you. So every ability carries a label saying how far to trust it, and "verified" is still at zero, because nobody has checked these against the live game yet.Every ability and item carries a status, returned by the API and shown in the UI. Models are fingerprinted against the spell's shape, so a rework marks them stale. A model naming a calculation the patch no longer has fails to bind and falls back: it can never silently read zero. Anchors stop the build if the stat codes get renumbered.
Live coverage for patch 26.21: 865 abilities and passives, 173 champions.
League changes every two weeks. Every three hours this site checks, and if there's a new patch it rebuilds itself and goes live. I find out from an issue, and only if something needs a person.A scheduled GitHub Action runs the whole update every three hours. It also builds a preview from Riot's test server, keeps the previous patch beside the live one, and opens an issue with exactly what a person has to look at when a model stops binding or an anchor fails.
possible six-item builds
Too many to try. So the auto-build throws out what can't win, tries what's left, and tells you whether it checked everything or just found the best it could. It happens in your browser in about a fifth of a second.The game's rules prune the shop, weak items go next, at most 22 survive. At 6,000 builds or fewer it scores them all and says Exact; otherwise a beam of 8 then swaps, and says Best found. A few hundred to about 2,000 builds in 0.1 to 0.3 s, in a Web Worker, on the same engine code as the API.