Skip to main content
THE VAULT · WEB
Marketing site →
Slay the Spire 2 · Vault for the Web

Run history, stats, and co-op, in your browser.

Drop your Slay the Spire 2 save folder in to see the same Overview, Characters, Ascensions, Relics, Cards, and Recent Runs tabs the macOS app has. Everything stays in your browser — nothing uploads. Optional Steam sign-in unlocks the live co-op partner feed.

macOS app →

Checking who's around…

Heads up: you're in an in-app browser (app) that may break Steam sign-in. Tap the share / menu button and choose Open in Safari (iOS) or Open in Chrome (Android) first.

What signing in actually does

  • Verifies you own the Steam account you claim, via Steam OpenID.
  • Mints a 30-day session. No password ever leaves Steam.
  • Pulls only your persona name and avatar.
  • Posts your status to the public feed only while this tab is open.
  • Sign out at any time to drop your row from everyone's feed.
THE VAULT web · for STS2
STATS
COMMUNITY
Loading… Looking
…
Loading…
Showing sample data — link your STS2 saves to see your runs.

Overview

Your run history at a glance.

Showing sample data — link your STS2 saves to see your runs.

Characters

Win rate by character.

Showing sample data — link your STS2 saves to see your runs.

Ascensions

Win rate by ascension level.

Showing sample data — link your STS2 saves to see your runs.

Top Relics

Best relics by win rate (min. 3 runs).

Showing sample data — link your STS2 saves to see your runs.

Cards

Most picked vs. most skipped.

Showing sample data — link your STS2 saves to see your runs.

Recent Runs

Latest runs from your history. Auto-refreshes from disk.

Showing sample data — link your STS2 saves to see your runs.

Find a co-op run

Post a run, quick match, or join players looking right now.

Who’s around right now

Loading…

New
Try the Co-op Lobby Beta

Post the run you want to play, quick match with compatible players, and browse open run lobbies. You can switch back to Classic Co-op anytime from the link under the page title.

… …
Sending…
How co-op works

Click Invite to play on anyone in the list. They get a popup with a preset message and either accept or decline. Nothing fires off until they accept.

Players online 0

Loading…

…

0 Open Rooms
0 Looking Now
0 Active

Invites for you 0

Seat Requests 0

Respond before they expire. Seat requests help players join run lobbies before moving to the Party Room.

Open Rooms 0

Browse open STS2 rooms, claim a seat, then coordinate in Party Hub before Steam.

Loading open lobbies…

Best Matches 0

Players ranked by goal, ascension range, voice, and recent activity.

Loading best matches…

Your status Live
… …
Sending…

Visible while this page or the desktop companion is active.

  1. 1
    Host or request

    Host the room you want to play, or request to join one that matches your goal and ascension.

  2. 2
    Pair up

    When the host accepts, you’re paired. Both see the same active pairing.

  3. 3
    Add on Steam

    Open the partner’s Steam profile from the pairing card and send the friend invite.

  4. 4
    Play the run

    Steam handles the actual co-op invite. End the pairing here when you’re done.

SpireVault does not modify the game, automate Steam invites, or replace Steam multiplayer.

Players Looking Now 0

Browse everyone active right now.

Loading…

…

Community highlights

Runs the community is excited to share. React, leave a quick comment, or post your own from the share modal on any run.

Loading community highlights…

News & updates

Notes from Corey, the human behind the app. Bug fixes, new features, and what's coming next.

Painted illustration of a glowing campfire on a high stone outpost, with four hooded travelers seated around it. In the foreground a wooden notice board pinned with parchment scraps that read like handwritten lobby listings, and a small brass hourglass on a stand beside it. Behind, a vast dark spire rises against a violet-and-ember dusk sky.
Update · May 26, 2026

The Co-op Lobby is the default now — and it does eight things Discord can’t

Corey · ~8 min read

