Local LAN Co-op for Slay the Spire 2
Play with friends on your home network or VPN. Works alongside Steam multiplayer.
Quick Start · Features · Screenshots · Install · Usage · FAQ · Build
- Download the latest release
- Drop the
LanSpirefolder into your game'smods/directory - Launch the game → Multiplayer → Host LAN or Join LAN
That's it. The mod auto-configures on first launch.
| Feature | Description |
|---|---|
| Host & Join LAN | Direct LAN connection via IP or auto-discovery scan |
| Auto-Discovery | Click "Scan LAN" to find games on your network |
| Quick Rejoin | Pin favorite host IP for one-click reconnect (separate from 5-entry history) |
| Latency Display | Ping indicator in top-right corner, updates every 2 seconds |
| Feature | Description |
|---|---|
| VPN Support | Works with common VPNs (ZeroTier, Tailscale, WireGuard, etc.). VPN adapters detected and prioritized |
| Steam Compatible | Steam multiplayer still works. LAN buttons added alongside, not replacing |
| Update Check | Checks GitHub for new releases on startup, shows toast if update available |
| Feature | Description |
|---|---|
| Version Tagging | LAN discovery includes mod version. Warns if host runs different version |
| Optional Passphrase | Set lan_host_passphrase in config to require password for joining |
| Connection Resilience | Auto-retry on transient disconnects, sync stall recovery, 8s grace period for disconnected players |
| Status | Details |
|---|---|
| Built against STS2 v0.107.1 (gameplay testing ongoing) | |
| ✅ Mod Loader | Requires game's built-in mod loader (mods/ folder) |
| Can break the mod. Check for updates after game patches |
- Download the latest release zip from Releases
- Open your Slay the Spire 2 game folder
- Open the
modsfolder (create it if it doesn't exist) - Copy the
LanSpirefolder from the zip intomods/ - Launch the game
Expected structure:
Slay the Spire 2/
mods/
LanSpire/
LanSpire.dll
LanSpire.json
- Main menu → Multiplayer → Host LAN
- Select game mode (Standard, Daily, Custom)
- Popup shows your IP(s) with VPN labels -- click any IP to copy to clipboard
- A small "..." button appears in the top-right corner -- click anytime to reopen IP popup
- Share the IP with your friend, or tell them to Scan LAN
- Main menu → Multiplayer → Join LAN
- Pinned Host -- pin frequently-used IP (e.g. your VPN group's fixed IP) for one-click reconnect
- Recent Connections -- up to 5 saved hosts as quick-access buttons
- Scan LAN -- finds games on your network with live player count
[2/4]- Full rooms greyed out with [Full] badge
- Manual -- type host IP (supports
IP:portformat) - Auto-retries on flaky connections, 15s timeout for unreachable hosts
- Works over common VPNs -- use VPN IP instead of LAN IP
- VPN adapters detected by name and prioritized in host popup
- Auto-retry helps with VPN route establishment (routes can take a few seconds)
Settings → General → LAN Multiplayer:
- Max LAN Players -- 2-8 players
- Player Name -- custom display name (optional)
- Open Game Log -- opens
godot.login Notepad for debugging
If friends can't connect, ensure these ports are open:
| Port | Protocol | Purpose |
|---|---|---|
33771 |
UDP | Game traffic (required) |
33772-33775 |
UDP | LAN discovery (optional, for Scan feature) |
Settings saved automatically on first launch at %APPDATA%/SlayTheSpire2/LanSpire/lan_config.json. Most users won't need to touch this.
View default config
{
"lan_multiplayer_enabled": true,
"lan_use_custom_player_id": false,
"lan_custom_player_id": "",
"lan_player_id": "",
"lan_multiplayer_save_player_id": "",
"lan_join_host": "",
"lan_join_port": 33771,
"lan_join_history": [],
"lan_pinned_host": "",
"lan_host_passphrase": "",
"lan_debug_logging": false,
"max_multiplayer_players": 4,
"max_multiplayer_enabled": true,
"lan_compatibility_mod_names": [],
"resilience_sync_stall_recovery": true,
"resilience_timing_failsafes": true,
"resilience_disconnect_prevention": true
}Config field reference
| Field | Default | Description |
|---|---|---|
lan_multiplayer_enabled |
true |
Master switch. If false, no patches applied. |
lan_use_custom_player_id |
false |
Use custom player name instead of auto-generated. |
lan_custom_player_id |
"" |
Custom player name (hashed to ulong peer ID). |
lan_player_id |
auto | Persistent random peer ID. Auto-generated on first use. |
lan_multiplayer_save_player_id |
auto | Last used multiplayer save player ID. |
lan_join_host |
auto | Last joined host IP. |
lan_join_port |
33771 |
Last joined port. |
lan_join_history |
[] |
Recent connections (up to 5). |
lan_pinned_host |
"" |
Pinned/favorite host (IP:port). Shown as separate quick-connect button. |
lan_host_passphrase |
"" |
Optional passphrase. If set, joining clients must send same passphrase. Host gets toast on mismatch. |
lan_debug_logging |
false |
Enable verbose diagnostic logs in godot.log. Useful for troubleshooting. |
max_multiplayer_players |
4 |
Max players in lobby (2-8). |
max_multiplayer_enabled |
true |
Show max players setting in-game. |
lan_compatibility_mod_names |
[] |
Extra mod names for multiplayer compatibility list. |
resilience_sync_stall_recovery |
true |
30s timeout on sync waits. Prevents freeze on lost UDP packets. |
resilience_timing_failsafes |
true |
Guard against null-ref on early data arrival. |
resilience_disconnect_prevention |
true |
Auto-mark disconnected players as ready after 8s grace. |
LanSpire adds direct LAN connection alongside the game's existing Steam networking, so you can play with friends on the same network without needing Steam's multiplayer system.
Steam still works normally -- the LAN buttons are added on top, and only activate when you specifically choose Host LAN or Join LAN. Switching between Steam and LAN multiplayer is seamless.
Prerequisites: .NET SDK 9.0+, STS2 game files
# Set game directory (where data_sts2_windows_x86_64/ lives)
export STS2_GAME_DIR="/path/to/Slay the Spire 2"
# Build
cd LanSpire
dotnet build -c ReleaseOutput: bin/Release/net9.0/LanSpire.dll
STS2_GAME_DIRis required -- the build references game assemblies from the game directory.
If something goes wrong, check the log at %APPDATA%/SlayTheSpire2/logs/godot.log. Messages from this mod are tagged with [LanSpire].
Does this replace Steam multiplayer?
No. LanSpire adds LAN buttons alongside the existing Steam multiplayer buttons. Both work independently -- you can use either depending on your network setup.
Does it work over VPN?
Yes. Use common VPNs (ZeroTier, Tailscale, WireGuard, etc.) and enter the VPN IP instead of your LAN IP. VPN adapters are detected automatically and prioritized.
Scan LAN doesn't detect my friend's room. Why?
Scan LAN only works between two PCs running LanSpire. It will NOT detect:
- Native Steam multiplayer rooms -- these use a different system entirely
- Any other non-LanSpire PC mod -- discovery requires both sides to speak the same protocol
What to do instead:
| You want to join | Use |
|---|---|
| Friend on PC with LanSpire | Scan LAN |
| Friend on VPN (ZeroTier, Tailscale, etc.) | Manual IP -- enter the VPN IP |
| Friend on Steam multiplayer | Not supported by this mod |
If Scan LAN returns empty even when your PC friend is hosting:
- Make sure both PCs are on the same network (same Wi-Fi / subnet)
- Make sure port 33772 UDP is not blocked by firewall on the host
- Try Manual IP -- ask them for their local IP (shown in Host popup)
My friend can't connect. What do I check?
- Make sure port 33771 UDP is allowed through your firewall
- If using VPN, make sure both peers can ping each other's VPN IP
- Try entering IP manually instead of using Scan
- Check
godot.logfor[LanSpire]messages
Will this break when the game updates?
Possibly. The mod patches specific game methods that may change between updates. Always check for an updated build after the game patches. Built against v0.107.1.
- Close the game
- Delete the
LanSpirefolder from your game'smods/directory - (Optional) Delete config:
%APPDATA%/SlayTheSpire2/LanSpire/
That's it. No registry entries, no background services.
- Game updates can break this mod. LanSpire patches specific game methods that may change between STS2 updates. If the mod stops working after a game patch, check Releases for an updated build.
- LAN Scan is PC-to-PC only. It will not detect native Steam multiplayer rooms. Use Manual IP for VPN play.
- VPN route delays. When using VPNs like ZeroTier or Tailscale, the first connection attempt may fail while routes are being established. The mod auto-retries, but if it still fails, try connecting again after a few seconds.
- Reflected field names. The mod relies on private game internals accessed via reflection. A game update that renames these fields will cause silent failures logged in
godot.log.
LanSpire adapts the LAN multiplayer protocol for PC, using Harmony patches to intercept and redirect the game's networking layer. The core approach:
- Kept: Message protocol, host/join logic, LAN join UI, player naming, save ID handling
- Replaced: Platform-specific settings with file-based JSON configuration (
lan_config.json) - Added: LAN auto-discovery, connection history, toast notifications, player count display, connection retry, timeout, VPN detection, Quick Rejoin
- Harmony - runtime patching library for .NET applications
LanSpire is compatible with:
- sts2-android-compat - Mobile client compatibility layer
- STS2MobileLauncher - Mobile launcher for STS2
MIT -- same as the original project.



