Spire Codex v1.2.1 Release Notes
The companion mod with live spectating, content brackets, draft synergies, API keys with tiered rate limits, Patreon supporters, and a wiki redesign
Features
- +The Spire Codex companion mod is live on the Steam Workshop (also on Nexus Mods). It tracks your runs as you play and powers everything new in this release: automatic run uploads, live presence, and real-time spectating. (PRs #444, #453, #487, #502)
- +Live spectating: the new /live page shows who is playing with the mod right now, and every live player gets a spectator page you can open and watch. The spectator view renders a game-like battle scene with enemy portraits, room backgrounds, and pets, plus an act map with progressive boss and ancient reveals, a play-by-play event ticker, live combat vitals with DPS, powers, the player's hand and run timer, live loot, shop, and event panels, and click-to-open deck and pile drawers with full card renders. The home page has a Live now rail and the navbar has a Live players button. (PRs #463 through #471, #477, #534 through #552, #557 through #564)
- +Twitch on /live: connect a Twitch account in Settings and a Watch on Twitch button appears on your live card while you stream. (PRs #512, #514)
- +API keys: every account can create one API key under Settings, in the new API Key tab. Keys use the sk-codex- prefix, are shown once at creation, and carry a usage counter (today and last 7 days). The /developers page documents the program with a live rate-limit table. (PRs #632 through #636)
- +Tiered rate limits: general traffic, registered keys, academia, and paid tiers each get their own per-endpoint caps, counted exactly across all backend workers on Redis. Every API response now carries X-RateLimit headers so clients can pace themselves. Limits are tunable at runtime from the admin panel. (PRs #631, #635, #637)
- +Patreon: link a Patreon account in Settings to get a Supporter badge, and active patrons are bumped to the paid API tier automatically, including live sync when a pledge starts or ends. Patreon also joined the navbar Support group. (PRs #639, #642, #643)
- +Content brackets across the stats: filter the tier lists, community stats, encounter stats, and entity pages by skill bracket (All, A10, or top 30/50/75 percent win rate) and by player count (Solo, 2P, 3P, 4P), and combine the two axes freely. The stats page got its own bracket selector, and the per-entity numbers (pick rate, character table, mini-stats) follow whichever bracket is selected. (PRs #521 through #530, #570, #575, #585)
- +Played by character: the metrics leaderboard can now filter card, relic, and potion rows by which character actually picked them, on top of any bracket. This came straight from community feedback. (PR #644)
- +Codex Elo: the metrics pages gained a head-to-head Elo rating computed from draft picks, including upgrade Elo for + cards, an Elo tier view, an Elo column with dig-deeper links on the stats overview, and weekly trend charts on every entity page that archive Codex Score and Elo over time for every bracket. (PRs #414 through #418, #441, #592, #593, #628 through #630)
- +Draft synergies: card, relic, and potion pages show an Often drafted with panel built from co-occurrence in winning decks, with starters excluded so real synergies surface. On top of that sits an offer-conditioned draft recommender: given your deck and an offer, it ranks the choices by how similar winning decks drafted. (PRs #616 through #620)
- +Entity pages got deeper: cards list which monsters generate them in a Sources section, token and orb pages list what generates them, curated and derived trivia, encounter pages carry a community deadliness line, energy costs render as proper tokens, hovertips show entity art, and Other languages plus Version history sections round out each page. (PRs #438, #599, #605, #606, #607, #622, #624)
- +Site redesign: the whole site moved to a Catppuccin Latte wiki-style layout with the Kreon typeface, a single announcement ticker instead of stacked banners, a reordered homepage character bar, thin rules instead of boxes under section titles, and a dark theme pass that lifted secondary text into a readable contrast range. (PRs #486, #581, #587, #589, #590, #610, #612, #621, #623)
- +Global search now covers the whole site: every entity type, pages, and mechanics from one search bar. (PR #430)
- +/charts: an interactive run-data explorer on Chart.js with A10, win-rate, mods, and version filters, prewarmed so it loads fast. (PRs #439, #440, #489, #491)
- +Community stats got its own page with interactive charts, a beta content spotlight, and mini-stats that follow whichever bracket you have selected. (PRs #420 through #423, #454, #600)
- +Tier list maker: build and share your own tier lists for cards, relics, potions, and monsters, with act and ancient filters and beta content included, plus fixes for clipped tooltips, blank exports, stale shared previews, and a slowdown with many cards. (PRs #406 through #408, #413, #425, #434, #436, #449, #484, #485, #532, #533)
- +The beta site merged into spire-codex.com/beta on the main domain, and the beta channel ingested game versions v0.107.0, v0.107.1, and v0.108.0 with art, renders, and changelogs. (PRs #409, #448, #498, #560)
- +Stats data quality: public stats now count only official content and official ascensions (A0 to A10), modded relics and characters are filtered out, tokens no longer get per-card rows, starter cards, starting relics, and Ascender's Bane no longer pad the character top picks, quest items left the most-removed list, survivorship noise left the relic act view, and admins can hide cheated runs from the rankings. (PRs #410, #433, #505, #506, #515, #531, #551, #568, #571, #574)
- +Browse Runs: filter by the submitter's win rate, usernames match case-insensitively, and run page hovers show enchanted card renders. (PRs #432, #437, #525)
- +The admin panel moved into the main app: a full operator dashboard behind allowlist auth and Cloudflare Access, user management, queued announcements, live-player and DAU views with an all-time concurrent peak, search analytics over committed searches in the global bar, and giveaway tools. (PRs #442, #455, #459, #460, #565, #598, #602, #604, #626, #627)
- +SEO and sharing: entity titles lead with the name, the community data unique to Spire Codex (scores, win rates, deadliness) is server-rendered so it shows up in search results, and /cards was rewritten into a proper category hub. (PRs #391, #594)
- +A /giveaway page ran the Slay the Spire 2 shadowbox giveaway. (PR #520)
- +Under the hood: a Redis application cache serves the hot read paths, leaderboards got sort indexes and materialized hot combos, per-entity stats caps lifted to cover the full game catalog, the entity-stats snapshot rebuild can fan out across CPU cores, stats keep serving through deploys and version bumps, workers no longer re-walk every run file at startup, and releases stopped re-uploading a 2.6 GB static layer every deploy. (PRs #384, #385, #393, #426, #431, #450, #458, #461, #586)
Fixes
- ~Hotfixed a bad rate-limit callable that briefly 500ed every API request during the tiered-limits rollout, and added full-stack middleware tests so it cannot recur. (PR #638)
- ~API key and admin responses are never edge-cached anymore; a cached empty key list could previously mask a freshly created key. (PR #640)
- ~CDN images no longer break on Firefox (especially mobile): every image now loads in CORS mode so a cache entry poisoned by a mixed-mode load cannot blank out character art. (PR #641)
- ~Co-op-only cards (like Demonic Shield) no longer appear in Solo stats. (PR #644)
- ~Sign-in fixes from right after the 1.1.3 launch: OAuth no longer fails across multiple workers, a duplicate-key error no longer blocks new accounts, two Steam-callback crashes are gone, and profile run linking works again. (PRs #379, #380, #382, #394, #397)
- ~Monster multi-hit intents display correctly (Aeonglass Eye Lasers is 12x2, not 12). (PRs #601, #603)
- ~Single-target cards no longer render as AoE when their target type is choose. (PR #435)
- ~The potion drop-rate page had the pity mechanic backwards: a bonus-zone drop lowers pity, it does not raise it. (PR #516)
- ~A site-wide correctness sweep against the decompiled game code fixed a batch of wrong numbers and descriptions, including the map-generation and card-rarity pages, and the scoring page now notes that reward screens can offer upgraded cards. (PRs #401, #402, #403, #517, #569)
- ~Ancient relic pools are now generated straight from the game code instead of maintained by hand, which fixed the v0.107.1 pool drift (Neow's new relics, Tezcatara's Seal of Gold). (PRs #500, #501)
- ~Steam linking no longer creates duplicate accounts, and admin rename and merge bust the run-detail cache. (PRs #510, #511)
- ~Per-user metrics and filtered stats no longer freeze at a stale run count. (PRs #524, #529)
- ~Encounter deadliness no longer picks tiny noise rows (Bygone Effigy showed stats from 2 runs). (PR #608)
- ~Mobile and layout fixes: the home stats table and Recent Runs box no longer scroll sideways, the home layout survives switching languages, homepage dividers and showcase arrows behave, the live pill no longer pushes the profile menu off-screen, and the run upload drop zone buttons are readable again. (PRs #480, #497, #588, #590, #613, #625)
- ~The beta /api/cards endpoint no longer 500s on cards with fractional variables, beta-only entities resolve their images on run pages and tier lists, the duplicate beta bars on entity pages merged into one, and ancient events no longer leak a raw localization key on the run page. (PRs #472, #474, #481, #483, #492, #572)
- ~Restored missing or regressed images: Scare and Wither portraits, the new v0.107.1 relics, monster renders, a clean Aeonglass boss icon, and card-grid images that bypassed the CDN. (PRs #390, #404, #499, #503, #504)
- ~Restored missing or doubled power icons (Withering Presence, Tainted, live combat powers). (PRs #552, #573)
- ~The runs export no longer 500s on legacy timestamps, and /charts survives post-deploy cold starts. (PRs #567, #596)
API Changes
- >New /api/keys endpoints to create, list, and revoke an API key (one per account), authenticated via the X-API-Key header. /api/rate-limits returns the live per-tier, per-endpoint caps, and every response now carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.
- >New /api/auth/patreon endpoints for linking a Patreon account, plus a webhook that syncs pledge changes to the paid tier.
- >New /api/presence endpoints power live tracking: mods POST presence beats, /api/presence/active lists live players, and /api/presence/{steam_id} returns one player's live state for the spectator pages.
- >New /api/pairings endpoints return item co-occurrence synergies, and POST /api/draft-advice ranks an offer against a partial deck.
- >/api/runs/metrics/{entity_type} gained bracket and character parameters, and /api/runs/stats accepts combined player-count and skill brackets (for example 2p_wr50) everywhere brackets apply.
- >New /api/runs/stats/{entity_type}/{entity_id}/history returns the weekly Codex Score and Elo archive behind the trend charts.
- >/api/runs/encounter-stats gained a game-version axis, and the runs export gained keyset pagination and time-range filters.
- >Admin, feedback, auth, and telemetry endpoints are hidden from the public API docs.