Open the Co-op tab today and you’ll land on the new lobby surface instead of the live roster. Same Steam OpenID sign-in, same friend-gated invite at the end — the middle is what changed. The big bet: a co-op tool earns its real estate by doing things the Slay the Spire 2 Discord can’t do, not by being a prettier version of the same thing. Eight of those landed today, in two back-to-back releases (v0.10.0 and v0.11.0). The biggest of them — verified co-op reputation — is the first SpireVault feature that’s strictly impossible without the save data we already have, and it’s the start of the lock-in.

What you’ll see when you open it

Hero card with two large buttons in the same row above the fold: Quick Play (auto-match into the best open room) and Host a Room (3-step modal — goal & timing, party shape, review). Below it, four stat tiles: online now, hosting rooms, looking for group, and a new starting soon tile that lights up green when somebody’s countdown is ≤30 minutes out. Below the stats, your Campfire Log ribbon — rank, parties, hearts, friends, and an XP bar showing how close you are to the next rank. Tap it for the full personal-history sheet (friends roster, run timeline, send-a-heart). Below the log, the Live Parties list, sorted soonest-first.

The eight Discord-impossible features

1. Live-updating Discord LFG posts

When you host a room with a planned start time, the “Copy Discord LFG Post” button now embeds Discord’s native <t:UNIX:R> timestamp tags. Paste the post into your channel and Discord renders it as “Starts in 28 minutes” — and re-renders it five minutes later as “Starts in 23 minutes” without anyone editing or re-posting the message. Each viewer also sees their own local time via <t:UNIX:t>. You’d have to type the message manually with a Discord bot to do this otherwise. The toast that appears after copying tells you straight up: “Discord LFG post copied — it’ll live-update in your channel.”

2. A synced GO moment

Hosts can set a planned start (now / 15m / 30m / 1h / when full) when they post a room. Everyone in the lobby sees the same countdown badge tick down in real time. At T-60s, anyone who opted in gets a chime and a browser notification; at T-0, a green pulse + “Launch Steam now” CTA appears inline on the row, and the host sees a one-tap “⚡ Start now” pill if they want to fast-forward. Voice optional, voice required, no-mic-needed — doesn’t matter; the countdown is the coordination.

3. A play-again memory that survives the run

Discord doesn’t remember who you played with last week. The Campfire Log does. Every party you join gets logged locally; every teammate becomes a friend with a count and a last-played stamp. Open My Co-op and you can send any of them a heart (one per teammate per 24 hours, so it stays meaningful). The XP curve is real — party joined: +10 XP, completed: +15, heart-run goal: +25, heart sent: +5 — and the bar inside the Rank tile fills smoothly as you accumulate. Two-tab open? A heart sent in tab A updates tab B inside ~250ms via BroadcastChannel.

4. Verified Co-op Reputation the lock-in feature

Every host on the live-parties list now has a small tier dot next to their name. Five tiers, server-derived from actual save data: your uploaded run history plus a co-op event log the server keeps for every party you’ve hosted, joined, completed, or bailed on. Newcomer → Regular → Trusted → Veteran → Ascended. Up to four optional badges show alongside — Heart kill, A20 clear, Host reliable, Active recent.

The public endpoint (/coop/reputation/:steamID) returns a redacted shape — tier, badges, and a bucketed completion count — so the formula isn’t directly farmable. Your own /coop/reputation/me shows the raw counters. Newcomers render no dot — a fresh account shouldn’t wear a colored badge that reads as a downgrade.

This is the answer to “can I tell whether this person finishes runs or bails at floor 5?” Discord cannot answer that. The data lives in SpireVault. Now it shows up where it matters.

5. Daily Co-op Challenge

Every UTC day, SpireVault picks a deterministic seed plus a suggested character and ascension. Every player in the world sees the same daily. A gold-bordered tile under the hero stats shows today’s seed; tap it and the seed is on your clipboard with a toast telling you to type it into STS2’s seed field on character select. Hosts who tag their lobby note [daily=YYYY-MM-DD] show up in the day’s joined count. We don’t enforce the seed (no game-side mod) and we don’t make it a leaderboard — the challenge is a coordination signal: “if you want to play the same board as someone else right now, this is it.”

