An unofficial, open-source mobile compatibility layer and launcher environment for Slay the Spire 2, based on the Godot/Mono runtime.
This project is an experimental, unofficial Android port and launcher framework for Slay the Spire 2. It DOES NOT contain any base game files. Instead, it provides an Android shell that allows players to import and run their legally owned PC game files on mobile devices, featuring support for Mod loading, Steam Workshop browsing/download tracking with anonymous public browsing and WorkshopOnAndroid-compatible access fallback, local save snapshots, Steam Cloud and WebDAV save synchronization, and launcher update checks from the About page. When an update is found, the launcher can open either the GitHub release page or the Bilibili dynamic feed.
The core architecture consists of three layers:
- Android Launcher Shell (
android/): Handles game data importing, Steam login and game downloading, Steam Workshop public browsing/download tracking with default compatible-access routing for networks where Steam Community/API or SteamPipe CDN direct connections time out, local save snapshots, Steam Cloud/WebDAV save syncing, and local file/MOD management. Once everything is ready, it boots up the Godot game process. - Android Compatibility Pack (
port-mod/submodule): Acts as a low-level hook (based on Harmony), loaded at the very beginning of the game boot process. It intercepts and fixes various PC-to-Android incompatibilities (e.g., input adaptation, path redirection, PC-specific shader replacement, Mod loader bridging). - Base Game (Provided by User): Supplied by the user either by importing the PC version's
SlayTheSpire2.zipor by legally downloading it via the SteamPipe API after logging into their Steam account within the app.
- Unofficial Project: This is an open-source technical research project created by the player community. It is not affiliated with Mega Crit, Slay the Spire 2, or the Godot Engine, nor does it represent their views.
- No Game Assets Provided: This repository ABSOLUTELY DOES NOT contain or distribute any copyrighted commercial game assets (including but not limited to audio, images, PCK files, core logic DLLs, etc.).
- Legal Use: Please comply with relevant software licenses, platform rules, and local laws. You must legally own a PC copy of Slay the Spire 2 to use this tool to run the game on your own device.
- No Pirated APK Distribution: Do not use standalone APKs bundled with commercial game assets for public release or commercial monetization.
The creation of this project relies heavily on the explorations of the open-source community. Special thanks to the following projects for their inspiration and code references:
- StS2-Launcher_Mod_Manager Provided underlying concepts for stripping the Godot/Mono runtime, Android compatibility patch load orders, and design references for some build scripts.
- SlayTheAmethystModded
An unofficial mobile launcher for STS1. The reverse-engineered integration and source code for
steam-protocol,steam-content(SteamPipe game downloads), and Steam Cloud saves in this project are primarily ported/adapted from it. - WorkshopAndroidDownloader Android Steam Workshop downloader reference used for the launcher Workshop browsing, download, and update-tracking flow.
- STS2-RitsuLib / BaseLib-StS2 Served as vital test baseline reference libraries for troubleshooting Android MOD compatibility.
- Google Material Symbols Provides the official rounded icon outlines used by the launcher UI, generated into Android vector drawables from the bundled font.
(For detailed third-party open-source licenses, please see THIRD_PARTY_LICENSES.md)
For the safety of your device and accounts, please pay strict attention to the following when using and compiling this app:
- ADB &
DebuggableRisks: The current default release build configuration keepsdebuggable=true(to facilitate log capture in case of crashes). This means any computer or malicious software connected to your phone withADBpermissions can extract data from this app (including encrypted Steam credentials). NEVER grant ADB debugging permissions to untrusted computers or third-party app stores. - Steam Account Security:
- This app will NEVER upload your Steam account password to any third-party server. The password is only used for a one-time request to Steam servers to exchange for a
Refresh Token. - The
Refresh Tokenis encrypted and stored locally via Android'sEncryptedSharedPreferences. - Strongly Recommended: Only log into Steam using an APK compiled by yourself from trusted source code or obtained from a highly trusted channel.
- This app will NEVER upload your Steam account password to any third-party server. The password is only used for a one-time request to Steam servers to exchange for a
- Malicious MOD Risks: Mods for Slay the Spire 2 are essentially arbitrarily executed C# code. Malicious Mods can bypass the sandbox to directly read local files on your phone (including configurations containing your Steam Token). Before attempting to install unknown Mods from untrusted sources, make sure to log out of Steam in the app settings to prevent account theft.
Note: For complete environment configuration and parameter details, please refer to
doc/build/building-and-packaging.md.
- OS: Linux / macOS / WSL (Windows)
- Toolchain:
- JDK 17+
- Android SDK (API 35) & NDK
- .NET SDK (for compiling C# compat plugins)
- Python 3
Because it includes the compatibility pack submodule, please clone with the --recursive flag:
git clone --recursive https://github.com/ModinMobileSTS/Sts2MobileLauncher.git
cd Sts2MobileLauncherCopy the environment variable templates and modify the .env and local.properties files according to your actual local paths:
cp .env.example .env
cp local.properties.example local.propertiesNote: The
.envfile must configureJAVA_HOME,ANDROID_HOME,DOTNET_BIN, and the original PC DLL reference paths used for compiling the compatibility pack (STS2_ORIGINAL_*_REFERENCE_DIR).
Run the following script to extract large runtime artifacts (Godot templates, FMOD, etc.) to their designated locations (these files are git-ignored and must be generated locally):
tools/android/sync-runtime-from-references.shCompile the mobile compatibility layer C# code into DLLs and package them as a ZIP into the Assets:
tools/android/stage-bundled-compat-packs.shThis now builds the flattened schema-2 family pack from one checkout by default. Legacy per-version branch packs remain available for diagnostics:
COMPAT_PACK_BUILD_MODE=legacy tools/android/stage-bundled-compat-packs.shRun the build script. This will output an "Importer APK" that DOES NOT contain the base game (the recommended, legally compliant distribution method):
tools/package/build_importer_apk.shUpon successful build, the APK will be output to dist/sts2-re-importer.apk.
Android high-refresh support is part of the normal APK: the app does not mark
itself as an Android game category, and GodotApp requests the highest exposed
display mode through Android Window / Surface frame-rate APIs. A disabled-by-default
performance overlay can be enabled from Extra Settings → System.
For connected-device debugging, the repository includes an ADB harness that can install the APK, push a payload/compat pack/MOD into app-private storage, run launch preparation, start the game, and collect logs or Perfetto traces:
tools/debug/sts2-adb-debug.sh build-install
tools/debug/sts2-adb-debug.sh status --pull
tools/debug/sts2-adb-debug.sh launch --mode perf --preload aggressive --logcat-duration 45 --perfetto 45 --pullSee doc/build/adb-automation-debugging.md for targeted MOD/compat/preload scenarios.
If you want to contribute to development, understand how the compatibility packs work, or dive deeper into the architecture, please check the doc/ directory:



