OverwolfSpire Codex is now on Overwolf. Learn more

Codex Score

How every card, relic, and potion gets a 0–100 community-meta rating.

S94

What is the Codex Score?

Bayesian-shrunk win-rate, mapped to 0–100 with letter-grade tiers.

Every card, relic, and potion in Slay the Spire 2 gets a single number that summarizes how its presence correlates with winning runs, based purely on community-submitted run data, not opinion. 50 is neutral (the average run wins roughly half the time at A0), 100 is the top of the signal, 0 the bottom. It is a naive correlation with known biases (spelled out below), not a verdict on whether a card is good. The same number drives the default sort on every list page and the badge on every detail page.

Tier bands

RangeTierLabelWhat it means
90 – 100STop tierTop of the win-rate signal. An out-of-distribution win rate sustained over hundreds of picks.
78 – 89AStrongWins above the baseline reliably across a large sample.
65 – 77BSolidAbove-average win rate. A safe pick when nothing better is offered.
50 – 64CAverageThe middle of the curve. Most entities live here.
35 – 49DBelow averageBelow the baseline. Often niche or situational, sometimes just high-exposure (see the biases below).
0 – 34FUnderperformingBottom of the win-rate signal. Frequently a staple dragged down by being in nearly every run, not necessarily a bad card.

The formula

The score has two stages: Bayesian shrinkage (so a 5-pick perfect card doesn't outrank a 500-pick reliable one), then a linear map from win-rate-vs-baseline to the 0–100 scale.

baseline   = total_wins / total_runs       # global win rate
shrunk     = (wins + baseline · 50) / (picks + 50)
delta      = shrunk − baseline
raw        = (delta / 0.15 + 1) · 50
score      = clamp(raw, 0, 100)            # rounded to integer
  • Prior weight = 50. Every entity starts with the equivalent of 50 virtual picks at the baseline win rate. Real picks accumulate against this prior, so scores stabilize as data grows. A 5-pick card with a perfect record only nudges the prior; a 500-pick card with a strong record overpowers it.
  • Scale range = ±15pp. A win-rate gap of 15 percentage points above baseline maps to 100. Scores saturate beyond that, entities outside that band are genuinely off the distribution.
  • Clamp. Scores can't go negative or above 100, even if the math does. The cap is honest: an entity at the cap is “at least this good,” not necessarily “exactly 100.”

Worked examples

Same baseline (50% win rate) for all rows below. Note how sample size matters: the 5-pick perfect record gets B-tier, while the 500-pick 56% record gets A-tier.

ScenarioPicksWinsWin %Score
Massive sample, elite100070070%S100
High-N strong1007070%S94
Mid-N solid50028056%B68
Small-N perfect55100%B65
Average performer502550%C50
Small sample, no wins yet500%D35
High sample, underperforming2006030%F0

Codex Elo, the other half

Codex Score grades win rate, which is honest but confounded: a card's win rate reflects who picks it and what deck it lands in, not just the card. Codex Elo attacks that from the other side. It ignores wins entirely and instead reads revealed preference. Every card-reward screen is treated as a head-to-head where the card you take beats the cards you skip. Fit a Bradley-Terry model over millions of those decisions and you get a rating for “when offered, which card do players actually want?”

  • Skill-agnostic. Win rate rises and falls with who's playing the card. A pick decision doesn't. A strong card is preferred whether a great or a mediocre player is choosing, so Elo sidesteps the win-rate confound.
  • Anchored ~1500, 400 per decade. A card picked ten times as often as the field average over its rivals sits ~400 Elo above it, same scale logic as chess.
  • Cards only. Reward screens offer cards, not relics or potions, so base-card Elo exists only for cards.
  • Upgraded cards get their own Elo. Reward screens can offer a card already upgraded, but the run export only records which card was taken, not whether the offer was the “+” version, so every reward pick counts toward the base card and can't speak for the upgraded one. Instead the “+” variant is rated from a different revealed preference: the rest-site Smith decision. When you upgrade a card, it “beats” the other cards in your deck you could have upgraded but didn't. Fit the same Bradley-Terry model over those choices and the “+” row gets a genuine Upgrade Elo, not a copy of the base number. Starters can earn one this way too (you can Smith a Strike).

Use them together: Score says “this wins games,” Elo says “players want this when they see it.” Cards high on both are unambiguous; a gap between them is usually a build-around or a situational pick. Both, side by side, live on the Card Metrics table.

What the score is not

Codex Score is a naive win-rate correlation, and a correlation carries baggage. The two biggest confounds below are why some obviously good cards can land low and some niche ones can land high. Read a grade as a signal with caveats, not a ruling. Where a card has been offered in reward screens, Codex Elo is the less-confounded counterweight, it is skill-agnostic and not exposure-weighted.

  • Exposure-time / pick-frequency bias. A card that sits in the deck longer, or gets picked in nearly every run (starters, commons, high-pick staples), absorbs more of every loss it was present for. So heavily-used cards score low even when they're fine, which is why some staples land in the bottom tiers. An F often means “high exposure,” not “bad card.”
  • Survivorship bias. Late-game rares and uncommons only get offered in runs that already got deep, runs that were, on average, already going well. Their win rate is inflated by the run being healthy before the pick, so they can look stronger than they are.
  • Not a personal recommendation. Score answers “what wins for the average submitter?” It can't see your deck, your character, your ascension, or what relics you already have. A C-tier card can be the right pick if it solves your problem.
  • Not normalized by ascension. A relic that's great at A0 and mediocre at A10 gets one blended score. We'll add per-ascension scoring once the sample size at high ascension is statistically meaningful.
  • Not normalized by character. A relic with a 70% win rate on Defect and 45% on Ironclad blends to one number. Per-character scoring is on the roadmap (the data is already in the per-character breakdown table on each detail page).
  • Biased toward submitter pool. The score reflects runs that real humans bothered to submit, disproportionately wins, disproportionately ranked-mode players. The baseline win rate is computed from the same pool, so the bias largely cancels out for relative ranking. But absolute win rates skew higher than the average player's.
  • Refreshes every 30 minutes. Scores are cached server-side. A run you submit right now will affect the next score rebuild, not the one in your browser.

To cut the obvious confounds yourself, the Card Metrics table puts Codex Elo next to Score and slices both by per-character and per-run brackets.

See it in action

Improve the scores

Every score gets sharper when more runs are submitted, especially losses, which are chronically underrepresented in community datasets. The submitter pool is the data.

→ Submit a run