6. Synced Ready-up + Auto-advance

Extends the synced GO above: a single Ready pill on your own party row, an X / Y ready count visible to every member, and an auto-advance to in_game the moment all live members are ready and the planned start has passed. Frontend-only, no leader election — each client makes its own decision against observable state, so two clients arrive at the same conclusion from opposite corners of the world. When you’re the last one not-ready, the rest of the lobby sees “Waiting on your name” instead of guessing. Opt-out per browser: localStorage["pf.readyup.autoAdvance.v1"] = "off".

7. Post-run Shared Report

Once anyone in the party reaches in_game, a Share this run button shows up next to Ready on your own party row. Click, give it an optional one-line caption, and the server captures a 30-day snapshot of the party (display names, characters, roles, status — no Steam IDs) into a public-readable KV blob. The URL app.spirevault.app/share/coop/<shareId> goes to your clipboard, pre-formatted for Discord / X / Reddit. The pretty HTML render of that URL with OG cards ships in v0.11.1 alongside this post.

8. Steam Rich Presence — web endpoint live, helper next

Half-shipped on purpose. The POST /coop/rich-presence/ingest endpoint is live, audited, rate-limited, and ready for the native helper that watches Steam’s own RunningAppID on your machine and flips your SpireVault status to “Looking” the moment STS2 boots. The macOS helper is a SwiftPM LaunchAgent that’s already buildable in VaultApp/Helpers/SteamRichPresence/; signed pkg / MSI / tarball ship in v0.12.0. The endpoint is up now so the helper can talk to a real production target on day one.

This is the feature that changes SpireVault from “tab you remember to open” to “daemon running when you boot the game.”

Smaller things, all of them mattering

  • Quiet match — a single toggle next to the hero CTAs that biases matchmaking toward voice-optional rooms. For the player who just wants to play and not talk. Renamed from “Quiet mode” because Sound and Notifications already mean different things and overloaded copy was confusing.
  • One Alerts gear instead of two floating toggles. Sound chime + Browser notification now live in a single popover anchored to a ⚙️ gear next to Quiet match. Green dot lights up when either is active so the closed state still tells you what you’ve enabled.
  • Live Parties auto-sort by urgency. Rooms starting in ≤15 min sort first; then 15–60 min; then everything else. Inside a tier, it’s your fit score and recency. So if you want to play right now, the imminent rooms are the first thing you see.
  • Pagination. List caps at 25 rows with a “Show 25 more” footer. The 1-second runtime tick uses an IntersectionObserver so we only update countdown badges on rows you can actually see — even at 200 visible rooms the page stays cool.
  • Reconnecting banner. If /coop/state fails twice in a row, you see a yellow “Reconnecting…” banner. After five fails it goes red with “Can’t reach the server. Your stats may be stale.” A “Retry now” button forces a refresh. No more silently-stale UI.
  • Steam launch fallback. Click “Launch Steam” at GO time without Steam installed and ~800ms later a “Don’t have Steam? Open the store →” link appears under the CTA. Same pattern Discord and Slack use for their deep links.
  • Reduced motion respected. If your OS has prefers-reduced-motion: reduce set, the tab-title flash, the GO pulse, and the “starting soon” tile’s pulse all turn off. Information is still there in color and text.

Server-side kill switch — in case something’s on fire

This is shipping default-on, which means I need a way to roll it back without a deploy. Three layers, in priority:

  1. ?beta=off on any SpireVault URL persists an opt-out for that browser. ?beta=kill sets a per-browser kill flag. ?beta=on clears both. Query string is stripped on load so links stay clean.
  2. The Cloudflare Worker reads COOP_LOBBY_BETA_KILL=1 from env and emits flags.coopLobbyBetaKill: true in /coop/state. Every connected client downgrades to Classic on the next poll (≤15s focused, ≤60s hidden). No deploy.
  3. Code-level: ENABLE_COOP_LOBBY_BETA = false in Web/script.js and a redeploy. Hides the toggle entirely.

Prefer the old layout? In the lobby surface, Switch to Classic Co-op sticks for your browser. You can flip back any time.

