OverwolfSpire Codex is now on Overwolf. Learn more →

Spire Codex v1.3.0 Release Notes

Run replays, the site in 15 languages, profile insights, per-character Elo, a bestiary with encounter stats, Steam-only sign-in, and a new stats engine

Features

  • +Run replays: every run uploaded through the Spire Codex mod gets a Replay button on its run page. The replay walks the run floor by floor on the act map: the route you took, every fight with turn-by-turn plays, card picks and skips, event choices, shop purchases, HP and gold over time, and where you reloaded. It shows only what the mod recorded, so a fight whose end was never captured says so instead of guessing a result. Replays are stored on our own server, uploads default on behind a consent card in the mod, and the mod keeps the journal complete across quit-and-continue. (PRs #1020, #1024, #1028, #1029)
  • +The whole site in 15 languages: routing moved to next-intl, every UI string is translated (about 1,900 new keys), and the pages that still showed English (keywords, badges, monsters, events, ancients, merchant, modifiers, mechanics, compare, tier list, community stats, charts, stats, live) were localized. Localized card and event pages now carry the same community stats as the English ones, profile cards and relics show in the page language, the event placeholders the parser writes follow the parse language, and Traditional Chinese joined as the 15th language. The README is translated into every supported language too. (PRs #667, #673, #674, #689, #690, #777, #810, #1034, #1037, #1040, #1045, #1046)
  • +Profile Insights: your profile carries your own community stats, computed in the background and kept for a day, with filter dropdowns, death sections with legends, and public player pages with privacy controls. Profiles show Elo, run lists sort by play time, username-tagged runs are claimed on sign-in, a post-run insight card appears after an upload, and bulk uploads report progress in chunks with retries so a dropped connection no longer loses the batch. Runs can be deleted in bulk from the profile, and a run page has a report button. (PRs #754, #833, #836 through #838, #844, #845, #849, #850, #857, #860, #865, #871, #873, #984, #1013, #1014, #1047)
  • +Per-character Elo ladders: the player Elo board rates each character separately and blends them into a headline rating, counts the official cast only, and no longer times out. Codex Elo for cards treats skipping a reward screen as a competitor, fits per bracket on the skill ladder with provenance, and shrinks thin samples toward the average card so a rarely skipped card in a small bracket cannot run away to the top. (PRs #713, #859, #861, #863, #957, #965, #1038)
  • +Bestiary encounter stats: every monster page carries its encounters' community stats as tiles plus fatal-rate charts by skill tier, party size, game version, and character, and shows which builds die to or beat each encounter (highest win rate first). (PRs #758, #770, #876, #878, #1016)
  • +Community stats grew a Character row that composes with skill, players, mode, and version, a game-mode filter, behavior charts with an ascension heatmap, removal and campfire donuts, a vertical win-rate row, and time-to-win charts (how long winning runs take, plus a daily average). Totals count official runs only and abandons are shown separately everywhere. Bosses the game later removed (The Doormaker) stay on the deadliest list for the versions they shipped in. Modded event and campfire options and custom-game records are dropped. (PRs #685, #820, #826, #839, #840, #851, #853, #856, #858, #923, #928, #940, #1017)
  • +Game versions are a bracket axis everywhere: every stats page, tier list, entity page, and the metrics dropdown can be sliced to one release version and combined with skill and player-count brackets. Entity pages gained a per-version time machine, an infobox version dropdown, a Codex Score by patch chart, and a Version history section built from our own patch diffs. (PRs #679, #683, #686, #725, #735, #744, #747, #756, #812, #847, #869)
  • +Tier lists: brackets on the tier list compose freely from a live entity cube (any skill, player count, mode, character, and version combination), relics get per-ancient tier lists with relative tiers, entity detail pages read their brackets from the same cube, and the pages are hardened against filter crawls. (PRs #734, #736, #737, #953, #967, #1031)
  • +Similar runs and archetypes: nightly composition vectors power a Similar runs section on run pages and an archetypes view with community names, share sparklines, and a meta-movers strip. Global search is now semantic over the whole entity catalog. (PRs #717, #739, #745, #751 through #753, #755, #877)
  • +Entity pages: the card page prose follows the upgrade toggle (upgraded name and changed values in green, X-cost multi-hit handled), the card header has an inline upgrade toggle, the library gained a cost filter with energy and star icons, filter dropdowns keep their labels visible and read Any instead of All, the section submenu reads as a table of contents, Enchantments sit in the Cards and Combat menu, and card trivia was removed. (PRs #703, #727, #807 through #809, #813 through #819, #996)
  • +Guides: Neow relic offers, the best Slay the Spire 2 mods, card tier list guides for all five characters, boss deadliness, enchantments, keywords and terms, five more for common questions, a localized scoring explainer, and patch recaps for v0.109.0, v0.109.1, and v0.110.0. (PRs #653 through #657, #668, #675 through #678, #692, #802, #804, #823)
  • +Beta channel: ingested v0.109.0, v0.109.1, v0.110.0, and v0.111.0 with art, renders, and changelogs, and the game changelog now mirrors the official Steam patch notes one to one. Beta cards render on /live with a MODDED CARD tile for unknown ids, and beta guides link into the beta channel. (PRs #647, #688, #696, #801, #806, #821, #841, #846, #870)
  • +Live: every co-op seat renders as a party sprite on the live combat scene and a revived player reads as alive. The home page has a live run counter and live boxes that refresh on tab focus. (PRs #716, #718, #743, #797, #798)
  • +Home and navigation: a Spire Codex news tab with an unread megaphone in the nav, a Steam mod landing page in the Tools menu, an /images browser over the full main and beta asset dumps with per-folder zip downloads, the Art Exporter Workshop tool in the Tools menu, and on phones the get-started tiles are a swipe carousel. Announcements were trimmed to one ticker. (PRs #768, #770, #771, #774, #775, #824, #827, #829, #1015)
  • +Sign in with Steam only: Steam is the one way to create an account, Discord and Twitch became connectors under Settings (existing Discord and Twitch logins still work), the whole account tile is the sign-in button, and logins are plain links. Sign-in binds to the browser that started it, OAuth state is bound the same way, and the site ships baseline security headers and a disclosure policy. (PRs #746, #748, #749, #1006 through #1010, #1025, #1044)
  • +Browse Runs and run pages: a shop: search filter, server-rendered share pages, a hidden-run banner on share pages, co-op run pages show the right player, exports carry run ids, anonymous run titles no longer collide, losses read L, and every displayed date and chart bucket is the played date in Pacific time. (PRs #648, #664, #671, #684, #830, #854, #855, #867, #872)
  • +Cheated runs: impossible times, missing act bosses, one-turn boss kills, and co-op-only cards in solo decks are auto-hidden with an admin review queue, and hidden or deleted runs are excluded from every ranking, export, seed, profile, and stats surface. Soft-deleted runs restore on re-upload. (PRs #740, #772, #773, #776, #784, #796, #800, #862, #866, #938, #966)
  • +Overwolf: the uninstall survey was rebuilt around Overwolf's guidelines. (PRs #1026, #1027)
  • +For developers: the API advertises itself to agents through an api-catalog well-known URI, Link headers, auth docs, and llms.txt; rate limits and the run export are documented accurately; the export paginates by keyset; and every endpoint's rate limit is tunable from the admin dashboard. (PRs #650 through #652, #658, #759, #993, #995)
  • +Search and SEO: real page content for non-JS crawlers, localized pages server-rendered in their own language, complete hreflang alternates, sitemap coverage for localized hubs, guides, and ancient tier-list variants, a fixed Spanish hreflang, and the Search Console indexing issues cleared. (PRs #650, #659 through #666, #669 through #672, #790 through #794, #843, #1002, #1036)
  • +Under the hood, the stats engine was rebuilt: runs live in a DuckDB data lake built by an isolated ingest cycle with a lock, manifest, per-stage timing, memory budgets, and a dedicated rebuilder container that survives deploys. Stats fold new runs in incrementally instead of rewalking everything, snapshots carry a data-through cursor, and community stats, charts, encounter stats, tier lists, profile insights, deep tables, and history all serve from lake-built stores. A second ingest box is plumbed through an artifact bus. Pages warm automatically after each deploy, first-load JS and mobile page weight dropped, the frontend runs the React compiler on Next 16 and Node 24, colors come from purpose-named design tokens in both themes, CI isolates PR jobs and pins actions, Mongo is backed up daily, and dead code from the Turso era is gone. (PRs #691, #693 through #695, #698, #700 through #702, #705 through #715, #720 through #724, #728 through #732, #742, #769, #779 through #783, #785 through #789, #799, #803, #805, #831, #834, #923 through #927, #929, #931 through #937, #939, #941 through #952, #954 through #956, #959, #960, #962 through #964, #968 through #974, #976 through #979, #981 through #983, #985 through #988, #990, #992, #994, #997 through #999, #1001, #1003 through #1005, #1011, #1012, #1023, #1033, #1043)

Fixes

  • ~Card rankings no longer count starters, curses, tokens, or Ancient cards as picks; Suppress at the top of the A10 bracket was this. (PR #1049)
  • ~Entity pages stopped redirecting valid localized URLs to their hub when the API hiccupped (Google recorded those as Soft 404s), unknown ids return a real 404, and the client no longer flips a server-rendered page to Not Found when its refetch fails. (PRs #1035, #1039)
  • ~Profile insights load again after the ascension heatmap crashed the page. (PR #1048)
  • ~The stats data-through date on the runs pulse no longer goes blank between ingests. (PR #1050)
  • ~Community stats: fixed a 500, empty Standard, Daily, and Custom views, nonsense Handles-it-best builds, ascension stats timing out, and skill plus version composite filters. (PRs #848, #874 through #876, #1000)
  • ~Batch run uploads no longer fail on the proxy body cap. (PR #1013)
  • ~The channel switcher works on localized pages and keeps your place, and the language switcher no longer appends /zht onto zht pages. (PRs #690, #810)
  • ~Invalid YAML that took down every mechanics page, light-mode contrast on green and orange buttons and banners, entity trend charts that never rendered, and the new Neow relics on beta. (PRs #681, #682, #687, #719)
  • ~Beta portraits inherit the main image URL so they stop 404ing, beta-catalog entities pass the official-id stat filters, and a stray newline in the beta pointer no longer breaks the beta channel. (PRs #832, #835, #842)
  • ~Hidden dailies no longer leak onto profiles, profile insights find runs by their real hash, and cross-user run-ownership takeover through the claim path is closed. (PRs #746, #836, #866)
  • ~Seed lab and deck lab searches work under a relative API base, the run export no longer times out, and the sitemap no longer fails the site build when the API is unreachable. (PRs #764, #993, #1041)
  • ~Home page: compact stats, working board filters, an ascension 400, the health identity, and redirect fixes, plus file-not-found pages no longer bounce to the home page. (PRs #930, #980, #989)
  • ~UI cleanup pass across the site, and the CDN image loader no longer caches poisoned entries. (PRs #641, #1018)

API Changes

  • >New /api/runs/{hash}/replay: POST uploads a gzipped replay journal for a run you own, GET returns it with a strong ETag, DELETE soft-deletes it. Run documents carry has_replay.
  • >New /api/runs/encounter-series returns fatal-rate series per encounter by skill tier, party size, version, and character, and /api/runs/encounter-stats accepts encounter= to fetch one encounter's fights.
  • >The bracket grammar gained a character token and a game-version segment that compose with player count, skill, and mode (for example solo:a10:v0.111.0) on the community stats, tier list, metrics, scores, and entity endpoints.
  • >The runs export paginates by start plus cursor instead of offsets. Run responses are served stale-while-revalidate.
  • >Account creation is Steam only. The Discord and Twitch OAuth callbacks link connectors to an existing account and no longer create users.
  • >Every rate limit is documented per endpoint on /developers, and the API publishes an api-catalog well-known document with Link headers for discovery.
  • >The changelog endpoint mirrors the official Steam patch notes for game versions; site releases keep their own entries.