What I’m not claiming

This isn’t the must-use STS2 co-op tool yet. The build is polished, the integration with Discord is genuinely useful, but a lobby finder is only as alive as the lobby list. If you open it and see “No live parties yet” that’s the failure mode I can’t fix from a UI — it needs hosters. So if you read this and you’re going to play co-op tonight, host the room here first and then drop the live-updating Discord post into your channel. That’s the bootstrap.

The next move is the half of feature 8 that’s still on the bench: the signed native helper that runs in your tray when STS2 boots and flips your status to “Looking” without you opening a tab. v0.11.0 shipped the server endpoint and the macOS Swift skeleton; v0.12.0 ships the signed packages for macOS / Windows / Linux. That’s the version of SpireVault where “should I open the tab” stops being a question because it’s already running.

Try it

  1. Sign in at app.spirevault.app with Steam.
  2. Click Host a Room. Pick “In 15 min.” Click Copy Discord LFG Post when it appears. Paste into your STS2 Discord channel and watch the timestamp render live.
  3. Tap the ⚙️ Alerts gear, turn on Sound and Notifications. Walk away. Get pinged at T-60s.
  4. If anything feels off, file an issue at github.com/c3rooks/SpireVault/issues with a screenshot.

— Corey

Update Co-op v0.10.0 v0.11.0
Open the Co-op Lobby → Full changelog → Report something off →
Update · May 10, 2026

The desktop app is now the cloud — backgrounds, characters, animations, all of it

Corey · ~3 min read

v0.9.2 stops maintaining two parallel UIs. The macOS app now embeds the live web companion (this page) for every data tab — Overview, Characters, Ascensions, Top Relics, Cards, Recent Runs, Co-op, Community Highlights, News. Same backgrounds, same character art, same animations, same hover states, same modals, same share-cards. One UI, one source of truth, no drift.

What changed

Stats tabs are the cloud, rendered inside the app

We replaced the macOS native versions of every data panel with a WKWebView that loads the same page you'd open in Chrome. The native sidebar drives the embedded view via a small window.SpireVault bridge. Click a tab, the web flips. Click an in-page link inside the embedded panel, the native sidebar follows along.

Your runs stay local — and show up instantly

VaultCore still parses your STS2 saves natively. The desktop pipes the parsed runs into the embedded page via the bridge so the web sees your real history (your actual win-rate, your actual best floor) instead of the demo set — without uploading anything you didn't already opt into uploading.

Native pieces stayed native

Beta and Settings stayed in SwiftUI: Run Coach needs an NSPanel with sharingType=.none and a Keychain-backed API key (a browser can't replicate either), and Settings needs NSOpenPanel for save folder linking. The menu bar (About, Check for Updates, Help) is still native. The slim toolbar above each panel still has Rescan / Export / Open Saves Folder.

Community Highlights now actually loads

An old typo had the desktop hitting /api/highlights while the worker exposes /highlights — every desktop user was getting a 404, which is why the highlights tab looked permanently empty. Fixed in v0.9.2. If you posted a highlight, it shows up now.

The newsletter is real

Every news post that promised "weekly digest email" now has a real signup form pinned to a new POST /notify route. Plain-text, off by default, one-click unsubscribe when it ships. We're capturing intent in KV until the mailer is wired — no third party touches your address.

Why webview for the data tabs

The cloud version was getting all the love — character art, the architect, click-to-expand cards, the share-card canvas, the live recent-form chart, the run-detail modal. Reproducing all of that in SwiftUI was an entire parallel codebase that drifted further behind every web deploy. Embedding the canonical UI is what every serious cross-platform app does (Notion, Slack, Linear, Discord, Spotify) — one UI, one set of bugs, one rendering surface to QA. The desktop now ships every cloud feature the moment we deploy the web.

Streamers, no behaviour change

Run Coach is still streamer-safe. The macOS overlay is still NSPanel + sharingType=.none and stays invisible to OBS / Zoom / QuickTime. Nothing about the embedded WebView changes that — the WebView is for stats, not the overlay.

What's next

  1. Steam OpenID bridge — a single sign-in that covers both halves. Right now the desktop's native Steam session and the embedded page's session are independent; we want one click to seat both.
  2. Offline-aware fallback. If the cloud is unreachable, the desktop falls back to a slim native overview rendered from VaultCore. You should always be able to see your stats, even on a plane.
  3. Native context menu inside the embedded page — Copy run link, Open in browser, Inspect.
  4. Wire the digest mailer once we have a meaningful signup list. There's a real /notify endpoint capturing emails today.

If anything in the embedded view feels off — slow, jittery, missing — file an issue and screenshot it. The webview path is new and the corner cases haven't all been swept.

— Corey

Update Desktop v0.9.2
Download the new desktop build → Tell us what feels off →
Painted still-life illustration of an open glowing bestiary tome resting on a stone altar in a candlelit gothic spire chamber. The tome's pages display painted miniature portraits of monsters. A flickering pumpkin candle, a brass fishing rod, a kaleidoscope refracting a small rainbow, a coil of silken golden hair, and a half-open chest of glowing red-and-gold cards rest on the altar around the tome. A tall stained-glass window behind the altar holds the prominent angular crystalline hourglass silhouette of Aeonglass.
Patch · May 9, 2026

STS2 v0.105.0 (Bestiary, Aeonglass) is supported

Corey · ~2 min read

Mega Crit shipped a beta patch on May 8 that touched the Neow pool, reworked an Ancients reward, and replaced the Act 3 boss. Runs from the new build now show up correctly in Spire Vault — names, labels, and tooltips included.

What we added

Three new Neow relics

Kaleidoscope (temporary name), Fishing Rod, and Silken Tress are now recognized in run history. Each gets a hand-curated tooltip with the exact in-game effect plus a quick "when to pick" note pulled from community write-ups. Art icons will slot in once Mega Crit publishes the assets — until then, the renderer shows the same 2-letter glyph fallback we use for any unfamiliar relic, so nothing renders broken.

Pumpkin Candle reworked, Infused Core buffed

The Tezcatara Pumpkin Candle reward swapped its "extinguishes at the start of Act 3" rider for "extinguishes after 5 combats, kindle at rest sites." Defect's Infused Core picked up a bonus "Lightning Orbs deal 1 additional damage" line. Both tooltips reflect the new copy, so when you hover them in Recent Runs or Top Relics you read what your actual game shows you.

Aeonglass replaces Doormaker

The new Act 3 boss is in the boss label table — when a run shows "Killed by" it'll read Aeonglass rather than a raw slug. Doormaker stays in the label table too so older runs in your history don't suddenly mis-render.

What this means for unknown future relics

The parser was already designed to forward unknown content as raw slugs — nothing about Spire Vault assumes a closed list of relics. So any post-v0.105.0 patch that ships brand-new relics will tally in the Top Relics tab, show up in deck lists, and roll up into win-rate buckets the moment your save file lands. We just won't have a hand-written tooltip for them until we patch this list. If you spot a relic showing as a 2-letter glyph and want copy added, drop a one-line GitHub issue and it'll go in the next deploy.

— Corey

Patch Game data v0.105.0
Mega Crit's patch notes → Report a missing relic →
Painted illustration of the Ironclad charging the Architect across a crumbling spire chamber — broadsword raised, fire and stone-construct magic colliding mid-air.
Update · May 9, 2026

Run Compare, Auto-refresh status — and what we're testing next

Corey · ~5 min read

Big batch this week. Two new features, one root-cause fix that had been driving people quietly nuts, and an honest look at what's in the dev branch right now — including the conversation I'm starting with the Slay the Spire 2 community on getting more testers in here. Pour something. Read at whatever pace you like.

What's new — live on prod

Run Compare — pick 2 or 3 runs, see them side by side

There's a new Compare button in the Recent Runs filter bar (hit c on your keyboard if you're a power user). Toggle it, click 2 or 3 rows, and the bottom-of-screen bar opens a side-by-side comparison: stats, top relics, and the cards that are unique to each run vs. the cards every selected run shared.

The hero panel above the columns is the part I'm proudest of — it surfaces every relic and card in the intersection with a soft golden glow so you can immediately answer the question that brought you here: "what made my winning runs win?" If your high-ascension victories all share Calipers and a Searing Blow, the answer is sitting right at the top of the modal. No spreadsheet required.

Auto-refresh status pill — you can finally see when it stops

For a long time the auto-refresh loop would just… quietly stop. The cause turned out to be Chrome silently downgrading the folder permission from "granted" back to "prompt" between sessions. The 30-second timer was firing fine; the permission check was just returning prompt and the loop no-op'd. From your side, "auto-refresh is broken" was indistinguishable from "auto-refresh isn't running."

There's now a status pill at the top of Recent Runs. Green pulse with "last checked 14s ago" when it's healthy. Amber with a one-click Resume button when the browser dropped your grant. We also opportunistically piggyback on your next click anywhere on the page to silently re-request the permission — most of you will never even see the amber state. And a "X new runs auto-loaded" toast fires the moment the loop picks up a fresh run, even if you're sitting on a different tab.

That sticky hover tooltip — root-caused and gone

A few of you reported that the relic and card hover preview on the Highlights tab would get stuck open and bleed onto other tabs. We shipped patch after patch — touch-device gates, watchdogs, focus-blur handlers — and none of them worked, because they were all treating the symptom. The actual root cause was CSS specificity: .h-tooltip { display: flex } and the user-agent [hidden] { display: none } rule have the same specificity weight, and "later wins" was silently overriding the hidden attribute. So $tip.hidden = true from JS was painting the attribute, and the browser was ignoring it.

One [hidden] { display: none !important } backstop near the top of the stylesheet, and the entire tooltip lifecycle works the way it always claimed to. Lesson noted; backstop is now load-bearing infrastructure.

"Unknown character" rows — smarter fallback

Schema-16 partial writes occasionally land on disk with the explicit character field missing, which used to render the run as a generic shield-icon "Unknown" row. The parser now tallies cards in the deck (each character's starter cards are namespaced — silent_strike, ironclad_bash, etc.) and falls back to starter relics (Burning Blood, Ring of the Snake, Cracked Core) as a last resort. If we can see what you started with, we can tell you what you played.

Smaller polish that adds up
  • Daily-run badges with the actual date, instead of mis-rendering daily runs as "Ascension 2".
  • Settings tab centralizes import / export / clear / disconnect / sign-out so the toolbar isn't a mile long.
  • Keyboard shortcuts: 1–9 for tabs, / focuses search, ? opens a help overlay, c toggles Compare on Recent Runs.
  • Win-rate sparkline on the Overview tab — rolling trend across your last 20 runs.
  • Deep links: copy a direct link to any run or any community highlight. Paste into Discord, the same modal opens for whoever clicks it.
  • Milestone toasts for first victory, win streaks, run-count tiers, and per-character clears.
  • Reactions on community highlights live in a clean popover instead of bare emojis everywhere.
  • Comments with the commenter's Steam profile, not just an anonymous text blob.

In dev right now

Things on a branch on my machine that aren't shipped yet but are far enough along that I can talk about them honestly:

  • macOS Run Companion Overlay v1. A small floating window that sits over Slay the Spire 2 while you play, showing pair status, invite count, your status, and (optionally) deck and pathing reminders. v0 is built; v1 is where it gets real polish, the "send my lobby" button, and a settings sheet.
  • Daily challenge leaderboard. Now that we capture game_mode and seed per run, we can group all the daily-run highlights from the same seed into a leaderboard view. Same daily, different builds, different finishes. Should be live within the week.
  • Run replay scrubber. Step through a run floor by floor inside the run-detail modal, watching your deck, relics, and HP evolve. The data's all there in the .run file already — this is just a UI on top.

Roadmap — honest order of operations

  1. Native Windows app. Same backend, same UI, native window via Tauri. The browser version works on Windows today but a real SpireVault.exe is a much cleaner experience for people who don't want to think about which browser tab their stats live in.
  2. iOS Companion data alignment. The Ascension Companion app on the App Store still uses an older data shape than the web. Bringing them into alignment so a run uploaded from web shows up in the iOS app immediately.
  3. Weekly digest email. Optional, off by default, plain text. Your wins this week, your best run, character mix, and any new community highlights from people you've co-oped with. One email a week, one-click unsubscribe. Want it as soon as it ships? Drop your email below.
  4. Co-op chat — in the app. Right now pairing hands you off to Steam Chat for the actual conversation. A small in-app channel for paired players would close that loop without needing a Steam tab open.

Reaching out to the Slay the Spire community

This is the bit I'm a little nervous about, so I'm going to write it plainly: I'm starting a conversation with the Slay the Spire 2 official Discord about getting Spire Vault in front of more testers. The plan is to ask the moderators if I can post a short pinned message in #community-tools (or wherever they think it belongs) inviting players to try the web app and send me bug reports.

What I'm specifically looking for:

  • A couple of dozen testers spread across all five characters and the full ascension range, especially A8–A10 victories so the Compare mode has real data to chew on.
  • People playing on the latest STS2 build — schema-16 character-extraction edge cases are exactly the kind of thing that only shows up on real machines, not mine.
  • Honest feedback on the UI, particularly the new Compare modal and the auto-refresh pill. Are they obvious? Did anything look broken? Did anything feel patronizing? I want the answer.

This is opt-in, no posting on anyone's behalf, no DMs without permission. If a moderator from the STS2 Discord is reading this and would like a guided tour of the app or my notes on data handling and privacy, my email is in the footer of every page. I'd rather have one careful conversation up front than a noisy launch.

A small ask, same as last time

If something feels broken, weird, or just unfinished — please tell me. File an issue on GitHub, or hit me up on the co-op feed. Every "this clicks but doesn't do anything" report makes the next build measurably better. Most of the fixes above started as one-line bug reports from one of you.

— Corey

Update New feature Roadmap Community
Report an issue → Full changelog →
The Regent, the Defect, the Silent, and the Necrobinder gathered around a glowing brazier in a candlelit spire — painted illustration matching the in-game art style.
Update · May 5, 2026

Bug fixes & updates — thank you for using Spire Vault

Corey · ~4 min read

First, the obvious thing: thank you for being here. Spire Vault went from "weird side project" to "people are actually using this" because of you, and I don't take that lightly. So before anything else — thanks. Genuinely.

This past week was mostly fixes that should have worked the first time, plus a couple of new features that have been on my list for a while. Quick rundown of what's new, then a few things I'm working on next.

What's new

Co-op pairing — you can now see who's playing with who

When you and another player both accept an invite, both of your rows on the roster pick up a green "Co-op — w/ @PartnerName" pill. Anyone scrolling the feed can see at a glance which pairs are already matched up, so they don't waste a click trying to invite someone who's mid-session. The invite button on a paired row turns into a friendly "Busy" tag instead of a dead button.

You also get an "End co-op" button on your own status card while paired — one click and both sides drop the pill. If you forget, the pair auto-clears after 4 hours so you don't show up as "still co-oping with that person from yesterday morning."

The cache & reload mess is finally fixed

For a while, every time I shipped a new version, half of you would have to open the app in private mode to see the change. That was bad. The root cause was three layers of cache fighting each other: Cloudflare's edge, your browser's disk cache, and Safari's in-tab memory cache, which ignores cache headers entirely while a tab is alive.

There's now a small banner at the top of the app that appears when a newer version is out: "A newer version of Spire Vault is available — Reload now." Click it whenever you're ready. Your sign-in and stats stick. No more force-reload mid-typing.

Run paths, but readable

The Recent Runs modal now shows your full path through every act with proper map icons — campfire, treasure chest, elite, boss, shop, the works — pulled in to actually look like the game's map instead of a generic icon set. Each act starts collapsed; the act where you died (or won) gets a red DIED HERE or green VICTORY chip on the closed header so you don't have to expand all three to find the moment.

The painted banner up top is bigger and better-balanced

The companion character on the left of the duel scene was way too small — you could barely tell who it was. Bumped them up about 25%, which makes the boss-on-the-right composition feel like an actual face-off instead of a sidebar token next to a giant. Also normalized every character sprite so Regent, Defect, Silent, and Necrobinder all fill the frame consistently. No more "wait, why does my Regent look tiny."

Privacy lockdown on the public feed

Anyone visiting app.spirevault.app as a guest can still see the live count of who's around, but Steam IDs, persona names, avatars, and Discord handles are stripped before the data leaves the server. Only signed-in users get the full roster. If you weren't comfortable with strangers being able to harvest your handle off the homepage, that's no longer a concern.

Cross-device run history that actually syncs

Your run history is keyed to your Steam ID and synced to the cloud. Sign in on your laptop, import your saves once, then open the app on your phone — everything's already there. There's a small "Synced N runs · last sync 2 min ago" pill in the toolbar so you can see at a glance whether your latest run made it up.

What I'm working on next

Honest order of operations — some of these are days, some are weeks. None of them are guaranteed. Roadmap, not promises.

  1. Community Highlights. A simple opt-in: any run you're proud of, hit a "share to the community" button on the run detail and it appears on a public highlights feed. Per-run, never automatic, always yours to unshare. Card-pack layout with the actual deck and relics — the same Share-Run card you'd post to Reddit, just visible inside the app. Designed to celebrate runs, not surveil people.
  2. A real Windows app. The browser version works fine on Windows today, but a downloadable SpireVault.exe would be a much cleaner experience for people who don't want to think about which browser tab their stats live in. Targeting a Tauri build — same backend, same UI, native window.
  3. iOS Companion sync. The Ascension Companion app on the App Store still uses an older data shape than the web. Bringing them into alignment so a run uploaded from web shows up in the iOS app immediately.
  4. "What changed since last week" digest. An optional weekly email summarizing your wins, your best run, your character mix, and any new community highlights from people you've co-oped with. Off by default. Probably the smallest possible footprint — one email a week, plain text, an unsubscribe link. If you want this when it ships, drop your email below.

A small ask

If something feels broken, weird, or just unfinished — please tell me. File an issue on GitHub, or hit me up on the co-op feed (you can see when I'm online, my Steam handle's the same as yours: I sign in with mine and use the app like you do). I read every issue. Most of the fixes above started as one-line bug reports from one of you.

And if Spire Vault has saved you a Discord scroll, helped you find a co-op partner, or just been nice to look at while reviewing a long run — that's the whole point. Thanks for being here.

— Corey

Update Bug fixes Roadmap
Report an issue → Full changelog →

Run Companion Overlay

Decision support while you play - local-first, optional, and built around trust.

Beta features

Experimental tools — your feedback shapes what ships.

Settings

Save data, preferences, account.

↑

Drop your STS2 save folder here

Or any .run files. Everything stays on your device — nothing uploads.

Invite to play

Pick a preset message. They can accept or decline.

Run Preferences

Set what kind of run you want. SpireVault uses this for Quick Match, Best Matches, and your public looking status.

Status
Preferred character

Host a Room

Post the STS2 room you want to play. By default players can Join Seat instantly; enable approval if you want to review requests first.

Host character
Preview

Fill the form to see how your room will look.

Quick Match

SpireVault found this player as your best available match.

Choose your character

Pick the character you plan to play before taking a seat.

Your character

Run details

Compare runs

0 runs selected Pick 2 or 3 to compare side by side · Esc cancels

Share run

Drop the image straight into Discord, Reddit, or X.

Share to community

Drop this run on the Highlights feed so other players can react and comment. You can delete it any time.

View feed

The Vault · Web

Built by Corey Crooks. Free, open source, fan-made. Not affiliated with Mega Crit Games.

Marketing site GitHub About the Companion mod (future) iOS · Ascension Companion coreycrooks.com